diff --git a/CpuMonitor.cs b/CpuMonitor.cs index 27646166..8c5ec9fe 100644 --- a/CpuMonitor.cs +++ b/CpuMonitor.cs @@ -39,13 +39,12 @@ namespace VRCX } while (m_Thread != null) { + if (cpuCounter != null) + { + CpuUsage = cpuCounter.NextValue(); + } try { - if (cpuCounter != null) - { - CpuUsage = cpuCounter.NextValue(); - } - Thread.Sleep(1000); } catch diff --git a/VRCX.cs b/VRCX.cs index 65e26f95..b4e84fef 100644 --- a/VRCX.cs +++ b/VRCX.cs @@ -56,7 +56,7 @@ namespace VRCX { MainForm.Instance.BeginInvoke(new MethodInvoker(() => { - if (VRForm.Instance==null) + if (VRForm.Instance == null) { new VRForm().Show(); } diff --git a/html/app.css b/html/app.css index e1c4afa5..43d910fe 100644 --- a/html/app.css +++ b/html/app.css @@ -207,7 +207,7 @@ body, input, textarea, select, button { } .x-friend-item:hover { - background: #eee; + background: #f0f0f0; border-radius: 2px; } @@ -400,14 +400,21 @@ i.x-user-status.busy { color: rgb(0, 0, 0); } -.x-dialog .el-tree { - font-size: 12px; -} - -.x-dialog .el-tree-node { +.el-tree-node { white-space: normal; } -.x-dialog .el-tree-node__content { +.el-tree-node__content { height: auto; +} + +.x-user-dialog .el-textarea__inner { + background: none; + border: 0; + border-radius: 2px; + padding: 0; +} + +.x-user-dialog .el-tag+.el-tag { + margin-left: 5px; } \ No newline at end of file diff --git a/html/app.js b/html/app.js index 9e51a5fb..b4d9bb17 100644 --- a/html/app.js +++ b/html/app.js @@ -803,6 +803,9 @@ if (window.CefSharp) { if (this.isLoggedIn) { ctx = this.currentUser; Object.assign(ctx, ref); + if (ctx.homeLocation_.tag !== ctx.homeLocation) { + ctx.homeLocation_ = this.parseLocation(ctx.homeLocation); + } } else { this.isLoggedIn = true; ctx = { @@ -828,8 +831,12 @@ if (window.CefSharp) { onlineFriends: [], activeFriends: [], offlineFriends: [], + // custom + homeLocation_: {}, + // ...ref }; + ctx.homeLocation_ = this.parseLocation(ctx.homeLocation); this.currentUser = ctx; this.$emit('LOGIN', { json: ref, @@ -3291,6 +3298,54 @@ if (window.CefSharp) { : ''; }; + var buildTreeData = (json) => { + var node = []; + for (var key in json) { + var value = json[key]; + if (typeof value === 'object') { + if (Array.isArray(value)) { + node.push({ + children: value.map((val, idx) => { + if (typeof val === 'object') { + return { + children: buildTreeData(val), + key: idx + }; + } + return { + key: idx, + value: val + }; + }), + key + }); + } else { + node.push({ + children: buildTreeData(value), + key + }); + } + } else { + node.push({ + key, + value: String(value) + }); + } + } + node.sort((a, b) => { + var A = String(a.key).toUpperCase(); + var B = String(b.key).toUpperCase(); + if (A < B) { + return -1; + } + if (A > B) { + return 1; + } + return 0; + }); + return node; + }; + // Misc var $timers = []; @@ -3339,7 +3394,7 @@ if (window.CefSharp) { VRCX, nextRefresh: 0, isGameRunning: false, - appVersion: '2019.08.17', + appVersion: '2019.08.17.1', latestAppVersion: '', ossDialog: false }, @@ -3687,6 +3742,23 @@ if (window.CefSharp) { } }; + $app.methods.loadMemo = function (id) { + return VRCXStorage.Get(`memo_${id}`); + }; + + $app.methods.saveMemo = function (id, memo) { + var key = `memo_${id}`; + if (memo) { + VRCXStorage.Set(key, String(memo)); + } else { + VRCXStorage.Remove(key); + } + var ref = this.friend[id]; + if (ref) { + ref.memo = String(memo || ''); + } + }; + // App: Friends $app.data.friend = {}; @@ -3814,7 +3886,8 @@ if (window.CefSharp) { ref, vip: Boolean(API.favoriteObject[id]), name: '', - no: ++this.friendNo + no: ++this.friendNo, + memo: this.loadMemo(id) }; if (ref) { ctx.name = ref.name; @@ -4098,6 +4171,10 @@ if (window.CefSharp) { match = uname.toUpperCase().includes(QUERY) && !uname.startsWith('steam_'); } + if (!match && + ctx.memo) { + match = String(ctx.memo).toUpperCase().includes(QUERY); + } if (match) { this.quickSearchItems.push({ value: ctx.id, @@ -4399,7 +4476,11 @@ if (window.CefSharp) { }); this.sweepGameLog(); this.updateSharedFeed(); - this.notifyMenu('gameLog'); + // sweepGameLog로 기록이 삭제되면 + // 아무 것도 없는데 알림이 떠서 이상함 + if (this.gameLogTable.length) { + this.notifyMenu('gameLog'); + } }); } else { this.updateSharedFeed(); @@ -5320,6 +5401,7 @@ if (window.CefSharp) { // App: More + $app.data.currentUserTreeData = []; $app.data.pastDisplayNameTable = { data: [], tableProps: { @@ -5353,6 +5435,7 @@ if (window.CefSharp) { $app.watch.openVRAlways = saveOpenVROption; API.$on('LOGIN', () => { + $app.currentUserTreeData = []; $app.pastDisplayNameTable.data = []; }); @@ -5409,6 +5492,10 @@ if (window.CefSharp) { } }; + $app.methods.refreshCurrentUserTreeData = function () { + this.currentUserTreeData = buildTreeData(API.currentUser); + }; + $app.methods.promptUserDialog = function () { this.$prompt('Enter a User ID (UUID)', 'Direct Access', { distinguishCancelAndClose: true, @@ -5474,54 +5561,6 @@ if (window.CefSharp) { } }; - var buildTreeData = (json) => { - var node = []; - for (var key in json) { - var value = json[key]; - if (typeof value === 'object') { - if (Array.isArray(value)) { - node.push({ - children: value.map((val, idx) => { - if (typeof val === 'object') { - return { - children: buildTreeData(val), - key: idx - }; - } - return { - key: idx, - value: val - }; - }), - key - }); - } else { - node.push({ - children: buildTreeData(value), - key - }); - } - } else { - node.push({ - key, - value: String(value) - }); - } - } - node.sort((a, b) => { - var A = String(a.key).toUpperCase(); - var B = String(b.key).toUpperCase(); - if (A < B) { - return -1; - } - if (A > B) { - return 1; - } - return 0; - }); - return node; - }; - // App: User Dialog $app.data.userDialog = { @@ -5547,7 +5586,13 @@ if (window.CefSharp) { isWorldsLoading: false, isAvatarsLoading: false, - treeData: [] + treeData: [], + memo: '' + }; + + $app.watch['userDialog.memo'] = function () { + var D = this.userDialog; + this.saveMemo(D.id, D.memo); }; API.$on('LOGOUT', () => { @@ -5691,6 +5736,7 @@ if (window.CefSharp) { var D = this.userDialog; D.id = userId; D.treeData = []; + D.memo = this.loadMemo(userId); D.visible = true; D.loading = true; API.getCachedUser({ @@ -6063,6 +6109,7 @@ if (window.CefSharp) { $app.data.worldDialog = { visible: false, loading: false, + id: '', location_: {}, ref: {}, isFavorite: false, @@ -6079,7 +6126,7 @@ if (window.CefSharp) { API.$on('WORLD', (args) => { var D = $app.worldDialog; if (D.visible && - args.ref.id === D.location_.worldId) { + args.ref.id === D.id) { D.ref = args.ref; var id = extractFileId(args.ref.assetUrl); if (id) { @@ -6096,7 +6143,7 @@ if (window.CefSharp) { API.$on('FAVORITE', (args) => { var D = $app.worldDialog; if (D.visible && - args.ref.favoriteId === D.location_.worldId && + args.ref.favoriteId === D.id && !args.ref.hide_) { D.isFavorite = true; } @@ -6105,7 +6152,7 @@ if (window.CefSharp) { API.$on('FAVORITE:@DELETE', (args) => { var D = $app.worldDialog; if (D.visible && - args.ref.favoriteId === D.location_.worldId) { + args.ref.favoriteId === D.id) { D.isFavorite = false; } }); @@ -6115,6 +6162,7 @@ if (window.CefSharp) { var D = this.worldDialog; var L = API.parseLocation(tag); if (L.worldId) { + D.id = L.worldId; D.location_ = L; D.treeData = []; D.fileCreatedAt = ''; @@ -6128,10 +6176,10 @@ if (window.CefSharp) { D.visible = false; throw err; }).then((args) => { - if (D.location_.worldId === args.ref.id) { + if (D.id === args.ref.id) { D.loading = false; D.ref = args.ref; - D.isFavorite = Boolean(API.favoriteObject[D.location_.worldId]); + D.isFavorite = Boolean(API.favoriteObject[D.id]); D.rooms = []; this.updateWorldDialogInstances(); if (args.cache) { @@ -6167,7 +6215,7 @@ if (window.CefSharp) { for (var key in this.friend) { ref = API.user[key]; if (ref && - ref.location_.worldId === D.location_.worldId) { + ref.location_.worldId === D.id) { ({ instanceId } = ref.location_); if (map[instanceId]) { map[instanceId].users.push(ref); @@ -6182,7 +6230,7 @@ if (window.CefSharp) { } D.rooms = []; Object.values(map).sort((a, b) => b.users.length - a.users.length || b.occupants - a.occupants).forEach((v) => { - var L = API.parseLocation(`${D.location_.worldId}:${v.id}`); + var L = API.parseLocation(`${D.id}:${v.id}`); v.location_ = L; v.location = L.tag; if (L.userId) { @@ -6220,7 +6268,7 @@ if (window.CefSharp) { if (command === 'New Instance') { this.showNewInstanceDialog(D.location_.tag); } else if (command === 'Add Favorite') { - this.showFavoriteDialog('world', D.location_.worldId); + this.showFavoriteDialog('world', D.id); } else { this.$confirm(`Continue? ${command}`, 'Confirm', { confirmButtonText: 'Confirm', @@ -6231,12 +6279,12 @@ if (window.CefSharp) { switch (command) { case 'Delete Favorite': API.deleteFavorite({ - objectId: D.location_.worldId + objectId: D.id }); break; case 'Make Home': API.saveCurrentUser({ - homeLocation: D.location_.worldId + homeLocation: D.id }).then((args) => { this.$message({ message: 'Home world updated', diff --git a/html/index.html b/html/index.html index 9cad248d..681e618e 100644 --- a/html/index.html +++ b/html/index.html @@ -632,17 +632,30 @@ Logout - -
- Past Display Names - - - @@ -789,7 +803,8 @@
- + {{ friend.ref.displayName }} ({{ friend.memo }}) +
@@ -810,7 +825,8 @@
- + {{ friend.ref.displayName }} ({{ friend.memo }}) +
@@ -831,7 +847,8 @@
- + {{ friend.ref.displayName }} ({{ friend.memo }}) +
@@ -905,11 +922,11 @@ Cancel Friend Request Send Friend Request - Unblock + Unblock Block - Unmute + Unmute Mute - Show Avatar + Show Avatar Hide Avatar @@ -950,7 +967,14 @@ +
+
+
+ Note + +
+
Avatar Copying @@ -970,12 +994,6 @@
-
-
- ID - -
-
@@ -1009,7 +1027,7 @@ - +