Cleanup journal files on finish

This commit is contained in:
Dmitry Makarenko 2026-01-26 21:40:50 +03:00
parent 956b312035
commit edd0a14a52
3 changed files with 33 additions and 12 deletions

9
.gitignore vendored
View File

@ -36,3 +36,12 @@ build/**
out/**
.venv/**
CMakeUserPresets.json
# Audacity files
*.aup3
*.aup4
*.aup3-shm
*.aup3-wal
*.aup4-shm
*.aup4-wal

View File

@ -132,6 +132,12 @@ AudacityDatabase::AudacityDatabase(
}, true);
}
AudacityDatabase::~AudacityDatabase()
{
mDatabase.reset();
removeJournalFiles(mReadOnly ? mProjectPath : mWritablePath);
}
void AudacityDatabase::reopenReadonlyAsWritable()
{
if (!mReadOnly)
@ -466,22 +472,26 @@ void AudacityDatabase::extractTrack(
waveFile.writeFile();
}
void AudacityDatabase::removeJournalFiles(const std::filesystem::path& dbPath)
{
auto walFile = dbPath;
walFile.replace_extension("aup3-wal");
if (std::filesystem::exists(walFile))
std::filesystem::remove(walFile);
auto shmFile = dbPath;
shmFile.replace_extension("aup3-shm");
if (std::filesystem::exists(shmFile))
std::filesystem::remove(shmFile);
}
void AudacityDatabase::removeOldFiles()
{
if (std::filesystem::exists(mWritablePath))
{
std::filesystem::remove(mWritablePath);
auto walFile = mWritablePath;
walFile.replace_extension("aup3-wal");
if (std::filesystem::exists(walFile))
std::filesystem::remove(walFile);
auto shmFile = mWritablePath;
shmFile.replace_extension("aup3-shm");
if (std::filesystem::exists(shmFile))
std::filesystem::remove(shmFile);
removeJournalFiles(mWritablePath);
}
}

View File

@ -24,6 +24,7 @@ class AudacityDatabase final
public:
explicit AudacityDatabase(
const std::filesystem::path& path, RecoveryConfig recoveryConfig);
~AudacityDatabase();
void reopenReadonlyAsWritable();
void recoverDatabase();
@ -43,6 +44,7 @@ public:
void extractTrack(SampleFormat format, int32_t sampleRate, bool asStereo);
private:
static void removeJournalFiles(const std::filesystem::path& dbPath);
void removeOldFiles();
std::unique_ptr<SQLite::Database> mDatabase;