Backup scene file

This commit is contained in:
manongjohn 2019-02-06 21:25:45 -05:00
parent 763ff111fa
commit e1c9282ee2
6 changed files with 33 additions and 89 deletions

View file

@ -121,8 +121,8 @@ public:
return m_autosaveOtherFilesEnabled;
}
void enableLevelsBackup(bool enabled);
bool isLevelsBackupEnabled() const { return m_levelsBackupEnabled; }
void enableBackup(bool enabled);
bool isBackupEnabled() const { return m_backupEnabled; }
void enableSceneNumbering(bool enabled);
bool isSceneNumberingEnabled() const { return m_sceneNumberingEnabled; }
@ -635,9 +635,8 @@ private:
m_expandFunctionHeader, m_showColumnNumbers, m_animatedGuidedDrawing;
bool m_rasterOptimizedMemory, m_saveUnpaintedInCleanup,
m_askForOverrideRender, m_automaticSVNFolderRefreshEnabled, m_SVNEnabled,
m_levelsBackupEnabled, m_minimizeSaveboxAfterEditing,
m_sceneNumberingEnabled, m_animationSheetEnabled, m_inksOnly,
m_startupPopupEnabled;
m_backupEnabled, m_minimizeSaveboxAfterEditing, m_sceneNumberingEnabled,
m_animationSheetEnabled, m_inksOnly, m_startupPopupEnabled;
bool m_fillOnlySavebox, m_show0ThickLines, m_regionAntialias;
bool m_onionSkinDuringPlayback, m_ignoreImageDpi,
m_syncLevelRenumberWithXsheet;

View file

@ -927,8 +927,8 @@ void PreferencesPopup::onLineTestFpsCapture(int index) {
//-----------------------------------------------------------------------------
void PreferencesPopup::onLevelsBackupChanged(int index) {
m_pref->enableLevelsBackup(index == Qt::Checked);
void PreferencesPopup::onBackupChanged(int index) {
m_pref->enableBackup(index == Qt::Checked);
}
//-----------------------------------------------------------------------------
@ -1298,7 +1298,7 @@ PreferencesPopup::PreferencesPopup()
m_undoMemorySize =
new DVGui::IntLineEdit(this, m_pref->getUndoMemorySize(), 0, 2000);
m_levelsBackup = new CheckBox(tr("Backup Animation Levels when Saving"));
m_backup = new CheckBox(tr("Backup Scene and Animation Levels when Saving"));
m_chunkSizeFld =
new DVGui::IntLineEdit(this, m_pref->getDefaultTaskChunkSize(), 1, 2000);
CheckBox *sceneNumberingCB = new CheckBox(tr("Show Info in Rendered Frames"));
@ -1631,7 +1631,7 @@ PreferencesPopup::PreferencesPopup()
replaceAfterSaveLevelAsCB->setChecked(
m_pref->isReplaceAfterSaveLevelAsEnabled());
m_levelsBackup->setChecked(m_pref->isLevelsBackupEnabled());
m_backup->setChecked(m_pref->isBackupEnabled());
sceneNumberingCB->setChecked(m_pref->isSceneNumberingEnabled());
watchFileSystemCB->setChecked(m_pref->isWatchFileSystemEnabled());
@ -2017,8 +2017,7 @@ PreferencesPopup::PreferencesPopup()
generalFrameLay->addWidget(replaceAfterSaveLevelAsCB, 0,
Qt::AlignLeft | Qt::AlignVCenter);
generalFrameLay->addWidget(m_levelsBackup, 0,
Qt::AlignLeft | Qt::AlignVCenter);
generalFrameLay->addWidget(m_backup, 0, Qt::AlignLeft | Qt::AlignVCenter);
generalFrameLay->addWidget(sceneNumberingCB, 0,
Qt::AlignLeft | Qt::AlignVCenter);
generalFrameLay->addWidget(watchFileSystemCB, 0,
@ -2768,8 +2767,8 @@ PreferencesPopup::PreferencesPopup()
SLOT(onDragCellsBehaviourChanged(int)));
ret = ret && connect(m_undoMemorySize, SIGNAL(editingFinished()),
SLOT(onUndoMemorySizeChanged()));
ret = ret && connect(m_levelsBackup, SIGNAL(stateChanged(int)),
SLOT(onLevelsBackupChanged(int)));
ret = ret && connect(m_backup, SIGNAL(stateChanged(int)),
SLOT(onBackupChanged(int)));
ret = ret && connect(sceneNumberingCB, SIGNAL(stateChanged(int)),
SLOT(onSceneNumberingChanged(int)));
ret = ret && connect(watchFileSystemCB, SIGNAL(stateChanged(int)),

View file

@ -74,7 +74,7 @@ private:
QPushButton *m_addLevelFormat, *m_removeLevelFormat, *m_editLevelFormat;
DVGui::CheckBox *m_inksOnly, *m_enableVersionControl, *m_levelsBackup,
DVGui::CheckBox *m_inksOnly, *m_enableVersionControl, *m_backup,
*m_onionSkinVisibility, *m_pixelsOnlyCB, *m_projectRootDocuments,
*m_projectRootDesktop, *m_projectRootCustom, *m_projectRootStuff,
*m_onionSkinDuringPlayback, *m_autoSaveSceneCB, *m_autoSaveOtherFilesCB,
@ -147,7 +147,7 @@ private slots:
void onSVNEnabledChanged(int);
void onAutomaticSVNRefreshChanged(int);
void onDragCellsBehaviourChanged(int);
void onLevelsBackupChanged(int);
void onBackupChanged(int);
void onSceneNumberingChanged(int);
void onChunkSizeChanged();
void onDefLevelTypeChanged(int);

View file

@ -286,7 +286,7 @@ Preferences::Preferences()
, m_automaticSVNFolderRefreshEnabled(true)
, m_SVNEnabled(false)
, m_minimizeSaveboxAfterEditing(true)
, m_levelsBackupEnabled(false)
, m_backupEnabled(true)
, m_sceneNumberingEnabled(false)
, m_animationSheetEnabled(false)
, m_inksOnly(false)
@ -390,7 +390,7 @@ Preferences::Preferences()
getValue(*m_settings, "SVNEnabled", m_SVNEnabled);
getValue(*m_settings, "minimizeSaveboxAfterEditing",
m_minimizeSaveboxAfterEditing);
getValue(*m_settings, "levelsBackupEnabled", m_levelsBackupEnabled);
getValue(*m_settings, "backupEnabled", m_backupEnabled);
getValue(*m_settings, "sceneNumberingEnabled", m_sceneNumberingEnabled);
getValue(*m_settings, "animationSheetEnabled", m_animationSheetEnabled);
getValue(*m_settings, "autosaveEnabled", m_autosaveEnabled);
@ -1433,9 +1433,9 @@ void Preferences::setDownArrowLevelStripNewFrame(bool on) {
//-----------------------------------------------------------------
void Preferences::enableLevelsBackup(bool enabled) {
m_levelsBackupEnabled = enabled;
m_settings->setValue("levelsBackupEnabled", enabled ? "1" : "0");
void Preferences::enableBackup(bool enabled) {
m_backupEnabled = enabled;
m_settings->setValue("backupEnabled", enabled ? "1" : "0");
}
//-----------------------------------------------------------------

View file

@ -169,71 +169,16 @@ void deleteUntitledScene(const TFilePath &fp) {
}
//-----------------------------------------------------------------------------
/*-- TODO: オプション化して復活させるか、検討のこと --*/
/*
void saveBackup(const TFilePath &fp)
{
if(!TFileStatus(fp).doesExist()) return;
wstring sceneName = fp.getWideName();
TFilePath bckDir = fp.getParentDir() + "backups" + sceneName;
if(!TFileStatus(bckDir).doesExist())
{
try {TSystem::mkDir(bckDir);}
catch(...) {return;}
}
std::map<int, TFilePath> oldBackups;
TFilePathSet lst = TSystem::readDirectory(bckDir);
for(TFilePathSet::iterator it = lst.begin(); it != lst.end(); ++it)
{
TFilePath fp2 = *it;
if(fp2.getType() != "tnz" && fp2.getType() != "tab") continue;
wstring name = fp2.getWideName();
if(name.find_first_of(L"0123456789") == wstring::npos) continue;
int i = name.find(sceneName);
if(i != wstring::npos)
name = name.substr(sceneName.size()+1);
if(name == L"" || name.find_first_not_of(L"0123456789") != wstring::npos)
continue;
int index = toInt(name);
assert(0<index);
assert(oldBackups.count(index)==0);
oldBackups[index] = fp2;
static void saveBackup(TFilePath path) {
try {
TFilePath backup = path.withName(path.getName() + "_backup");
if (TSystem::doesExistFileOrLevel(backup))
TSystem::removeFileOrLevel_throw(backup);
TSystem::copyFileOrLevel_throw(backup, path);
} catch (...) {
}
int m = 3;
if((int)oldBackups.size()>m)
{
std::map<int, TFilePath>::iterator it = oldBackups.begin();
for(int i=0;i+m<(int)oldBackups.size();i++)
{
assert(it != oldBackups.end());
TFilePath toKill = it->second;
try {TSystem::deleteFile(toKill); } catch(...) {}
++it;
}
}
TFilePath bckFp;
if(oldBackups.empty())
{
if(fp.getType() == "tnz")
bckFp = bckDir + TFilePath(sceneName + L"_1.tnz");
else if(fp.getType() == "tab")
bckFp = bckDir + TFilePath(sceneName + L"_1.tab");
}
else
{
int id = oldBackups.rbegin()->first + 1;
if(fp.getType() == "tnz")
bckFp = bckDir + TFilePath(sceneName + L"_" + ::to_wstring(id) + L".tnz");
else if(fp.getType() == "tab")
bckFp = bckDir + TFilePath(sceneName + L"_" + ::to_wstring(id) + L".tab");
}
TSystem::renameFile(bckFp, fp);
}
*/
//-----------------------------------------------------------------------------
@ -635,7 +580,9 @@ void ToonzScene::save(const TFilePath &fp, TXsheet *subxsh) {
TFilePath scenePathTemp(scenePath.getWideString() +
QString(".tmp").toStdWString());
// if(TFileStatus(scenePath).doesExist()) saveBackup(scenePath);
if (Preferences::instance()->isBackupEnabled() &&
oldScenePath == newScenePath && TFileStatus(scenePath).doesExist())
saveBackup(scenePath);
if (TFileStatus(scenePathTemp).doesExist())
TSystem::removeFileOrLevel(scenePathTemp);

View file

@ -1397,8 +1397,8 @@ void TXshSimpleLevel::save(const TFilePath &fp, const TFilePath &oldFp,
"The level cannot be saved: failed to access the target folder.");
// backup
if (Preferences::instance()->isLevelsBackupEnabled() &&
dOldPath == dDstPath && TSystem::doesExistFileOrLevel(dDstPath))
if (Preferences::instance()->isBackupEnabled() && dOldPath == dDstPath &&
TSystem::doesExistFileOrLevel(dDstPath))
saveBackup(dDstPath);
if (isAreadOnlyLevel(dDstPath)) {
@ -1638,7 +1638,7 @@ void TXshSimpleLevel::saveSimpleLevel(const TFilePath &decodedFp,
lw = TLevelWriterP(); // TLevelWriterP's destructor saves the palette
} else if (isPaletteModified && overwritePalette) {
TFilePath palettePath = decodedFp.withNoFrame().withType("tpl");
if (Preferences::instance()->isLevelsBackupEnabled() &&
if (Preferences::instance()->isBackupEnabled() &&
TSystem::doesExistFileOrLevel(palettePath))
saveBackup(palettePath);
TOStream os(palettePath);
@ -2199,9 +2199,8 @@ TFilePath TXshSimpleLevel::getExistingHookFile(
}
assert(h >= 0);
return (h < 0) ? TFilePath()
: decodedLevelPath.getParentDir() +
TFilePath(hookFiles[h].toStdWString());
return (h < 0) ? TFilePath() : decodedLevelPath.getParentDir() +
TFilePath(hookFiles[h].toStdWString());
}
//-----------------------------------------------------------------------------