bool vmsFirefoxUtil::GetDefaultProfilePath(LPSTR pszPath) { FU_STRINGLIST v; int nDefaultProfile; if (false == GetProfilesPathes (v, nDefaultProfile) || v.size () == 0) return false; if (nDefaultProfile == -1 || nDefaultProfile < 0 || nDefaultProfile >= v.size ()) nDefaultProfile = 0; lstrcpy (pszPath, v [nDefaultProfile]); return true; }
bool vmsFirefoxExtensionInstaller::Do(LPCSTR pszCID, LPCSTR pszExtPath, bool bInstall) { FU_STRINGLIST v; int nDefProf; vmsFirefoxUtil::GetProfilesPathes (v, nDefProf); CString str = _App.Firefox_PortableVersionPath (); if (!str.IsEmpty ()) { fsString str2 = (LPCSTR)(str + "\\data\\profile"); char sz [MY_MAX_PATH]; GetModuleFileName (NULL, sz, MY_MAX_PATH); str2 [0] = sz [0]; v.add (str2); } if (v.size () == 0) return false; for (int i = 0; i < v.size (); i++) { char sz [MY_MAX_PATH]; lstrcpy (sz, v [i]); lstrcat (sz, "\\extensions\\"); lstrcat (sz, pszCID); if (bInstall) { fsBuildPathToFile (sz); try{ vmsFile file; file.Create (sz, GENERIC_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL); file.Write (pszExtPath, lstrlen (pszExtPath)); file.Close (); }catch (...) { return false; } } else { DeleteFile (sz); } } return true; }
bool vmsFirefoxExtensionInstaller::IsInstalled(LPCSTR pszCID, bool bInDefaultProfileOnly) { FU_STRINGLIST v; int nDefaultProfile; vmsFirefoxUtil::GetProfilesPathes (v, nDefaultProfile); CString str = _App.Firefox_PortableVersionPath (); if (!str.IsEmpty ()) { fsString str2 = (LPCSTR)(str + "\\data\\profile"); char sz [MY_MAX_PATH]; GetModuleFileName (NULL, sz, MY_MAX_PATH); str2 [0] = sz [0]; v.add (str2); } if (v.size () == 0) return false; if (nDefaultProfile == -1 || nDefaultProfile >= v.size ()) bInDefaultProfileOnly = false; for (int i = 0; i < v.size (); i++) { if (bInDefaultProfileOnly && i != nDefaultProfile) continue; char sz [MY_MAX_PATH]; lstrcpy (sz, v [i]); lstrcat (sz, "\\extensions\\"); lstrcat (sz, pszCID); if (GetFileAttributes (sz) != DWORD (-1)) return true; } return false; }
bool vmsFirefoxUtil::GetProfilesPathes(FU_STRINGLIST &v, int &nDefaultProfile) { try { char szPath [MY_MAX_PATH]; GetDataPath (szPath); char szProfilesIni [MY_MAX_PATH]; lstrcpy (szProfilesIni, szPath); lstrcat (szProfilesIni, "profiles.ini"); if (GetFileAttributes (szProfilesIni) != DWORD (-1)) { nDefaultProfile = -1; for (int i = 0;; i++) { char sz [100], szPP [MY_MAX_PATH] = ""; sprintf (sz, "Profile%d", i); GetPrivateProfileString (sz, "Path", "", szPP, sizeof (szPP), szProfilesIni); if (*szPP == 0) break; LPSTR psz = szPP; while (*psz) { if (*psz == '/') *psz = '\\'; psz++; } if (szPP [1] == ':') { v.add (szPP); } else { char sz [MY_MAX_PATH]; lstrcpy (sz, szPath); lstrcat (sz, szPP); v.add (sz); } if (nDefaultProfile == -1 && GetPrivateProfileInt (sz, "Default", 0, szProfilesIni)) nDefaultProfile = i; } } if (v.size () == 0) { char szProfiles [MY_MAX_PATH]; vmsFirefoxUtil::GetProfilesPath (szProfiles); lstrcat (szProfiles, "*"); WIN32_FIND_DATA wfd; HANDLE hFind = FindFirstFile (szProfiles, &wfd); if (hFind == INVALID_HANDLE_VALUE) return false; do { if (0 == lstrcmp (wfd.cFileName, ".") || 0 == lstrcmp (wfd.cFileName, "..")) continue; char sz [MY_MAX_PATH]; lstrcpy (sz, szPath); lstrcat (sz, wfd.cFileName); DWORD dw = GetFileAttributes (sz); if (dw != DWORD (-1) && (dw & FILE_ATTRIBUTE_DIRECTORY)) { char sz2 [MY_MAX_PATH]; lstrcpy (sz2, sz); lstrcat (sz2, "\\extensions\\"); DWORD dw = GetFileAttributes (sz2); if (dw != DWORD (-1) && (dw & FILE_ATTRIBUTE_DIRECTORY)) v.add (sz); } } while (FindNextFile (hFind, &wfd)); FindClose (hFind); } return true; }catch (...) {return false;} }