Changeset 217


Ignore:
Timestamp:
Jul 28, 2010, 7:10:17 PM (11 years ago)
Author:
Joachim Langenbach
Message:
  • closes #100
  • DBBackup
    • renamed from DBDump, because it should contain also Restoring functionality later on
    • supports the export of views
    • supports the export of Integer, BLOB and Strings (all other than int and blobs are also treated as strings)
    • provides a static function to escape all MySQL-Specialchars
  • SetupObjectDBDump
    • is inserted as first widget into SetupWizard?, if a DBInit widget is present
    • this way it should made sure, that the user backedup his database before we manipulate it
Location:
branches/release-0.3.0-rc1/src
Files:
2 added
8 edited
5 moved

Legend:

Unmodified
Added
Removed
  • branches/release-0.3.0-rc1/src/MediaDBLib/CMakeLists.txt

    r216 r217  
    2525        mediumownerwidget.ui
    2626        mediumgiftwidget.ui
    27         dbdump.ui
     27        dbbackup.ui
    2828)                       
    2929
     
    101101        mediumwidget.cpp
    102102        shoppingcartdelegate.cpp
    103         dbdump.cpp
    104         dbdumpdialog.cpp
     103        dbbackup.cpp
     104        dbbackupdialog.cpp
    105105        msqldatabase.cpp
     106        setupwizarddbdump.cpp
    106107)                     
    107108       
  • branches/release-0.3.0-rc1/src/MediaDBLib/dbbackup.cpp

    r216 r217  
    2020#include "config.h"
    2121
    22 #include "dbdump.h"
     22#include "dbbackup.h"
    2323#include "msqldatabase.h"
    2424
     
    3838#endif
    3939
    40 DBDump::DBDump(SetupWizardObject* newObject, QWidget* parent, Qt::WindowFlags flags)
     40DBBackup::DBBackup(SetupWizardObject* newObject, QWidget* parent, Qt::WindowFlags flags)
    4141        : SetupWizardWidget(newObject, parent, flags)
    4242{
     
    4747        connect(fileButton, SIGNAL(clicked()), this, SLOT(setDumpFile()));
    4848#if QT_VERSION_MINOR < 6
    49         fuleButton->setIcon(QIcon(":/icons/find.png"));
     49        fileButton->setIcon(QIcon(":/icons/find.png"));
    5050#else
    5151        fileButton->setIcon(QIcon::fromTheme("edit-find",
     
    5757        QString lastDir = settings.value("lastDumpDir", "").toString();
    5858        if(!lastDir.isEmpty()){
    59                 dumpFile.setFile(lastDir +"/"+ settings.value("appNameShort").toString() +"-"+ QDate::currentDate().toString("yyyyMMdd"));
     59                dumpFile.setFile(lastDir +"/"+ settings.value("appNameShort").toString() +"-"+ QDate::currentDate().toString("yyyyMMdd") +".sql");
    6060                fileEdit->setText(dumpFile.absoluteFilePath());
    6161        }
    6262}
    6363
    64 QString DBDump::mysqlEscape(QString input)
     64QString DBBackup::mysqlEscape(QString input)
    6565{
    6666        input.replace("\\", "\\\\");
     
    7474}
    7575
    76 bool DBDump::finish()
     76bool DBBackup::finish()
    7777{
    7878        logEdit->setPlainText("");
     
    147147        stream << "\n";
    148148
    149         // get list of tables and dump each table
    150         actualStep(tr("Dumping tables"));
     149        // get list of tables and views
    151150        QStringList dbTables = db.tables ( QSql::Tables );
    152         setRange(dbTables.size());
     151        QStringList dbViews = db.tables ( QSql::Views );
     152        setRange(dbTables.size() + dbViews.size());
    153153        bool result = true;
    154         foreach(QString table, dbTables){
    155                 QString resString = tr("OK");
    156                 if(!dumpTable(table, stream)){
    157                         result = false;
    158                         resString = tr("FAILED");
    159                 }
    160                 stream << "\n\n";
    161                 log(QString("  %1 - %2").arg(table).arg(resString));
    162                 finishedStep();
    163                 if(doAbort){
    164                         result = false;
    165                         break;
    166                 }
    167                 QApplication::processEvents();
     154       
     155        // dump tables
     156        if(!doAbort){
     157                actualStep(tr("Dumping tables"));
     158                foreach(QString table, dbTables){
     159                        QString resString = tr("OK");
     160                        if(!dumpTable(table, stream)){
     161                                result = false;
     162                                resString = tr("FAILED");
     163                        }
     164                        stream << "\n\n";
     165                        log(QString("  %1 - %2").arg(table).arg(resString));
     166                        finishedStep();
     167                        if(doAbort){
     168                                result = false;
     169                                break;
     170                        }
     171                        QApplication::processEvents();
     172                }
     173        }
     174       
     175        // dump views
     176        if(!doAbort){
     177                actualStep(tr("Sorting views"));
     178                dbViews = sortViews(dbViews);
     179               
     180                actualStep(tr("Dump views"));
     181                foreach(QString view, dbViews){
     182                        QString resString = tr("OK");
     183                        if(!dumpView(view, stream)){
     184                                result = false;
     185                                resString = tr("FAILED");
     186                        }
     187                        stream << "\n\n";
     188                        log(QString("  %1 - %2").arg(view).arg(resString));
     189                        finishedStep();
     190                        if(doAbort){
     191                                result = false;
     192                                break;
     193                        }
     194                        QApplication::processEvents();
     195                }
    168196        }
    169197       
     
    184212        else{
    185213                if(result){
    186                         actualStep(tr("Finished without errors!"));
     214                        actualStep(tr("Finished!"));
    187215                }
    188216                else{
     
    195223}
    196224
    197 bool DBDump::saveSettings()
     225bool DBBackup::saveSettings()
    198226{
    199227        return true;
    200228}
    201229
    202 void DBDump::abort()
     230void DBBackup::abort()
    203231{
    204232        doAbort = true;
    205233}
    206234
    207 void DBDump::setDumpFile()
     235void DBBackup::setDumpFile()
    208236{
    209237  QStringList filters;
     
    226254                lastDir = settings.value("lastDumpDir", "").toString();
    227255        }
    228         QString wTitle = tr("Search image");
     256        QString wTitle = tr("Select export file");
    229257#ifdef KDE
    230258        dumpFile = QFileInfo(KFileDialog::getSaveFileName(KUrl(lastDir), filters.join("\n"), this, wTitle));
     
    235263}
    236264
    237 bool DBDump::dumpTable(QString table, QTextStream &stream)
     265bool DBBackup::dumpTable(QString table, QTextStream &stream)
    238266{
    239267        tableLabel->setText(table +":");
     
    274302                while(query.next()){
    275303                        if(!first)
    276                                 stream << ",";
     304                                stream << ",\n  ";
    277305                        if(first)
    278306                                first = false;
     
    280308                        for(int i = 0; i < query.record().count(); i++){
    281309                                QVariant field = query.record().value(i);
    282                                 if(field.type() == QMetaType::QByteArray){
    283                                         stream << "'" + mysqlEscape(QString(field.toByteArray())) +"'";
     310                                if(field.isNull()){
     311                                        stream << "NULL";
    284312                                }
    285                                 else if(field.canConvert(QVariant::Int)){
    286                                         stream << field.toString();
     313                                else if(field.type() == QMetaType::QByteArray){
     314                                        // we store byte stream as hex value, therefore 0x is prepended
     315                                        // to indicate MySQL that it is an hex string
     316                                        stream << "0x" + field.toByteArray().toHex();
    287317                                }
    288318                                else{
    289                                         stream << "'"+ mysqlEscape(field.toString()) +"'";
     319                                        bool check;
     320                                        field.toInt(&check);
     321                                        if(check){
     322                                                stream << field.toString();
     323                                        }
     324                                        else{
     325                                                stream << "'"+ mysqlEscape(field.toString()) +"'";
     326                                        }
    290327                                }
    291328                                if(i < query.record().count() - 1)
     
    305342}
    306343
    307 void DBDump::setRange(int num)
     344bool DBBackup::dumpView(QString view, QTextStream& stream)
     345{
     346        QSqlQuery query;
     347       
     348        // dump create statement
     349        query.exec(QString("SHOW CREATE VIEW %1").arg(view));
     350        if(!query.first())
     351                return false;
     352       
     353        QString viewCreateStatement = query.record().value("Create View").toString();
     354        if(viewCreateStatement.isEmpty())
     355                return false;
     356       
     357        stream << "--\n";
     358        stream << QString("-- Create statement for view `%1`\n").arg(view);;
     359        stream << "--\n";
     360        stream << QString("DROP VIEW IF EXISTS `%1`;\n").arg(view);
     361        stream << viewCreateStatement +";";
     362        stream << "\n";
     363       
     364        return true;
     365}
     366
     367QStringList DBBackup::sortViews(QStringList views)
     368{
     369        QRegExp fromRegExp("from [\\(]+`([\\w\\d]+)`[\\s\\.]{1}");
     370        QRegExp joinRegExp("join `([\\w\\d]+)`[\\s\\.]{1}");
     371        QMultiMap<QString, QString> dependencies;
     372        QStringList result;
     373       
     374        foreach(QString view, views){
     375                if(doAbort)
     376                        return result;
     377                QSqlQuery query;
     378       
     379                // dump create statement
     380                query.exec(QString("SHOW CREATE VIEW %1").arg(view));
     381                if(!query.first())
     382                        return result;
     383       
     384                QString viewCreateStatement = query.record().value("Create View").toString();
     385                if(viewCreateStatement.isEmpty())
     386                        return result;
     387               
     388                QStringList deps;
     389                QStringList fromList = viewCreateStatement.split(QRegExp("from [\\(]+`"));
     390                // the first one is not interesting, because it's the part in front of the from
     391                fromList.removeFirst();
     392                foreach(QString from, fromList){
     393                        QString subStr = from.left(from.indexOf("`"));
     394                        if(!subStr.isEmpty())
     395                                deps << subStr;
     396                }
     397               
     398                QStringList joinList = viewCreateStatement.split(QRegExp("join `"));
     399                joinList.removeFirst();
     400                foreach(QString join, joinList){
     401                        QString subStr = join.left(join.indexOf("`"));
     402                        if(!subStr.isEmpty())
     403                                deps << subStr;
     404                }
     405               
     406                // insert all views to the list
     407                foreach(QString dep, deps){
     408                        if(views.contains(dep))
     409                                dependencies.insert(view, dep);
     410                }
     411               
     412                QApplication::processEvents();
     413        }
     414       
     415        // sorting views
     416        // first put all without any dependencies
     417        foreach(QString view, views){
     418                if(doAbort)
     419                        return result;
     420                if(dependencies.values(view).size() == 0){
     421                        result << view;
     422                        views.removeAll(view);
     423                }
     424                QApplication::processEvents();
     425        }
     426       
     427        // try to add all other in some rounds
     428        // we try 15 times all views, if this is not enough, we give up
     429        int maxTries = views.size() * 15;
     430        int i = 0;
     431       
     432        QStringList::const_iterator iter;
     433        iter = views.constBegin();
     434        while(views.size() > 0){
     435                if(doAbort)
     436                        return result;
     437                if(i >= maxTries){
     438                        log(tr("Could not calculate dependencies of all views, someviews are missing!"));
     439                        break;
     440                }
     441                if(iter == views.constEnd())
     442                        iter = views.constBegin();
     443               
     444                bool allFound = true;
     445                foreach(QString dep, dependencies.values((*iter))){
     446                        if(result.indexOf(dep) < 0)
     447                                allFound = false;
     448                }
     449                if(allFound){
     450                        result << (*iter);
     451                        views.removeAll((*iter));
     452                }
     453
     454                iter++;
     455                i++;
     456               
     457                QApplication::processEvents();
     458        }
     459       
     460        return result;
     461}
     462
     463void DBBackup::setRange(int num)
    308464{
    309465        progressBar->setRange(0, num);
    310466}
    311467
    312 void DBDump::finishedStep()
     468void DBBackup::finishedStep()
    313469{
    314470        progressBar->setValue ( progressBar->value() + 1 );
    315471}
    316472
    317 void DBDump::actualStep(QString msg)
     473void DBBackup::actualStep(QString msg)
    318474{
    319475        stepLabel->setText(msg);
     
    321477}
    322478
    323 void DBDump::log(QString msg)
     479void DBBackup::log(QString msg)
    324480{
    325481        logEdit->appendPlainText(msg);
    326482}
    327483
    328 #include "dbdump.moc"
     484#include "dbbackup.moc"
  • branches/release-0.3.0-rc1/src/MediaDBLib/dbbackup.h

    r216 r217  
    1818*/
    1919
    20 #ifndef DBDUMP_H
    21 #define DBDUMP_H
     20#ifndef DBBACKUP_H
     21#define DBBACKUP_H
    2222
    2323#include <setupwizardwidget.h>
    2424
    25 #include "ui_dbdump.h"
     25#include "ui_dbbackup.h"
    2626
    2727#include <QFileInfo>
    2828#include <QTextStream>
    2929
    30 class DBDump : public SetupWizardWidget, private Ui::DBDump
     30class DBBackup : public SetupWizardWidget, private Ui::DBBackup
    3131{
    3232        Q_OBJECT
    3333        public:
    34                 DBDump(SetupWizardObject *newObject, QWidget *parent = 0, Qt::WindowFlags flags = 0);
     34                DBBackup(SetupWizardObject *newObject, QWidget *parent = 0, Qt::WindowFlags flags = 0);
    3535                static QString mysqlEscape(QString input);
    3636               
     
    4848                        * @return true if all is done correctly and false if an error occurs
    4949                        */
    50                 bool dumpTable ( QString table, QTextStream& stream);
     50                bool dumpTable ( QString table, QTextStream &stream);
     51                /**
     52                        * we must insert them in correct order, because some need other views
     53                        */
     54                bool dumpView ( QString view, QTextStream &stream);
     55                QStringList sortViews(QStringList views);
    5156                void setRange ( int num );
    5257    void finishedStep();
     
    6368};
    6469
    65 #endif // DBDUMP_H
     70#endif // DBBACKUP_H
  • branches/release-0.3.0-rc1/src/MediaDBLib/dbbackup.ui

    r216 r217  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<ui version="4.0">
    3  <class>DBDump</class>
    4  <widget class="QWidget" name="DBDump">
     3 <class>DBBackup</class>
     4 <widget class="QWidget" name="DBBackup">
    55  <property name="geometry">
    66   <rect>
     
    1818  </property>
    1919  <property name="windowTitle">
    20    <string>Database Dump</string>
     20   <string>Database Backup</string>
    2121  </property>
    2222  <layout class="QVBoxLayout" name="verticalLayout">
     
    3636     </property>
    3737     <property name="text">
    38       <string>Click Next to dump database</string>
     38      <string>Click Next or Export to dump database</string>
    3939     </property>
    4040    </widget>
  • branches/release-0.3.0-rc1/src/MediaDBLib/dbbackupdialog.cpp

    r216 r217  
    1818*/
    1919
    20 #include "dbdumpdialog.h"
     20#include "dbbackupdialog.h"
    2121
    22 #include "dbdump.h"
     22#include "dbbackup.h"
    2323#include <mpushbutton.h>
    2424
     
    2626#include <QHBoxLayout>
    2727
    28 DBDumpDialog::DBDumpDialog(QWidget* parent, Qt::WindowFlags flags)
     28DBBackupDialog::DBBackupDialog(QWidget* parent, Qt::WindowFlags flags)
    2929        : MDialog(parent, flags)
    3030{
    3131        inProgress = false;
    3232       
    33         setObjectName("DBDumpDialog");
    34         setWindowTitle(tr("Dump Database"));
     33        setObjectName("DBBackupDialog");
     34        setWindowTitle(tr("Database Backups"));
    3535       
    3636        QVBoxLayout *ml = new QVBoxLayout(this);
    3737        setLayout(ml);
    3838       
    39         dbDump = new DBDump(0, this);
    40         ml->addWidget(dbDump);
    41         connectByPass(dbDump);
    42         connect(dbDump, SIGNAL(exportStarted()), this, SLOT(exportStarted()));
    43         connect(dbDump, SIGNAL(exportFinished(bool)), this, SLOT(exportFinished(bool)));
     39        dbBackup = new DBBackup(0, this);
     40        ml->addWidget(dbBackup);
     41        connectByPass(dbBackup);
     42        connect(dbBackup, SIGNAL(exportStarted()), this, SLOT(exportStarted()));
     43        connect(dbBackup, SIGNAL(exportFinished(bool)), this, SLOT(exportFinished(bool)));
    4444       
    4545        QHBoxLayout *bl = new QHBoxLayout();
     
    4848        MPushButton *button = new MPushButton(this);
    4949        bl->addWidget(button);
    50         setHelp("keyword:DBDump", button);
     50        setHelp("keyword:DBBackup", button);
    5151       
    5252        bl->addStretch();
     
    6262}
    6363
    64 void DBDumpDialog::finish()
     64void DBBackupDialog::finish()
    6565{
    66         dbDump->finish();
     66        dbBackup->finish();
    6767}
    6868
    69 void DBDumpDialog::abort()
     69void DBBackupDialog::abort()
    7070{
    7171        if(inProgress){
    72                 dbDump->abort();
     72                dbBackup->abort();
    7373        }
    7474        else{
     
    8282}
    8383
    84 void DBDumpDialog::exportStarted()
     84void DBBackupDialog::exportStarted()
    8585{
    8686        inProgress = true;
     
    8989}
    9090
    91 void DBDumpDialog::exportFinished(bool result)
     91void DBBackupDialog::exportFinished(bool result)
    9292{
    9393        inProgress = false;
     
    9797}
    9898
    99 #include "dbdumpdialog.moc"
     99#include "dbbackupdialog.moc"
  • branches/release-0.3.0-rc1/src/MediaDBLib/dbbackupdialog.h

    r216 r217  
    1818*/
    1919
    20 #ifndef DBDUMPDIALOG_H
    21 #define DBDUMPDIALOG_H
     20#ifndef DBBACKUPDIALOG_H
     21#define DBBACKUPDIALOG_H
    2222
    2323#include "mediadblibmacro.h"
     
    2525#include <mdialog.h>
    2626
    27 class DBDump;
     27class DBBackup;
    2828class MPushButton;
    2929
    30 class EXPORT_DLL DBDumpDialog : public MDialog
     30class EXPORT_DLL DBBackupDialog : public MDialog
    3131{
    3232        Q_OBJECT
    3333        public:
    34                 DBDumpDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
     34                DBBackupDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
    3535               
    3636        private slots:
     
    4141               
    4242        private:
    43                 DBDump *dbDump;
     43                DBBackup *dbBackup;
    4444                MPushButton *exportButton, *closeButton;
    4545                bool doneSuccessfully, inProgress;
    4646};
    4747
    48 #endif // DBDUMPDIALOG_H
     48#endif // DBBACKUPDIALOG_H
  • branches/release-0.3.0-rc1/src/MediaDBLib/lang/mediadblib_de.ts

    r215 r217  
    198198%1
    199199gefunden</translation>
     200    </message>
     201</context>
     202<context>
     203    <name>DBBackup</name>
     204    <message>
     205        <location filename="../dbbackup.ui" line="20"/>
     206        <source>Database Backup</source>
     207        <translation>Datenbank Sicherung</translation>
     208    </message>
     209    <message>
     210        <location filename="../dbbackup.ui" line="38"/>
     211        <source>Click Next or Export to dump database</source>
     212        <translation>Klicken Sie &quot;Weiter&quot; oder &quot;Export&quot; um eine Sicherung zu erstellen</translation>
     213    </message>
     214    <message>
     215        <location filename="../dbbackup.ui" line="47"/>
     216        <source>Output File:</source>
     217        <translation>Ausgabe Datei:</translation>
     218    </message>
     219    <message>
     220        <location filename="../dbbackup.ui" line="76"/>
     221        <source>Search</source>
     222        <translation>Suche</translation>
     223    </message>
     224    <message>
     225        <location filename="../dbbackup.ui" line="87"/>
     226        <source>Overall:</source>
     227        <translation>Gesamt:</translation>
     228    </message>
     229    <message>
     230        <location filename="../dbbackup.ui" line="147"/>
     231        <source>Logging:</source>
     232        <translation>Protokoll:</translation>
     233    </message>
     234    <message>
     235        <location filename="../dbbackup.cpp" line="81"/>
     236        <source>Opening file</source>
     237        <translation>Öffne Datei</translation>
     238    </message>
     239    <message>
     240        <location filename="../dbbackup.cpp" line="86"/>
     241        <location filename="../dbbackup.cpp" line="96"/>
     242        <location filename="../dbbackup.cpp" line="107"/>
     243        <source>Output file is not writable, please select a writeable file and try again!
     244File: %1</source>
     245        <translation>Ausgabe Datei ist nicht beschreibbar. Bitte wÀhlen Sie eine beschreibbare Datei aus und versuchen Sie es erneut!
     246Datei: %1</translation>
     247    </message>
     248    <message>
     249        <location filename="../dbbackup.cpp" line="123"/>
     250        <source>Could not connect to Database</source>
     251        <translation>Konnte nicht zur Datenbank verbinden</translation>
     252    </message>
     253    <message>
     254        <location filename="../dbbackup.cpp" line="131"/>
     255        <source>Configure file</source>
     256        <translation>Konfiguriere Datei</translation>
     257    </message>
     258    <message>
     259        <location filename="../dbbackup.cpp" line="136"/>
     260        <source>Writing header</source>
     261        <translation>Schreibe Kopf</translation>
     262    </message>
     263    <message>
     264        <location filename="../dbbackup.cpp" line="141"/>
     265        <source>MM/dd/yyyy hh:mm:ss</source>
     266        <translation>dd.MM.yyyy hh:mm:ss</translation>
     267    </message>
     268    <message>
     269        <location filename="../dbbackup.cpp" line="157"/>
     270        <source>Dumping tables</source>
     271        <translation>Sichere Tabellen</translation>
     272    </message>
     273    <message>
     274        <location filename="../dbbackup.cpp" line="159"/>
     275        <location filename="../dbbackup.cpp" line="182"/>
     276        <source>OK</source>
     277        <translation>Ok</translation>
     278    </message>
     279    <message>
     280        <location filename="../dbbackup.cpp" line="162"/>
     281        <location filename="../dbbackup.cpp" line="185"/>
     282        <source>FAILED</source>
     283        <translation>FEHLGESCHLAGEN</translation>
     284    </message>
     285    <message>
     286        <location filename="../dbbackup.cpp" line="177"/>
     287        <source>Sorting views</source>
     288        <translation>Sortiere Views</translation>
     289    </message>
     290    <message>
     291        <location filename="../dbbackup.cpp" line="180"/>
     292        <source>Dump views</source>
     293        <translation>Sichere Views</translation>
     294    </message>
     295    <message>
     296        <location filename="../dbbackup.cpp" line="199"/>
     297        <source>Writing footer</source>
     298        <translation>Schreibe Abspann</translation>
     299    </message>
     300    <message>
     301        <location filename="../dbbackup.cpp" line="210"/>
     302        <source>Aborted</source>
     303        <translation>Abgebrochen</translation>
     304    </message>
     305    <message>
     306        <location filename="../dbbackup.cpp" line="214"/>
     307        <source>Finished!</source>
     308        <translation>Fertig!</translation>
     309    </message>
     310    <message>
     311        <location filename="../dbbackup.cpp" line="217"/>
     312        <source>Finished with errors!</source>
     313        <translation>Mit Fehlern beendet!</translation>
     314    </message>
     315    <message>
     316        <location filename="../dbbackup.cpp" line="239"/>
     317        <location filename="../dbbackup.cpp" line="241"/>
     318        <source>SQL-Files</source>
     319        <translation>SQL-Dateien</translation>
     320    </message>
     321    <message>
     322        <location filename="../dbbackup.cpp" line="245"/>
     323        <location filename="../dbbackup.cpp" line="247"/>
     324        <source>All Files</source>
     325        <translation>Alle Dateien</translation>
     326    </message>
     327    <message>
     328        <location filename="../dbbackup.cpp" line="256"/>
     329        <source>Select export file</source>
     330        <translation>WÀhle Sie eine Datei zum Exportieren</translation>
     331    </message>
     332    <message>
     333        <source>Search image</source>
     334        <translation type="obsolete">Suche Bild</translation>
     335    </message>
     336    <message>
     337        <location filename="../dbbackup.cpp" line="438"/>
     338        <source>Could not calculate dependencies of all views, someviews are missing!</source>
     339        <translation>Konnte nicht alle AbhÀngigkeiten der Views auflösen, einige Fehlen!</translation>
     340    </message>
     341</context>
     342<context>
     343    <name>DBBackupDialog</name>
     344    <message>
     345        <location filename="../dbbackupdialog.cpp" line="34"/>
     346        <source>Database Backups</source>
     347        <translation>Datenbank Sicherung</translation>
     348    </message>
     349    <message>
     350        <location filename="../dbbackupdialog.cpp" line="54"/>
     351        <source>Export</source>
     352        <translation>Export</translation>
     353    </message>
     354    <message>
     355        <location filename="../dbbackupdialog.cpp" line="88"/>
     356        <source>Cancel</source>
     357        <translation>Abbrechen</translation>
     358    </message>
     359    <message>
     360        <location filename="../dbbackupdialog.cpp" line="95"/>
     361        <source>Close</source>
     362        <translation>Schließen</translation>
    200363    </message>
    201364</context>
     
    13881551    <message>
    13891552        <location filename="../mediumimagewidget.cpp" line="90"/>
    1390         <location filename="../mediumimagewidget.cpp" line="93"/>
     1553        <location filename="../mediumimagewidget.cpp" line="92"/>
    13911554        <source>Images</source>
    13921555        <translation>Bilder</translation>
    13931556    </message>
    13941557    <message>
    1395         <location filename="../mediumimagewidget.cpp" line="91"/>
    1396         <location filename="../mediumimagewidget.cpp" line="94"/>
     1558        <location filename="../mediumimagewidget.cpp" line="96"/>
     1559        <location filename="../mediumimagewidget.cpp" line="98"/>
    13971560        <source>All Files</source>
    13981561        <translation>Alle Dateien</translation>
    13991562    </message>
    14001563    <message>
    1401         <location filename="../mediumimagewidget.cpp" line="100"/>
     1564        <location filename="../mediumimagewidget.cpp" line="103"/>
    14021565        <source>Search image</source>
    14031566        <translation>Suche Bild</translation>
    14041567    </message>
    14051568    <message>
    1406         <location filename="../mediumimagewidget.cpp" line="112"/>
     1569        <location filename="../mediumimagewidget.cpp" line="115"/>
    14071570        <source>Could not load selected image</source>
    14081571        <translation>Konnte gewÀhltes Bild nicht laden</translation>
    14091572    </message>
    14101573    <message>
    1411         <location filename="../mediumimagewidget.cpp" line="134"/>
     1574        <location filename="../mediumimagewidget.cpp" line="137"/>
    14121575        <source>Search</source>
    14131576        <translation>Suche</translation>
     
    16961859        <source>Could not find selected format</source>
    16971860        <translation>Konnte gewÀhltes Format nicht finden</translation>
     1861    </message>
     1862</context>
     1863<context>
     1864    <name>SetupWizardDBDump</name>
     1865    <message>
     1866        <location filename="../setupwizarddbdump.cpp" line="28"/>
     1867        <source>Backup Database</source>
     1868        <translation>Sicherung der Datenbank</translation>
    16981869    </message>
    16991870</context>
  • branches/release-0.3.0-rc1/src/mediadb/helpcenter.cpp

    r214 r217  
    6262                QSettings settings;
    6363                QString cmd = QString("setSource %1%2")
    64                                         .arg(QString("qthelp://de.%1.%2")
    65                                                 .arg(settings.value("prodName").toString().toLower())
    66                                                 .arg(settings.value("appNameShort").toString().toLower())
    67                                         )
    68                                         .arg(page);
     64                                                                                .arg(QString("qthelp://de.%1.%2")
     65                                                                                                                .arg(settings.value("prodName").toString().toLower())
     66                                                                                                                .arg(settings.value("appNameShort").toString().toLower())
     67                                                                                )
     68                                                                                .arg(page);
    6969        }
    7070
     
    9393        }
    9494        if(!docFile.isReadable()){
    95             // try to open an existing one
    96             QDir dir ( QString ( DOCDIR ) );
     95                // try to open an existing one
     96                QDir dir ( QString ( DOCDIR ) );
    9797
    98             if ( dir.exists() ) {
    99               QStringList filter;
    100               filter.append ( "*.qhc" );
    101               QStringList docFiles = dir.entryList ( filter, QDir::Files | QDir::Readable );
    102               if(docFiles.size() < 1){
    103                   emit error(tr("Could not open documentation!\n"
    104                                                                           "Please install files to!")
    105                                                   .arg(QString(DOCDIR)));
    106                   return false;
    107               }
    108               else if(docFiles.size() == 1){
    109                 docFile.setFile(dir, docFiles[0]);
    110                 if(!docFile.isReadable()){
    111                     emit error(tr("Could not open documentation!\n"
    112                                   "File %1 is not readable!")
    113                                 .arg(docFile.absoluteFilePath()));
    114                     return false;
    115                 }
    116                }
    117               else{
    118                   emit error(tr("Could not open documentation!\n"
    119                                 "Please select a default language at the Settingspage!"));
     98                if ( dir.exists() ) {
     99                        QStringList filter;
     100                        filter.append ( "*.qhc" );
     101                        QStringList docFiles = dir.entryList ( filter, QDir::Files | QDir::Readable );
     102                        if(docFiles.size() < 1){
     103                                        emit error(tr("Could not open documentation!\n"
     104                                                                                                "Please install files to %1!")
     105                                                                                                .arg(QString(DOCDIR)));
     106                                        return false;
     107                        }
     108                        else if(docFiles.size() == 1){
     109                                docFile.setFile(dir, docFiles[0]);
     110                                if(!docFile.isReadable()){
     111                                                emit error(tr("Could not open documentation!\n"
     112                                                                                                        "File %1 is not readable!")
     113                                                                                                .arg(docFile.absoluteFilePath()));
     114                                                return false;
     115                                }
     116                                }
     117                        else{
     118                                        emit error(tr("Could not open documentation!\n"
     119                                                                                                "Please select a default language at the Settingspage!"));
    120120
    121                   return false;
    122               }
    123           }
     121                                        return false;
     122                        }
     123        }
    124124        }
    125125       
  • branches/release-0.3.0-rc1/src/mediadb/lang/mediadb_de.ts

    r211 r217  
    246246    <name>HelpCenter</name>
    247247    <message>
    248         <location filename="../helpcenter.cpp" line="95"/>
     248        <source>Could not open documentation!
     249Please install files to!</source>
     250        <translation type="obsolete">Konnte Dokument nicht öffnen!
     251Bitte installieren Sie die Hilfedateien!</translation>
     252    </message>
     253    <message>
     254        <location filename="../helpcenter.cpp" line="103"/>
     255        <source>Could not open documentation!
     256Please install files to %1!</source>
     257        <translation>Konnte Dokument nicht öffnen!
     258Bitte installieren Sie die Hilfedateien in %1!</translation>
     259    </message>
     260    <message>
     261        <location filename="../helpcenter.cpp" line="111"/>
    249262        <source>Could not open documentation!
    250263File %1 is not readable!</source>
     
    253266    </message>
    254267    <message>
    255         <location filename="../helpcenter.cpp" line="113"/>
     268        <location filename="../helpcenter.cpp" line="118"/>
     269        <source>Could not open documentation!
     270Please select a default language at the Settingspage!</source>
     271        <translation>Konnte die Dokumentation nicht öffnen!
     272Bitte wÀhlen Sie im Einstellungsdialog eine Sprache!</translation>
     273    </message>
     274    <message>
     275        <location filename="../helpcenter.cpp" line="138"/>
    256276        <source>Could not start Qt Assistant from %1.</source>
    257277        <translation>Konnte die Hilfeanwendung nicht starten (%1).</translation>
     
    322342    <message>
    323343        <location filename="../mediendb.ui" line="46"/>
    324         <location filename="../mediendb.ui" line="89"/>
     344        <location filename="../mediendb.ui" line="90"/>
    325345        <source>Help</source>
    326346        <translation>Hilfe</translation>
     
    337357    </message>
    338358    <message>
    339         <location filename="../mediendb.ui" line="74"/>
     359        <location filename="../mediendb.ui" line="75"/>
    340360        <source>Quit</source>
    341361        <translation>Beenden</translation>
     
    346366    </message>
    347367    <message>
    348         <location filename="../mediendb.ui" line="79"/>
     368        <location filename="../mediendb.ui" line="80"/>
    349369        <source>About MediaDB</source>
    350370        <translation>Über MediaDB</translation>
    351371    </message>
    352372    <message>
    353         <location filename="../mediendb.ui" line="84"/>
     373        <location filename="../mediendb.ui" line="85"/>
    354374        <source>About used Software</source>
    355375        <translation>Über benutzte Software</translation>
    356376    </message>
    357377    <message>
    358         <location filename="../mediendb.ui" line="92"/>
     378        <location filename="../mediendb.ui" line="93"/>
    359379        <source>F1</source>
    360380        <translation>F1</translation>
    361381    </message>
    362382    <message>
    363         <location filename="../mediendb.ui" line="97"/>
     383        <location filename="../mediendb.ui" line="98"/>
    364384        <source>About plugins</source>
    365385        <translation>Über Plugins</translation>
    366386    </message>
    367387    <message>
    368         <location filename="../mediendb.ui" line="102"/>
     388        <location filename="../mediendb.ui" line="103"/>
    369389        <source>Settings</source>
    370390        <translation>Einstellungen</translation>
    371391    </message>
    372392    <message>
    373         <location filename="../mediendb.ui" line="107"/>
     393        <location filename="../mediendb.ui" line="108"/>
    374394        <source>Manufacturers</source>
    375395        <translation>Hersteller</translation>
    376396    </message>
    377397    <message>
    378         <location filename="../mediendb.ui" line="112"/>
     398        <location filename="../mediendb.ui" line="113"/>
    379399        <source>Setup Wizard</source>
    380400        <translation>Einrichtungsassistent</translation>
    381401    </message>
    382402    <message>
    383         <location filename="../mediendb.ui" line="117"/>
     403        <location filename="../mediendb.ui" line="118"/>
    384404        <source>Genres</source>
    385405        <translation>Genres</translation>
    386406    </message>
    387407    <message>
    388         <location filename="../mediendb.ui" line="122"/>
     408        <location filename="../mediendb.ui" line="123"/>
    389409        <source>Material Persons</source>
    390410        <translation>Personen</translation>
    391411    </message>
    392412    <message>
    393         <location filename="../mediendb.ui" line="127"/>
     413        <location filename="../mediendb.ui" line="128"/>
    394414        <source>Roles</source>
    395415        <translation>Rollen</translation>
    396416    </message>
    397417    <message>
    398         <location filename="../mediendb.ui" line="132"/>
     418        <location filename="../mediendb.ui" line="133"/>
    399419        <source>User</source>
    400420        <translation>Nutzer</translation>
    401421    </message>
    402422    <message>
    403         <location filename="../mediendb.ui" line="137"/>
     423        <location filename="../mediendb.ui" line="138"/>
    404424        <source>Summary</source>
    405425        <translation>Zusammenfassung</translation>
    406426    </message>
    407427    <message>
    408         <location filename="../mediendb.ui" line="142"/>
     428        <location filename="../mediendb.ui" line="143"/>
    409429        <source>Projects</source>
    410430        <translation>Projekte</translation>
    411431    </message>
    412432    <message>
     433        <location filename="../mediendb.ui" line="148"/>
     434        <source>Database Backups</source>
     435        <translation>Datenbank Sicherung</translation>
     436    </message>
     437    <message>
    413438        <source>Manufacturer</source>
    414439        <translation type="obsolete">Hersteller</translation>
     
    418443    <name>MedienDB</name>
    419444    <message>
    420         <location filename="../mediendb.cpp" line="176"/>
     445        <location filename="../mediendb.cpp" line="178"/>
    421446        <source>Plugin dir does not exist!
    422447%1</source>
     
    425450    </message>
    426451    <message>
    427         <location filename="../mediendb.cpp" line="183"/>
     452        <location filename="../mediendb.cpp" line="185"/>
    428453        <source>No files found at
    429454%1</source>
     
    439464    </message>
    440465    <message>
    441         <location filename="../mediendb.cpp" line="213"/>
     466        <location filename="../mediendb.cpp" line="215"/>
    442467        <source>While loading %1 an error occured:
    443468%2 %1</source>
     
    449474    </message>
    450475    <message>
    451         <location filename="../mediendb.cpp" line="226"/>
     476        <location filename="../mediendb.cpp" line="228"/>
    452477        <source>Plugin is not a MediaDB-plugin:
    453478 %1</source>
     
    456481    </message>
    457482    <message>
    458         <location filename="../mediendb.cpp" line="237"/>
    459         <location filename="../mediendb.cpp" line="263"/>
     483        <location filename="../mediendb.cpp" line="239"/>
     484        <location filename="../mediendb.cpp" line="265"/>
    460485        <source>Cannot initiate module
    461486 %1</source>
     
    464489    </message>
    465490    <message>
    466         <location filename="../mediendb.cpp" line="375"/>
     491        <location filename="../mediendb.cpp" line="378"/>
    467492        <source>MediaDB - SetupWizard</source>
    468493        <translation>MediaDB - Einrichtungsassistent</translation>
    469494    </message>
    470495    <message>
    471         <location filename="../mediendb.cpp" line="375"/>
     496        <location filename="../mediendb.cpp" line="378"/>
    472497        <source>Everything setted up already</source>
    473498        <translation>Es ist bereits alles eingerichtet</translation>
    474499    </message>
    475500    <message>
    476         <location filename="../mediendb.cpp" line="657"/>
     501        <location filename="../mediendb.cpp" line="668"/>
    477502        <source>Version: </source>
    478503        <translation>Version:</translation>
    479504    </message>
    480505    <message>
    481         <location filename="../mediendb.cpp" line="671"/>
     506        <location filename="../mediendb.cpp" line="682"/>
    482507        <source>Usage: mediadb [-u name] [-p password] [-s db-host] [-d db-name] [-t driver]</source>
    483508        <translation>Benutzung: mediadb [-u Name] [-p Passwort] [-s DB-Host] [-d DB-Name] [-t Treiber]</translation>
    484509    </message>
    485510    <message>
    486         <location filename="../mediendb.cpp" line="673"/>
     511        <location filename="../mediendb.cpp" line="684"/>
    487512        <source>For details see manpage &quot;mediadb&quot; (Execute man mediadb)</source>
    488513        <translation>FÃŒr Details schauen Sie bitte in die Manpage von &quot;mediadb&quot; (Befehl: man mediadb)</translation>
    489514    </message>
    490515    <message>
    491         <location filename="../mediendb.cpp" line="675"/>
     516        <location filename="../mediendb.cpp" line="686"/>
    492517        <source>username to connect to the database</source>
    493518        <translation>Benutzername zum Verbinden zur Datenbank</translation>
    494519    </message>
    495520    <message>
    496         <location filename="../mediendb.cpp" line="676"/>
     521        <location filename="../mediendb.cpp" line="687"/>
    497522        <source>password to connect to the database</source>
    498523        <translation>Passwort zum Verbinden zur Datenbank</translation>
    499524    </message>
    500525    <message>
    501         <location filename="../mediendb.cpp" line="677"/>
     526        <location filename="../mediendb.cpp" line="688"/>
    502527        <source>host where the database is running on</source>
    503528        <translation>Host, auf dem die Datenbankanwendung lÀuft</translation>
    504529    </message>
    505530    <message>
    506         <location filename="../mediendb.cpp" line="678"/>
     531        <location filename="../mediendb.cpp" line="689"/>
    507532        <source>name of the database which should be used</source>
    508533        <translation>Name der Datenbank</translation>
    509534    </message>
    510535    <message>
    511         <location filename="../mediendb.cpp" line="679"/>
     536        <location filename="../mediendb.cpp" line="690"/>
    512537        <source>Driver to connect to database (Should be QMYSQL)</source>
    513538        <translation>Treiber, welcher zur Kommunikation genutzt wird (Solle QMYSQL sein)</translation>
    514539    </message>
    515540    <message>
    516         <location filename="../mediendb.cpp" line="680"/>
     541        <location filename="../mediendb.cpp" line="691"/>
    517542        <source>Show the version and exit</source>
    518543        <translation>Zeige nur die Version der Anwendung</translation>
    519544    </message>
    520545    <message>
    521         <location filename="../mediendb.cpp" line="681"/>
     546        <location filename="../mediendb.cpp" line="692"/>
    522547        <source>Show this help and exit</source>
    523548        <translation>Zeige nur diese Hilfe</translation>
     
    11721197    <name>SetupWizard</name>
    11731198    <message>
    1174         <location filename="../setupwizard.cpp" line="123"/>
     1199        <location filename="../setupwizard.cpp" line="125"/>
    11751200        <source>Finish</source>
    11761201        <translation>Abschließen</translation>
     
    12021227    <message>
    12031228        <location filename="../setupwizard.ui" line="216"/>
    1204         <location filename="../setupwizard.cpp" line="127"/>
     1229        <location filename="../setupwizard.cpp" line="129"/>
    12051230        <source>Next</source>
    12061231        <translation>Weiter</translation>
     
    12121237    </message>
    12131238    <message>
    1214         <location filename="../setupwizard.cpp" line="139"/>
    1215         <location filename="../setupwizard.cpp" line="144"/>
    1216         <location filename="../setupwizard.cpp" line="156"/>
     1239        <location filename="../setupwizard.cpp" line="141"/>
     1240        <location filename="../setupwizard.cpp" line="146"/>
     1241        <location filename="../setupwizard.cpp" line="158"/>
    12171242        <source>Could not save settings</source>
    12181243        <translation>Konnte Einstellungen nicht speichern</translation>
    12191244    </message>
    12201245    <message>
    1221         <location filename="../setupwizard.cpp" line="187"/>
     1246        <location filename="../setupwizard.cpp" line="189"/>
    12221247        <source>Configure and Update Database</source>
    12231248        <translation>Einrichten und Aktualisierung der Datenbank</translation>
    12241249    </message>
    12251250    <message>
    1226         <location filename="../setupwizard.cpp" line="239"/>
     1251        <location filename="../setupwizard.cpp" line="270"/>
    12271252        <source>Could not get needed Widget! %1</source>
    12281253        <translation>Konnte nötiges Fenster nicht erhalten! %1</translation>
  • branches/release-0.3.0-rc1/src/mediadb/mediendb.cpp

    r216 r217  
    4040#include "helpcenter.h"
    4141#include "dependencies.h"
    42 #include <dbdumpdialog.h>
     42#include <dbbackupdialog.h>
    4343
    4444#include <QSettings>
     
    9393  connect ( fileExitAction, SIGNAL ( triggered() ), this, SLOT ( fileExit() ) );
    9494        connect ( editSetupWizardAction, SIGNAL( triggered() ), this, SLOT ( editSetupWizard() ));
    95         connect ( editDBDumpAction, SIGNAL( triggered() ), this, SLOT ( editDBDump()));
     95        connect ( editDBBackupAction, SIGNAL( triggered() ), this, SLOT ( editDBBackup()));
    9696        connect ( editSettingsAction, SIGNAL ( triggered() ), this, SLOT ( editSettings() ) );
    9797        connect ( viewSummaryAction, SIGNAL ( triggered() ), this, SLOT ( viewSummary() ) );
     
    444444}
    445445
    446 void MedienDB::editDBDump()
    447 {
    448         DBDumpDialog *dia = new DBDumpDialog(this);
     446void MedienDB::editDBBackup()
     447{
     448        DBBackupDialog *dia = new DBBackupDialog(this);
    449449        connectMSlots(dia);
    450450        dia->exec();
  • branches/release-0.3.0-rc1/src/mediadb/mediendb.h

    r216 r217  
    6363    void fileExit();
    6464                void editSetupWizard();
    65                 void editDBDump();
     65                void editDBBackup();
    6666                void editSettings();
    6767                void viewSummary();
  • branches/release-0.3.0-rc1/src/mediadb/mediendb.ui

    r216 r217  
    6262    </property>
    6363    <addaction name="editSetupWizardAction"/>
    64     <addaction name="editDBDumpAction"/>
     64    <addaction name="editDBBackupAction"/>
    6565    <addaction name="editSettingsAction"/>
    6666   </widget>
     
    144144   </property>
    145145  </action>
    146   <action name="editDBDumpAction">
     146  <action name="editDBBackupAction">
    147147   <property name="text">
    148     <string>Dump Database</string>
     148    <string>Database Backups</string>
    149149   </property>
    150150  </action>
  • branches/release-0.3.0-rc1/src/mediadb/setupwizard.cpp

    r211 r217  
    2727#include "mediaplugin.h"
    2828#include "searchplugin.h"
     29#include "setupwizarddbdump.h"
     30#include "dbupdatewidget.h"
    2931
    3032#include <QMessageBox>
     
    222224        }
    223225
     226        // if one SetupWizardDB is present, insert DBDumpObject as first object
     227        QList<SetupWizardWidget*> widgets;
     228        bool insertBackup = false;
     229        for(int i = 0; i < stackedWidget->count(); i++){
     230                SetupWizardWidget *widget = qobject_cast<SetupWizardWidget*>(stackedWidget->widget(i));
     231                if(!widget)
     232                        continue;
     233               
     234                widgets << widget;
     235               
     236                if(!insertBackup){
     237                        DBUpdateWidget *dbWidget = qobject_cast<DBUpdateWidget*>(stackedWidget->widget(i));
     238                        if(dbWidget)
     239                                insertBackup = true;
     240                }
     241        }
     242        if(insertBackup){
     243                SetupWizardDBDump *dbDump = new SetupWizardDBDump(this);
     244                if(dbDump->needed()){
     245                        // the insert widget should be the first one
     246                        foreach(SetupWizardWidget *widget, widgets)
     247                                stackedWidget->removeWidget(widget);
     248                       
     249                        addObjectsWidgets(dbDump);
     250                        foreach(SetupWizardWidget *widget, widgets)
     251                                stackedWidget->addWidget(widget);
     252                }
     253        }
     254
    224255  // at last set the progress to start
    225256  setProgress();
Note: See TracChangeset for help on using the changeset viewer.