summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/backup/backuprestore.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/noncore/settings/backup/backuprestore.cpp b/noncore/settings/backup/backuprestore.cpp
index 533d3a5..1ebe912 100644
--- a/noncore/settings/backup/backuprestore.cpp
+++ b/noncore/settings/backup/backuprestore.cpp
@@ -1,311 +1,314 @@
1 1
2#include "backuprestore.h" 2#include "backuprestore.h"
3//#include "output.h" 3//#include "output.h"
4 4
5#include <qapplication.h> 5#include <qapplication.h>
6#include <qmultilineedit.h> 6#include <qmultilineedit.h>
7 7
8#include <qdir.h> 8#include <qdir.h>
9#include <qfile.h> 9#include <qfile.h>
10#include <qfileinfo.h> 10#include <qfileinfo.h>
11#include <qlistview.h> 11#include <qlistview.h>
12#include <qpushbutton.h> 12#include <qpushbutton.h>
13#include <qheader.h> 13#include <qheader.h>
14#include <qpe/resource.h> 14#include <qpe/resource.h>
15#include <qpe/config.h> 15#include <qpe/config.h>
16#include <qmessagebox.h> 16#include <qmessagebox.h>
17#include <qcombobox.h> 17#include <qcombobox.h>
18#include <qlist.h> 18#include <qlist.h>
19#include <stdlib.h> 19#include <stdlib.h>
20#include <qregexp.h> 20#include <qregexp.h>
21 21
22#include <errno.h> 22#include <errno.h>
23#include <stdlib.h> 23#include <stdlib.h>
24#include <unistd.h> 24#include <unistd.h>
25#include <sys/stat.h> 25#include <sys/stat.h>
26#include <dirent.h> 26#include <dirent.h>
27 27
28#define HEADER_NAME 0 28#define HEADER_NAME 0
29#define HEADER_BACKUP 1 29#define HEADER_BACKUP 1
30#define BACKUP_LOCATION 2 30#define BACKUP_LOCATION 2
31 31
32#define EXTENSION ".bck" 32#define EXTENSION ".bck"
33 33
34BackupAndRestore::BackupAndRestore( QWidget* parent, const char* name) 34BackupAndRestore::BackupAndRestore( QWidget* parent, const char* name)
35 : BackupAndRestoreBase(parent, name){ 35 : BackupAndRestoreBase(parent, name){
36 this->showMaximized(); 36 this->showMaximized();
37 backupList->header()->hide(); 37 backupList->header()->hide();
38 restoreList->header()->hide(); 38 restoreList->header()->hide();
39 connect(backupButton, SIGNAL(clicked()), 39 connect(backupButton, SIGNAL(clicked()),
40 this, SLOT(backupPressed())); 40 this, SLOT(backupPressed()));
41 connect(restoreButton, SIGNAL(clicked()), 41 connect(restoreButton, SIGNAL(clicked()),
42 this, SLOT(restore())); 42 this, SLOT(restore()));
43 connect(backupList, SIGNAL(clicked( QListViewItem * )), 43 connect(backupList, SIGNAL(clicked( QListViewItem * )),
44 this, SLOT(selectItem(QListViewItem*))); 44 this, SLOT(selectItem(QListViewItem*)));
45 connect(restoreSource, SIGNAL(activated( int )), 45 connect(restoreSource, SIGNAL(activated( int )),
46 this, SLOT(sourceDirChanged(int))); 46 this, SLOT(sourceDirChanged(int)));
47 47
48 systemSettings = new QListViewItem(backupList, "System Settings", "", 48 systemSettings = new QListViewItem(backupList, "System Settings", "",
49 "/etc"); 49 "/etc");
50 selectItem(systemSettings); 50 selectItem(systemSettings);
51 applicationSettings = new QListViewItem(backupList, "Application Settings", "", 51 applicationSettings = new QListViewItem(backupList, "Application Settings", "",
52 QDir::homeDirPath() + "/Settings/"); 52 QDir::homeDirPath() + "/Settings/");
53 selectItem(applicationSettings); 53 selectItem(applicationSettings);
54 applicationSettings = new QListViewItem(backupList, "Application Data", "",
55 QDir::homeDirPath() + "/Applications/");
56 selectItem(applicationSettings);
54 documents= new QListViewItem(backupList, "Documents", "", 57 documents= new QListViewItem(backupList, "Documents", "",
55 QDir::homeDirPath() + "/Documents/"); 58 QDir::homeDirPath() + "/Documents/");
56 selectItem(documents); 59 selectItem(documents);
57 60
58 scanForApplicationSettings(); 61 scanForApplicationSettings();
59 62
60 Config config("BackupAndRestore"); 63 Config config("BackupAndRestore");
61 config.setGroup("General"); 64 config.setGroup("General");
62 int totalLocations = config.readNumEntry("totalLocations",0); 65 int totalLocations = config.readNumEntry("totalLocations",0);
63 66
64//todo make less static here and use Storage class to get infos 67//todo make less static here and use Storage class to get infos
65 if(totalLocations == 0){ 68 if(totalLocations == 0){
66 backupLocations.insert("Documents", "/root/Documents"); 69 backupLocations.insert("Documents", "/root/Documents");
67 backupLocations.insert("CF", "/mnt/cf"); 70 backupLocations.insert("CF", "/mnt/cf");
68 backupLocations.insert("SD", "/mnt/card"); 71 backupLocations.insert("SD", "/mnt/card");
69 } 72 }
70 else{ 73 else{
71 for(int i = 0; i < totalLocations; i++){ 74 for(int i = 0; i < totalLocations; i++){
72 backupLocations.insert(config.readEntry(QString("backupLocationName_%1").arg(i)), 75 backupLocations.insert(config.readEntry(QString("backupLocationName_%1").arg(i)),
73 config.readEntry(QString("backupLocation_%1").arg(i))); 76 config.readEntry(QString("backupLocation_%1").arg(i)));
74 } 77 }
75 } 78 }
76 QMap<QString, QString>::Iterator it; 79 QMap<QString, QString>::Iterator it;
77 for( it = backupLocations.begin(); it != backupLocations.end(); ++it ){ 80 for( it = backupLocations.begin(); it != backupLocations.end(); ++it ){
78 storeToLocation->insertItem(it.key()); 81 storeToLocation->insertItem(it.key());
79 restoreSource->insertItem(it.key()); 82 restoreSource->insertItem(it.key());
80 } 83 }
81 84
82 // Read the list of items to ignore. 85 // Read the list of items to ignore.
83 QList<QString> dontBackupList; 86 QList<QString> dontBackupList;
84 dontBackupList.setAutoDelete(true); 87 dontBackupList.setAutoDelete(true);
85 config.setGroup("DontBackup"); 88 config.setGroup("DontBackup");
86 int total = config.readNumEntry("Total", 0); 89 int total = config.readNumEntry("Total", 0);
87 for(int i = 0; i < total; i++){ 90 for(int i = 0; i < total; i++){
88 dontBackupList.append(new QString(config.readEntry(QString("%1").arg(i), ""))); 91 dontBackupList.append(new QString(config.readEntry(QString("%1").arg(i), "")));
89 } 92 }
90 93
91 QList<QListViewItem> list; 94 QList<QListViewItem> list;
92 getAllItems(backupList->firstChild(), list); 95 getAllItems(backupList->firstChild(), list);
93 96
94 for(uint i = 0; i < list.count(); i++){ 97 for(uint i = 0; i < list.count(); i++){
95 QString text = list.at(i)->text(HEADER_NAME); 98 QString text = list.at(i)->text(HEADER_NAME);
96 for(uint i2 = 0; i2 < dontBackupList.count(); i2++){ 99 for(uint i2 = 0; i2 < dontBackupList.count(); i2++){
97 if(*dontBackupList.at(i2) == text){ 100 if(*dontBackupList.at(i2) == text){
98 selectItem(list.at(i)); 101 selectItem(list.at(i));
99 break; 102 break;
100 } 103 }
101 } 104 }
102 } 105 }
103} 106}
104 107
105BackupAndRestore::~BackupAndRestore(){ 108BackupAndRestore::~BackupAndRestore(){
106 QList<QListViewItem> list; 109 QList<QListViewItem> list;
107 getAllItems(backupList->firstChild(), list); 110 getAllItems(backupList->firstChild(), list);
108 111
109 Config config("BackupAndRestore"); 112 Config config("BackupAndRestore");
110 config.setGroup("DontBackup"); 113 config.setGroup("DontBackup");
111 config.clearGroup(); 114 config.clearGroup();
112 115
113 int count = 0; 116 int count = 0;
114 for(uint i = 0; i < list.count(); i++){ 117 for(uint i = 0; i < list.count(); i++){
115 if(list.at(i)->text(HEADER_BACKUP) == ""){ 118 if(list.at(i)->text(HEADER_BACKUP) == ""){
116 config.writeEntry(QString("%1").arg(count), list.at(i)->text(HEADER_NAME)); 119 config.writeEntry(QString("%1").arg(count), list.at(i)->text(HEADER_NAME));
117 count++; 120 count++;
118 } 121 }
119 } 122 }
120 config.writeEntry("Total", count); 123 config.writeEntry("Total", count);
121} 124}
122 125
123QList<QListViewItem> BackupAndRestore::getAllItems(QListViewItem *item, QList<QListViewItem> &list){ 126QList<QListViewItem> BackupAndRestore::getAllItems(QListViewItem *item, QList<QListViewItem> &list){
124 while(item){ 127 while(item){
125 if(item->childCount() > 0) 128 if(item->childCount() > 0)
126 getAllItems(item->firstChild(), list); 129 getAllItems(item->firstChild(), list);
127 list.append(item); 130 list.append(item);
128 item = item->nextSibling(); 131 item = item->nextSibling();
129 } 132 }
130 return list; 133 return list;
131} 134}
132 135
133/** 136/**
134 * Selects and unselects the item by setting the HEADER_BACKUP to B or !. 137 * Selects and unselects the item by setting the HEADER_BACKUP to B or !.
135 * and changing the icon to match 138 * and changing the icon to match
136 * @param currentItem the item to swich the selection choice. 139 * @param currentItem the item to swich the selection choice.
137 */ 140 */
138void BackupAndRestore::selectItem(QListViewItem *currentItem){ 141void BackupAndRestore::selectItem(QListViewItem *currentItem){
139 if(!currentItem) 142 if(!currentItem)
140 return; 143 return;
141 144
142 if(currentItem->text(HEADER_BACKUP) == "B"){ 145 if(currentItem->text(HEADER_BACKUP) == "B"){
143 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/null")); 146 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/null"));
144 currentItem->setText(HEADER_BACKUP, ""); 147 currentItem->setText(HEADER_BACKUP, "");
145 } 148 }
146 else{ 149 else{
147 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/check")); 150 currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/check"));
148 currentItem->setText(HEADER_BACKUP, "B"); 151 currentItem->setText(HEADER_BACKUP, "B");
149 } 152 }
150} 153}
151 154
152void BackupAndRestore::scanForApplicationSettings(){ 155void BackupAndRestore::scanForApplicationSettings(){
153 QDir d(applicationSettings->text(BACKUP_LOCATION)); 156 QDir d(applicationSettings->text(BACKUP_LOCATION));
154 d.setFilter( QDir::Files | QDir::NoSymLinks ); 157 d.setFilter( QDir::Files | QDir::NoSymLinks );
155 const QFileInfoList *list = d.entryInfoList(); 158 const QFileInfoList *list = d.entryInfoList();
156 QFileInfoListIterator it( *list ); 159 QFileInfoListIterator it( *list );
157 QFileInfo *fi; 160 QFileInfo *fi;
158 while ( (fi=it.current()) ) { 161 while ( (fi=it.current()) ) {
159 //qDebug((d.path()+fi->fileName()).latin1()); 162 //qDebug((d.path()+fi->fileName()).latin1());
160 QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName()); 163 QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName());
161 selectItem(newItem); 164 selectItem(newItem);
162 ++it; 165 ++it;
163 } 166 }
164} 167}
165 168
166/** 169/**
167 * The "Backup" button has been pressed. Get a list of all of the files that 170 * The "Backup" button has been pressed. Get a list of all of the files that
168 * should be backed up. If there are no files, emit and error and exit. 171 * should be backed up. If there are no files, emit and error and exit.
169 * Determine the file name to store the backup in. Backup the file(s) using 172 * Determine the file name to store the backup in. Backup the file(s) using
170 * tar and gzip --best. Report failure or success 173 * tar and gzip --best. Report failure or success
171 */ 174 */
172void BackupAndRestore::backupPressed(){ 175void BackupAndRestore::backupPressed(){
173 QString backupFiles; 176 QString backupFiles;
174 if(getBackupFiles(backupFiles, NULL) == 0){ 177 if(getBackupFiles(backupFiles, NULL) == 0){
175 QMessageBox::critical(this, "Message", 178 QMessageBox::critical(this, "Message",
176 "No items selected.",QString("Ok") ); 179 "No items selected.",QString("Ok") );
177 return; 180 return;
178 } 181 }
179 182
180 setCaption(tr("Backup and Restore... working...")); 183 setCaption(tr("Backup and Restore... working..."));
181 QString outputFile = backupLocations[storeToLocation->currentText()]; 184 QString outputFile = backupLocations[storeToLocation->currentText()];
182 185
183 QDateTime time = QDateTime::currentDateTime(); 186 QDateTime time = QDateTime::currentDateTime();
184 QString dateString = time.date().toString().replace(QRegExp(" "), ""); 187 QString dateString = time.date().toString().replace(QRegExp(" "), "");
185 outputFile += "/" + dateString; 188 outputFile += "/" + dateString;
186 189
187 QString t = outputFile; 190 QString t = outputFile;
188 int c = 1; 191 int c = 1;
189 while(QFile::exists(outputFile + EXTENSION)){ 192 while(QFile::exists(outputFile + EXTENSION)){
190 outputFile = t + QString("%1").arg(c); 193 outputFile = t + QString("%1").arg(c);
191 c++; 194 c++;
192 } 195 }
193 196
194 qDebug(QString("system(\"tar -c %1 | gzip > %2\")").arg(backupFiles).arg(outputFile).latin1()); 197 qDebug(QString("system(\"tar -c %1 | gzip > %2\")").arg(backupFiles).arg(outputFile).latin1());
195 outputFile += EXTENSION; 198 outputFile += EXTENSION;
196 199
197 int r = system( QString("tar -c %1 | gzip > %2").arg(backupFiles).arg(outputFile).latin1() ); 200 int r = system( QString("tar -c %1 | gzip > %2").arg(backupFiles).arg(outputFile).latin1() );
198 201
199 202
200 203
201 if(r != 0){ 204 if(r != 0){
202 perror("Error: "); 205 perror("Error: ");
203 QString errorMsg="Error\n"+(QString)strerror(errno); 206 QString errorMsg="Error\n"+(QString)strerror(errno);
204 207
205 QMessageBox::critical(this, "Message", "Backup Failed.\n"+errorMsg, QString("Ok") ); 208 QMessageBox::critical(this, "Message", "Backup Failed.\n"+errorMsg, QString("Ok") );
206 return; 209 return;
207 } 210 }
208 else{ 211 else{
209 QMessageBox::critical(this, "Message", "Backup Successfull.",QString("Ok") ); 212 QMessageBox::critical(this, "Message", "Backup Successfull.",QString("Ok") );
210 213
211 } 214 }
212 setCaption(tr("Backup and Restore")); 215 setCaption(tr("Backup and Restore"));
213} 216}
214 217
215/*** 218/***
216 * Get a list of all of the files to backup. 219 * Get a list of all of the files to backup.
217 */ 220 */
218int BackupAndRestore::getBackupFiles(QString &backupFiles, QListViewItem *parent){ 221int BackupAndRestore::getBackupFiles(QString &backupFiles, QListViewItem *parent){
219 QListViewItem * currentItem; 222 QListViewItem * currentItem;
220 QString currentHome; 223 QString currentHome;
221 if(!parent) 224 if(!parent)
222 currentItem = backupList->firstChild(); 225 currentItem = backupList->firstChild();
223 else{ 226 else{
224 currentItem = parent->firstChild(); 227 currentItem = parent->firstChild();
225 currentHome = parent->text(BACKUP_LOCATION); 228 currentHome = parent->text(BACKUP_LOCATION);
226 } 229 }
227 230
228 uint count = 0; 231 uint count = 0;
229 while( currentItem != 0 ){ 232 while( currentItem != 0 ){
230 if(currentItem->text(HEADER_BACKUP) == "B" ){ 233 if(currentItem->text(HEADER_BACKUP) == "B" ){
231 if(currentItem->childCount() == 0 ){ 234 if(currentItem->childCount() == 0 ){
232 if(parent == NULL) 235 if(parent == NULL)
233 backupFiles += currentItem->text(BACKUP_LOCATION); 236 backupFiles += currentItem->text(BACKUP_LOCATION);
234 else 237 else
235 backupFiles += currentHome + currentItem->text(HEADER_NAME); 238 backupFiles += currentHome + currentItem->text(HEADER_NAME);
236 backupFiles += " "; 239 backupFiles += " ";
237 count++; 240 count++;
238 } 241 }
239 else{ 242 else{
240 count += getBackupFiles(backupFiles, currentItem); 243 count += getBackupFiles(backupFiles, currentItem);
241 } 244 }
242 } 245 }
243 currentItem = currentItem->nextSibling(); 246 currentItem = currentItem->nextSibling();
244 } 247 }
245 return count; 248 return count;
246} 249}
247 250
248void BackupAndRestore::sourceDirChanged(int selection){ 251void BackupAndRestore::sourceDirChanged(int selection){
249 restoreList->clear(); 252 restoreList->clear();
250 rescanFolder(backupLocations[restoreSource->text(selection)]); 253 rescanFolder(backupLocations[restoreSource->text(selection)]);
251} 254}
252 255
253/** 256/**
254 * Scans directory for any backup files. Will recursivly go down, 257 * Scans directory for any backup files. Will recursivly go down,
255 * but will not follow symlinks. 258 * but will not follow symlinks.
256 * @param directory - the directory to look in. 259 * @param directory - the directory to look in.
257 */ 260 */
258void BackupAndRestore::rescanFolder(QString directory){ 261void BackupAndRestore::rescanFolder(QString directory){
259 //qDebug(QString("rescanFolder: ") + directory.latin1()); 262 //qDebug(QString("rescanFolder: ") + directory.latin1());
260 QDir d(directory); 263 QDir d(directory);
261 if(!d.exists()) 264 if(!d.exists())
262 return; 265 return;
263 266
264 d.setFilter( QDir::Files | QDir::Hidden | QDir::Dirs); 267 d.setFilter( QDir::Files | QDir::Hidden | QDir::Dirs);
265 const QFileInfoList *list = d.entryInfoList(); 268 const QFileInfoList *list = d.entryInfoList();
266 QFileInfoListIterator it( *list ); 269 QFileInfoListIterator it( *list );
267 QFileInfo *file; 270 QFileInfo *file;
268 while ( (file=it.current()) ) { // for each file... 271 while ( (file=it.current()) ) { // for each file...
269 // If it is a dir and not .. or . then add it as a tab and go down. 272 // If it is a dir and not .. or . then add it as a tab and go down.
270 if(file->isDir()){ 273 if(file->isDir()){
271 if(file->fileName() != ".." && file->fileName() != ".") { 274 if(file->fileName() != ".." && file->fileName() != ".") {
272 rescanFolder(directory + "/" + file->fileName()); 275 rescanFolder(directory + "/" + file->fileName());
273 } 276 }
274 } 277 }
275 else{ 278 else{
276 // If it is a backup file add to list. 279 // If it is a backup file add to list.
277 if(file->fileName().contains(EXTENSION)) 280 if(file->fileName().contains(EXTENSION))
278 (void)new QListViewItem(restoreList, file->fileName()); 281 (void)new QListViewItem(restoreList, file->fileName());
279 } 282 }
280 ++it; 283 ++it;
281 } 284 }
282} 285}
283 286
284/** 287/**
285 * Restore a backup file. 288 * Restore a backup file.
286 * Report errors or success 289 * Report errors or success
287 */ 290 */
288void BackupAndRestore::restore(){ 291void BackupAndRestore::restore(){
289 QListViewItem *restoreItem = restoreList->currentItem(); 292 QListViewItem *restoreItem = restoreList->currentItem();
290 if(!restoreItem){ 293 if(!restoreItem){
291 QMessageBox::critical(this, "Message", 294 QMessageBox::critical(this, "Message",
292 "Please select something to restore.",QString("Ok") ); 295 "Please select something to restore.",QString("Ok") );
293 return; 296 return;
294 } 297 }
295 QString restoreFile = backupLocations[restoreSource->currentText()]; 298 QString restoreFile = backupLocations[restoreSource->currentText()];
296 299
297 restoreFile += "/" + restoreItem->text(0); 300 restoreFile += "/" + restoreItem->text(0);
298 301
299 int r = system(QString("tar -C / -zxf %1").arg(restoreFile).latin1()); 302 int r = system(QString("tar -C / -zxf %1").arg(restoreFile).latin1());
300 if(r != 0){ 303 if(r != 0){
301 QMessageBox::critical(this, "Message", 304 QMessageBox::critical(this, "Message",
302 "Restore Failed.",QString("Ok") ); 305 "Restore Failed.",QString("Ok") );
303 } 306 }
304 else{ 307 else{
305 QMessageBox::critical(this, "Message", 308 QMessageBox::critical(this, "Message",
306 "Restore Successfull.",QString("Ok") ); 309 "Restore Successfull.",QString("Ok") );
307 } 310 }
308} 311}
309 312
310// backuprestore.cpp 313// backuprestore.cpp
311 314