A photo manager for VRChat.
1import { invoke } from "@tauri-apps/api/core";
2import { listen } from "@tauri-apps/api/event";
3import { Accessor, createSignal, Setter } from "solid-js";
4
5export class SyncManager{
6 private _setIsSyncing: Setter<boolean>;
7 private _setSyncPhotoTotal: Setter<number>;
8 private _setSyncPhotoTransfers: Setter<number>;
9 private _setSyncType: Setter<string>;
10 private _setSyncError: Setter<string>;
11
12 public IsSyncing: Accessor<boolean>;
13 public SyncPhotoTotal: Accessor<number>;
14 public SyncPhotoTransfers: Accessor<number>
15 public SyncType: Accessor<string>;
16 public SyncError: Accessor<string>;
17
18 constructor(){
19 [ this.IsSyncing, this._setIsSyncing ] = createSignal(false);
20 [ this.SyncPhotoTotal, this._setSyncPhotoTotal ] = createSignal(-1);
21 [ this.SyncPhotoTransfers, this._setSyncPhotoTransfers ] = createSignal(-1);
22 [ this.SyncType, this._setSyncType ] = createSignal("");
23 [ this.SyncError, this._setSyncError ] = createSignal("");
24
25 listen('photos-upload-meta', ( e: any ) => {
26 this._setIsSyncing(true);
27 this._setSyncPhotoTotal(e.payload.photos_total);
28 this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading);
29 this._setSyncType('Upload');
30
31 console.log(e.payload)
32 })
33
34 listen('photos-download-meta', ( e: any ) => {
35 this._setIsSyncing(true);
36 this._setSyncPhotoTotal(e.payload.photos_total);
37 this._setSyncPhotoTransfers(e.payload.photos_total - e.payload.photos_uploading);
38 this._setSyncType('Download');
39
40 console.log(e.payload)
41 })
42
43 listen('sync-finished', () => {
44 this._setIsSyncing(false);
45 })
46
47 listen('sync-failed', ( e: any ) => {
48 this._setSyncError(e.payload);
49 })
50 }
51
52 public async TriggerSync(){
53 this._setIsSyncing(true);
54 invoke('sync_photos', { token: (await invoke('get_config_value_string', { key: 'token' })) });
55 }
56}