saveEvents.agi 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. Calendar - Save (merge) an array of events (used for ICS import).
  3. POST: eventsData (JSON array string)
  4. */
  5. requirelib("filelib");
  6. var evPath = "user:/Document/Calendar/events.json";
  7. var incoming;
  8. try {
  9. incoming = JSON.parse(eventsData);
  10. } catch (e) {
  11. sendJSONResp({ error: "Invalid events data" });
  12. }
  13. if (incoming && Array.isArray(incoming)) {
  14. // Read existing events
  15. var events = [];
  16. if (filelib.fileExists(evPath)) {
  17. try {
  18. var raw = filelib.readFile(evPath);
  19. var parsed = JSON.parse(raw);
  20. if (Array.isArray(parsed)) events = parsed;
  21. } catch (e) {}
  22. }
  23. // Build index of existing events by id
  24. var idx = {};
  25. for (var i = 0; i < events.length; i++) {
  26. idx[events[i].id] = i;
  27. }
  28. var added = 0;
  29. var ts = new Date().getTime();
  30. for (var j = 0; j < incoming.length; j++) {
  31. var ev = incoming[j];
  32. if (!ev.id || ev.id === "") {
  33. ev.id = "ev_" + (ts + j).toString(36) + Math.random().toString(36).slice(2, 7);
  34. }
  35. if (idx[ev.id] !== undefined) {
  36. events[idx[ev.id]] = ev;
  37. } else {
  38. events.push(ev);
  39. added++;
  40. }
  41. }
  42. filelib.writeFile(evPath, JSON.stringify(events));
  43. sendJSONResp({ ok: true, added: added, total: events.length });
  44. }