mirror of
https://github.com/lxsang/antos-frontend.git
synced 2025-04-13 03:26:45 +02:00
288 lines
12 KiB
CoffeeScript
288 lines
12 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
|
|
|
|
@apps = []
|
|
|
|
@view.contextmenuHandler = (e, m) ->
|
|
m.set "items", [ me.mnFile(), me.mnEdit() ]
|
|
m.set "onmenuselect", (evt) ->
|
|
me._gui.launch evt.item.data.app, evt.item.data.args if evt.item.data.app
|
|
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 {0}", e.child.path) if d.error
|
|
f d.result
|
|
|
|
@view.set "onfileselect", (e) ->
|
|
file = me.view.get "selectedFile"
|
|
return unless file and file.mime
|
|
file.mime = "dir" if file.type is "dir"
|
|
me.apps.length = 0
|
|
for v in me._gui.appsByMime file.mime
|
|
v.args = [ file.path ]
|
|
me.apps.push v
|
|
@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()
|
|
@bindKey "CTRL-F", () -> me.actionFile "#{me.name}-mkf"
|
|
@bindKey "CTRL-D", () -> me.actionFile "#{me.name}-mkdir"
|
|
@bindKey "CTRL-U", () -> me.actionFile "#{me.name}-upload"
|
|
@bindKey "CTRL-S", () -> me.actionFile "#{me.name}-share"
|
|
@bindKey "CTRL-I", () -> me.actionFile "#{me.name}-info"
|
|
|
|
@bindKey "CTRL-R", () -> me.actionEdit "#{me.name}-mv"
|
|
@bindKey "CTRL-M", () -> me.actionEdit "#{me.name}-rm"
|
|
@bindKey "CTRL-X", () -> me.actionEdit "#{me.name}-cut"
|
|
@bindKey "CTRL-C", () -> me.actionEdit "#{me.name}-copy"
|
|
@bindKey "CTRL-P", () -> me.actionEdit "#{me.name}-paste"
|
|
|
|
(@find "btgrid").set "onbtclick", (e) ->
|
|
me.view.set 'view', "icon"
|
|
me.setting.view = "icon"
|
|
(@find "btlist").set "onbtclick", (e) ->
|
|
me.view.set 'view', "list"
|
|
me.setting.view = "list"
|
|
@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 = @
|
|
#console.log "ch"
|
|
dir = if p then p.asFileHandler() else me.currdir
|
|
dir.read (d) ->
|
|
if(d.error)
|
|
return me.error __("Resource not found {0}", p)
|
|
|
|
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
|
|
#console.log d.result
|
|
me.view.set "data", d.result
|
|
|
|
mnFile:() ->
|
|
#console.log file
|
|
me = @
|
|
arr = {
|
|
text: "__(File)",
|
|
child: [
|
|
{ text: "__(New file)", dataid: "#{@name}-mkf", shortcut: 'C-F' },
|
|
{ text: "__(New folder)", dataid: "#{@name}-mkdir", shortcut: 'C-D' },
|
|
{ text: "__(Open with)", dataid: "#{@name}-open", child: @apps },
|
|
{ text: "__(Upload)", dataid: "#{@name}-upload", shortcut: 'C-U' },
|
|
{ text: "__(Download)", dataid: "#{@name}-download" },
|
|
{ text: "__(Share file)", dataid: "#{@name}-share", shortcut: 'C-S' },
|
|
{ text: "__(Properties)", dataid: "#{@name}-info", shortcut: 'C-I' }
|
|
], onmenuselect: (e) -> me.actionFile e.item.data.dataid
|
|
}
|
|
return arr
|
|
mnEdit: () ->
|
|
me = @
|
|
{
|
|
text: "__(Edit)",
|
|
child: [
|
|
{ text: "__(Rename)", dataid: "#{@name}-mv", shortcut: 'C-R' },
|
|
{ text: "__(Delete)", dataid: "#{@name}-rm", shortcut: 'C-M' },
|
|
{ text: "__(Cut)", dataid: "#{@name}-cut", shortcut: 'C-X' },
|
|
{ text: "__(Copy)", dataid: "#{@name}-copy", shortcut: 'C-C' },
|
|
{ text: "__(Paste)", dataid: "#{@name}-paste", shortcut: 'C-P' }
|
|
], onmenuselect: (e) -> me.actionEdit e.item.data.dataid
|
|
}
|
|
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.item.data.dataid
|
|
},
|
|
]
|
|
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
|
|
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
|
|
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 {0}: {1}", d, r.error) if r.error
|
|
, "__(Rename)", { label: "__(File name)", value: file.filename }
|
|
|
|
when "#{@name}-rm"
|
|
return unless file
|
|
@openDialog "YesNoDialog",
|
|
(d) ->
|
|
return unless d
|
|
file.path.asFileHandler()
|
|
.remove (r) ->
|
|
me.error __("Fail to delete {0}: {1}", file.filename, r.error) if r.error
|
|
,"__(Delete)" ,
|
|
{ iconclass: "fa fa-question-circle", text: __("Do you really want to delete: {0}?", file.filename) }
|
|
|
|
when "#{@name}-cut"
|
|
return unless file
|
|
@clipboard =
|
|
cut: true
|
|
file: file.path.asFileHandler()
|
|
@notify __("File {0} cut", file.filename)
|
|
|
|
when "#{@name}-copy"
|
|
return unless file
|
|
@clipboard =
|
|
cut: false
|
|
file: file.path.asFileHandler()
|
|
@notify __("File {0} copied", file.filename)
|
|
|
|
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: {0}", 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
|
|
|
|
when "#{@name}-mkdir"
|
|
@openDialog "PromptDialog",
|
|
(d) ->
|
|
me.currdir.mk d, (r) ->
|
|
me.error __("Fail to create {0}: {1}", d, r.error) if r.error
|
|
, "__(New folder)", { label: "__(Folder name)" }
|
|
|
|
when "#{@name}-mkf"
|
|
@openDialog "PromptDialog",
|
|
(d) ->
|
|
fp = "#{me.currdir.path}/#{d}".asFileHandler()
|
|
fp.write "text/plain", (r) ->
|
|
me.error __("Fail to create {0}: {1}", d, r.error) if r.error
|
|
, "__(New file)", { label: "__(File name)" }
|
|
|
|
when "#{@name}-info"
|
|
return unless file
|
|
@openDialog "InfoDialog", null, file.filename, file
|
|
|
|
when "#{@name}-upload"
|
|
me = @
|
|
@currdir.upload (r) ->
|
|
me.error __("Fail to upload to {0}: {1}", d, r.error) if r.error
|
|
|
|
when "#{@name}-share"
|
|
me = @
|
|
return unless file and file.type is "file"
|
|
file.path.asFileHandler().publish (r) ->
|
|
return me.error __("Cannot share file: {0}", r.error) if r.error
|
|
return me.notify __("Shared url: {0}", r.result)
|
|
|
|
when "#{@name}-download"
|
|
return unless file
|
|
file.path.asFileHandler().download ()->
|
|
else
|
|
console.log e
|
|
|
|
this.OS.register "Files", Files |