From e50cdc3620e70b19e0629878b7c942d1b2dd6928 Mon Sep 17 00:00:00 2001 From: Xuan Sang LE Date: Mon, 19 Feb 2018 16:45:18 +0100 Subject: [PATCH] shared file enable --- src/core/gui.coffee | 1 + src/core/handlers/RemoteHandler.coffee | 10 ++++- src/core/vfs.coffee | 59 +++++++++++++++++++++++--- src/packages/Blogger/main.coffee | 6 ++- src/packages/CoreServices/main.css | 6 +++ src/packages/Files/main.coffee | 10 ++++- 6 files changed, 82 insertions(+), 10 deletions(-) diff --git a/src/core/gui.coffee b/src/core/gui.coffee index 6f33474..bfed3ca 100644 --- a/src/core/gui.coffee +++ b/src/core/gui.coffee @@ -332,6 +332,7 @@ self.OS.GUI = { text: "Home", path: 'home:///', iconclass: "fa fa-home", type: "fs" }, { text: "OS", path: 'os:///', iconclass: "fa fa-inbox", type: "fs" }, { text: "Desktop", path: _OS.setting.desktop.path , iconclass: "fa fa-desktop", type: "fs" }, + { text: "Shared", path: 'shared:///' , iconclass: "fa fa-share-square", type: "fs" } ] if not _OS.setting.VFS.mountpoints _OS.setting.system = conf.system if conf.system diff --git a/src/core/handlers/RemoteHandler.coffee b/src/core/handlers/RemoteHandler.coffee index 249038d..c03092e 100644 --- a/src/core/handlers/RemoteHandler.coffee +++ b/src/core/handlers/RemoteHandler.coffee @@ -3,7 +3,10 @@ self.OS.API.REST = "#{self.location.protocol}//#{self.OS.API.HOST}/lua-api" _REST = self.OS.API.REST self.OS.API.handler = - get: "#{_REST}/fs/get/" + # get file, require authentification + get: "#{_REST}/fs/get" + # get shared file with publish + shared: "#{_REST}/fs/shared" scandir: (p, c ) -> path = "#{_REST}/fs/scandir" _API.post path, { path: p }, c, (e, s) -> @@ -12,7 +15,10 @@ self.OS.API.handler = path = "#{_REST}/fs/mkdir" _API.post path, { path: p }, c, (e, s) -> _courrier.osfail "Fail to create directory: #{p}", e, s - + sharefile: (p, c) -> + path = "#{_REST}/fs/publish" + _API.post path, { path: p }, c, (e, s) -> + _courrier.osfail "Fail to publish file: #{p}", e, s fileinfo: (p, c) -> path = "#{_REST}/fs/fileinfo" _API.post path, { path: p }, c, (e, s) -> diff --git a/src/core/vfs.coffee b/src/core/vfs.coffee index 1006608..74f5c3b 100644 --- a/src/core/vfs.coffee +++ b/src/core/vfs.coffee @@ -90,7 +90,11 @@ class BaseFileHandler @onready (() -> me.action "upload", null, (r) -> _courrier.ostrigger "VFS", { m: "upload", file: me } if r.result f r) - + publish: (f) -> + me = @ + @onready (() -> me.action "publish", null, (r) -> + _courrier.ostrigger "VFS", { m: "publish", file: me } if r.result + f r) download: (f) -> me = @ @onready (() -> me.action "download", null, f) @@ -142,6 +146,8 @@ class RemoteFileHandler extends self.OS.API.VFS.BaseFileHandler _API.handler.upload @path, f when "remove" _API.handler.delete @path, f + when "publish" + _API.handler.sharefile @path, f when "download" return if @info.type is "dir" _API.handler.fileblob @path, (d) -> @@ -152,7 +158,7 @@ class RemoteFileHandler extends self.OS.API.VFS.BaseFileHandler else return _courrier.osfail "VFS unknown action: #{n}", (_API.throwe "OS.VFS"), n -self.OS.API.VFS.register "^(home|shared|desktop|os|Untitled)$", RemoteFileHandler +self.OS.API.VFS.register "^(home|desktop|os|Untitled)$", RemoteFileHandler # Application Handler class ApplicationHandler extends self.OS.API.VFS.BaseFileHandler @@ -185,7 +191,8 @@ class ApplicationHandler extends self.OS.API.VFS.BaseFileHandler when "remove" #uninstall return - + when "publish" + return when "download" return @@ -233,7 +240,8 @@ class BlobFileHandler extends self.OS.API.VFS.BaseFileHandler when "remove" #uninstall return - + when "publish" + return when "download" blob = new Blob [@cache], { type: "octet/stream" } _API.saveblob me.basename, blob @@ -243,4 +251,45 @@ class BlobFileHandler extends self.OS.API.VFS.BaseFileHandler else return _courrier.osfail "VFS unknown action: #{n}", (_API.throwe "OS.VFS"), n -self.OS.API.VFS.register "^blob$", BlobFileHandler \ No newline at end of file +self.OS.API.VFS.register "^blob$", BlobFileHandler + +class SharedFileHandler extends self.OS.API.VFS.BaseFileHandler + constructor: (path) -> + super path + @ready = true if @isRoot() + meta: (f) -> + _API.handler.fileinfo @path, f + + action: (n, p, f) -> + me = @ + switch n + when "read" + return _API.get "#{_API.handler.shared}/all", f, ((e, s)->) if @isRoot() + #read the file + _API.handler.readfile @path, f, if p then p else "text" + when "mk" + return + + when "write" + _API.handler.write @path, p, f + + when "remove" + _API.handler.delete @path, f + + when "upload" + return + + when "publish" + return f { result: @basename } + + when "download" + return if @info.type is "dir" + _API.handler.fileblob @path, (d) -> + blob = new Blob [d], { type: "octet/stream" } + _API.saveblob me.basename, blob + when "move" + return + else + return _courrier.osfail "VFS unknown action: #{n}", (_API.throwe "OS.VFS"), n + +self.OS.API.VFS.register "^shared$", SharedFileHandler \ No newline at end of file diff --git a/src/packages/Blogger/main.coffee b/src/packages/Blogger/main.coffee index f830db8..be52b57 100644 --- a/src/packages/Blogger/main.coffee +++ b/src/packages/Blogger/main.coffee @@ -131,8 +131,10 @@ class Blogger extends this.OS.GUI.BaseApplication className: "fa fa-file-image-o", action: (e) -> me.openDialog "FileDiaLog", (d, n) -> - doc = me.editor.codemirror.getDoc() - doc.replaceSelection "![](#{me._api.handler.get}/#{d}/#{n})" + "#{d}/#{n}".asFileHandler().publish (r) -> + return me.error "Cannot export file for embeding to text" if r.error + doc = me.editor.codemirror.getDoc() + doc.replaceSelection "![](#{me._api.handler.shared}/#{r.result})" , "Select image file", { mimes: ["image/.*"] } }, "|", diff --git a/src/packages/CoreServices/main.css b/src/packages/CoreServices/main.css index 3dc4f8a..5cbc1f2 100644 --- a/src/packages/CoreServices/main.css +++ b/src/packages/CoreServices/main.css @@ -21,6 +21,9 @@ afx-list-view[data-id = "notifylist"] li{ border:1px solid #a6a6a6; border-radius: 6px; margin-bottom: 2px; + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; } afx-overlay[data-id = "feedzone"]{ @@ -42,4 +45,7 @@ afx-list-view[data-id = "notifeed"] li{ border-radius: 6px; margin-bottom: 2px; z-index: 99999; + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; } \ No newline at end of file diff --git a/src/packages/Files/main.coffee b/src/packages/Files/main.coffee index 818eb71..b109054 100644 --- a/src/packages/Files/main.coffee +++ b/src/packages/Files/main.coffee @@ -80,7 +80,7 @@ class Files extends this.OS.GUI.BaseApplication 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() @@ -103,6 +103,7 @@ class Files extends this.OS.GUI.BaseApplication { text: "Open with", dataid: "#{@name}-open", child:@apps }, { text: "Upload", dataid: "#{@name}-upload" }, { text: "Download", dataid: "#{@name}-download" }, + { text: "Share file", dataid: "#{@name}-share" }, { text: "Properties", dataid: "#{@name}-info" } ], onmenuselect: (e) -> me.actionFile e } @@ -251,6 +252,13 @@ class Files extends this.OS.GUI.BaseApplication @currdir.upload (r) -> me.error "Faile to upload to: #{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: #{r.error}" if r.error + return me.notify "Shared url: #{r.result}" + when "#{@name}-download" return unless file file.path.asFileHandler().download ()->