142 lines
4.9 KiB
QBasic
142 lines
4.9 KiB
QBasic
$header
|
|
#include "parson.c"
|
|
$header
|
|
|
|
Function main(argc as int, argv as pchar ptr)
|
|
dim as JSON_Object Ptr root1, root2
|
|
dim as string filename1, filename2
|
|
|
|
if argc != 3 then
|
|
fprint stderr, "Usage: ", Appexename$, " <file1.db> <file2.db>"
|
|
end = 1
|
|
else
|
|
filename1 = command$(1)
|
|
filename2 = command$(2)
|
|
end if
|
|
|
|
checkFileName(filename1)
|
|
checkFileName(filename2)
|
|
|
|
if not exist("output") then mkpath("output")
|
|
|
|
root1 = loadJson(filename1)
|
|
root2 = loadJson(filename2)
|
|
|
|
if root1 and root2 then
|
|
addFolderName(root1)
|
|
addFolderName(root2)
|
|
|
|
updateFolderNames(root1, root2)
|
|
|
|
saveJson(root1, "output\db.json")
|
|
closeJson(root1)
|
|
closeJson(root2)
|
|
end if
|
|
|
|
End Function
|
|
|
|
Sub checkFileName(filename as string)
|
|
if not exist(filename) then
|
|
fprint stderr, "ERROR: Could not load ", filename
|
|
end = 1
|
|
end if
|
|
End Sub
|
|
|
|
Function loadJson(filename as string) as JSON_Object Ptr
|
|
dim as JSON_Value Ptr root
|
|
|
|
root = json_parse_file(filename)
|
|
if root then
|
|
return json_value_get_object(root)
|
|
end if
|
|
|
|
return null
|
|
End Function
|
|
|
|
Sub saveJson(obj as JSON_Object Ptr, filename as string)
|
|
dim as JSON_Value Ptr obj_value = json_object_get_wrapping_value(obj)
|
|
if json_serialize_to_file_pretty(obj_value, filename) = JSONSuccess then
|
|
print wrap$(filename), " Successfully Created."
|
|
end if
|
|
End Sub
|
|
|
|
Sub closeJson(obj as JSON_Object Ptr)
|
|
dim as JSON_Value Ptr root_value = json_object_get_wrapping_value(obj)
|
|
json_value_free(root_value)
|
|
End Sub
|
|
|
|
Sub addFolderName(obj as JSON_Object Ptr)
|
|
dim as JSON_Array Ptr folder_array, snippet_array
|
|
|
|
folder_array = json_object_get_array(obj, "folders")
|
|
snippet_array = json_object_get_array(obj, "snippets")
|
|
|
|
dim as uint folder_count = json_array_get_count(folder_array)
|
|
dim as uint snippet_count = json_array_get_count(snippet_array)
|
|
|
|
for uint i = 0 to folder_count -1
|
|
dim as JSON_Object Ptr folder = json_array_get_object(folder_array, i)
|
|
|
|
|
|
for uint j = 0 to snippet_count - 1
|
|
dim as JSON_Object Ptr snippet = json_array_get_object(snippet_array, j)
|
|
if not json_object_get_string_len(snippet, "folderId") = 0 then
|
|
if json_object_get_string$(folder, "id") = json_object_get_string$(snippet, "folderId") then
|
|
json_object_set_string(snippet, "folderName", json_object_get_string$(folder, "name") )
|
|
end if
|
|
end if
|
|
next
|
|
|
|
next
|
|
|
|
End Sub
|
|
|
|
Function isDuplicate(snippet as JSON_Object Ptr, folder1_snippets as JSON_Array Ptr) as Boolean
|
|
dim as uint count = json_array_get_count(folder1_snippets)
|
|
for uint i = 0 to count - 1
|
|
dim as JSON_Object Ptr fsnippet = json_array_get_object(folder1_snippets, i)
|
|
if json_object_get_string$(snippet, "name") = json_object_get_string$(fsnippet, "name") then
|
|
return true
|
|
end if
|
|
next
|
|
return false
|
|
End Function
|
|
|
|
Sub updateFolderNames(obj1 as JSON_Object Ptr, obj2 as JSON_Object Ptr)
|
|
dim as JSON_Array Ptr folder1_array, folder1_snippets, snippet2_array
|
|
folder1_array = json_object_get_array(obj1, "folders")
|
|
folder1_snippets = json_object_get_array(obj1, "snippets")
|
|
snippet2_array = json_object_get_array(obj2, "snippets")
|
|
dim as uint folder1_count = json_array_get_count(folder1_array)
|
|
dim as uint folder1_snippets_count = json_array_get_count(folder1_snippets)
|
|
dim as uint snippet_count = json_array_get_count(snippet2_array)
|
|
|
|
' Process snippets with folder names
|
|
for uint i = 0 to folder1_count - 1
|
|
dim as JSON_Object Ptr folder = json_array_get_object(folder1_array, i)
|
|
|
|
for uint j = 0 to snippet_count - 1
|
|
dim as JSON_Object Ptr snippet = json_array_get_object(snippet2_array, j)
|
|
if not json_object_get_string_len(snippet, "folderName") = 0 then
|
|
if json_object_get_string$(snippet, "folderName") = json_object_get_string$(folder, "name") then
|
|
json_object_set_string(snippet, "folderId", json_object_get_string(folder, "id"))
|
|
|
|
if not isDuplicate(snippet, folder1_snippets) then
|
|
json_array_append_value(folder1_snippets, json_value_deep_copy(json_object_get_wrapping_value(snippet)))
|
|
end if
|
|
end if
|
|
end if
|
|
next
|
|
next
|
|
|
|
' Process snippets without folder names (Inbox items)
|
|
for uint j = 0 to snippet_count - 1
|
|
dim as JSON_Object Ptr snippet = json_array_get_object(snippet2_array, j)
|
|
if json_object_get_string_len(snippet, "folderName") = 0 then
|
|
if not isDuplicate(snippet, folder1_snippets) then
|
|
json_array_append_value(folder1_snippets, json_value_deep_copy(json_object_get_wrapping_value(snippet)))
|
|
end if
|
|
end if
|
|
next
|
|
End Sub
|