Skip to content

Commit

Permalink
Split out state dir to save history/log/autoback/autosave files
Browse files Browse the repository at this point in the history
  • Loading branch information
WhiredPlanck committed Jan 14, 2024
1 parent 1ebd953 commit 6fba9a6
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 13 deletions.
8 changes: 5 additions & 3 deletions libaegisub/common/path.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ static const char *tokens[] = {
"?dictionary",
"?local",
"?script",
"?state",
"?temp",
"?user",
"?video"
Expand All @@ -42,9 +43,10 @@ int find_token(const char *str, size_t len) {
case 'd' + 't': idx = 2; break;
case 'l' + 'a': idx = 3; break;
case 's' + 'i': idx = 4; break;
case 't' + 'p': idx = 5; break;
case 'u' + 'r': idx = 6; break;
case 'v' + 'e': idx = 7; break;
case 's' + 't': idx = 5; break;
case 't' + 'p': idx = 6; break;
case 'u' + 'r': idx = 7; break;
case 'v' + 'e': idx = 8; break;
default: return -1;
}

Expand Down
4 changes: 4 additions & 0 deletions libaegisub/unix/path.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,22 @@ void Path::FillPlatformSpecificPaths() {
{
agi::fs::path xdg_config_home = xdg_dir("XDG_CONFIG_HOME", (home/".config").string());
agi::fs::path xdg_cache_home = xdg_dir("XDG_CACHE_HOME", (home/".cache").string());
agi::fs::path xdg_state_home = xdg_dir("XDG_STATE_HOME", (home/".local/state").string());
SetToken("?user", xdg_config_home/"Aegisub");
SetToken("?local", xdg_cache_home/"Aegisub");
SetToken("?state", xdg_state_home/"Aegisub");
} else {
SetToken("?user", prev_dir);
SetToken("?local", prev_dir);
SetToken("?state", prev_dir);
}
SetToken("?data", P_DATA);
SetToken("?dictionary", "/usr/share/hunspell");
#else
agi::fs::path app_support = agi::util::GetApplicationSupportDirectory();
SetToken("?user", app_support/"Aegisub");
SetToken("?local", app_support/"Aegisub");
SetToken("?state", app_support/"Aegisub");
SetToken("?data", agi::util::GetBundleSharedSupportDirectory());
SetToken("?dictionary", agi::util::GetBundleSharedSupportDirectory() + "/dictionaries");
#endif
Expand Down
1 change: 1 addition & 0 deletions libaegisub/windows/path_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ void Path::FillPlatformSpecificPaths() {

SetToken("?user", WinGetFolderPath(CSIDL_APPDATA)/"Aegisub");
SetToken("?local", WinGetFolderPath(CSIDL_LOCAL_APPDATA)/"Aegisub");
SetToken("?state", WinGetFolderPath(CSIDL_APPDATA)/"Aegisub");

std::wstring filename(MAX_PATH + 1, L'\0');
while (static_cast<DWORD>(filename.size()) == GetModuleFileNameW(nullptr, &filename[0], filename.size()))
Expand Down
2 changes: 1 addition & 1 deletion src/dialog_autosave.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ DialogAutosave::DialogAutosave(wxWindow *parent)
std::map<wxString, AutosaveFile> files_map;
Populate(files_map, OPT_GET("Path/Auto/Save")->GetString(), ".AUTOSAVE.ass", "%s");
Populate(files_map, OPT_GET("Path/Auto/Backup")->GetString(), ".ORIGINAL.ass", _("%s [ORIGINAL BACKUP]"));
Populate(files_map, "?user/recovered", ".ass", _("%s [RECOVERED]"));
Populate(files_map, "?state/recovered", ".ass", _("%s [RECOVERED]"));

for (auto& file : files_map | boost::adaptors::map_values)
files.emplace_back(std::move(file));
Expand Down
2 changes: 1 addition & 1 deletion src/dialog_shift_times.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ static wxString get_history_string(json::Object &obj) {
DialogShiftTimes::DialogShiftTimes(agi::Context *context)
: wxDialog(context->parent, -1, _("Shift Times"))
, context(context)
, history_filename(config::path->Decode("?user/shift_history.json"))
, history_filename(config::path->Decode("?state/shift_history.json"))
, timecodes_loaded_slot(context->project->AddTimecodesListener(&DialogShiftTimes::OnTimecodesLoaded, this))
, selected_set_changed_slot(context->selectionController->AddSelectionListener(&DialogShiftTimes::OnSelectedSetChanged, this))
{
Expand Down
4 changes: 2 additions & 2 deletions src/libresrc/default_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,8 @@

"Path" : {
"Auto" : {
"Backup" : "?user/autoback",
"Save" : "?user/autosave"
"Backup" : "?state/autoback",
"Save" : "?state/autosave"
},
"Automation" : {
"Autoload" : "?user/automation/autoload/|?data/automation/autoload/",
Expand Down
4 changes: 2 additions & 2 deletions src/libresrc/osx/default_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,8 @@

"Path" : {
"Auto" : {
"Backup" : "?user/autoback",
"Save" : "?user/autosave"
"Backup" : "?state/autoback",
"Save" : "?state/autosave"
},
"Automation" : {
"Autoload" : "?user/automation/autoload/|?data/automation/autoload/",
Expand Down
9 changes: 5 additions & 4 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ bool AegisubApp::OnInit() {
});

config::path = new agi::Path;
crash_writer::Initialize(config::path->Decode("?user"));
crash_writer::Initialize(config::path->Decode("?state"));

agi::log::log = new agi::log::LogSink;
#ifdef _DEBUG
Expand All @@ -186,15 +186,16 @@ bool AegisubApp::OnInit() {
// Local config, make ?user mean ?data so all user settings are placed in install dir
config::path->SetToken("?user", config::path->Decode("?data"));
config::path->SetToken("?local", config::path->Decode("?data"));
crash_writer::Initialize(config::path->Decode("?user"));
config::path->SetToken("?state", config::path->Decode("?data"));
crash_writer::Initialize(config::path->Decode("?state"));
} catch (agi::fs::FileSystemError const&) {
// File doesn't exist or we can't read it
// Might be worth displaying an error in the second case
}
#endif

StartupLog("Create log writer");
auto path_log = config::path->Decode("?user/log/");
auto path_log = config::path->Decode("?state/log/");
agi::fs::CreateDirectory(path_log);
agi::log::log->Subscribe(agi::make_unique<agi::log::JsonEmitter>(path_log));
CleanCache(path_log, "*.json", 10, 100);
Expand Down Expand Up @@ -405,7 +406,7 @@ void AegisubApp::UnhandledException(bool stackWalk) {
auto c = frame->context.get();
if (!c || !c->ass || !c->subsController) continue;

path = config::path->Decode("?user/recovered");
path = config::path->Decode("?state/recovered");
agi::fs::CreateDirectory(path);

auto filename = c->subsController->Filename().stem();
Expand Down

0 comments on commit 6fba9a6

Please sign in to comment.