Преглед изворни кода

Use `state.session` instead of `window.sessionStorage`

JC Brand пре 2 недеља
родитељ
комит
c9f84f8318

+ 2 - 2
src/headless/plugins/blocklist/collection.js

@@ -54,7 +54,7 @@ class Blocklist extends Collection {
 
 
     fetchBlocklist() {
     fetchBlocklist() {
         const deferred = getOpenPromise();
         const deferred = getOpenPromise();
-        if (window.sessionStorage.getItem(this.fetched_flag)) {
+        if (_converse.state.session.get(this.fetched_flag)) {
             this.fetch({
             this.fetch({
                 success: () => deferred.resolve(),
                 success: () => deferred.resolve(),
                 error: () => deferred.resolve(),
                 error: () => deferred.resolve(),
@@ -93,7 +93,7 @@ class Blocklist extends Collection {
             blocked ? blocked.save({ jid }) : this.create({ jid });
             blocked ? blocked.save({ jid }) : this.create({ jid });
         });
         });
 
 
-        window.sessionStorage.setItem(this.fetched_flag, 'true');
+        _converse.state.session.set(this.fetched_flag, true);
         if (deferred !== undefined) {
         if (deferred !== undefined) {
             return deferred.resolve();
             return deferred.resolve();
         }
         }

+ 1 - 1
src/headless/plugins/blocklist/plugin.js

@@ -102,7 +102,7 @@ converse.plugins.add("converse-blocklist", {
             const { state } = _converse;
             const { state } = _converse;
             if (state.blocklist) {
             if (state.blocklist) {
                 state.blocklist.clearStore({ "silent": true });
                 state.blocklist.clearStore({ "silent": true });
-                window.sessionStorage.removeItem(state.blocklist.fetched_flag);
+                state.session.set(state.blocklist.fetched_flag, undefined);
                 delete state.blocklist;
                 delete state.blocklist;
             }
             }
         });
         });

+ 12 - 5
src/headless/plugins/blocklist/tests/blocklist.js

@@ -6,13 +6,14 @@ const { u, stx } = converse.env;
 describe('A blocklist', function () {
 describe('A blocklist', function () {
     beforeEach(() => {
     beforeEach(() => {
         jasmine.addMatchers({ toEqualStanza: jasmine.toEqualStanza });
         jasmine.addMatchers({ toEqualStanza: jasmine.toEqualStanza });
-        window.sessionStorage.removeItem('converse.blocklist-romeo@montague.lit-fetched');
     });
     });
 
 
     it(
     it(
         'is automatically fetched from the server once the user logs in',
         'is automatically fetched from the server once the user logs in',
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
-            const { api } = _converse;
+            const { api, state } = _converse;
+            state.session.set('converse.blocklist-romeo@montague.lit-fetched', undefined);
+
             await mock.waitUntilDiscoConfirmed(
             await mock.waitUntilDiscoConfirmed(
                 _converse,
                 _converse,
                 _converse.domain,
                 _converse.domain,
@@ -50,7 +51,9 @@ describe('A blocklist', function () {
     it(
     it(
         'is updated when the server sends IQ stanzas',
         'is updated when the server sends IQ stanzas',
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
-            const { api, domain } = _converse;
+            const { api, domain, state } = _converse;
+            state.session.set('converse.blocklist-romeo@montague.lit-fetched', undefined);
+
             await mock.waitUntilDiscoConfirmed(
             await mock.waitUntilDiscoConfirmed(
                 _converse,
                 _converse,
                 domain,
                 domain,
@@ -115,7 +118,9 @@ describe('A blocklist', function () {
     it(
     it(
         'can be updated via the api',
         'can be updated via the api',
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
         mock.initConverse(['discoInitialized'], {}, async function (_converse) {
-            const { api, domain } = _converse;
+            const { api, domain, state } = _converse;
+            state.session.set('converse.blocklist-romeo@montague.lit-fetched', undefined);
+
             await mock.waitUntilDiscoConfirmed(
             await mock.waitUntilDiscoConfirmed(
                 _converse,
                 _converse,
                 domain,
                 domain,
@@ -192,7 +197,9 @@ describe('A Chat Message', function () {
     it(
     it(
         "will show an error message if it's rejected due to being banned",
         "will show an error message if it's rejected due to being banned",
         mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
         mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
-            const { api } = _converse;
+            const { api, state } = _converse;
+            state.session.set('converse.blocklist-romeo@montague.lit-fetched', undefined);
+
             await mock.waitForRoster(_converse, 'current', 1);
             await mock.waitForRoster(_converse, 'current', 1);
             const sender_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
             const sender_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
             const chat = await api.chats.open(sender_jid);
             const chat = await api.chats.open(sender_jid);

+ 3 - 3
src/headless/plugins/bookmarks/collection.js

@@ -87,7 +87,7 @@ class Bookmarks extends Collection {
 
 
     fetchBookmarks() {
     fetchBookmarks() {
         const deferred = getOpenPromise();
         const deferred = getOpenPromise();
-        if (window.sessionStorage.getItem(this.fetched_flag)) {
+        if (_converse.state.session.get(this.fetched_flag)) {
             this.fetch({
             this.fetch({
                 success: () => deferred.resolve(),
                 success: () => deferred.resolve(),
                 error: () => deferred.resolve(),
                 error: () => deferred.resolve(),
@@ -258,7 +258,7 @@ class Bookmarks extends Collection {
      */
      */
     async onBookmarksReceived(deferred, iq) {
     async onBookmarksReceived(deferred, iq) {
         await this.setBookmarksFromStanza(iq);
         await this.setBookmarksFromStanza(iq);
-        window.sessionStorage.setItem(this.fetched_flag, 'true');
+        _converse.state.session.set(this.fetched_flag, true);
         if (deferred !== undefined) {
         if (deferred !== undefined) {
             return deferred.resolve();
             return deferred.resolve();
         }
         }
@@ -284,7 +284,7 @@ class Bookmarks extends Collection {
             const e = await parseErrorStanza(iq);
             const e = await parseErrorStanza(iq);
             if (e instanceof errors.ItemNotFoundError) {
             if (e instanceof errors.ItemNotFoundError) {
                 // Not an exception, the user simply doesn't have any bookmarks.
                 // Not an exception, the user simply doesn't have any bookmarks.
-                window.sessionStorage.setItem(this.fetched_flag, 'true');
+                _converse.state.session.set(this.fetched_flag, true);
                 deferred?.resolve();
                 deferred?.resolve();
             } else {
             } else {
                 log.error('Error while fetching bookmarks');
                 log.error('Error while fetching bookmarks');

+ 2 - 2
src/headless/plugins/bookmarks/plugin.js

@@ -126,8 +126,8 @@ converse.plugins.add('converse-bookmarks', {
         api.listen.on('clearSession', () => {
         api.listen.on('clearSession', () => {
             const { state } = _converse;
             const { state } = _converse;
             if (state.bookmarks) {
             if (state.bookmarks) {
-                state.bookmarks.clearStore({ 'silent': true });
-                window.sessionStorage.removeItem(state.bookmarks.fetched_flag);
+                state.bookmarks.clearStore({ silent: true });
+                _converse.state.session.set(this.fetched_flag, undefined);
                 delete state.bookmarks;
                 delete state.bookmarks;
             }
             }
         });
         });

+ 2 - 2
src/headless/plugins/bookmarks/tests/bookmarks.js

@@ -464,8 +464,8 @@ describe("A bookmark", function () {
             _converse.api.connection.get()._dataRecv(mock.createRequest(error_stanza));
             _converse.api.connection.get()._dataRecv(mock.createRequest(error_stanza));
 
 
             const cache_key = `converse.room-bookmarksromeo@montague.litfetched`;
             const cache_key = `converse.room-bookmarksromeo@montague.litfetched`;
-            const result = await u.waitUntil(() => window.sessionStorage.getItem(cache_key));
-            expect(result).toBe('true');
+            const result = await u.waitUntil(() => _converse.state.session.get(cache_key));
+            expect(result).toBe(true);
         })
         })
     );
     );
 });
 });

+ 2 - 2
src/headless/plugins/disco/index.js

@@ -68,9 +68,9 @@ converse.plugins.add('converse-disco', {
             }
             }
         });
         });
 
 
-        // All disco entities stored in sessionStorage and are refetched
+        // All disco entities stored in the cache and are refetched
         // upon login or reconnection and then stored with new ids, so to
         // upon login or reconnection and then stored with new ids, so to
-        // avoid sessionStorage filling up, we remove them.
+        // avoid the cache from filling up, we remove them.
         api.listen.on('will-reconnect', clearSession);
         api.listen.on('will-reconnect', clearSession);
         api.listen.on('clearSession', clearSession);
         api.listen.on('clearSession', clearSession);
     }
     }

+ 2 - 2
src/headless/plugins/roster/contacts.js

@@ -111,7 +111,7 @@ class RosterContacts extends Collection {
 
 
         if (_converse.session.get('roster_cached')) {
         if (_converse.session.get('roster_cached')) {
             /**
             /**
-             * The contacts roster has been retrieved from the local cache (`sessionStorage`).
+             * The contacts roster has been retrieved from the local cache
              * @event _converse#cachedRoster
              * @event _converse#cachedRoster
              * @type {RosterContacts}
              * @type {RosterContacts}
              * @example _converse.api.listen.on('cachedRoster', (items) => { ... });
              * @example _converse.api.listen.on('cachedRoster', (items) => { ... });
@@ -332,7 +332,7 @@ class RosterContacts extends Collection {
         /**
         /**
          * When the roster has been received from the XMPP server.
          * When the roster has been received from the XMPP server.
          * See also the `cachedRoster` event further up, which gets called instead of
          * See also the `cachedRoster` event further up, which gets called instead of
-         * `roster` if its already in `sessionStorage`.
+         * `roster` if its already in the cache.
          * @event _converse#roster
          * @event _converse#roster
          * @type {Element}
          * @type {Element}
          * @example _converse.api.listen.on('roster', iq => { ... });
          * @example _converse.api.listen.on('roster', iq => { ... });

+ 2 - 2
src/headless/types/plugins/status/api.d.ts

@@ -34,10 +34,10 @@ declare namespace _default {
     namespace idle {
     namespace idle {
         /**
         /**
          * @method _converse.api.user.idle.get
          * @method _converse.api.user.idle.get
-         * @returns {Promise<import('./types').IdleStatus>}
+         * @returns {import('./types').IdleStatus}
          * @example _converse.api.user.idle.get();
          * @example _converse.api.user.idle.get();
          */
          */
-        function get(): Promise<import("./types").IdleStatus>;
+        function get(): import("./types").IdleStatus;
         /**
         /**
          * @method _converse.api.user.idle.set
          * @method _converse.api.user.idle.set
          * @param {import('./types').IdleStatus} status
          * @param {import('./types').IdleStatus} status

+ 1 - 1
src/headless/types/shared/_converse.d.ts

@@ -79,7 +79,7 @@ export class ConversePrivateGlobal extends ConversePrivateGlobal_base {
      */
      */
     state: any;
     state: any;
     initSession(): void;
     initSession(): void;
-    session: Model;
+    session: any;
     /**
     /**
      * Translate the given string based on the current locale.
      * Translate the given string based on the current locale.
      * @method __
      * @method __