mirror of
https://github.com/lxsang/antos-frontend.git
synced 2025-04-08 09:36:45 +02:00
256 lines
9.7 KiB
CoffeeScript
256 lines
9.7 KiB
CoffeeScript
class Files extends this.OS.GUI.BaseApplication
|
|
constructor: (args) ->
|
|
super "Files", args
|
|
|
|
main: () ->
|
|
me = @
|
|
@scheme.set "apptitle", "Files manager"
|
|
@view = @find "fileview"
|
|
@navinput = @find "navinput"
|
|
@navbar = @find "nav-bar"
|
|
@currdir = if @args and @args.length > 0 then @args[0].asFileHandler() else "home:///".asFileHandler()
|
|
@favo = @find "favouri"
|
|
@clipboard = undefined
|
|
|
|
@view.contextmenuHandler = (e, m) ->
|
|
m.set "items", [ me.mnFile(), me.mnEdit() ]
|
|
m.show(e)
|
|
#@on "fileselect", (d) -> console.log d
|
|
@view.set "onfileopen", (e) ->
|
|
return unless e
|
|
return if e.type is "dir"
|
|
me._gui.openWith e
|
|
|
|
@favo.set "onlistselect", (e) ->
|
|
me.chdir e.data.path
|
|
|
|
($ @find "btback").click () ->
|
|
return if me.currdir.isRoot()
|
|
p = me.currdir.parent()
|
|
me.favo.set "selected", -1
|
|
me.chdir p
|
|
|
|
($ @navinput).keyup (e) ->
|
|
me.chdir ($ me.navinput).val() if e.keyCode is 13 #enter
|
|
|
|
@view.set "chdir", (p) -> me.chdir p
|
|
@view.set "fetch", (e, f) ->
|
|
return unless e.child
|
|
return if e.child.filename is "[..]"
|
|
e.child.path.asFileHandler().read (d) ->
|
|
return me.error "Resource not found #{e.child.path}" if d.error
|
|
f d.result
|
|
|
|
@setting.sidebar = true if @setting.sidebar is undefined
|
|
@setting.nav = true if @setting.nav is undefined
|
|
@setting.showhidden = false if @setting.showhidden is undefined
|
|
|
|
mntpoints = @systemsetting.VFS.mountpoints
|
|
el.selected = false for el, i in mntpoints
|
|
|
|
@favo.set "items", mntpoints
|
|
#@favo.set "selected", -1
|
|
@applySetting()
|
|
@subscribe "VFS", (d) ->
|
|
me.chdir null if d.data.file.hash() is me.currdir.hash() or d.data.file.parent().hash() is me.currdir.hash()
|
|
@chdir null
|
|
|
|
applySetting: (k) ->
|
|
# view setting
|
|
@view.set "view", @setting.view if @setting.view
|
|
@view.set "showhidden", @setting.showhidden
|
|
@toggleSidebar @setting.sidebar
|
|
@toggleNav @setting.nav
|
|
|
|
chdir: (p) ->
|
|
me = @
|
|
dir = if p then p.asFileHandler() else me.currdir
|
|
dir.read (d) ->
|
|
if(d.error)
|
|
return me.error "Resource not found #{p}"
|
|
console.log "error"
|
|
me.currdir = dir
|
|
if not dir.isRoot()
|
|
p = dir.parent().asFileHandler()
|
|
p.filename = "[..]"
|
|
p.type = "dir"
|
|
#p.size = 0
|
|
d.result.unshift p
|
|
($ me.navinput).val dir.path
|
|
me.view.set "path", dir.path
|
|
me.view.set "data", d.result
|
|
|
|
mnFile:() ->
|
|
#console.log file
|
|
me = @
|
|
f = () ->
|
|
console.log "called"
|
|
file = me.view.get "selectedFile"
|
|
return undefined unless file
|
|
return me._gui.appsByMime file.mime
|
|
|
|
{
|
|
text: "File",
|
|
child: [
|
|
{ text: "New file", dataid: "#{@name}-mkf" },
|
|
{ text: "New folder", dataid: "#{@name}-mkdir" },
|
|
{ text: "Open with", dataid: "#{@name}-open", child: f },
|
|
{ text: "Upload", dataid: "#{@name}-upload" },
|
|
{ text: "Download", dataid: "#{@name}-download" },
|
|
{ text: "Properties", dataid: "#{@name}-info" }
|
|
], onmenuselect: (e) -> me.actionFile e
|
|
}
|
|
mnEdit: () ->
|
|
me = @
|
|
{
|
|
text: "Edit",
|
|
child: [
|
|
{ text: "Rename", dataid: "#{@name}-mv" },
|
|
{ text: "Delete", dataid: "#{@name}-rm" },
|
|
{ text: "Cut", dataid: "#{@name}-cut" },
|
|
{ text: "Copy", dataid: "#{@name}-copy" },
|
|
{ text: "Paste", dataid: "#{@name}-paste" }
|
|
], onmenuselect: (e) -> me.actionEdit e
|
|
}
|
|
menu: () ->
|
|
me = @
|
|
menu = [
|
|
@mnFile(),
|
|
@mnEdit(),
|
|
{
|
|
text: "View",
|
|
child: [
|
|
{ text: "Refresh", dataid: "#{@name}-refresh" },
|
|
{ text: "Sidebar", switch: true, checked: @setting.sidebar, dataid: "#{@name}-side" },
|
|
{ text: "Navigation bar", switch: true, checked: @setting.nav, dataid: "#{@name}-nav" },
|
|
{ text: "Hidden files", switch: true, checked: @setting.showhidden, dataid: "#{@name}-hidden" },
|
|
{ text: "Type", child: [
|
|
{ text: "Icon view", radio: true, checked: @setting.view is 'icon', dataid: "#{@name}-icon", type: 'icon' },
|
|
{ text: "List view", radio:true, checked: @setting.view is 'list' or not @setting.view, dataid: "#{@name}-list", type: 'list' },
|
|
{ text: "Tree view", radio:true, checked: @setting.view is 'tree', dataid: "#{@name}-tree", type: 'tree' }
|
|
], onmenuselect: (e) ->
|
|
me.view.set 'view', e.item.data.type
|
|
me.setting.view = e.item.data.type
|
|
},
|
|
], onmenuselect: (e) -> me.actionView e
|
|
},
|
|
]
|
|
menu
|
|
|
|
toggleSidebar: (b) ->
|
|
if b then ($ @favo).show() else ($ @favo).hide()
|
|
@trigger "resize"
|
|
|
|
toggleNav: (b) ->
|
|
if b then ($ @navbar).show() else ($ @navbar).hide()
|
|
@trigger "resize"
|
|
|
|
actionView: (e) ->
|
|
switch e.item.data.dataid
|
|
when "#{@name}-hidden"
|
|
#@.view.set "showhidden", e.item.data.checked
|
|
@registry "showhidden",e.item.data.checked
|
|
#@.setting.showhidden = e.item.data.checked
|
|
when "#{@name}-refresh"
|
|
@.chdir null
|
|
when "#{@name}-side"
|
|
@registry "sidebar",e.item.data.checked
|
|
#@setting.sidebar = e.item.data.checked
|
|
#@toggleSidebar e.item.data.checked
|
|
when "#{@name}-nav"
|
|
@registry "nav", e.item.data.checked
|
|
#@setting.nav = e.item.data.checked
|
|
#@toggleNav e.item.data.checked
|
|
|
|
actionEdit: (e) ->
|
|
me = @
|
|
file = @view.get "selectedFile"
|
|
switch e.item.data.dataid
|
|
when "#{@name}-mv"
|
|
return unless file
|
|
@openDialog "PromptDialog",
|
|
(d) ->
|
|
return if d is file.filename
|
|
file.path.asFileHandler()
|
|
.move "#{me.currdir.path}/#{d}", (r) ->
|
|
me.error "Fail to rename to #{d}: #{r.error}" if r.error
|
|
, "Rename", file.filename
|
|
|
|
when "#{@name}-rm"
|
|
return unless file
|
|
@openDialog "YesNoDialog",
|
|
(d) ->
|
|
return unless d
|
|
file.path.asFileHandler()
|
|
.remove (r) ->
|
|
me.error "Fail to delete #{file.filename}: #{r.error}" if r.error
|
|
, "Delete" ,
|
|
{ iconclass: "fa fa-question-circle", text: "Do you really want to delete: #{file.filename} ?" }
|
|
|
|
when "#{@name}-cut"
|
|
return unless file
|
|
@clipboard =
|
|
cut: true
|
|
file: file.path.asFileHandler()
|
|
@notify "File #{file.filename} cut"
|
|
|
|
when "#{@name}-copy"
|
|
return unless file
|
|
@clipboard =
|
|
cut: false
|
|
file: file.path.asFileHandler()
|
|
@notify "File #{file.filename} copied"
|
|
|
|
when "#{@name}-paste"
|
|
me = @
|
|
return unless @clipboard
|
|
if @clipboard.cut
|
|
@clipboard.file # duplicate file check
|
|
.move "#{me.currdir.path}/#{@clipboard.file.basename}", (r) ->
|
|
me.clipboard = undefined
|
|
me.error "Fail to paste: #{r.error}" if r.error
|
|
else
|
|
@notify "Copy not yet implemented"
|
|
@clipboard = undefined
|
|
else
|
|
@_api.handler.setting()
|
|
|
|
actionFile: (e) ->
|
|
me = @
|
|
file = @view.get "selectedFile"
|
|
switch e.item.data.dataid
|
|
|
|
when "#{@name}-mkdir"
|
|
@openDialog "PromptDialog",
|
|
(d) ->
|
|
me.currdir.mk d, (r) ->
|
|
me.error "Fail to create #{d}: #{r.error}" if r.error
|
|
, "New folder"
|
|
|
|
when "#{@name}-mkf"
|
|
@openDialog "PromptDialog",
|
|
(d) ->
|
|
fp = "#{me.currdir.path}/#{d}".asFileHandler()
|
|
fp.write "", (r) ->
|
|
me.error "Fail to create #{d}: #{r.error}" if r.error
|
|
, "New file"
|
|
|
|
when "#{@name}-info"
|
|
return unless file
|
|
@openDialog "InfoDialog", null, file.filename, file
|
|
|
|
when "#{@name}-upload"
|
|
me = @
|
|
@currdir.upload (r) ->
|
|
me.error "Faile to upload to: #{d}: #{r.error}" if r.error
|
|
|
|
when "#{@name}-download"
|
|
return unless file
|
|
file.path.asFileHandler().download ()->
|
|
when "#{@name}-open"
|
|
return unless file
|
|
@_gui.openWith file
|
|
else
|
|
console.log e
|
|
|
|
this.OS.register "Files", Files |