bool OBSBasic::AddProfile(bool create_new, const char *title, const char *text,
		const char *init_text)
{
	std::string newName;
	std::string newDir;
	ConfigFile config;

	if (!GetProfileName(this, newName, newDir, title, text, init_text))
		return false;

	std::string curDir = config_get_string(App()->GlobalConfig(),
			"Basic", "ProfileDir");

	char newPath[512];
	int ret = GetConfigPath(newPath, 512, "obs-studio/basic/profiles/");
	if (ret <= 0) {
		blog(LOG_WARNING, "Failed to get profiles config path");
		return false;
	}

	strcat(newPath, newDir.c_str());

	if (os_mkdir(newPath) < 0) {
		blog(LOG_WARNING, "Failed to create profile directory '%s'",
				newDir.c_str());
		return false;
	}

	if (!create_new)
		CopyProfile(curDir.c_str(), newPath);

	strcat(newPath, "/basic.ini");

	if (config.Open(newPath, CONFIG_OPEN_ALWAYS) != 0) {
		blog(LOG_ERROR, "Failed to open new config file '%s'",
				newDir.c_str());
		return false;
	}

	config_set_string(App()->GlobalConfig(), "Basic", "Profile",
			newName.c_str());
	config_set_string(App()->GlobalConfig(), "Basic", "ProfileDir",
			newDir.c_str());

	config_set_string(config, "General", "Name", newName.c_str());
	config.SaveSafe("tmp");
	config.Swap(basicConfig);
	InitBasicConfigDefaults();
	RefreshProfiles();

	if (create_new)
		ResetProfileData();

	blog(LOG_INFO, "Created profile '%s' (%s, %s)", newName.c_str(),
			create_new ? "clean" : "duplicate", newDir.c_str());
	blog(LOG_INFO, "------------------------------------------------");

	config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
	UpdateTitleBar();
	return true;
}
Пример #2
0
BOOL RecoverProfile(HINI hProfile)
{
    HINI hDestProfile;
    HINI hSourceProfile;
    APIRET rc;
    char szTempFile[40];
    char *pIniFile;
    PRFPROFILE stProfileNames;

    stProfileNames.cchUserName = 0;
    stProfileNames.cchSysName = 0;
    PrfQueryProfile(habAnchorBlock,&stProfileNames);
    stProfileNames.pszUserName = malloc(stProfileNames.cchUserName + 1);
    stProfileNames.pszSysName = malloc(stProfileNames.cchSysName + 1);
    PrfQueryProfile(habAnchorBlock,&stProfileNames);
    if (hProfile == HINI_USERPROFILE)
        strcpy(szTempFile,"C:\\OS2\\DLL\\_USER_.INI");
    else
        strcpy(szTempFile,"C:\\OS2\\DLL\\_SYSTEM_.INI");
    if ((hDestProfile = PrfOpenProfile(habAnchorBlock,szTempFile)) != 0)
    {
        if (CopyProfile(hProfile,hDestProfile))
        {
            if (PrfCloseProfile(hDestProfile))
            {
                if (hProfile == HINI_USERPROFILE)
                {
                    pIniFile = stProfileNames.pszUserName;
                    stProfileNames.pszUserName = szTempFile;
                    stProfileNames.cchUserName = sizeof(szTempFile);
                }
                else
                {
                    pIniFile = stProfileNames.pszSysName;
                    stProfileNames.pszSysName = szTempFile;
                    stProfileNames.cchSysName = sizeof(szTempFile);
                }
                if (PrfReset(habAnchorBlock,&stProfileNames))
                {
                    DosCopy(szTempFile,pIniFile,DCPY_EXISTING);
                    if (hProfile == HINI_USERPROFILE)
                    {
                        stProfileNames.pszUserName = pIniFile;
                        stProfileNames.cchUserName = sizeof(pIniFile);
                    }
                    else
                    {
                        stProfileNames.pszSysName = pIniFile;
                        stProfileNames.cchSysName = sizeof(pIniFile);
                    }
                    if (PrfReset(habAnchorBlock,&stProfileNames))
                        DosDelete(szTempFile);
                }
            }
        }
        else
            PrfCloseProfile(hDestProfile);
    }
    free(stProfileNames.pszUserName);
    free(stProfileNames.pszSysName);
    PrintString("Profile Recovery Complete",5);
    return(TRUE);
}
Пример #3
0
void RemoveBasalProfile(){
	if (c_operation == e_operation_removeBasProf){
		switch(c_basRemStatus){
		case e_opStatus_idle:
			if (M_basRemSelected){
				if(!SelectedBasalProfileIsActive(&m_basRemSelected)){
					c_basRemStatus = e_opStatus_confirm;
					//F_removeBasalProfile = false;
					CopyProfile(&m_basRemSelected, &p_basRemSelected);
				}
				else {
					c_basRemStatus = e_opStatus_invalid;
					//F_removeBasalProfile = false;
				}
			} else {
				;//F_removeBasalProfile = false;
			}
			break;

		case e_opStatus_confirm:
			if (M_basRemResp == e_response_accept){
				c_basRemStatus = e_opStatus_idle;
				F_removeBasalProfile = true;
				CopyProfile( &p_basRemSelected, &F_basalProfileToRemove );
				//RemoveProfileFromSet(&p_basRemSelected);
				CopyProfile( &k_emptyBas, &p_basRemSelected );

			} else if( M_basRemResp == e_response_retry){
				c_basRemStatus = e_opStatus_idle;
				//F_removeBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basRemSelected);

			} else if (M_basRemResp == e_response_cancel){
				c_basRemStatus = e_opStatus_idle;
				//F_removeBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basRemSelected);

			}
			break;

		case e_opStatus_invalid:
			if(M_basRemResp == e_response_retry){
				c_basRemStatus = e_opStatus_idle;
				//F_removeBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basRemSelected);

			} else if (M_basRemResp == e_response_cancel){
				c_basRemStatus = e_opStatus_idle;
				//F_removeBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basRemSelected);

			} else {
				;//F_removeBasalProfile = false;
			}

			break;
		default: break;
		}
	} else {
		//F_removeBasalProfile = false;
		CopyProfile(&k_emptyBas, &p_basRemSelected);
	}
}
Пример #4
0
void CreateBasalProfile(){
	if ( c_operation == e_operation_createBasProf ){
		switch(c_basCreateStatus){
		case e_opStatus_idle:
			if ( M_basCreateResp == e_response_cancel ){
				c_basCreateStatus = e_opStatus_idle;
				//F_createBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basProf);
			} else {
				if(M_basProf){
					if ( EnteredBasalProfileIsValid( &m_basProf ) ){
						c_basCreateStatus = e_opStatus_confirm;
						CopyProfile(&m_basProf, &p_basProf);
						//F_createBasalProfile = false;
					} else {
						c_basCreateStatus = e_opStatus_invalid;
						//F_createBasalProfile = false;
					}
				}
				else {
					;//F_createBasalProfile = false;
				}
			}
			break;

		case e_opStatus_confirm:
			if ( M_basCreateResp == e_response_accept ){
				c_basCreateStatus = e_opStatus_idle;
				F_createBasalProfile = true;
				CopyProfile(&p_basProf, &F_basalProfileToCreate);
				//SaveBasalProfile(&p_basProf);
				CopyProfile(&k_emptyBas, &p_basProf);

			} else if( M_basCreateResp == e_response_retry ){
				c_basCreateStatus = e_opStatus_idle;
				//F_createBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basProf);

			} else if ( M_basCreateResp == e_response_cancel ){
				c_basCreateStatus = e_opStatus_idle;
				//F_createBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basProf);
			}

			break;

		case e_opStatus_invalid:
			if( M_basCreateResp == e_response_retry ){
				c_basCreateStatus = e_opStatus_idle;
				//F_createBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basProf);

			} else if ( M_basCreateResp == e_response_cancel ){
				c_basCreateStatus = e_opStatus_idle;
				//F_createBasalProfile = false;
				CopyProfile(&k_emptyBas, &p_basProf);

			} else {
				;//F_createBasalProfile = false;
			}

			break;
		default: break;
		}
	} else {
		//F_createBasalProfile = false;
		CopyProfile(&k_emptyBas, &p_basProf);
	}
}