diff --git a/AppApi.cs b/AppApi.cs index 3dd07912..951f828b 100644 --- a/AppApi.cs +++ b/AppApi.cs @@ -348,11 +348,7 @@ namespace VRCX { MainForm.Instance.Invoke(new Action(() => { - if (MainForm.Instance.WindowState == FormWindowState.Minimized) - MainForm.Instance.WindowState = FormWindowState.Normal; - - MainForm.Instance.Show(); - MainForm.Instance.Activate(); + MainForm.Instance.Focus_Window(); })); } diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index b0eb6f9a..683d2fe4 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -84,7 +84,7 @@ namespace VRCX this.TrayIcon.ContextMenuStrip = this.TrayMenu; this.TrayIcon.Text = "VRCX"; this.TrayIcon.Visible = true; - this.TrayIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.TrayIcon_MouseDoubleClick); + this.TrayIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(this.TrayIcon_MouseClick); // // MainForm // diff --git a/MainForm.cs b/MainForm.cs index a656852d..6e26c381 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -160,19 +160,28 @@ namespace VRCX VRCXStorage.Instance.Set("VRCX_WindowState", ((int)WindowState).ToString()); } - private void TrayIcon_MouseDoubleClick(object sender, MouseEventArgs e) + private void TrayIcon_MouseClick(object sender, MouseEventArgs e) { - TrayMenu_Open_Click(sender, e); + if (e.Button == MouseButtons.Left) + { + Focus_Window(); + } } private void TrayMenu_Open_Click(object sender, System.EventArgs e) + { + Focus_Window(); + } + + public void Focus_Window() { if (WindowState == FormWindowState.Minimized) { WindowState = FormWindowState.Normal; } Show(); - Focus(); + // Focus(); + Activate(); } private void TrayMenu_DevTools_Click(object sender, System.EventArgs e) diff --git a/html/src/app.js b/html/src/app.js index 465c84ca..57b16b57 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -9309,7 +9309,11 @@ speechSynthesis.getVoices(); } this.parsePhotonLobbyIds(data.Parameters[252]); var hasInstantiated = false; - if (this.photonLobbyCurrentUser === data.Parameters[254]) { + if ( + this.photonLobbyCurrentUser === data.Parameters[254] || + this.photonLobbyJointime.has(data.Parameters[254]) + ) { + // fix current user and join event firing twice hasInstantiated = true; } this.photonLobbyJointime.set(data.Parameters[254], { @@ -10070,7 +10074,10 @@ speechSynthesis.getVoices(); // skip PyPyDance and VRDancing videos try { var url = new URL(videoUrl); - if (url.origin === 'https://t-ne.x0.to') { + if ( + url.origin === 'https://t-ne.x0.to' || + url.origin === 'https://nextnex.com' + ) { url = new URL(url.searchParams.get('url')); } var id1 = url.pathname; @@ -19857,6 +19864,7 @@ speechSynthesis.getVoices(); }; $app.methods.clearVRCXCache = function () { + API.failedGetRequests = new Map(); API.cachedUsers.forEach((ref, id) => { if ( !this.friends.has(id) && diff --git a/html/src/index.pug b/html/src/index.pug index a0fb07f6..285ddcce 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -46,7 +46,7 @@ html p © 2019-2022 #[a(@click="openExternalLink('https://github.com/pypy-vrc')") pypy] (mina#5656) & #[a(@click="openExternalLink('https://github.com/Natsumi-sama')") Natsumi] p VRCX is an assistant application for provide information about manage friendship. this application uses unofficial VRChat API (VRCSDK). p VRCX isn't endorsed by VRChat and doesn't reflect the views or opinions of VRChat or anyone officially involved in producing or managing VRChat. VRChat is trademark of VRChat Inc. VRChat © VRChat Inc. - p pypy is not responsible for any problems caused by VRCX. Use at your own risk! + p pypy or Natsumi aren't responsible for any problems caused by VRCX. Use at your own risk! //- menu .x-menu-container @@ -1038,7 +1038,7 @@ html div.options-container span.header VRCX Updater div.options-container-item - el-button(size="small" icon="el-icon-upload" @click="showVRCXUpdateDialog()") Check for update + el-button(size="small" icon="el-icon-upload" @click="showVRCXUpdateDialog()") Change build div.options-container-item span.name Auto update: br @@ -1047,13 +1047,25 @@ html el-radio-button(label="Notify") el-radio-button(label="Auto Download") el-radio-button(label="Auto Install") + div.options-container + span.header Application + div.options-container-item + span.name Start at Windows startup + el-switch(v-model="isStartAtWindowsStartup") + div.options-container-item + span.name Start as minimized state + el-switch(v-model="isStartAsMinimizedState") + div.options-container-item + span.name Close to tray + el-switch(v-model="isCloseToTray") + div.options-container div.options-container(style="margin-top:45px;border-top:1px solid #eee;padding-top:30px") span.header Legal Notice div.options-container-item - p © 2019-2022 #[a(href="https://github.com/pypy-vrc" target="_blank") pypy] (mina#5656) + p © 2019-2022 #[a(@click="openExternalLink('https://github.com/pypy-vrc')") pypy] (mina#5656) & #[a(@click="openExternalLink('https://github.com/Natsumi-sama')") Natsumi] p VRCX is an assistant application for provide information about manage friendship. this application uses unofficial VRChat API (VRCSDK). p VRCX isn't endorsed by VRChat and doesn't reflect the views or opinions of VRChat or anyone officially involved in producing or managing VRChat. VRChat is trademark of VRChat Inc. VRChat © VRChat Inc. - p pypy is not responsible for any problems caused by VRCX. Use at your own risk! + p pypy or Natsumi aren't responsible for any problems caused by VRCX. Use at your own risk! div.options-container-item el-button(@click="ossDialog = true" size="small") Open Source Software Notice el-tab-pane(label="Appearance") @@ -1289,28 +1301,18 @@ html el-button(size="small" icon="el-icon-s-operation" @click="showVRChatConfig()") VRChat config.json el-button(size="small" icon="el-icon-s-operation" @click="showLaunchOptions()") Launch Options div.options-container - span.header Application + span.sub-header Primary password div.options-container-item - span.name(style="min-width:236px") Encrypt password (disables auto login) + span.name(style="min-width:300px") Encrypt password (disables auto login) el-switch(v-model="enablePrimaryPassword" @change="enablePrimaryPasswordChange" :disabled="!loginForm.savedCredentials[API.currentUser.username]") + span.sub-header VRChat Quit Fix div.options-container-item - span.name Start at Windows startup - el-switch(v-model="isStartAtWindowsStartup") + span.name(style="min-width:300px") Kill VRChat after exiting game + el-switch(v-model="vrcQuitFix" @change="saveOpenVROption") + span.sub-header Automatically Manage Cache When Closing VRChat div.options-container-item - span.name Start as minimized state - el-switch(v-model="isStartAsMinimizedState") - div.options-container-item - span.name Close to tray - el-switch(v-model="isCloseToTray") - div.options-container - span.sub-header VRChat Quit Fix - div.options-container-item - span.name(style="min-width:300px") Kill VRChat after exiting game - el-switch(v-model="vrcQuitFix" @change="saveOpenVROption") - span.sub-header Automatically Manage Cache When Closing VRChat - div.options-container-item - span.name(style="min-width:300px") Auto delete old versions from cache - el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption") + span.name(style="min-width:300px") Auto delete old versions from cache + el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption") div.options-container span.header Remote Avatar Database div.options-container-item