void DoStartupProcess() { if(checking) return; if(OldXMLDataExists(MC_PLUGINS) && OldXMLDataExists(MC_LOCALIZATION)) { if(options.check_on_startup) { SYSTEMTIME now; GetSystemTime(&now); if(options.check_once) { if(DBGetContactSettingWord(0, MODULE, "LastUpdateDay", 32) == 32) { CallService(MS_UPDATE_CHECKFORUPDATES, 0, 0); } else { if(now.wDay != DBGetContactSettingWord(0, MODULE, "LastUpdateDay", now.wDay) || now.wMonth != DBGetContactSettingWord(0, MODULE, "LastUpdateMonth", now.wMonth) || now.wYear != DBGetContactSettingWord(0, MODULE, "LastUpdateYear", now.wYear)) { CallService(MS_UPDATE_CHECKFORUPDATES, 0, 0); } else { if(LoadOldXMLData(MC_PLUGINS, false)) { ScanPlugins(0, 0); FreeXMLData(MC_PLUGINS); } if(LoadOldXMLData(MC_LOCALIZATION, false)) { ScanLangpacks(0, 0); FreeXMLData(MC_LOCALIZATION); } RestoreStatus(); } } } else { CallService(MS_UPDATE_CHECKFORUPDATES, 0, 0); } } else { if(LoadOldXMLData(MC_PLUGINS, false)) { ScanPlugins(0, 0); FreeXMLData(MC_PLUGINS); } if(LoadOldXMLData(MC_LOCALIZATION, false)) { ScanLangpacks(0, 0); FreeXMLData(MC_LOCALIZATION); } RestoreStatus(); } } else { if(options.check_on_startup) CallService(MS_UPDATE_CHECKFORUPDATES, 0, 0); else RestoreStatus(); } }
void CSelectPluginDlg::OnScanFolder() //----------------------------------- { BrowseForFolder dlg(TrackerSettings::Instance().PathPlugins.GetWorkingDir(), "Select a folder that should be scanned for VST plugins (including sub-folders)"); if(!dlg.Show(this)) return; TrackerSettings::Instance().PathPlugins.SetWorkingDir(dlg.GetDirectory()); VSTPluginLib *plugLib = ScanPlugins(dlg.GetDirectory(), this); UpdatePluginsList(plugLib ? plugLib->pluginId2 : 0); // If any of the plugins was missing anywhere, try loading it const CVstPluginManager *pManager = theApp.GetPluginManager(); for(auto p : *pManager) { ReloadMissingPlugins(p); } }
static void ScanAllPlugins (void) { gchar *currentdir; // scan some default locations to find plugins ScanPlugins("/usr/lib/games/psemu/"); ScanPlugins("/usr/lib/games/psemu/lib/"); ScanPlugins("/usr/lib/games/psemu/config/"); ScanPlugins("/usr/local/lib/games/psemu/lib/"); ScanPlugins("/usr/local/lib/games/psemu/config/"); ScanPlugins("/usr/local/lib/games/psemu/"); ScanPlugins("/usr/lib64/games/psemu/"); ScanPlugins("/usr/lib64/games/psemu/lib/"); ScanPlugins("/usr/lib64/games/psemu/config/"); ScanPlugins("/usr/local/lib64/games/psemu/lib/"); ScanPlugins("/usr/local/lib64/games/psemu/config/"); ScanPlugins("/usr/local/lib64/games/psemu/"); ScanPlugins("/usr/lib32/games/psemu/"); ScanPlugins("/usr/lib32/games/psemu/lib/"); ScanPlugins("/usr/lib32/games/psemu/config/"); ScanPlugins("/usr/local/lib32/games/psemu/lib/"); ScanPlugins("/usr/local/lib32/games/psemu/config/"); ScanPlugins("/usr/local/lib32/games/psemu/"); ScanPlugins(DEF_PLUGIN_DIR); ScanPlugins(DEF_PLUGIN_DIR "/lib"); ScanPlugins(DEF_PLUGIN_DIR "/lib64"); ScanPlugins(DEF_PLUGIN_DIR "/lib32"); ScanPlugins(DEF_PLUGIN_DIR "/config"); // scan some default locations to find bioses ScanBios("/usr/lib/games/psemu"); ScanBios("/usr/lib/games/psemu/bios"); ScanBios("/usr/lib64/games/psemu"); ScanBios("/usr/lib64/games/psemu/bios"); ScanBios("/usr/lib32/games/psemu"); ScanBios("/usr/lib32/games/psemu/bios"); ScanBios("/usr/share/psemu"); ScanBios("/usr/share/psemu/bios"); ScanBios("/usr/share/pcsxr"); ScanBios("/usr/share/pcsxr/bios"); ScanBios("/usr/local/lib/games/psemu"); ScanBios("/usr/local/lib/games/psemu/bios"); ScanBios("/usr/local/lib64/games/psemu"); ScanBios("/usr/local/lib64/games/psemu/bios"); ScanBios("/usr/local/lib32/games/psemu"); ScanBios("/usr/local/lib32/games/psemu/bios"); ScanBios("/usr/local/share/psemu"); ScanBios("/usr/local/share/psemu/bios"); ScanBios("/usr/local/share/pcsxr"); ScanBios("/usr/local/share/pcsxr/bios"); ScanBios(PACKAGE_DATA_DIR); ScanBios(PSEMU_DATA_DIR); ScanBios(PACKAGE_DATA_DIR "/bios"); ScanBios(PSEMU_DATA_DIR "/bios"); currentdir = g_strconcat(getenv("HOME"), "/.psemu-plugins/", NULL); ScanPlugins(currentdir); g_free(currentdir); currentdir = g_strconcat(getenv("HOME"), "/.psemu/", NULL); ScanPlugins(currentdir); g_free(currentdir); // Check for bad links in ~/.pcsxr/plugins/ currentdir = g_build_filename(getenv("HOME"), PLUGINS_DIR, NULL); CheckSymlinksInPath(currentdir); g_free(currentdir); // Check for bad links in ~/.pcsxr/plugins/cfg currentdir = g_build_filename(getenv("HOME"), PLUGINS_CFG_DIR, NULL); CheckSymlinksInPath(currentdir); g_free(currentdir); // Check for bad links in ~/.pcsxr/bios currentdir = g_build_filename(getenv("HOME"), BIOS_DIR, NULL); CheckSymlinksInPath(currentdir); g_free(currentdir); }
void CheckForUpdatesWorker(void *param) { if (checking) return; /* // this check doesn't work on some systems - not sure which or why if(!(GetSystemMetrics(SM_NETWORK) & 1)) { ShowError(TranslateT("No network - aborting update check")); NLog("worker thread aborting - no network"); return 1; // no network } */ NLog("CheckForUpdatesWorker thread starting"); checking = true; WriteLastCheckTime(); bool confirm = !(((DWORD)param & 1) == 1); bool restart = !(((DWORD)param & 2) == 2); // if restart is false, then we're doing an 'update and shutdown' if(hwndOptions) PostMessage(hwndOptions, WMU_CHECKING, 0, 0); bool use_popup = options.popup_notify && ArePopupsEnabled(); FilenameMap fn_map(5, CompareFileNameStruct); if (use_popup) { ShowPopup(0, TranslateT("Checking for Updates"), _T(""), POPFLAG_SAVEHWND, -1); } else { CreateProgressWindow(); SendMessage(hwndProgress, WM_SETTEXT, 0, (LPARAM)TranslateT("Progress - Checking for updates...")); if (options.use_xml_backend) SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Downloading XML data"), 0); else SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Checking for updates"), 0); } EnterCriticalSection(&list_cs); if (options.use_xml_backend) { if (UpdateXMLData(MC_PLUGINS)) // prevent double error messages (in some cases) { // iterate through the registered plugins if (!use_popup) SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Scanning plugins folder"), 0); ScanPlugins(&fn_map, &update_list); if (UpdateXMLData(MC_LOCALIZATION)) { if (!use_popup) SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Scanning language packs"), 0); ScanLangpacks(&fn_map, &update_list); } if(!use_popup) SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Updating component file listing ids"), 0); UpdateFLIDs(update_list); } if (!use_popup) SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Checking for updates"), 0); } UpdateList update_list2(update_list); LeaveCriticalSection(&list_cs); int count = update_list2.getCount(), index = 0; TCHAR msg[512]; TCHAR *temp_str; UpdateList todo; for(index = 0; index < count; index++) { if(update_list2[index].update_options.enabled) { mir_sntprintf(msg, SIZEOF(msg), TranslateT("Checking plugin: %s"), (temp_str = GetTString(update_list2[index].update.szComponentName))); mir_free(temp_str); } else { mir_sntprintf(msg, SIZEOF(msg), TranslateT("Skipping plugin: %s"), (temp_str = GetTString(update_list2[index].update.szComponentName))); mir_free(temp_str); } if(!use_popup) { SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)msg, 0); SendMessage(hwndProgress, WMU_SETPROGRESS, (WPARAM)(int)(index * 100.0 / count), 0); } //else if(hwndPop) // disabled - just annoying //ChangePopupText(hwndPop, msg); if (update_list2[index].update_options.enabled) { char *nv; bool beta; if (nv = UpdateRequired(update_list2[index], &beta)) { todo.insert(new UpdateInternal(update_list2[index])); todo[todo.getCount()-1].newVersion = nv; todo[todo.getCount()-1].update_options.use_beta = beta; } } if (!use_popup && hwndProgress == NULL) { RemoveFolder(options.temp_folder); break; // user closed progress window - cancel } } ProgressWindowDone(); if (hwndPop) PostMessage(hwndPop, WMU_CLOSEPOP, 0 , 0); if(options.use_xml_backend) { FreeXMLData(MC_PLUGINS); FreeXMLData(MC_LOCALIZATION); } bool restore_status = true; if (todo.getCount()) { int cd_ret = CD_OK; if (confirm) { if (use_popup) { ShowPopup(0, TranslateT("Updates Available"), TranslateT("Updated Miranda components detected.\nClick here to install."), POPFLAG_SAVEHWND, -1); DWORD ret; while ((ret = WaitForSingleObject(hEventPop, 200)) == WAIT_TIMEOUT && !Miranda_Terminated()); if (!pop_cancelled && ret == WAIT_OBJECT_0 && !Miranda_Terminated()) { cd_ret = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_CONFIRMUPDATES), GetDesktopWindow(), DlgProcConfirm, (LPARAM)&todo); } else { if(hwndOptions) PostMessage(hwndOptions, WMU_DONECHECKING, 0, 0); RestoreStatus(); for(int i=0; i<todo.getCount(); ++i) free(todo[i].newVersion); checking = false; Netlib_CloseHandle(hNetlibHttp); hNetlibHttp = NULL; return; } } else cd_ret = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_CONFIRMUPDATES), GetDesktopWindow(), DlgProcConfirm, (LPARAM)&todo); } if (!confirm || cd_ret == CD_CONFALL || cd_ret == CD_NOINSTALL || cd_ret == CD_OK) { bool conf_all = (cd_ret == CD_CONFALL), no_install = (cd_ret == CD_NOINSTALL); // ensure the backup folder exists (either create it or return non-zero signifying error) if (options.backup && !CreatePath(options.backup_folder)) { //MessageBox(0, Translate("Could not create backup folder"), Translate("Error"), MB_OK | MB_ICONERROR); ShowError(TranslateT("Could not create backup folder")); if (hwndOptions) PostMessage(hwndOptions, WMU_DONECHECKING, 0, 0); RestoreStatus(); for (int i=0; i<todo.getCount(); ++i) free(todo[i].newVersion); checking = false; Netlib_CloseHandle(hNetlibHttp); hNetlibHttp = NULL; return; } bool dll_enabled_or_langpack = DownloadUpdates(todo, &fn_map, confirm ? false : options.auto_dll_only); if (todo.getCount() && !no_install) { if (!conf_all || DialogBox(hInst, MAKEINTRESOURCE(IDD_CONFIRMCOMPONENTS), GetDesktopWindow(), DlgProcConfirmComponents) == IDOK) { if (!dll_enabled_or_langpack && restart) { // we're not doing an 'update and shutdown', and we're not updating any active dlls...so just install // get folders TCHAR root_folder[MAX_PATH], plugins_folder[MAX_PATH]; GetRootDir(root_folder); _tcscpy(plugins_folder, root_folder); _tcscat(plugins_folder, _T("\\Plugins")); // move files MoveFiles(0, options.temp_folder, plugins_folder, options.backup_folder, root_folder); // rescan to get correct version numbers ScanPlugins(0, 0); } else { if (ExternProcess(restart) == 0) // if restarting, don't restore status restore_status = false; } } } } for (int i=0; i<todo.getCount(); ++i) free(todo[i].newVersion); } else if (!restart) { PostMessage((HWND)CallService(MS_CLUI_GETHWND, 0, 0), WM_COMMAND, ID_ICQ_EXIT, 0); } if (restore_status && restart) // restore status if we're not doing an 'update and shutdown', and the update was unsuccessful (or there was nothing to update, or no need to shutdown) { checking = false; if (hwndOptions) PostMessage(hwndOptions, WMU_DONECHECKING, 0, 0); RestoreStatus(); } Netlib_CloseHandle(hNetlibHttp); hNetlibHttp = NULL; }