FIRE-19810: Make presets global since PresetGraphicActive setting is global as well

Having a mix of a global setting storing the active preset and actual presets
saved on a per-account basis creates glorious fails, for instance when
logging in with a different account that "accidentally" doesn't have the
current preset.
meow-7.2.2
Ansariel 2016-08-09 14:35:57 +02:00
parent a42cb70200
commit 5b23cb6be2
6 changed files with 172 additions and 161 deletions

View File

@ -1193,15 +1193,17 @@ void LLFloaterPreference::onOpen(const LLSD& key)
// <FS:Ansariel> Fix resetting graphics preset on cancel
saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive"));
bool started = (LLStartUp::getStartupState() == STATE_STARTED);
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//bool started = (LLStartUp::getStartupState() == STATE_STARTED);
LLButton* load_btn = findChild<LLButton>("PrefLoadButton");
LLButton* save_btn = findChild<LLButton>("PrefSaveButton");
LLButton* delete_btn = findChild<LLButton>("PrefDeleteButton");
//LLButton* load_btn = findChild<LLButton>("PrefLoadButton");
//LLButton* save_btn = findChild<LLButton>("PrefSaveButton");
//LLButton* delete_btn = findChild<LLButton>("PrefDeleteButton");
load_btn->setEnabled(started);
save_btn->setEnabled(started);
delete_btn->setEnabled(started);
//load_btn->setEnabled(started);
//save_btn->setEnabled(started);
//delete_btn->setEnabled(started);
// </FS:Ansariel>
// <FS:ND> Hook up and init for filtering
collectSearchableItems();
@ -4913,55 +4915,10 @@ void FSPanelPreferenceBackup::onClickBackupSettings()
// and only restore selectively
std::string file = item->getColumn(2)->getValue().asString();
if (item->getValue().asString() != "presets")
{
LL_INFOS("SettingsBackup") << "copying per account file " << file << LL_ENDL;
copy_prefs_file(
gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file),
gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, file));
}
else
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR));
std::string presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR) + gDirUtilp->getDirDelimiter();
std::string graphics_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC) + gDirUtilp->getDirDelimiter();
std::string camera_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA) + gDirUtilp->getDirDelimiter();
if (LLFile::isdir(graphics_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR, PRESETS_GRAPHIC));
std::string file_name;
while (gDirUtilp->getNextFileInDir(graphics_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, graphics_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->add(gDirUtilp->add(backup_per_account_folder, PRESETS_DIR), PRESETS_GRAPHIC), file_name);
copy_prefs_file(source, target);
}
}
}
if (LLFile::isdir(camera_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR, PRESETS_CAMERA));
std::string file_name;
while (gDirUtilp->getNextFileInDir(camera_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, camera_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->add(gDirUtilp->add(backup_per_account_folder, PRESETS_DIR), PRESETS_CAMERA), file_name);
copy_prefs_file(source, target);
}
}
}
}
LL_INFOS("SettingsBackup") << "copying per account file " << file << LL_ENDL;
copy_prefs_file(
gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file),
gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, file));
}
}
else
@ -4981,28 +4938,73 @@ void FSPanelPreferenceBackup::onClickBackupSettings()
LLScrollListItem* item = globalFoldersList[index];
// Don't bother with the checkbox and get the path, since we back up all folders
// and only restore selectively
std::string folder = item->getColumn(2)->getValue().asString();
std::string folder_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, folder) + gDirUtilp->getDirDelimiter();
std::string backup_folder_name = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, folder) + gDirUtilp->getDirDelimiter();
LL_INFOS("SettingsBackup") << "backing up global folder: " << folder_name << LL_ENDL;
// create folder if it's not there already
LLFile::mkdir(backup_folder_name.c_str());
std::string file_name;
while (gDirUtilp->getNextFileInDir(folder_name, "*", file_name))
if (item->getValue().asString() != "presets")
{
LL_INFOS("SettingsBackup") << "found entry: " << folder_name + file_name << LL_ENDL;
// only copy files, not subfolders
if (LLFile::isfile(folder_name + file_name.c_str()))
std::string folder = item->getColumn(2)->getValue().asString();
std::string folder_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, folder) + gDirUtilp->getDirDelimiter();
std::string backup_folder_name = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, folder) + gDirUtilp->getDirDelimiter();
LL_INFOS("SettingsBackup") << "backing up global folder: " << folder_name << LL_ENDL;
// create folder if it's not there already
LLFile::mkdir(backup_folder_name.c_str());
std::string file_name;
while (gDirUtilp->getNextFileInDir(folder_name, "*", file_name))
{
copy_prefs_file(folder_name + file_name, backup_folder_name + file_name);
LL_INFOS("SettingsBackup") << "found entry: " << folder_name + file_name << LL_ENDL;
// only copy files, not subfolders
if (LLFile::isfile(folder_name + file_name.c_str()))
{
copy_prefs_file(folder_name + file_name, backup_folder_name + file_name);
}
else
{
LL_INFOS("SettingsBackup") << "skipping subfolder " << folder_name + file_name << LL_ENDL;
}
}
else
}
else
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR));
std::string presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR) + gDirUtilp->getDirDelimiter();
std::string graphics_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC) + gDirUtilp->getDirDelimiter();
std::string camera_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_CAMERA) + gDirUtilp->getDirDelimiter();
if (LLFile::isdir(graphics_presets_folder))
{
LL_INFOS("SettingsBackup") << "skipping subfolder " << folder_name + file_name << LL_ENDL;
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR, PRESETS_GRAPHIC));
std::string file_name;
while (gDirUtilp->getNextFileInDir(graphics_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, graphics_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->add(gDirUtilp->add(dir_name, PRESETS_DIR), PRESETS_GRAPHIC), file_name);
copy_prefs_file(source, target);
}
}
}
if (LLFile::isdir(camera_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR, PRESETS_CAMERA));
std::string file_name;
while (gDirUtilp->getNextFileInDir(camera_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, camera_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->add(gDirUtilp->add(dir_name, PRESETS_DIR), PRESETS_CAMERA), file_name);
copy_prefs_file(source, target);
}
}
}
}
}
@ -5144,57 +5146,12 @@ void FSPanelPreferenceBackup:: doRestoreSettings(const LLSD& notification, const
// Only restore if this item is checked on
if (checkbox->getCheckBox()->getValue().asBoolean())
{
if (item->getValue().asString() != "presets")
{
// Get the path to restore for this item
std::string file = item->getColumn(2)->getValue().asString();
LL_INFOS("SettingsBackup") << "copying per account file " << file << LL_ENDL;
copy_prefs_file(
gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, file),
gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file));
}
else
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR));
std::string presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR) + gDirUtilp->getDirDelimiter();
std::string graphics_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR, PRESETS_GRAPHIC) + gDirUtilp->getDirDelimiter();
std::string camera_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, PRESETS_DIR, PRESETS_CAMERA) + gDirUtilp->getDirDelimiter();
if (LLFile::isdir(graphics_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC));
std::string file_name;
while (gDirUtilp->getNextFileInDir(graphics_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, graphics_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC), file_name);
copy_prefs_file(source, target);
}
}
}
if (LLFile::isdir(camera_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA));
std::string file_name;
while (gDirUtilp->getNextFileInDir(camera_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, camera_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA), file_name);
copy_prefs_file(source, target);
}
}
}
}
// Get the path to restore for this item
std::string file = item->getColumn(2)->getValue().asString();
LL_INFOS("SettingsBackup") << "copying per account file " << file << LL_ENDL;
copy_prefs_file(
gDirUtilp->getExpandedFilename(LL_PATH_NONE, backup_per_account_folder, file),
gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file));
}
}
@ -5232,29 +5189,74 @@ void FSPanelPreferenceBackup:: doRestoreSettings(const LLSD& notification, const
// Only restore if this item is checked on
if (checkbox->getCheckBox()->getValue().asBoolean())
{
// Get the path to restore for this item
std::string folder = item->getColumn(2)->getValue().asString();
std::string folder_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, folder) + gDirUtilp->getDirDelimiter();
std::string backup_folder_name = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, folder) + gDirUtilp->getDirDelimiter();
LL_INFOS("SettingsBackup") << "restoring global folder: " << folder_name << LL_ENDL;
// create folder if it's not there already
LLFile::mkdir(folder_name.c_str());
std::string file_name;
while (gDirUtilp->getNextFileInDir(backup_folder_name, "*", file_name))
if (item->getValue().asString() != "presets")
{
LL_INFOS("SettingsBackup") << "found entry: " << backup_folder_name + file_name << LL_ENDL;
// only restore files, not subfolders
if (LLFile::isfile(backup_folder_name + file_name.c_str()))
// Get the path to restore for this item
std::string folder = item->getColumn(2)->getValue().asString();
std::string folder_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, folder) + gDirUtilp->getDirDelimiter();
std::string backup_folder_name = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, folder) + gDirUtilp->getDirDelimiter();
LL_INFOS("SettingsBackup") << "restoring global folder: " << folder_name << LL_ENDL;
// create folder if it's not there already
LLFile::mkdir(folder_name.c_str());
std::string file_name;
while (gDirUtilp->getNextFileInDir(backup_folder_name, "*", file_name))
{
copy_prefs_file(backup_folder_name + file_name, folder_name + file_name);
LL_INFOS("SettingsBackup") << "found entry: " << backup_folder_name + file_name << LL_ENDL;
// only restore files, not subfolders
if (LLFile::isfile(backup_folder_name + file_name.c_str()))
{
copy_prefs_file(backup_folder_name + file_name, folder_name + file_name);
}
else
{
LL_INFOS("SettingsBackup") << "skipping subfolder " << backup_folder_name + file_name << LL_ENDL;
}
}
else
}
else
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR));
std::string presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR) + gDirUtilp->getDirDelimiter();
std::string graphics_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR, PRESETS_GRAPHIC) + gDirUtilp->getDirDelimiter();
std::string camera_presets_folder = gDirUtilp->getExpandedFilename(LL_PATH_NONE, dir_name, PRESETS_DIR, PRESETS_CAMERA) + gDirUtilp->getDirDelimiter();
if (LLFile::isdir(graphics_presets_folder))
{
LL_INFOS("SettingsBackup") << "skipping subfolder " << backup_folder_name + file_name << LL_ENDL;
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC));
std::string file_name;
while (gDirUtilp->getNextFileInDir(graphics_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, graphics_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC), file_name);
copy_prefs_file(source, target);
}
}
}
if (LLFile::isdir(camera_presets_folder))
{
LLFile::mkdir(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_CAMERA));
std::string file_name;
while (gDirUtilp->getNextFileInDir(camera_presets_folder, "*", file_name))
{
std::string source = gDirUtilp->getExpandedFilename(LL_PATH_NONE, camera_presets_folder, file_name);
if (LLFile::isfile(source.c_str()))
{
std::string target = gDirUtilp->add(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_CAMERA), file_name);
copy_prefs_file(source, target);
}
}
}
}
}

View File

@ -62,7 +62,10 @@ void LLPresetsManager::triggerChangeSignal()
void LLPresetsManager::createMissingDefault()
{
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
// </FS:Ansariel>
if (!gDirUtilp->fileExists(default_file))
{
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
@ -78,7 +81,10 @@ void LLPresetsManager::createMissingDefault()
std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
{
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR);
// </FS:Ansariel>
std::string full_path;
if (!gDirUtilp->fileExists(presets_path))
@ -86,7 +92,10 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
LLFile::mkdir(presets_path);
}
full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory);
// </FS:Ansariel>
if (!gDirUtilp->fileExists(full_path))
{
LLFile::mkdir(full_path);

View File

@ -76,9 +76,6 @@
<row name="restore_per_account_row_groupmutes">
<column name="restore_per_account_files_label">Deakt. Gruppenchats</column>
</row>
<row name="restore_per_account_row_presets">
<column name="restore_per_account_files_label">Voreinstellungen</column>
</row>
<row name="restore_per_account_row_avatar_render_settings">
<column name="restore_per_account_files_label">Avatar Darstel.-Einst.</column>
</row>
@ -109,6 +106,9 @@
<row name="restore_folders_row_waters">
<column name="restore_global_folders_label">Windlight: Wasser</column>
</row>
<row name="restore_folders_row_presets">
<column name="restore_global_folders_label">Voreinstellungen</column>
</row>
</scroll_list>
</layout_panel>
</layout_stack>

View File

@ -238,11 +238,6 @@ Settings groups to be restored (backup will always save all):
<column name="restore_per_account_files_label">Disabled Group Chats</column>
<column name="value">muted_groups.xml</column>
</row>
<row name="restore_per_account_row_presets" value="presets">
<column type="checkbox" name="restore_per_account_files_check" value="true" />
<column name="restore_per_account_files_label">Presets</column>
<column name="value">presets</column>
</row>
<row name="restore_per_account_row_avatar_render_settings" value="avatar_render_settings">
<column type="checkbox" name="restore_per_account_files_check" value="true" />
<column name="restore_per_account_files_label">Avatar Render Settings</column>
@ -326,6 +321,11 @@ Settings groups to be restored (backup will always save all):
<column name="restore_global_folders_label">Windlight Waters</column>
<column name="value">windlight/water</column>
</row>
<row name="restore_folders_row_presets" value="presets">
<column type="checkbox" name="restore_global_folders_check" value="true" />
<column name="restore_global_folders_label">Presets</column>
<column name="value">presets</column>
</row>
</scroll_list>
</layout_panel>

View File

@ -88,9 +88,6 @@
<row name="restore_per_account_row_groupmutes">
<column name="restore_per_account_files_label">抑止したグループチャット</column>
</row>
<row name="restore_per_account_row_presets">
<column name="restore_per_account_files_label">事前設定</column>
</row>
<row name="restore_per_account_row_avatar_render_settings">
<column name="restore_per_account_files_label">アバター表示設定</column>
</row>
@ -125,6 +122,9 @@
<row name="restore_folders_row_waters">
<column name="restore_global_folders_label">WindLightの水</column>
</row>
<row name="restore_folders_row_presets">
<column name="restore_global_folders_label">事前設定</column>
</row>
</scroll_list>
</layout_panel>

View File

@ -73,9 +73,6 @@
<row name="restore_per_account_row_groupmutes">
<column name="restore_per_account_files_label">Wyłączone czaty grup</column>
</row>
<row name="restore_per_account_row_presets">
<column name="restore_per_account_files_label">Ustawienia predefiniowane</column>
</row>
<row name="restore_per_account_row_avatar_render_settings" value="avatar_render_settings">
<column name="restore_per_account_files_label">Renderowanie awatarów</column>
</row>
@ -106,6 +103,9 @@
<row name="restore_folders_row_waters">
<column name="restore_global_folders_label">Windlight: Woda</column>
</row>
<row name="restore_folders_row_presets">
<column name="restore_global_folders_label">Ustawienia predefiniowane</column>
</row>
</scroll_list>
</layout_panel>
</layout_stack>