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; }
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); }
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); } }
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); } }