Skip to content

Commit bd03ba3

Browse files
authored
Merge pull request #12 from MightyShadow702/merge-update
Merge update
2 parents 94d4b50 + e6967c5 commit bd03ba3

File tree

5 files changed

+66
-29
lines changed

5 files changed

+66
-29
lines changed

js/list.js

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ var metadata = {}
22

33
var search_string = "";
44

5-
var objects = []
5+
var objects = {};
66

77
var editing = false;
88
var name_backup = "";
@@ -63,6 +63,7 @@ class Item
6363
Toggle()
6464
{
6565
metadata[this.name].active = !metadata[this.name].active;
66+
metadata[this.name].timestamp = Date.now();
6667
this.Update();
6768
save_metadata();
6869
}
@@ -111,14 +112,15 @@ class Item
111112
{
112113
old_toast.remove();
113114
}
114-
var undo_element = metadata[name];
115+
const undo_element = structuredClone(metadata[name]);
115116
traero_toast(translate("toast_undo"), 3000, true, ()=>{
116117
metadata[name] = undo_element;
118+
metadata[name].timestamp = Date.now();
117119
save_metadata();
118120
});
119121
}
120-
delete metadata[name];
121-
objects.splice(objects.indexOf(obj), 1);
122+
metadata[name].active = null;
123+
metadata[name].timestamp = Date.now();
122124
save_metadata();
123125
}
124126
clearInterval(delete_timer);
@@ -145,11 +147,12 @@ function add_item(name)
145147
if (!(name in metadata))
146148
{
147149
var content = name.split(",").map(i => i.trim())
148-
metadata[name] = {"active": true, "title": content[0], "meta": content.slice(1).join(", ")};
150+
metadata[name] = {"active": true, "title": content[0], "meta": content.slice(1).join(", "), "timestamp": Date.now()};
149151
}
150152
else
151153
{
152154
metadata[name].active = true;
155+
metadata.timestamp = Date.now();
153156
}
154157
save_metadata();
155158
}
@@ -213,57 +216,82 @@ function input_clear()
213216
update_search();
214217
}
215218

219+
function cleanup_metadata()
220+
{
221+
for (const name in metadata)
222+
{
223+
if (metadata[name].active == null)
224+
{
225+
delete metadata[name];
226+
}
227+
}
228+
}
229+
216230
function import_metadata()
217231
{
218232
window.webxdc.importFiles({
219233
mimeTypes: ["applcation/json"],
220234
extensions: [".json"],
221235
}).then((files) => {
222236
files[0].text().then(text => {
223-
Object.assign(metadata, JSON.parse(text));
237+
var timestamp = Date.now();
238+
for (const [name, data] of Object.entries(JSON.parse(text)))
239+
{
240+
data.timestamp = timestamp;
241+
metadata[name] = data;
242+
}
224243
save_metadata();
225244
});
226245
});
227246
}
228247

229248
function export_metadata()
230249
{
250+
cleanup_metadata();
251+
var file = {};
252+
for (const [name, data] of Object.entries(metadata))
253+
{
254+
file[name] = {active: data.active, title: data.title, meta: data.meta}
255+
}
231256
window.webxdc.sendToChat({
232-
file: {plainText: JSON.stringify(metadata), name: "Traero.json"},
257+
file: {plainText: JSON.stringify(file), name: "Traero.json"},
233258
text: translate("export_message")
234259
});
235260
}
236261

237262
function update_list()
238263
{
239-
var existing = Object.fromEntries(objects.map(i => [i.name, i]));
240-
for (var i in metadata)
264+
for (const name in metadata)
241265
{
242-
if (!(i in existing))
266+
if (!(name in objects))
243267
{
244-
var obj = new Item(i, metadata[i].title, metadata[i].meta);
245-
objects.push(obj);
246-
obj.Update();
268+
if (metadata[name].active != null)
269+
{
270+
var obj = new Item(name, metadata[name].title, metadata[name].meta);
271+
objects[name] = obj;
272+
obj.Update();
273+
}
274+
else
275+
{
276+
delete metadata[name];
277+
}
247278
}
248279
else
249280
{
250-
if (metadata[i].active)
281+
if (metadata[name].active == true)
251282
{
252-
existing[i].toActive();
283+
objects[name].toActive();
284+
}
285+
else if (metadata[name].active == false)
286+
{
287+
objects[name].toLast();
253288
}
254289
else
255290
{
256-
existing[i].toLast();
291+
objects[name].remove();
292+
delete metadata[name];
257293
}
258294
}
259295
}
260-
for (var i in objects)
261-
{
262-
if (!(objects[i].name in metadata))
263-
{
264-
objects[i].remove();
265-
objects.splice(i, 1);
266-
}
267-
}
268296
update_search();
269297
}

js/main.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
function save_metadata()
22
{
3-
var item_count = 0;
3+
var item_count = 0;
44
for (var i in metadata)
55
{
66
if (metadata[i].active)
@@ -24,7 +24,14 @@ function update_handler(data)
2424
if (data.serial == data.max_serial)
2525
{
2626
var payload = data.payload;
27-
metadata = payload.metadata;
27+
console.log(payload.metadata);
28+
for (const [name, data] of Object.entries(payload.metadata))
29+
{
30+
if (!(name in metadata) || (name in metadata && metadata[name].timestamp < data.timestamp))
31+
{
32+
metadata[name] = data;
33+
}
34+
}
2835
update_list();
2936
}
3037
}
@@ -50,7 +57,7 @@ function onload()
5057
{
5158
changeTheme(themes[localStorage.selectedTheme]);
5259
}
53-
60+
5461
window.webxdc.setUpdateListener(update_handler);
5562

5663
if (localStorage.firstSession == undefined)

js/menu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function show_about()
2525
title.innerHTML = "Traero";
2626
about_dialog.add(title);
2727
var version_number = document.createElement("p");
28-
version_number.innerHTML = "Version: 0.8.5";
28+
version_number.innerHTML = "Version: 0.8.6";
2929
about_dialog.add(version_number);
3030
var license_txt = document.createElement("p");
3131
license_txt.id = "license_title";

js/tutorial.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ function tutorial_add()
9696
current_step = tutorial_popup(tutorial_edit, translate("tutorial_add"));
9797
}
9898

99+
function traero_toast(){};
100+
99101
function save_metadata()
100102
{
101103
update_list();

manifest.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
name = "Traero"
22
description = "a modern shopping list"
33
source_code_url = "https://github.com/MightyShadow702/Traero-webxdc"
4-
tag_name = "0.8.5"
4+
tag_name = "0.8.6"

0 commit comments

Comments
 (0)