enhance: pizzaxでstreamingのuser storage updateイベントを監視して更新 (#8095)

* wip

* wip?

* ?

* streamingのuser storage updateイベントを監視して更新

* 必要な時以外はストレージを更新しない

* fix?

* wip

* fix

* fix
This commit is contained in:
tamaina
2021-12-29 22:13:09 +09:00
committed by GitHub
parent 99eb919f4e
commit e159f15600
31 changed files with 98 additions and 53 deletions

View File

@@ -1,6 +1,7 @@
import { onUnmounted, Ref, ref, watch } from 'vue';
import { $i } from './account';
import { api } from './os';
import { stream } from './stream';
type StateDef = Record<string, {
where: 'account' | 'device' | 'deviceAccount';
@@ -19,6 +20,8 @@ export class Storage<T extends StateDef> {
public readonly state: { [K in keyof T]: T[K]['default'] };
public readonly reactiveState: { [K in keyof T]: Ref<T[K]['default']> };
private connection = stream.useChannel('main');
constructor(key: string, def: T) {
this.key = key;
this.keyForLocalStorage = 'pizzax::' + key;
@@ -69,8 +72,19 @@ export class Storage<T extends StateDef> {
localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache));
});
}, 1);
// streamingのuser storage updateイベントを監視して更新
this.connection.on('registryUpdated', ({ scope, key, value }: { scope: string[], key: keyof T, value: T[typeof key]['default'] }) => {
if (scope[1] !== this.key || this.state[key] === value) return;
// TODO: streamingのuser storage updateイベントを監視して更新
this.state[key] = value;
this.reactiveState[key].value = value;
const cache = JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::cache::' + $i.id) || '{}');
if (cache[key] !== value) {
cache[key] = value;
localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache));
}
});
}
}