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;
}
示例#4
0
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;}
}