mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2025-07-12 22:03:29 +02:00
support versionning in OnlyOffice
This commit is contained in:
@ -32,6 +32,67 @@ handle.token = function(data)
|
||||
return result(ret)
|
||||
end
|
||||
|
||||
handle.history = function(data)
|
||||
local file = vfs.ospath(data.file)
|
||||
local history_file = vfs.ospath("home://.office/"..std.sha1(file).."/history.json")
|
||||
if(ulib.exists(history_file)) then
|
||||
local obj = JSON.decodeFile(history_file)
|
||||
obj.hash = std.sha1(file)
|
||||
return result(obj)
|
||||
else
|
||||
return error("No history found")
|
||||
end
|
||||
end
|
||||
handle.clean_up_version = function(basepath, h,v)
|
||||
if not h then
|
||||
return nil
|
||||
end
|
||||
if h.version == v then
|
||||
return h
|
||||
else
|
||||
--delete this version
|
||||
local cmd = 'rm '..basepath.."/"..h.key.."*"
|
||||
print(cmd)
|
||||
os.execute(cmd)
|
||||
if h.previous then
|
||||
return handle.clean_up_version(basepath, h.previous,v)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
handle.restore = function(data)
|
||||
local version = data.version
|
||||
local file = vfs.ospath(data.file)
|
||||
local basepath = vfs.ospath("home://.office/"..std.sha1(file))
|
||||
if ulib.exists(basepath.."/history.json") then
|
||||
local history = JSON.decodeFile(basepath.."/history.json")
|
||||
local obj = handle.clean_up_version(basepath, history,version)
|
||||
if obj then
|
||||
-- restore the file
|
||||
local cmd = 'cp '..basepath.."/"..obj.key..' "'..file..'"'
|
||||
os.execute(cmd)
|
||||
local cmd = 'rm '..basepath.."/"..obj.key
|
||||
os.execute(cmd)
|
||||
|
||||
local f = io.open(basepath.."/history.json", "w")
|
||||
if f then
|
||||
f:write(JSON.encode(obj))
|
||||
f:close()
|
||||
return result("File restored")
|
||||
else
|
||||
return error("Cannot save history")
|
||||
end
|
||||
else
|
||||
local cmd = "rm "..basepath.."/history.json"
|
||||
os.execute(cmd)
|
||||
return result("File restored")
|
||||
end
|
||||
else
|
||||
return error("Unable to restore: no history meta-data found")
|
||||
end
|
||||
|
||||
end
|
||||
handle.duplicate = function(data)
|
||||
local file = vfs.ospath(data.as)
|
||||
local tmpfile = "/tmp/"..std.sha1(file)
|
||||
@ -67,8 +128,55 @@ handle.save = function()
|
||||
os.execute(cmd)
|
||||
-- move file to correct position
|
||||
if ulib.exists(tmpfile) then
|
||||
cmd = "mv "..tmpfile.." "..file
|
||||
-- back up the file version
|
||||
local history_dir = "home://.office"
|
||||
vfs.mkdir(history_dir)
|
||||
history_dir = history_dir.."/"..std.sha1(file)
|
||||
vfs.mkdir(history_dir)
|
||||
history_dir = vfs.ospath(history_dir)
|
||||
-- backup old version
|
||||
cmd = 'cp "'..file..'" "'..history_dir.."/"..data.key..'"'
|
||||
os.execute(cmd)
|
||||
-- create new version
|
||||
local old_stat = ulib.file_stat(file)
|
||||
cmd = 'mv "'..tmpfile..'" "'..file..'"'
|
||||
os.execute(cmd)
|
||||
-- get the new key
|
||||
local stat = ulib.file_stat(file)
|
||||
local new_key = std.sha1(file..":"..stat.mtime)
|
||||
-- save changes
|
||||
if(data.changesurl) then
|
||||
cmd = "curl -o "..history_dir.."/"..new_key..'.zip "'..data.changesurl..'"'
|
||||
os.execute(cmd)
|
||||
end
|
||||
-- now save version object
|
||||
local history_file = history_dir.."/history.json"
|
||||
local history = {}
|
||||
if ulib.exists(history_file) then
|
||||
history.previous = JSON.decodeFile(history_file)
|
||||
history.version = history.previous.version + 1
|
||||
else
|
||||
history.version = 1
|
||||
history.previous = {
|
||||
key = data.key,
|
||||
version = 0,
|
||||
create = old_stat.mtime
|
||||
}
|
||||
end
|
||||
history.key = new_key
|
||||
history.changes = data.history.changes
|
||||
history.serverVersion = data.history.serverVersion
|
||||
history.create = stat.mtime
|
||||
history.user = { id = ulib.uid(SESSION.user).id, name = SESSION.user }
|
||||
-- save the history to file
|
||||
local f = io.open(history_file, "w")
|
||||
if f then
|
||||
f:write(JSON.encode(history))
|
||||
f:close()
|
||||
|
||||
else
|
||||
return error("Cannot save history")
|
||||
end
|
||||
print("File "..file.." sync with remote")
|
||||
else
|
||||
return error("Unable to download")
|
||||
|
Reference in New Issue
Block a user