diff --git a/html/src/app.js b/html/src/app.js index b9dbacb3..e79186f7 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -11,13 +11,51 @@ import { DataTables } from 'vue-data-tables'; import ElementUI from 'element-ui'; import locale from 'element-ui/lib/locale/lang/en'; -CefSharp.BindObjectAsync( - 'VRCX', - 'VRCXStorage', - 'SQLite', - 'LogWatcher', - 'Discord' -).then(function () { +import sharedRepository from './repository/shared.js'; +import configRepository from './repository/config.js'; + +window.sharedRepository = sharedRepository; +window.configRepository = configRepository; + +(async function () { + await CefSharp.BindObjectAsync( + 'VRCX', + 'SharedVariable', // DO NOT DIRECT ACCESS + 'VRCXStorage', + 'SQLite', // DO NOT DIRECT ACCESS + 'LogWatcher', + 'Discord' + ); + + await configRepository.init(); + + if (configRepository.getBool('migrate_config_20201101') === null) { + var legacyConfigKeys = [ + 'orderFriendGroup0', + 'orderFriendGroup1', + 'orderFriendGroup2', + 'orderFriendGroup3', + 'discordActive', + 'discordInstance', + 'openVR', + 'openVRAlways', + 'VRCX_hidePrivateFromFeed', + 'VRCX_hideLoginsFromFeed', + 'VRCX_hideDevicesFromFeed', + 'VRCX_VIPNotifications', + 'VRCX_minimalFeed', + 'isDarkMode', + 'VRCX_StartAtWindowsStartup', + 'VRCX_StartAsMinimizedState', + 'VRCX_CloseToTray', + 'launchAsDesktop' + ]; + for (var key of legacyConfigKeys) { + configRepository.setBool(key, VRCXStorage.Get(key) === 'true'); + } + configRepository.setBool('migrate_config_20201101', true); + } + document.addEventListener('keyup', function (e) { if (e.ctrlKey) { if (e.shiftKey && e.code === 'KeyI') { @@ -28,32 +66,6 @@ CefSharp.BindObjectAsync( } }); - VRCXStorage.GetBool = function (key) { - return this.Get(key) === 'true'; - }; - - VRCXStorage.SetBool = function (key, value) { - this.Set(key, value - ? 'true' - : 'false'); - }; - - VRCXStorage.GetInt = function (key) { - return parseInt(this.Get(key), 10) || 0; - }; - - VRCXStorage.SetInt = function (key, value) { - this.Set(key, String(value)); - }; - - VRCXStorage.GetFloat = function (key) { - return parseFloat(this.Get(key), 10) || 0.0; - }; - - VRCXStorage.SetFloat = function (key, value) { - this.Set(key, String(value)); - }; - VRCXStorage.GetArray = function (key) { try { var array = JSON.parse(this.Get(key)); @@ -1072,7 +1084,7 @@ CefSharp.BindObjectAsync( ref }); } - VRCXStorage.SetObject('currentUser', ref); + sharedRepository.set('current_user_status', ref.status); return ref; }; @@ -3459,7 +3471,7 @@ CefSharp.BindObjectAsync( if (arr.length > 25) { arr.length = 25; } - VRCXStorage.SetArray('sharedFeeds', arr); + sharedRepository.setArray('feeds', arr); }; $app.methods.notifyMenu = function (index) { @@ -3690,15 +3702,15 @@ CefSharp.BindObjectAsync( $app.data.sortFriendsGroup1 = false; $app.data.sortFriendsGroup2 = false; $app.data.sortFriendsGroup3 = false; - $app.data.orderFriendsGroup0 = VRCXStorage.GetBool('orderFriendGroup0'); - $app.data.orderFriendsGroup1 = VRCXStorage.GetBool('orderFriendGroup1'); - $app.data.orderFriendsGroup2 = VRCXStorage.GetBool('orderFriendGroup2'); - $app.data.orderFriendsGroup3 = VRCXStorage.GetBool('orderFriendGroup3'); + $app.data.orderFriendsGroup0 = configRepository.getBool('orderFriendGroup0'); + $app.data.orderFriendsGroup1 = configRepository.getBool('orderFriendGroup1'); + $app.data.orderFriendsGroup2 = configRepository.getBool('orderFriendGroup2'); + $app.data.orderFriendsGroup3 = configRepository.getBool('orderFriendGroup3'); var saveOrderFriendGroup = function () { - VRCXStorage.SetBool('orderFriendGroup0', this.orderFriendsGroup0); - VRCXStorage.SetBool('orderFriendGroup1', this.orderFriendsGroup1); - VRCXStorage.SetBool('orderFriendGroup2', this.orderFriendsGroup2); - VRCXStorage.SetBool('orderFriendGroup3', this.orderFriendsGroup3); + configRepository.setBool('orderFriendGroup0', this.orderFriendsGroup0); + configRepository.setBool('orderFriendGroup1', this.orderFriendsGroup1); + configRepository.setBool('orderFriendGroup2', this.orderFriendsGroup2); + configRepository.setBool('orderFriendGroup3', this.orderFriendsGroup3); }; $app.watch.orderFriendsGroup0 = saveOrderFriendGroup; $app.watch.orderFriendsGroup1 = saveOrderFriendGroup; @@ -4424,11 +4436,11 @@ CefSharp.BindObjectAsync( $app.data.lastLocation = ''; $app.data.lastLocation$ = {}; - $app.data.discordActive = VRCXStorage.GetBool('discordActive'); - $app.data.discordInstance = VRCXStorage.GetBool('discordInstance'); + $app.data.discordActive = configRepository.getBool('discordActive'); + $app.data.discordInstance = configRepository.getBool('discordInstance'); var saveDiscordOption = function () { - VRCXStorage.SetBool('discordActive', this.discordActive); - VRCXStorage.SetBool('discordInstance', this.discordInstance); + configRepository.setBool('discordActive', this.discordActive); + configRepository.setBool('discordInstance', this.discordInstance); }; $app.watch.discordActive = saveDiscordOption; $app.watch.discordInstance = saveDiscordOption; @@ -5552,21 +5564,21 @@ CefSharp.BindObjectAsync( } }; $app.data.visits = 0; - $app.data.openVR = VRCXStorage.GetBool('openVR'); - $app.data.openVRAlways = VRCXStorage.GetBool('openVRAlways'); - $app.data.hidePrivateFromFeed = VRCXStorage.GetBool('VRCX_hidePrivateFromFeed'); - $app.data.hideLoginsFromFeed = VRCXStorage.GetBool('VRCX_hideLoginsFromFeed'); - $app.data.hideDevicesFromFeed = VRCXStorage.GetBool('VRCX_hideDevicesFromFeed'); - $app.data.vipNotifications = VRCXStorage.GetBool('VRCX_VIPNotifications'); - $app.data.minimalFeed = VRCXStorage.GetBool('VRCX_minimalFeed'); + $app.data.openVR = configRepository.getBool('openVR'); + $app.data.openVRAlways = configRepository.getBool('openVRAlways'); + $app.data.hidePrivateFromFeed = configRepository.getBool('VRCX_hidePrivateFromFeed'); + $app.data.hideLoginsFromFeed = configRepository.getBool('VRCX_hideLoginsFromFeed'); + $app.data.hideDevicesFromFeed = configRepository.getBool('VRCX_hideDevicesFromFeed'); + $app.data.vipNotifications = configRepository.getBool('VRCX_VIPNotifications'); + $app.data.minimalFeed = configRepository.getBool('VRCX_minimalFeed'); var saveOpenVROption = function () { - VRCXStorage.SetBool('openVR', this.openVR); - VRCXStorage.SetBool('openVRAlways', this.openVRAlways); - VRCXStorage.SetBool('VRCX_hidePrivateFromFeed', this.hidePrivateFromFeed); - VRCXStorage.SetBool('VRCX_hideLoginsFromFeed', this.hideLoginsFromFeed); - VRCXStorage.SetBool('VRCX_hideDevicesFromFeed', this.hideDevicesFromFeed); - VRCXStorage.SetBool('VRCX_VIPNotifications', this.vipNotifications); - VRCXStorage.SetBool('VRCX_minimalFeed', this.minimalFeed); + configRepository.setBool('openVR', this.openVR); + configRepository.setBool('openVRAlways', this.openVRAlways); + configRepository.setBool('VRCX_hidePrivateFromFeed', this.hidePrivateFromFeed); + configRepository.setBool('VRCX_hideLoginsFromFeed', this.hideLoginsFromFeed); + configRepository.setBool('VRCX_hideDevicesFromFeed', this.hideDevicesFromFeed); + configRepository.setBool('VRCX_VIPNotifications', this.vipNotifications); + configRepository.setBool('VRCX_minimalFeed', this.minimalFeed); }; $app.watch.openVR = saveOpenVROption; $app.watch.openVRAlways = saveOpenVROption; @@ -5575,19 +5587,19 @@ CefSharp.BindObjectAsync( $app.watch.hideDevicesFromFeed = saveOpenVROption; $app.watch.vipNotifications = saveOpenVROption; $app.watch.minimalFeed = saveOpenVROption; - $app.data.isDarkMode = VRCXStorage.GetBool('isDarkMode'); + $app.data.isDarkMode = configRepository.getBool('isDarkMode'); $appDarkStyle.disabled = $app.data.isDarkMode === false; $app.watch.isDarkMode = function () { - VRCXStorage.SetBool('isDarkMode', this.isDarkMode); + configRepository.setBool('isDarkMode', this.isDarkMode); $appDarkStyle.disabled = this.isDarkMode === false; }; - $app.data.isStartAtWindowsStartup = VRCXStorage.GetBool('VRCX_StartAtWindowsStartup'); - $app.data.isStartAsMinimizedState = VRCXStorage.GetBool('VRCX_StartAsMinimizedState'); - $app.data.isCloseToTray = VRCXStorage.GetBool('VRCX_CloseToTray'); + $app.data.isStartAtWindowsStartup = configRepository.getBool('VRCX_StartAtWindowsStartup'); + $app.data.isStartAsMinimizedState = configRepository.getBool('VRCX_StartAsMinimizedState'); + $app.data.isCloseToTray = configRepository.getBool('VRCX_CloseToTray'); var saveVRCXWindowOption = function () { - VRCXStorage.SetBool('VRCX_StartAtWindowsStartup', this.isStartAtWindowsStartup); - VRCXStorage.SetBool('VRCX_StartAsMinimizedState', this.isStartAsMinimizedState); - VRCXStorage.SetBool('VRCX_CloseToTray', this.isCloseToTray); + configRepository.setBool('VRCX_StartAtWindowsStartup', this.isStartAtWindowsStartup); + configRepository.setBool('VRCX_StartAsMinimizedState', this.isStartAsMinimizedState); + configRepository.setBool('VRCX_CloseToTray', this.isCloseToTray); VRCX.SetStartup(this.isStartAtWindowsStartup); }; $app.watch.isStartAtWindowsStartup = saveVRCXWindowOption; @@ -7306,13 +7318,13 @@ CefSharp.BindObjectAsync( $app.data.launchDialog = { visible: false, loading: false, - desktop: VRCXStorage.GetBool('launchAsDesktop'), + desktop: configRepository.getBool('launchAsDesktop'), location: '', url: '' }; $app.watch['launchDialog.desktop'] = function () { - VRCXStorage.SetBool('launchAsDesktop', this.launchDialog.desktop); + configRepository.setBool('launchAsDesktop', this.launchDialog.desktop); }; API.$on('LOGOUT', function () { @@ -7355,4 +7367,4 @@ CefSharp.BindObjectAsync( $app = new Vue($app); window.$app = $app; -}); +})(); diff --git a/html/src/vr.js b/html/src/vr.js index 6c10c35a..40daad57 100644 --- a/html/src/vr.js +++ b/html/src/vr.js @@ -9,68 +9,20 @@ import Vue from 'vue'; import ElementUI from 'element-ui'; import locale from 'element-ui/lib/locale/lang/en'; -CefSharp.BindObjectAsync( - 'VRCX', - 'VRCXStorage', - 'SQLite' -).then(function () { - VRCXStorage.GetBool = function (key) { - return this.Get(key) === 'true'; - }; +import sharedRepository from './repository/shared.js'; +import configRepository from './repository/config.js'; - VRCXStorage.SetBool = function (key, value) { - this.Set(key, value - ? 'true' - : 'false'); - }; +window.sharedRepository = sharedRepository; +window.configRepository = configRepository; - VRCXStorage.GetInt = function (key) { - return parseInt(this.Get(key), 10) || 0; - }; +(async function () { + await CefSharp.BindObjectAsync( + 'VRCX', + 'SharedVariable', + 'SQLite' + ); - VRCXStorage.SetInt = function (key, value) { - this.Set(key, String(value)); - }; - - VRCXStorage.GetFloat = function (key) { - return parseFloat(this.Get(key), 10) || 0.0; - }; - - VRCXStorage.SetFloat = function (key, value) { - this.Set(key, String(value)); - }; - - VRCXStorage.GetArray = function (key) { - try { - var array = JSON.parse(this.Get(key)); - if (Array.isArray(array)) { - return array; - } - } catch (err) { - console.error(err); - } - return []; - }; - - VRCXStorage.SetArray = function (key, value) { - this.Set(key, JSON.stringify(value)); - }; - - VRCXStorage.GetObject = function (key) { - try { - var object = JSON.parse(this.Get(key)); - if (object === Object(object)) { - return object; - } - } catch (err) { - console.error(err); - } - return {}; - }; - - VRCXStorage.SetObject = function (key, value) { - this.Set(key, JSON.stringify(value)); - }; + await configRepository.init(); Noty.overrideDefaults({ animation: { @@ -619,6 +571,7 @@ CefSharp.BindObjectAsync( // 2 = 항상 화면에 보이는 거 appType: location.href.substr(-1), currentTime: new Date().toJSON(), + currentUserStatus: null, cpuUsage: 0, feeds: [], devices: [], @@ -662,8 +615,8 @@ CefSharp.BindObjectAsync( $app.methods.updateLoop = async function () { try { this.currentTime = new Date().toJSON(); - this.currentUser = VRCXStorage.GetObject('currentUser') || {}; - if (VRCXStorage.GetBool('VRCX_hideDevicesFromFeed') === false) { + this.currentUserStatus = sharedRepository.get('current_user_status'); + if (configRepository.getBool('VRCX_hideDevicesFromFeed') === false) { VRCX.GetVRDevices().then((devices) => { devices.forEach((device) => { device[2] = parseInt(device[2], 10); @@ -674,14 +627,14 @@ CefSharp.BindObjectAsync( else { this.devices = ''; } - this.updateSharedFeed(); + await this.updateSharedFeed(); } catch (err) { console.error(err); } setTimeout(() => this.updateLoop(), 500); }; - $app.methods.updateCpuUsageLoop = async function() { + $app.methods.updateCpuUsageLoop = async function () { try { var cpuUsage = await VRCX.CpuUsage(); this.cpuUsage = cpuUsage.toFixed(2); @@ -691,11 +644,18 @@ CefSharp.BindObjectAsync( setTimeout(() => this.updateCpuUsageLoop(), 1000); }; - $app.methods.updateSharedFeed = function () { - this.isMinimalFeed = VRCXStorage.GetBool('VRCX_minimalFeed'); + $app.methods.updateSharedFeed = async function () { + this.isMinimalFeed = configRepository.getBool('VRCX_minimalFeed'); // TODO: block mute hideAvatar unfriend + + var feeds = sharedRepository.getArray('feeds'); + if (feeds === null) { + return; + } + var _feeds = this.feeds; - this.feeds = VRCXStorage.GetArray('sharedFeeds'); + this.feeds = feeds; + if (this.appType === '2') { var map = {}; _feeds.forEach((feed) => { @@ -716,10 +676,10 @@ CefSharp.BindObjectAsync( } }); // disable notification on busy - if (this.currentUser.status === 'busy') { + if (this.currentUserStatus === 'busy') { return; } - if (VRCXStorage.GetBool('VRCX_VIPNotifications') === true) { + if (configRepository.getBool('VRCX_VIPNotifications') === true) { var notys = []; this.feeds.forEach((feed) => { if (feed.isFavorite) { @@ -742,7 +702,7 @@ CefSharp.BindObjectAsync( }); var bias = new Date(Date.now() - 60000).toJSON(); var theme = 'relax'; - if (VRCXStorage.GetBool('isDarkMode') === true) { + if (configRepository.getBool('isDarkMode') === true) { theme = 'sunset'; } notys.forEach((noty) => { @@ -801,4 +761,4 @@ CefSharp.BindObjectAsync( $app = new Vue($app); window.$app = $app; -}); +})();