From 5b23cb6be20feebc6bf7e46f1ecf1187c4084dca Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 9 Aug 2016 14:35:57 +0200 Subject: [PATCH] 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. --- indra/newview/llfloaterpreference.cpp | 290 +++++++++--------- indra/newview/llpresetsmanager.cpp | 15 +- .../xui/de/panel_preferences_backup.xml | 6 +- .../xui/en/panel_preferences_backup.xml | 10 +- .../xui/ja/panel_preferences_backup.xml | 6 +- .../xui/pl/panel_preferences_backup.xml | 6 +- 6 files changed, 172 insertions(+), 161 deletions(-) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index b1307f8c73..e7c88ed684 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1193,15 +1193,17 @@ void LLFloaterPreference::onOpen(const LLSD& key) // Fix resetting graphics preset on cancel saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive")); - bool started = (LLStartUp::getStartupState() == STATE_STARTED); + // FIRE-19810: Make presets global since PresetGraphicActive setting is global as well + //bool started = (LLStartUp::getStartupState() == STATE_STARTED); - LLButton* load_btn = findChild("PrefLoadButton"); - LLButton* save_btn = findChild("PrefSaveButton"); - LLButton* delete_btn = findChild("PrefDeleteButton"); + //LLButton* load_btn = findChild("PrefLoadButton"); + //LLButton* save_btn = findChild("PrefSaveButton"); + //LLButton* delete_btn = findChild("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); + // // 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); + } + } } } } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index aed8ae5993..dec8629946 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -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"); + // 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"); + // 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); + // 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); + // 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); + // 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); + // if (!gDirUtilp->fileExists(full_path)) { LLFile::mkdir(full_path); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_backup.xml b/indra/newview/skins/default/xui/de/panel_preferences_backup.xml index 1aca074bd5..061d039316 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_backup.xml @@ -76,9 +76,6 @@ Deakt. Gruppenchats - - Voreinstellungen - Avatar Darstel.-Einst. @@ -109,6 +106,9 @@ Windlight: Wasser + + Voreinstellungen + diff --git a/indra/newview/skins/default/xui/en/panel_preferences_backup.xml b/indra/newview/skins/default/xui/en/panel_preferences_backup.xml index ef708f16d8..c8d6d0dcbf 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_backup.xml @@ -238,11 +238,6 @@ Settings groups to be restored (backup will always save all): Disabled Group Chats muted_groups.xml - - - Presets - presets - Avatar Render Settings @@ -326,6 +321,11 @@ Settings groups to be restored (backup will always save all): Windlight Waters windlight/water + + + Presets + presets + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml index 7f032247ef..642d9d346f 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_backup.xml @@ -88,9 +88,6 @@ 抑止したグループチャット - - 事前設定 - アバター表示設定 @@ -125,6 +122,9 @@ WindLightの水 + + 事前設定 + diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml index 2b7e810dc1..2c224aef17 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_backup.xml @@ -73,9 +73,6 @@ Wyłączone czaty grup - - Ustawienia predefiniowane - Renderowanie awatarów @@ -106,6 +103,9 @@ Windlight: Woda + + Ustawienia predefiniowane +