[Cin] automatic save of
Andrew Randrianasulu
randrianasulu at gmail.com
Tue Jan 19 03:04:12 CET 2021
В сообщении от Monday 18 January 2021 13:43:36 Rafa Mar Multimedia en Gnu\Linux via Cin написал(а):
> Thank you very much Reuss András, with the multiple backup copies you have
> done an excellent job, perhaps you could limit these so that you do not end
> up with thousands of copies, with about 50 would be enough.
I tried to copy/paste cleanup function, TEST WITH CAUTION!!!!
======
void MWindow::clean_backups()
{
FileSystem fs;
int total_excess;
long oldest = 0;
int oldest_item = -1;
int result;
char string[BCTEXTLEN];
// Delete extra backups
fs.set_filter("backup_*.xml");
fs.complete_path(preferences->index_directory);
fs.update(preferences->index_directory);
total_excess = fs.dir_list.total - preferences->index_count;
printf("Total excess of backups: %i \n", total_excess);
//printf("MWindow::clean_backups 1 %d\n", fs.dir_list.total);
while(total_excess > 0)
{
// Get oldest
for(int i = 0; i < fs.dir_list.total; i++)
{
fs.join_names(string, preferences->index_directory, fs.dir_list[i]->name);
if(i == 0 || fs.get_date(string) <= oldest)
{
oldest = fs.get_date(string);
oldest_item = i;
}
}
if(oldest_item >= 0)
{
// Remove backup file
fs.join_names(string,
preferences->index_directory,
fs.dir_list[oldest_item]->name);
//printf("MWindow::clean_backups 1 %s\n", string);
if(remove(string))
perror("delete_backups");
delete fs.dir_list[oldest_item];
fs.dir_list.remove_number(oldest_item);
}
total_excess--;
}
}
=====
it clears backups down to same number as max indexes number set in Preferences,
looking for backup_*.xml (note "_" part!!!)
you need to add
diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h
index 8f9bfbb7..df9fd9db 100644
--- a/cinelerra-5.1/cinelerra/mwindow.h
+++ b/cinelerra-5.1/cinelerra/mwindow.h
@@ -853,6 +853,7 @@ public:
int get_cpus();
//
void clean_indexes();
+ void clean_backups();
// TimeBomb timebomb;
SigHandler *sighandler;
int restart_status;
also ...
Ha, remaint of Timebomb :}
Need to be deleted ....
*My* hack for making many_backups was in mwindow.C:
@@ -4276,10 +4369,27 @@ void MWindow::save_backup()
edl->optimize();
edl->set_path(session->filename);
- char backup_path[BCTEXTLEN], backup_path1[BCTEXTLEN];
+ char backup_path[BCTEXTLEN], backup_path1[BCTEXTLEN], backup_path2[BCTEXTLEN];
+
+ time_t t = time(NULL);
+ struct tm tm = *localtime(&t);
+ char BACKUP_FILE2[BCTEXTLEN] ;
+ sprintf(BACKUP_FILE2, _("backup_%02d%02d%02d-%02d%02d%02d.xml"),
+ tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
+ tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+ snprintf(backup_path2, sizeof(backup_path2), "%s/%s",
+ File::get_config_path(), BACKUP_FILE2);
+
snprintf(backup_path1, sizeof(backup_path1), "%s/%s",
File::get_config_path(), BACKUP_FILE1);
get_backup_path(backup_path, sizeof(backup_path));
+
+ char cmd[1024], *cp = cmd;
+ cp += sprintf(cp, "cp %s %s &", backup_path, backup_path2);
+ system(cmd);
+
+
rename(backup_path, backup_path1);
edl->save_xml(&file, backup_path);
file.terminate_string();
For Reuss' solution you most likely need to tweak
fs.set_filter("backup_*.xml");
line
....
More information about the Cin
mailing list