summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt13
-rw-r--r--korganizer/mainwindow.cpp30
-rw-r--r--libkdepim/kcmconfigs/kdepimconfigwidget.cpp28
-rw-r--r--libkdepim/kpimglobalprefs.cpp6
-rw-r--r--libkdepim/kpimprefs.cpp3
-rw-r--r--libkdepim/kpimprefs.h1
-rw-r--r--microkde/kapplication.cpp120
-rw-r--r--microkde/kapplication.h1
8 files changed, 196 insertions, 6 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index fa18304..9e9a1a1 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1353,6 +1353,19 @@
{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
{ "times","Zeiten" },
{ "The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?","Das Todo\n%1\nhat Untertodos!\nMöchten Sie die Kategorien\nauch für alle Untertodos setzen?" },
+{ "Backup enabled","Backup angeschaltet" },
+{ "Use standard backup dir","Standard Backupverzeichnis" },
+{ "Number of Backups:","Anzahl der Backups" },
+{ "Make backup every ","Mache ein Backup alle " },
+{ " days"," Tage" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
+{ "","" },
{ "","" },
{ "","" },
{ "","" },
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 68e5e5a..9ad0694 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -61,6 +61,7 @@
#include "klocale.h"
#include "kconfig.h"
#include "externalapphandler.h"
+#include <kglobalsettings.h>
using namespace KCal;
#ifndef _WIN32_
@@ -1801,6 +1802,35 @@ void MainWindow::save()
return;
mSyncManager->setBlockSave(true);
if ( mView->checkFileVersion( defaultFileName()) ) {
+ if ( KPimGlobalPrefs::instance()->mBackupEnabled ){
+ QDate reference ( 2000,1,1);
+ int daysTo = reference.daysTo ( QDate::currentDate() );
+ if ( daysTo - KPimGlobalPrefs::instance()->mBackupDayCount >= KOPrefs::instance()->mLastBackupDate ) {
+ setCaption(i18n("KO/Pi:Creating backup ... please wait ..." ));
+ qDebug("KO: Last backup was %d days ago ", daysTo - KOPrefs::instance()->mLastBackupDate);
+ // we need the file path, the backup dir and the number of bups as param
+ QString bupDir = KPimGlobalPrefs::instance()->mBackupDatadir;
+ if ( KPimGlobalPrefs::instance()->mBackupUseDefaultDir)
+ bupDir = KGlobalSettings::backupDataDir();
+ int retval = KApplication::createBackup( defaultFileName(), bupDir, KPimGlobalPrefs::instance()->mBackupNumbers );//55;//call backup
+ if ( retval == 0 ) {
+ qDebug("KO: Backup cancelled. Will try again tomorrow ");
+ // retval == 0 : backup skipped for today, try again tomorrow
+ KOPrefs::instance()->mLastBackupDate = daysTo- KPimGlobalPrefs::instance()->mBackupDayCount+1;
+ } else if ( retval == 1 ){
+ qDebug("KO: Backup created.");
+ // backup ok
+ KOPrefs::instance()->mLastBackupDate = daysTo;
+
+ } else if ( retval == 2 ){
+ qDebug("KO: Backup globally cancelled.");
+ // backup globally cancelled
+ KPimGlobalPrefs::instance()->mBackupEnabled = false;
+ }
+ // retval == 3: do nothing, try again later
+ }
+ ; // KPimGlobalPrefs::instance()->mLastBackupDate
+ }
QTime neededSaveTime = QDateTime::currentDateTime().time();
setCaption(i18n("KO/Pi:Saving Data to File ..." ));
qDebug("KO: Start saving data to file!");
diff --git a/libkdepim/kcmconfigs/kdepimconfigwidget.cpp b/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
index fbfbc45..93538ec 100644
--- a/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
+++ b/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
@@ -132,14 +132,15 @@ void KDEPIMConfigWidget::setupBackupTab()
QObject::connect ( sb->checkBox(), SIGNAL (toggled ( bool ) ), bupFrame, SLOT ( setEnabled( bool ) ) );
QVBoxLayout *bupLayout = new QVBoxLayout(bupFrame);
sb = addWidBool(i18n("Use standard backup dir"),
- &(KPimGlobalPrefs::instance()->mBackupEnabled),bupFrame);
+ &(KPimGlobalPrefs::instance()->mBackupUseDefaultDir),bupFrame);
bupLayout->addWidget((QWidget*)sb->checkBox());
mBackupUrl = new KURLRequester( bupFrame );
mBackupUrl->setURL( KGlobalSettings::backupDataDir() );
QObject::connect ( sb->checkBox(), SIGNAL (toggled ( bool ) ), mBackupUrl ,SLOT ( setDisabled( bool ) ) );
bupLayout->addWidget( mBackupUrl );
-
+ mBackupUrl->setEnabled( !KPimGlobalPrefs::instance()->mBackupUseDefaultDir );
+ bupFrame->setEnabled( KPimGlobalPrefs::instance()->mBackupEnabled );
QHBox *dummy = new QHBox(bupFrame);
new QLabel(i18n("Number of Backups:"),dummy);
mBackupNumbersSpin = new QSpinBox(1,21,1,dummy);
@@ -151,7 +152,15 @@ void KDEPIMConfigWidget::setupBackupTab()
mBackupDayCountSpin = new QSpinBox(1,28,1,dummy);
new QLabel(i18n(" days"),dummy);
new QLabel(i18n(" "),dummy);
- bupLayout->addWidget( dummy );
+ bupLayout->addWidget( dummy );
+ QString localKdeDir;
+ localKdeDir = readEnvPath("LOCALMICROKDEHOME");
+ if ( ! localKdeDir.isEmpty() ) {
+ sb->checkBox()->setEnabled( false );
+ sb->checkBox()->setChecked( true );
+ mBackupUrl->setEnabled( false );
+ KPimGlobalPrefs::instance()->mBackupUseDefaultDir = true;
+ }
}
void KDEPIMConfigWidget::setupStoreTab()
@@ -806,6 +815,13 @@ void KDEPIMConfigWidget::usrReadConfig()
bool blocked = signalsBlocked();
blockSignals( true );
+ if (KPimGlobalPrefs::instance()->mBackupUseDefaultDir )
+ mBackupUrl->setURL( KGlobalSettings::backupDataDir() );
+ else
+ mBackupUrl->setURL(prefs->mBackupDatadir);
+ mBackupNumbersSpin->setValue( prefs->mBackupNumbers );
+ mBackupDayCountSpin->setValue( prefs->mBackupDayCount);
+
QString dummy = prefs->mUserDateFormatLong;
mUserDateFormatLong->setText(dummy.replace( QRegExp("K"), QString(",") ));
dummy = prefs->mUserDateFormatShort;
@@ -816,9 +832,6 @@ void KDEPIMConfigWidget::usrReadConfig()
mEndDateSavingEdit->setDate(current.addDays(prefs->mDaylightsavingEnd-1));
setCombo(mTimeZoneCombo,i18n(prefs->mTimeZoneId));
-
-
-
mEmailClient = prefs->mEmailClient;
mEmailOtherChannel = prefs->mEmailOtherChannel;
mEmailOtherMessage = prefs->mEmailOtherMessage;
@@ -866,6 +879,9 @@ void KDEPIMConfigWidget::usrWriteConfig()
saveEditFieldSettings();
+ prefs->mBackupNumbers = mBackupNumbersSpin->value();
+ prefs->mBackupDayCount = mBackupDayCountSpin->value();
+ prefs->mBackupDatadir = mBackupUrl->url();
prefs->mUserDateFormatShort = mUserDateFormatShort->text().replace( QRegExp(","), QString("K") );
prefs->mUserDateFormatLong = mUserDateFormatLong->text().replace( QRegExp(","), QString("K") );
diff --git a/libkdepim/kpimglobalprefs.cpp b/libkdepim/kpimglobalprefs.cpp
index 90321b2..9c28425 100644
--- a/libkdepim/kpimglobalprefs.cpp
+++ b/libkdepim/kpimglobalprefs.cpp
@@ -200,6 +200,12 @@ void KPimGlobalPrefs::setGlobalConfig()
mDaylightsavingEnd );
KGlobal::locale()->setTimezone( mTimeZoneId, mTimeZoneAdd30min );
KGlobalSettings::setAlternateBackgroundColor(mAlternateColor);
+ QString localKdeDir;
+ localKdeDir = readEnvPath("LOCALMICROKDEHOME");
+ if ( ! localKdeDir.isEmpty() ) {
+ mBackupUseDefaultDir = true;
+ mBackupDatadir = KGlobalSettings::backupDataDir();
+ }
}
KPimGlobalPrefs::~KPimGlobalPrefs()
diff --git a/libkdepim/kpimprefs.cpp b/libkdepim/kpimprefs.cpp
index d68ccb6..714d1b7 100644
--- a/libkdepim/kpimprefs.cpp
+++ b/libkdepim/kpimprefs.cpp
@@ -50,6 +50,9 @@ KPimPrefs::KPimPrefs( const QString &name ) :
addItemBool("PassiveSyncWithDesktop",&mPassiveSyncWithDesktop,false );
addItemBool("PassiveSyncAutoStart",&mPassiveSyncAutoStart,false );
addItemInt("RingSyncAlgoPrefs",&mRingSyncAlgoPrefs,3);
+
+ setCurrentGroup("BackupDate");
+ addItemInt("LastBackupDate",&mLastBackupDate,0);
}
KPimPrefs::~KPimPrefs()
diff --git a/libkdepim/kpimprefs.h b/libkdepim/kpimprefs.h
index c177bd6..bf80042 100644
--- a/libkdepim/kpimprefs.h
+++ b/libkdepim/kpimprefs.h
@@ -61,6 +61,7 @@ class KPimPrefs : public KPrefs
bool mPassiveSyncAutoStart;
int mRingSyncAlgoPrefs;
QString mLastSyncedLocalFile;
+ int mLastBackupDate;
protected:
diff --git a/microkde/kapplication.cpp b/microkde/kapplication.cpp
index 80a83e0..539397b 100644
--- a/microkde/kapplication.cpp
+++ b/microkde/kapplication.cpp
@@ -124,3 +124,123 @@ void KApplication::showText(QString caption, QString text)
dia.exec();
}
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qdir.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include "kglobal.h"
+#include "klocale.h"
+
+class KBackupPrefs : public QDialog
+{
+ public:
+ KBackupPrefs( QString message , QWidget *parent=0, const char *name=0 ) :
+ QDialog( parent, name, true )
+ {
+ setCaption( i18n("Backup Failed!") );
+ QVBoxLayout* lay = new QVBoxLayout( this );
+ lay->setSpacing( 3 );
+ lay->setMargin( 3 );
+ QLabel * lab = new QLabel( message, this );
+ lay->addWidget( lab );
+ QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("Choose action"), this );
+ lay->addWidget( format );
+ format->setExclusive ( true ) ;
+ vcal = new QRadioButton(i18n("Try again now"), format );
+ tcal = new QRadioButton(i18n("Try again later"), format );
+ ical = new QRadioButton(i18n("Try again tomorrow"), format );
+ ocal = new QRadioButton(i18n("Disable backup"), format );
+ vcal->setChecked( true );
+ QPushButton * ok = new QPushButton( i18n("OK"), this );
+ lay->addWidget(ok );
+ connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
+ }
+
+ bool again() { return vcal->isChecked(); }
+ bool later() { return tcal->isChecked(); }
+ bool againTomorrow() { return ical->isChecked(); }
+private:
+ QRadioButton* vcal, *ical, *ocal, *tcal;
+};
+int KApplication::createBackup( QString fn, QString dp, int numBup )
+{
+ if ( numBup < 1) return 3;
+ int ret = 3;
+ qDebug("KApplication::createBackup %s --- %s --- %d", fn.latin1(), dp.latin1(), numBup);
+ QDir bupDir ( dp );
+ bool tryAgain = true;
+ while ( tryAgain ) {
+ if ( !bupDir.exists() ) {
+ KBackupPrefs noDir( i18n("<b>Backup directory does not exist: </b>") + dp.right(30));
+ if ( !noDir.exec() ) return 3;
+ if ( noDir.againTomorrow() ) {
+ return 0;
+ } else if ( noDir.later() ) {
+ return 3;
+ } else if ( !noDir.again() ) {
+ return 2;
+ }
+ } else {
+ tryAgain = false;
+ }
+ }
+ // we have a valid dir!
+ QStringList allFileList = bupDir.entryList(QDir::Files);
+ QFileInfo fileInfo ( fn );
+ QString fName = fileInfo.fileName ();
+ QStringList fileList;
+
+ int i;
+ for ( i = 0; i < allFileList.count(); ++i ) {
+ QString fi = allFileList[i];
+ if ( fi. find( fName ) > -1 )
+ fileList.append( fi );
+ }
+ qDebug("%d backup files exist ", fileList.count());
+ int count = fileList.count();
+ fileList.sort();
+ int remCount = 0;
+ while ( count >= numBup ) {
+ QString fnr = dp + "/"+fileList[remCount];
+ QFile::remove( fnr );
+ --count;
+ ++remCount;
+ }
+ QDateTime mRunStart = QDateTime::currentDateTime();
+ QString file = "%1%2%3-%4%5%6-";
+ file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 );
+ file.replace ( QRegExp (" "), "0" );
+ file += fName ;
+ file = dp + "/"+file;
+ QString command;
+ int res = 0;
+#ifdef _WIN32_
+ command = "xcopy "+ fn+ " "+file;
+ command = QDir::convertSeparators( command );
+#else
+ command = "cp "+ fn+ " "+file;
+#endif
+ qDebug("command %s ",command.latin1() );
+ tryAgain = true;
+ while ( tryAgain ) {
+ res = system ( command.latin1() );
+ qDebug("copy result %d ", res);
+ if ( res != 0 ) {
+ KBackupPrefs noDir( i18n("<b>The backup copy command failed!</b>"));
+ if ( !noDir.exec() ) return 3;
+ if ( noDir.againTomorrow() ) {
+ return 0;
+ } else if ( noDir.later() ) {
+ return 3;
+ } else if ( !noDir.again() ) {
+ return 2;
+ }
+ } else {
+ tryAgain = false;
+ }
+ }
+ return 1;
+}
diff --git a/microkde/kapplication.h b/microkde/kapplication.h
index f7eb1ef..de5a084 100644
--- a/microkde/kapplication.h
+++ b/microkde/kapplication.h
@@ -25,6 +25,7 @@ class KApplication
static void showFile(QString caption, QString file);
static void showText(QString caption, QString text);
static bool convert2latin1(QString file);
+ static int createBackup( QString fn, QString dp, int numBup );
};