mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-11-08 14:38:28 +01:00
290 lines
12 KiB
CoffeeScript
290 lines
12 KiB
CoffeeScript
class Docify extends this.OS.application.BaseApplication
|
|
constructor: ( args ) ->
|
|
super "Docify", args
|
|
|
|
main: () ->
|
|
|
|
@setting.printer = "" unless @setting.printer
|
|
|
|
@catview = @find "catview"
|
|
@docview = @find "docview"
|
|
@docpreview = @find "preview-canvas"
|
|
@docgrid = @find "docgrid"
|
|
@docgrid.header = [
|
|
{ text: "", width: 100 },
|
|
{ text: "" },
|
|
]
|
|
@find("btdld").onbtclick = (e) =>
|
|
item = @docview.selectedItem
|
|
return unless item
|
|
item.data.file.asFileHandle()
|
|
.download()
|
|
.catch (e) => @error __("Unable to download: {}", e.toString()), e
|
|
@find("btopen").onbtclick = (e) =>
|
|
item = @docview.selectedItem
|
|
return unless item
|
|
item.data.file.asFileHandle().meta()
|
|
.then (m) =>
|
|
return @error m.error if m.error
|
|
@_gui.openWith m.result
|
|
.catch (e) => @error e.toString(), e
|
|
@find("btprint").onbtclick = (e) =>
|
|
item = @docview.selectedItem
|
|
return unless item
|
|
@openDialog new PrintDialog(), {}
|
|
.then (d) =>
|
|
return unless d
|
|
d.file = item.data.file
|
|
@exec("printdoc", d)
|
|
.then (r) =>
|
|
return @error r.error if r.error
|
|
@notify r.result
|
|
.catch (e) => @error __("Unable to insert category: {0}", e.toString()), e
|
|
@catview.buttons = [
|
|
{
|
|
text: "",
|
|
iconclass: "fa fa-plus-circle",
|
|
onbtclick: (e) =>
|
|
@openDialog("PromptDialog", { title: __("Category"), label: __("Name")})
|
|
.then (d) =>
|
|
@exec("insert", { table: "categories", data: { name: d } })
|
|
.then (r) =>
|
|
return @error r.error if r.error
|
|
@cat_refresh()
|
|
.catch (e) => @error __("Unable to insert category: {0}", e.toString()), e
|
|
.catch (e) => @error e.toString(), e
|
|
},
|
|
{
|
|
text: "",
|
|
iconclass: "fa fa-minus-circle",
|
|
onbtclick: (e) =>
|
|
item = @catview.selectedItem
|
|
return unless item
|
|
@ask({ text:__("Do you realy want to delete: `{0}`", item.data.text)})
|
|
.then (d) =>
|
|
return unless d
|
|
@exec("delete", {table:"categories", id: parseInt(item.data.id)})
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
@cat_refresh()
|
|
.catch (e) =>
|
|
@error __("Unable delete category: {0}", e.toString()), e
|
|
},
|
|
{
|
|
text: "",
|
|
iconclass: "fa fa-pencil-square-o",
|
|
onbtclick: (e) =>
|
|
item = @catview.selectedItem
|
|
return unless item
|
|
@openDialog("PromptDialog", { title: __("Category"), label: __("Name"), value: item.data.name })
|
|
.then (d) =>
|
|
@exec("update", { table: "categories", data: { id: parseInt(item.data.id), name: d } })
|
|
.then (r) =>
|
|
return @error r.error if r.error
|
|
@cat_refresh()
|
|
.catch (e) => @error __("Unable to update category: {0}", e.toString()), e
|
|
.catch (e) => @error e.toString(), e
|
|
}
|
|
]
|
|
|
|
@docview.onlistselect = (e) =>
|
|
@clear_preview()
|
|
item = e.data.item
|
|
return unless item
|
|
@exec("get_doc", item.data.id)
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
@preview d.result.file, @docpreview
|
|
rows = []
|
|
d.result.size = (d.result.fileinfo.size / 1024.0).toFixed(2) + " Kb" if d.result.fileinfo
|
|
map = {
|
|
ctime: "Created on",
|
|
mtime: "Modified on",
|
|
note: "Note",
|
|
tags: "Tags",
|
|
name: "Title",
|
|
owner: "Owner",
|
|
edate: "Effective date",
|
|
file: "File",
|
|
size: "Size"
|
|
}
|
|
d.result.edate = "#{d.result.day}/#{d.result.month}/#{d.result.year}"
|
|
for key, value of d.result
|
|
field = map[key]
|
|
rows.push [{text: field}, {text: value}] if field
|
|
@docgrid.rows = rows
|
|
.catch (e) => @error e.toString(), e
|
|
|
|
@catview.onlistselect = (e) =>
|
|
@clear_preview()
|
|
item = e.data.item
|
|
return unless item
|
|
@update_doclist(item.data.id)
|
|
|
|
@find("bt-add-doc").onbtclick = (e) =>
|
|
catiem = @catview.selectedItem
|
|
return @notify __("Please select a category") unless catiem
|
|
|
|
@openDialog(new DocDialog())
|
|
.then (data) =>
|
|
data.cid = parseInt(catiem.data.id)
|
|
@exec("insertdoc", data)
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
@notify d.result if d.result
|
|
@update_doclist(catiem.data.id)
|
|
@clear_preview()
|
|
.catch (e) => @error e.toString(), e
|
|
|
|
@find("bt-del-doc").onbtclick = (e) =>
|
|
item = @docview.selectedItem
|
|
return unless item
|
|
@ask({ text: __("Do you really want to delete: `{0}`", item.data.name) })
|
|
.then (d) =>
|
|
return unless d
|
|
@exec("deletedoc", {id: item.data.id, file: item.data.file})
|
|
.then (r) =>
|
|
return @error r.error if r.error
|
|
@notify r.result
|
|
@update_doclist(item.data.cid)
|
|
@clear_preview()
|
|
.catch (e) =>
|
|
@error e.toString(), e
|
|
@find("bt-upload-doc").onbtclick = (e) =>
|
|
"#{@setting.docpath}/unclassified".asFileHandle().upload()
|
|
.then (r) =>
|
|
@notify __("File uploaded")
|
|
.catch (e) =>
|
|
@error e.toString(), e
|
|
@find("bt-edit-doc").onbtclick = (e) =>
|
|
item = @docview.selectedItem
|
|
catiem = @catview.selectedItem
|
|
return unless item
|
|
@openDialog(new DocDialog(), item.data)
|
|
.then (data) =>
|
|
data.cid = parseInt(catiem.data.id)
|
|
data.id = item.data.id
|
|
@exec("updatedoc", {
|
|
data:data,
|
|
rm: if not data.file.includes(item.data.file) then item.data.file else false
|
|
})
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
@notify d.result if d.result
|
|
@update_doclist(catiem.data.id)
|
|
@clear_preview()
|
|
.catch (e) => @error e.toString(), e
|
|
|
|
@initialize()
|
|
|
|
update_doclist: (cid) ->
|
|
@exec("select",{table: "docs", cond:"cid = #{cid} ORDER BY year DESC, month DESC, day DESC"})
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
v.text = v.name for v in d.result
|
|
@docview.data = d.result
|
|
.catch (e) =>
|
|
@error e.toString(), e
|
|
|
|
clear_preview: () ->
|
|
@docpreview.getContext('2d').clearRect(0,0,@docpreview.width,@docpreview.height)
|
|
@docgrid.rows = []
|
|
|
|
preview: (path, canvas) ->
|
|
@exec("preview", path)
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
file = d.result.asFileHandle()
|
|
file.read("binary")
|
|
.then (d) =>
|
|
img = new Image()
|
|
#($ me.view).append img
|
|
img.onload = () =>
|
|
context = canvas.getContext '2d'
|
|
canvas.height = img.height
|
|
canvas.width = img.width
|
|
#console.log canvas.width, canvas.height
|
|
context.drawImage img, 0, 0
|
|
|
|
blob = new Blob [d], { type: file.info.mime }
|
|
img.src = URL.createObjectURL blob
|
|
|
|
.catch (e) => @error e.toString(), e
|
|
.catch (e) =>
|
|
@error e.toString(), e
|
|
|
|
cat_refresh: () ->
|
|
@docview.data = []
|
|
@clear_preview()
|
|
@exec("fetch", "categories")
|
|
.then (d) =>
|
|
v.text = v.name for v in d.result
|
|
@catview.data = d.result
|
|
.catch (err) => @error __("Unable to fetch categories: {0}", err.toString()), err
|
|
|
|
initialize: () ->
|
|
# Check if we have configured docpath
|
|
if @setting.docpath
|
|
# check data base
|
|
@initdb()
|
|
else
|
|
# ask user to choose a docpath
|
|
@openDialog "FileDialog", { title:__("Please select a doc path"), mimes: ['dir'] }
|
|
.then (d) =>
|
|
@setting.docpath = d.file.path
|
|
@_api.setting()
|
|
@initdb()
|
|
.catch (msg) => @error msg.toString(), msg
|
|
|
|
exec: (action, args) ->
|
|
cmd =
|
|
path: "#{@path()}/api.lua",
|
|
parameters:
|
|
action: action,
|
|
docpath: @setting.docpath,
|
|
args: args
|
|
return @call(cmd)
|
|
|
|
initdb: () ->
|
|
return @error __("No configured docpath") unless @setting.docpath
|
|
# fetch the categories from the database
|
|
@exec("init")
|
|
.then (d) =>
|
|
return @error d.error if d.error
|
|
@notify d.result
|
|
# load categories
|
|
@cat_refresh()
|
|
.catch (e) =>
|
|
@error __("Unable to init database: {0}", e.toString()), e
|
|
|
|
menu: () ->
|
|
[
|
|
{
|
|
text: "__(Options)",
|
|
nodes: [
|
|
{ text: "__(Owners)", id:"owners"},
|
|
{ text: "__(Preview)", id:"preview"},
|
|
{ text: "__(Change doc path)", id:"setdocp"},
|
|
{ text: "__(Set default printer)", id:"setprinter"}
|
|
],
|
|
onchildselect: (e) => @fileMenuHandle e.data.item.data.id
|
|
}
|
|
]
|
|
|
|
fileMenuHandle:(id) ->
|
|
switch id
|
|
when "owners"
|
|
@openDialog new OwnerDialog(), { title: __("Owners")}
|
|
when "preview"
|
|
@openDialog(new FilePreviewDialog())
|
|
.then (d) =>
|
|
@notify d.path
|
|
when "setdocp"
|
|
@setting.docpath = undefined
|
|
@initialize()
|
|
when "setprinter"
|
|
@openDialog "PromptDialog", {title: __("Default Printer"), label: __("Enter printer name")}
|
|
.then (n) =>
|
|
@setting.printer = n
|
|
|
|
this.OS.register "Docify", Docify |