Home Reference Source

cables_dev/cables_ui/src/ui/dialogs/changelog.js

  1. import { Logger, TalkerAPI } from "cables-shared-client";
  2. import { gui } from "../gui.js";
  3. import { platform } from "../platform.js";
  4. import { UserSettings, userSettings } from "../components/usersettings.js";
  5. /** Shows a toast when there is a new cables changelog entry. */
  6. export default class ChangelogToast
  7. {
  8. constructor()
  9. {
  10. this._log = new Logger("changelog");
  11. }
  12. /**
  13. * @param {function} cb
  14. * @param {number} since
  15. */
  16. getHtml(cb, since)
  17. {
  18. platform.talkerAPI.send(
  19. TalkerAPI.CMD_GET_CABLES_CHANGELOG,
  20. { "num": 1 },
  21. (err, obj) =>
  22. {
  23. if (since)
  24. {
  25. if (obj.items)
  26. for (let i = 0; i < obj.items.length; i++)
  27. if (obj.items[i].date < since) obj.items.length = i;
  28. obj.onlyLatest = true;
  29. }
  30. let firstTime = false;
  31. if (!userSettings.get(UserSettings.PREF_CHANGELOG_LAST_VIEW))
  32. {
  33. firstTime = true;
  34. this._log.log("first time changelog!");
  35. }
  36. userSettings.set(UserSettings.PREF_CHANGELOG_LAST_VIEW, obj.ts);
  37. if (!obj.items || obj.items.length === 0)
  38. {
  39. cb(null);
  40. return;
  41. }
  42. if (firstTime)
  43. {
  44. cb(null);
  45. return;
  46. }
  47. cb();
  48. },
  49. );
  50. }
  51. showNotification()
  52. {
  53. iziToast.show({
  54. "position": "topRight",
  55. "theme": "dark",
  56. "title": "UPDATE",
  57. "message": "cables has been updated! ",
  58. "progressBar": false,
  59. "animateInside": false,
  60. "close": true,
  61. "timeout": false,
  62. "buttons": [
  63. [
  64. "<button>Read More</button>",
  65. function (instance, toast)
  66. {
  67. window.open(platform.getCablesUrl() + "/changelog");
  68. },
  69. ],
  70. ],
  71. });
  72. }
  73. show()
  74. {
  75. if (gui.isRemoteClient) return;
  76. const url = platform.getCablesUrl() + "/changelog?iframe=true";
  77. const gotoUrl = platform.getCablesUrl() + "/changelog";
  78. gui.mainTabs.addIframeTab(
  79. "changelog",
  80. url,
  81. { "icon": "book-open", "closable": true, "gotoUrl": gotoUrl },
  82. true,
  83. );
  84. }
  85. }