/*! \file autorecover.cpp
** \brief Template File
**
-** $Id: autorecover.cpp,v 1.1.1.1 2005/01/07 03:34:35 darco Exp $
+** $Id$
**
** \legal
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
-** This software and associated documentation
-** are CONFIDENTIAL and PROPRIETARY property of
-** the above-mentioned copyright holder.
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
**
-** You may not copy, print, publish, or in any
-** other way distribute this software without
-** a prior written agreement with
-** the copyright holder.
+** This package is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
** \endlegal
*/
/* ========================================================================= */
#include "autorecover.h"
+#ifdef HAVE_SYS_ERRNO_H
+#include <sys/errno.h>
+#endif
//#include <unistd.h>
#include "app.h"
#include <synfig/savecanvas.h>
#include <unistd.h>
#endif
+#include "general.h"
+
#endif
/* === U S I N G =========================================================== */
{
// Three Minutes
set_timeout(3*60*1000);
-
+
if(mkdir(get_shadow_directory().c_str(),ACCESSPERMS)<0)
{
if(errno!=EEXIST)
unsigned int hash2(0x83502529);
char* str_hash1(reinterpret_cast<char*>(&hash1));
char* str_hash2(reinterpret_cast<char*>(&hash2));
-
+
// First we need to hash up the directory
{
String pool(dirname(filename));
-
+
while(pool.size()>4)
{
str_hash1[0]^=pool[1];str_hash1[1]^=pool[2];str_hash1[2]^=pool[3];str_hash1[3]^=pool[0];
}
}
hash1^=hash2;
-
+
return Glib::build_filename(get_shadow_directory(),strprintf("%08X-%s",hash1,basename(filename).c_str()));
-
-// return dirname(filename) + ETL_DIRECTORY_SEPERATOR + ".shadow_" + basename(filename);
+
+// return dirname(filename) + ETL_DIRECTORY_SEPARATOR + ".shadow_" + basename(filename);
}
bool
{
synfig::error("Autobackup seems to have failed! (PID=%d)",pid);
}
- else
- synfig::info("PID=%d has been cleaned up",pid);
+// else
+// synfig::info("PID=%d has been cleaned up",pid);
#endif
return false;
}
#ifdef HAVE_FORK
pid=fork();
#endif
-
+
if(pid<=0)
{
#ifdef HAVE_SETPRIORITY
// cause the machine to slow down too much
setpriority(PRIO_PROCESS,0,15);
#endif
-
+
try
{
std::list<etl::handle<Instance> >::iterator iter;
-
+
std::string filename=App::get_config_file("autorecovery");
std::ofstream file(filename.c_str());
-
+
int savecount(0);
-
+
for(iter=App::instance_list.begin();iter!=App::instance_list.end();++iter)
{
// If this file hasn't even been changed
// backing it up.
if((*iter)->get_action_count()==0)
continue;
-
+
Canvas::Handle canvas((*iter)->get_canvas());
file<<canvas->get_file_name()<<endl;
save_canvas(get_shadow_file_name(canvas->get_file_name()),canvas);
savecount++;
}
-
- if(savecount)
- synfig::info("AutoRecover::auto_backup(): %d Files backed up.",savecount);
+
+// if(savecount)
+// synfig::info("AutoRecover::auto_backup(): %d Files backed up.",savecount);
}
catch(...)
{
synfig::error("AutoRecover::auto_backup(): UNKNOWN EXCEPTION THROWN.");
synfig::error("AutoRecover::auto_backup(): FILES NOT BACKED UP.");
}
-
+
#ifdef HAVE_FORK
if(pid==0)
{
),
60*1000
);
-#endif
-
+#endif
+
// Also go ahead and save the settings
App::save_settings();
-
+
return true;
}
if(!filename.empty())
return true;
}
-
+
return false;
}
bool
-AutoRecover::recover()
+AutoRecover::recover(int& number_recovered)
{
std::string filename=App::get_config_file("autorecovery");
std::ifstream file(filename.c_str());
+ number_recovered = 0;
if(!file)
return false;
bool success=true;
-
+
while(file)
{
std::string filename;
{
// Correct the file name
App::instance_list.back()->set_file_name(filename);
-
+
// This file isn't saved! mark it as such
App::instance_list.back()->inc_action_count();
+
+ number_recovered++;
}
else
success=false;