traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src commands/Import.cpp core/FileHelpe...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src commands/Import.cpp core/FileHelpe...
Date: Sat, 06 Oct 2007 14:18:00 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/10/06 14:17:59

Modified files:
        src/commands   : Import.cpp 
        src/core       : FileHelpers.cpp FileHelpers.h Project.cpp 
                         Project.h ProjectManager.cpp ProjectManager.h 
        src/engine     : AudioDevice.cpp 
        src/traverso/dialogs/project: OpenProjectDialog.cpp 
        src/traverso   : Interface.cpp Interface.h traverso.pro 
        src/traverso/widgets: MessageWidget.cpp 

Log message:
        * Added somewhat more sophisticated backup solution
        * Some modifications to showing the Information Widget
        * small cleanups

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/Import.cpp?cvsroot=traverso&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/FileHelpers.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/FileHelpers.h?cvsroot=traverso&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.cpp?cvsroot=traverso&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Project.h?cvsroot=traverso&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ProjectManager.cpp?cvsroot=traverso&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/ProjectManager.h?cvsroot=traverso&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/traverso/src/engine/AudioDevice.cpp?cvsroot=traverso&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/dialogs/project/OpenProjectDialog.cpp?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.cpp?cvsroot=traverso&r1=1.97&r2=1.98
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.h?cvsroot=traverso&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/traverso.pro?cvsroot=traverso&r1=1.71&r2=1.72
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/widgets/MessageWidget.cpp?cvsroot=traverso&r1=1.6&r2=1.7

Patches:
Index: commands/Import.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/Import.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- commands/Import.cpp 28 Sep 2007 18:33:43 -0000      1.27
+++ commands/Import.cpp 6 Oct 2007 14:17:58 -0000       1.28
@@ -144,7 +144,7 @@
        m_clip->set_song(m_track->get_song());
        m_clip->set_track(m_track);
        
-       TimeRef startLocation(qint64(0));
+       TimeRef startLocation;
        if (!m_hasPosition) {
                if (AudioClip* lastClip = m_track->get_cliplist().get_last()) {
                        startLocation = lastClip->get_track_end_location() + 1;

Index: core/FileHelpers.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/FileHelpers.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- core/FileHelpers.cpp        17 Apr 2007 19:56:46 -0000      1.8
+++ core/FileHelpers.cpp        6 Oct 2007 14:17:58 -0000       1.9
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: FileHelpers.cpp,v 1.8 2007/04/17 19:56:46 r_sijrier Exp $
+$Id: FileHelpers.cpp,v 1.9 2007/10/06 14:17:58 r_sijrier Exp $
 */
 
 #include "FileHelpers.h"
@@ -26,6 +26,8 @@
 #include "Config.h"
 #include <QDir>
 #include <Utils.h>
+#include <QObject>
+#include <QFile>
 
 #include "Debugger.h"
 
@@ -183,3 +185,24 @@
        return -1;
 }
 
+QString FileHelper::fileerror_to_string(int error)
+{
+       switch(error) {
+               case QFile::NoError: return QObject::tr("No error occurred"); 
break;
+               case QFile::ReadError: return QObject::tr("An error occurred 
when reading from the file."); break;
+               case QFile::WriteError: return QObject::tr("An error occurred 
when writing to the file."); break;
+               case QFile::FatalError: return QObject::tr("A fatal error 
occurred."); break;
+               case QFile::OpenError: return QObject::tr("The file could not 
be opened."); break;
+               case QFile::ResourceError: return QObject::tr("Resourc error"); 
break;
+               case QFile::AbortError: return QObject::tr("The operation was 
aborted."); break;
+               case QFile::TimeOutError: return QObject::tr("A timeout 
occurred."); break;
+               case QFile::UnspecifiedError: return QObject::tr("An 
unspecified error occurred."); break;
+               case QFile::RemoveError: return QObject::tr("The file could not 
be removed."); break;
+               case QFile::RenameError: return QObject::tr("The file could not 
be renamed."); break;
+               case QFile::PositionError: return QObject::tr("The position in 
the file could not be changed."); break;
+               case QFile::ResizeError: return QObject::tr("The file could not 
be resized."); break;
+               case QFile::PermissionsError: return QObject::tr("The file 
could not be accessed."); break;
+               case QFile::CopyError: return QObject::tr("The file could not 
be copied."); break;
+               default: return QObject::tr("Unknown error");
+       }
+}

Index: core/FileHelpers.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/FileHelpers.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- core/FileHelpers.h  7 Sep 2006 09:36:52 -0000       1.3
+++ core/FileHelpers.h  6 Oct 2007 14:17:58 -0000       1.4
@@ -17,9 +17,12 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: FileHelpers.h,v 1.3 2006/09/07 09:36:52 r_sijrier Exp $
+$Id: FileHelpers.h,v 1.4 2007/10/06 14:17:58 r_sijrier Exp $
 */
 
+#ifndef FILE_HELPER_H
+#define FILE_HELPER_H
+
 #include <QString>
 
 class FileHelper
@@ -27,9 +30,8 @@
 public:
 
        static int remove_recursively(const QString& pName);
-
        static int copy_recursively(const QString& pNameFrom, const QString& 
pNameTo);
-
+       static QString fileerror_to_string(int error);
 };
 
-//eof
+#endif

Index: core/Project.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- core/Project.cpp    10 Sep 2007 18:42:48 -0000      1.55
+++ core/Project.cpp    6 Oct 2007 14:17:58 -0000       1.56
@@ -42,6 +42,7 @@
 #include "ContextPointer.h"
 #include "Utils.h"
 #include <AddRemove.h>
+#include "FileHelpers.h"
 
 #define PROJECT_FILE_VERSION   2
 
@@ -60,7 +61,7 @@
 
        m_useResampling = config().get_property("Conversion", 
"DynamicResampling", false).toBool();
        rootDir = config().get_property("Project", "directory", 
"/directory/unknown/").toString() + "/" + m_title;
-       sourcesDir = rootDir + "/audiosources";
+       m_sourcesDir = rootDir + "/audiosources";
        m_rate = audiodevice().get_sample_rate();
        m_bitDepth = audiodevice().get_bit_depth();
 
@@ -88,7 +89,7 @@
 int Project::create(int songcount, int numtracks)
 {
        PENTER;
-       PMESG("Creating new project %s  NumSongs=%d", m_title.toAscii().data(), 
songcount);
+       PMESG("Creating new project %s  NumSongs=%d", QS_C(m_title), songcount);
 
        QDir dir;
        if (dir.mkdir(rootDir) < 0) {
@@ -96,15 +97,15 @@
                return -1;
        }
 
-       if (dir.mkdir(sourcesDir) < 0) {
-               info().critical(tr("Cannot create dir %1").arg(sourcesDir));
+       if (create_peakfiles_dir() < 0) {
                return -1;
        }
 
-       QString peaksDir = rootDir + "/peakfiles/";
+       if (create_audiosources_dir() < 0) {
+               return -1;
+       }
 
-       if (dir.mkdir(peaksDir) < 0) {
-               info().critical(tr("Cannot create dir %1").arg(peaksDir));
+       if (create_projectfilebackup_dir() < 0) {
                return -1;
        }
 
@@ -124,6 +125,43 @@
        return 1;
 }
 
+int Project::create_audiosources_dir()
+{
+       QDir dir;
+       if (dir.mkdir(m_sourcesDir) < 0) {
+               info().critical(tr("Cannot create dir %1").arg(m_sourcesDir));
+               return -1;
+       }
+       
+       return 1;
+
+}
+
+int Project::create_peakfiles_dir()
+{
+       QDir dir;
+       QString peaksDir = rootDir + "/peakfiles/";
+
+       if (dir.mkdir(peaksDir) < 0) {
+               info().critical(tr("Cannot create dir %1").arg(peaksDir));
+               return -1;
+       }
+       
+       return 1;
+}
+
+int Project::create_projectfilebackup_dir()
+{
+       QDir dir;
+       QString path = rootDir + "/projectfilebackup/";
+
+       if (dir.mkdir(path) < 0) {
+               info().critical(tr("Cannot create dir %1").arg(path));
+               return -1;
+       }
+       
+       return 1;
+}
 
 int Project::load(QString projectfile)
 {
@@ -132,6 +170,7 @@
        
        QFile file;
        QString filename;
+       
        if (projectfile.isEmpty()) {
                filename = rootDir + "/project.tpf";
                file.setFileName(filename);
@@ -140,49 +179,21 @@
                file.setFileName(filename);
        }
 
-       if (!file.open(QIODevice::ReadOnly))
-       {
+       if (!file.open(QIODevice::ReadOnly)) {
                file.close();
-               info().critical(tr("Project %1: Cannot open project.tpf file! 
(%2)")
+               info().critical(tr("Project %1: Cannot open project.tpf file! 
(Reason: %2)")
                                .arg(m_title).arg(file.errorString()));
                
-               QFile backup(filename + "~");
-               backup.copy(filename);
-               if (QFile::exists(filename.append("~"))) {
-                       return load(filename);
-               } else {
-                       info().information(tr("No backup project file 
available, unable to restore project"));
                        return -1;
                }
-       }
 
        QString errorMsg;
-       if (!doc.setContent(&file, &errorMsg))
-       {
-               info().critical(tr("Project %1: Failed to parse project.tpf 
file! (%2)")
+       if (!doc.setContent(&file, &errorMsg)) {
+               info().critical(tr("Project %1: Failed to parse project.tpf 
file! (Reason: %2)")
                                .arg(m_title).arg(errorMsg));
                
-               file.remove();
-               file.close();
-               if (! filename.contains("~")) {
-                       // Trying to load backup!
-                       QFile backup(filename + "~");
-                       backup.copy(filename);
-                       if (QFile::exists(filename.append("~"))) {
-                               return load(filename);
-                       } else {
-                               info().information(tr("No backup project file 
available, unable to restore project"));
-                               return -1;
-                       }
-               } else {
                        return -1;
                }
-       }
-       
-       if (filename.contains("~")) {
-               info().information(tr("Project file restored from older version 
(%1)")
-                               
.arg(QFileInfo(filename).lastModified().toString()));
-       }
 
        file.close();
 
@@ -215,7 +226,6 @@
        
        
        // Load all the AudioSources for this project
-       
        QDomNode asmNode = docElem.firstChildElement("ResourcesManager");
        m_resourcesManager->set_state(asmNode);
 
@@ -253,23 +263,21 @@
        QDomDocument doc("Project");
        QString fileName = rootDir + "/project.tpf";
        
-       QFile::remove(fileName + "~");
-       QFile backup(fileName);
-       backup.rename(fileName + "~");
-       QFile::remove(fileName);
-       
        QFile data( fileName );
 
-       if (data.open( QIODevice::WriteOnly ) ) {
+       if (!data.open( QIODevice::WriteOnly ) ) {
+               QString errorstring = 
FileHelper::fileerror_to_string(data.error());
+               info().critical( tr("Couldn't open Project properties file for 
writing! (File %1. Reason: %2)").arg(fileName).arg(errorstring) );
+               return -1;
+       }
+       
                get_state(doc);
                QTextStream stream(&data);
                doc.save(stream, 4);
                data.close();
                info().information( tr("Project %1 saved ").arg(m_title) );
-       } else {
-               info().critical( tr("Couldn't open Project properties file for 
writing! (%1)").arg(fileName) );
-               return -1;
-       }
+       
+       pm().start_incremental_backup(m_title);
 
        return 1;
 }
@@ -871,5 +879,3 @@
        return false;
 }
 
-//eof
-

Index: core/Project.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Project.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- core/Project.h      15 Jul 2007 05:09:47 -0000      1.24
+++ core/Project.h      6 Oct 2007 14:17:58 -0000       1.25
@@ -110,7 +110,7 @@
 
        QString         m_title;
        QString         rootDir;
-       QString         sourcesDir;
+       QString         m_sourcesDir;
        QString         engineer;
        QString         m_description;
        QString         m_importDir;
@@ -133,6 +133,9 @@
        qint64          m_currentSongId;
        
        int create(int songcount, int numtracks);
+       int create_audiosources_dir();
+       int create_peakfiles_dir();
+       int create_projectfilebackup_dir();
        
        friend class ProjectManager;
 

Index: core/ProjectManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/ProjectManager.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- core/ProjectManager.cpp     11 Aug 2007 22:54:57 -0000      1.42
+++ core/ProjectManager.cpp     6 Oct 2007 14:17:58 -0000       1.43
@@ -27,6 +27,8 @@
 #include <QFileDialog>
 #include <QMessageBox>
 #include <QFileSystemWatcher>
+#include <QTextStream>
+
 
 #include "Project.h"
 #include "Song.h"
@@ -198,6 +200,7 @@
        set_current_project(newProject);
 
        if (currentProject->load() < 0) {
+               emit projectLoadFailed(currentProject->get_title());
                delete currentProject;
                currentProject = 0;
                set_current_project(0);
@@ -459,7 +462,7 @@
        emit unsupportedProjectDirChangeDetected();
 }
 
-void ProjectManager::add_correct_project_path(const QString & path)
+void ProjectManager::add_valid_project_path(const QString & path)
 {
        m_projectDirs.append(path);
 }
@@ -468,3 +471,122 @@
 {
        m_projectDirs.removeAll(path);
 }
+
+
+void ProjectManager::start_incremental_backup(const QString& projectname)
+{
+       if (! project_exists(projectname)) {
+               return;
+       }
+       
+       QString project_dir = config().get_property("Project", "directory", 
"/directory/unknown").toString();
+       QString project_path = project_dir + "/" + projectname;
+       QString fileName = project_path + "/project.tpf";
+       
+       QFile reader(fileName);
+       if (!reader.open(QIODevice::ReadOnly)) {
+               //
+               reader.close();
+               return;
+       }
+       
+       QDateTime time = QDateTime::currentDateTime();
+       QString writelocation = project_path + "/projectfilebackup/" + 
time.toString() + "__" + QString::number(time.toTime_t());
+       QFile compressedWriter(writelocation);
+       
+       if (!compressedWriter.open( QIODevice::WriteOnly ) ) {
+               compressedWriter.close();
+               return;
+       }
+       
+       
+       QByteArray array = reader.readAll();
+       QByteArray compressed = qCompress(array, 9);
+       QDataStream stream(&compressedWriter);
+       stream << compressed;
+       
+       compressedWriter.close();
+}
+
+int ProjectManager::restore_project_from_backup(const QString& projectname, 
uint restoretime)
+{
+       if (! project_exists(projectname)) {
+               return -1;
+       }
+       QString project_dir = config().get_property("Project", "directory", 
"/directory/unknown").toString();
+       QString project_path = project_dir + "/" + projectname;
+       QString backupDir = project_path + "/projectfilebackup";
+       
+       if (currentProject) {
+               currentProject->save();
+               set_current_project(0);
+               delete currentProject;
+               currentProject = 0;
+       }
+
+       QString fileName = project_path + "/project.tpf";
+       
+       QDir dir(backupDir);
+       QString backupfile;
+       
+       foreach (QString backup, dir.entryList(QDir::Files)) {
+               if (backup.right(10).toUInt() == restoretime) {
+                       backupfile = backupDir + "/" + backup;
+                       printf("backupfile %s\n", QS_C(backupfile));
+                       break;
+               }
+       }
+       
+       QFile reader(backupfile);
+       if (!reader.open(QIODevice::ReadOnly)) {
+               //
+               reader.close();
+               return -1;
+       }
+       
+       
+       QFile writer(fileName);
+       if (!writer.open( QIODevice::WriteOnly | QIODevice::Text) ) {
+               PERROR("Could not open %s for writing!", QS_C(fileName));
+               writer.close();
+               return -1;
+       }
+       
+       QDataStream dataIn(&reader);
+       QByteArray compByteArray;
+       dataIn >> compByteArray;
+       
+       QByteArray a = qUncompress(compByteArray);
+       QTextStream stream(&writer);
+       stream << a;
+       
+       writer.close();
+       
+       return 1;
+}
+
+QList< uint > ProjectManager::get_backup_date_times(const QString& projectname)
+{
+       if (! project_exists(projectname)) {
+               return QList<uint>();
+       }
+       QString project_dir = config().get_property("Project", "directory", 
"/directory/unknown").toString();
+       QString backupDir = project_dir + "/" + projectname + 
"/projectfilebackup";
+       
+       QList<uint> dateList;
+       QDir dir(backupDir);
+       
+       foreach (QString filename, dir.entryList(QDir::Files)) {
+               bool ok;
+               uint date = filename.right(10).toUInt(&ok);
+               if (ok) {
+                       dateList.append(date);
+               } else {
+                       printf("filename: %s is not backupfile made by 
Traverso, removing it!\n", QS_C(filename));
+                       QFile::remove(backupDir + "/" + filename);
+               }
+       }
+
+       return dateList;
+}
+

Index: core/ProjectManager.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/ProjectManager.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- core/ProjectManager.h       3 Jul 2007 14:17:16 -0000       1.18
+++ core/ProjectManager.h       6 Oct 2007 14:17:59 -0000       1.19
@@ -28,6 +28,7 @@
 #include <QTimer>
 #include <QStringList>
 
+
 class Project;
 class Song;
 class Command;
@@ -49,16 +50,21 @@
        int load_renamed_project(const QString& name);
 
        bool project_exists(const QString& title);
+       bool exit_in_progress() const {return m_exitInProgress;}
 
        int remove_project(const QString& title);
        
        void scheduled_for_deletion(Song* song);
        void delete_song(Song* song);
        void set_current_project_dir(const QString& path);
-       void add_correct_project_path(const QString& path);
+       void add_valid_project_path(const QString& path);
        void remove_wrong_project_path(const QString& path);
        
        int rename_project_dir(const QString& olddir, const QString& newdir);
+       int restore_project_from_backup(const QString& projectdir, uint 
restoretime);
+
+       QList<uint> get_backup_date_times(const QString& projectdir);
+       void start_incremental_backup(const QString& projectname);
 
        Project* get_project();
        QUndoGroup* get_undogroup() const;
@@ -98,6 +104,7 @@
        void currentProjectDirChanged();
        void unsupportedProjectDirChangeDetected();
        void projectDirChangeDetected();
+       void projectLoadFailed(QString project);
        
 private slots:
        void project_dir_rename_detected(const QString& dirname);

Index: engine/AudioDevice.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/engine/AudioDevice.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- engine/AudioDevice.cpp      26 Sep 2007 21:19:39 -0000      1.38
+++ engine/AudioDevice.cpp      6 Oct 2007 14:17:59 -0000       1.39
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: AudioDevice.cpp,v 1.38 2007/09/26 21:19:39 r_sijrier Exp $
+$Id: AudioDevice.cpp,v 1.39 2007/10/06 14:17:59 r_sijrier Exp $
 */
 
 #include "AudioDevice.h"
@@ -403,7 +403,7 @@
                if (driverType == "Jack") {
                        driver = new JackDriver(this, m_rate, m_bufferSize);
                        if (driver->setup(capture, playback) < 0) {
-                               info().critical(tr("Failed to create the Jack 
Driver"));
+                               info().warning(tr("Audiodevice: Failed to 
create the Jack Driver"));
                                delete driver;
                                driver = 0;
                                return -1;
@@ -418,7 +418,7 @@
        if (driverType == "ALSA") {
                driver =  new AlsaDriver(this, m_rate, m_bufferSize);
                if (driver->setup(capture,playback, cardDevice) < 0) {
-                       info().critical(tr("Failed to create the ALSA Driver"));
+                       info().warning(tr("Audiodevice: Failed to create the 
ALSA Driver"));
                        delete driver;
                        driver = 0;
                        return -1;
@@ -432,7 +432,7 @@
        if (driverType == "PortAudio") {
                driver = new PADriver(this, m_rate, m_bufferSize);
                if (driver->setup(capture, playback, cardDevice) < 0) {
-                       info().critical(tr("Failed to create the PortAudio 
Driver"));
+                       info().warning(tr("Audiodevice: Failed to create the 
PortAudio Driver"));
                        delete driver;
                        driver = 0;
                        return -1;

Index: traverso/dialogs/project/OpenProjectDialog.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/dialogs/project/OpenProjectDialog.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- traverso/dialogs/project/OpenProjectDialog.cpp      3 Jul 2007 14:17:17 
-0000       1.11
+++ traverso/dialogs/project/OpenProjectDialog.cpp      6 Oct 2007 14:17:59 
-0000       1.12
@@ -127,7 +127,7 @@
                        // Let the ProjectManager know that this path is a 
correct one
                        // so it doesn't start whining when the directory is 
changed back 
                        // to the proper name!
-                       pm().add_correct_project_path(path + "/" + title);
+                       pm().add_valid_project_path(path + "/" + title);
                        pm().remove_wrong_project_path(path + "/" + dirname);
                        
                        item->setIcon(0, 
style()->standardIcon(QStyle::SP_MessageBoxWarning));

Index: traverso/Interface.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.cpp,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -b -r1.97 -r1.98
--- traverso/Interface.cpp      28 Sep 2007 18:33:44 -0000      1.97
+++ traverso/Interface.cpp      6 Oct 2007 14:17:59 -0000       1.98
@@ -63,7 +63,7 @@
 #include "dialogs/MarkerDialog.h"
 #include "dialogs/BusSelectorDialog.h"
 #include "dialogs/InsertSilenceDialog.h"
-
+#include "dialogs/RestoreProjectBackupDialog.h"
 
 // Always put me below _all_ includes, this is needed
 // in case we run with memory leak detection enabled!
@@ -176,6 +176,7 @@
        m_newSongDialog = 0;
        m_newTrackDialog = 0;
        m_quickStart = 0;
+       m_restoreProjectBackupDialog = 0;
        
        create_menus();
        
@@ -189,6 +190,7 @@
        connect(&pm(), SIGNAL(projectLoaded(Project*)), this, 
SLOT(set_project(Project*)));
        connect(&pm(), SIGNAL(aboutToDelete(Song*)), this, 
SLOT(delete_songwidget(Song*)));
        connect(&pm(), SIGNAL(unsupportedProjectDirChangeDetected()), this, 
SLOT(project_dir_change_detected()));       
+       connect(&pm(), SIGNAL(projectLoadFailed(QString)), this, 
SLOT(show_restore_project_backup_dialog()));
 
        cpointer().add_contextitem(this);
 
@@ -231,6 +233,9 @@
                        sw->setUpdatesEnabled(false);
                }
        } else {
+               if (pm().exit_in_progress()) {
+                       hide();
+               }
                m_projectSaveAction->setEnabled(false);
                m_projectSongManagerAction->setEnabled(false);
                m_projectExportAction->setEnabled(false);
@@ -397,6 +402,13 @@
        m_projectExportAction = action;
        connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_export_widget()));
        
+       action = menu->addAction(tr("&Restore Backup..."));
+       list.clear();
+       list.append(QKeySequence("F10"));
+       action->setShortcuts(list);
+       action->setIcon(style()->standardIcon(QStyle::SP_FileDialogBack));
+       connect(action, SIGNAL(triggered(bool)), this, 
SLOT(show_restore_project_backup_dialog()));
+       
        menu->addSeparator();
        
        action = menu->addAction(tr("&Quit"));
@@ -1027,3 +1039,27 @@
                                QMessageBox::Ok);
 }
 
+Command * Interface::show_restore_project_backup_dialog(QString projectname)
+{
+       if (! m_restoreProjectBackupDialog) {
+               m_restoreProjectBackupDialog = new 
RestoreProjectBackupDialog(this);
+       }
+       
+       m_restoreProjectBackupDialog->set_project_name(projectname);
+       m_restoreProjectBackupDialog->show();
+       
+       
+       return 0;
+}
+
+void Interface::show_restore_project_backup_dialog()
+{
+       Project* project = pm().get_project();
+       
+       if (! project ) {
+               return;
+       }
+       
+       show_restore_project_backup_dialog(project->get_title());
+}
+

Index: traverso/Interface.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- traverso/Interface.h        16 Jul 2007 02:19:31 -0000      1.40
+++ traverso/Interface.h        6 Oct 2007 14:17:59 -0000       1.41
@@ -63,6 +63,7 @@
 class NewTrackDialog;
 class NewProjectDialog;
 class Ui_QuickStartDialog;
+class RestoreProjectBackupDialog;
 struct MenuData;
 
 class Interface : public QMainWindow
@@ -120,7 +121,8 @@
        NewSongDialog*          m_newSongDialog;
        NewTrackDialog*         m_newTrackDialog;
        NewProjectDialog*       m_newProjectDialog;
-       QDialog         *m_quickStart;
+       QDialog*                m_quickStart;
+       RestoreProjectBackupDialog* m_restoreProjectBackupDialog;
 
 
        BusMonitor*             busMonitor;
@@ -152,6 +154,7 @@
        void set_fade_out_shape(QAction* action);
        void update_opengl();
        void import_audio();
+       void show_restore_project_backup_dialog();
 
        Command* full_screen();
        Command* about_traverso();
@@ -161,6 +164,7 @@
        Command* show_context_menu();
        Command* show_open_project_dialog();
        Command* show_project_manager_dialog();
+       Command* show_restore_project_backup_dialog(QString projectdir);
        Command* show_insertsilence_dialog();
        Command* show_marker_dialog();
        Command* show_newsong_dialog();

Index: traverso/traverso.pro
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/traverso.pro,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -b -r1.71 -r1.72
--- traverso/traverso.pro       24 Sep 2007 17:39:07 -0000      1.71
+++ traverso/traverso.pro       6 Oct 2007 14:17:59 -0000       1.72
@@ -53,7 +53,8 @@
        dialogs/project/NewTrackDialog.h \
        songcanvas/PositionIndicator.h \
        widgets/ResourcesWidget.h \
-       dialogs/AudioClipEditDialog.h
+       dialogs/AudioClipEditDialog.h \
+       dialogs/RestoreProjectBackupDialog.h
 SOURCES += \
        Traverso.cpp \
        BusMonitor.cpp \
@@ -82,7 +83,8 @@
        dialogs/project/NewTrackDialog.cpp \
        songcanvas/PositionIndicator.cpp \
        widgets/ResourcesWidget.cpp \
-       dialogs/AudioClipEditDialog.cpp
+       dialogs/AudioClipEditDialog.cpp \
+       dialogs/RestoreProjectBackupDialog.cpp
 FORMS += ui/ExportWidget.ui \
        ui/AudioSourcesManagerWidget.ui \
        ui/SpectralMeterConfigWidget.ui \
@@ -106,7 +108,8 @@
        ui/ResourcesWidget.ui \
        ui/QuickStart.ui \
        ui/InsertSilenceDialog.ui \
-       ui/AudioClipEditWidget.ui
+       ui/AudioClipEditWidget.ui \
+       ui/RestoreProjectBackupDialog.ui
 
 INCLUDEPATH +=         ../core \
                ../commands \
@@ -157,7 +160,7 @@
         }
     }
 
-    system(which relaytool 2>/dev/null >/dev/null) {
+    system(which relaytool 2>/dev/null >/dev/null){
         LIBS += $$system(relaytool --relay FLAC -lFLAC)
         LIBS += $$system(relaytool --relay mad -lmad)
         LIBS += $$system(relaytool --relay mp3lame -lmp3lame)
@@ -166,7 +169,7 @@
         LIBS += $$system(relaytool --relay vorbisfile -lvorbisfile)
         LIBS += $$system(relaytool --relay vorbisenc -lvorbisenc)
         LIBS += $$system(relaytool --relay wavpack -lwavpack)
-    } else {
+    }    else{
         LIBS += -logg \
             -lvorbis \
             -lvorbisfile \
@@ -178,7 +181,7 @@
     }
 }
 
-!unix { #non-unix systems don't have relaytool
+!unix{    #non-unix systems don't have relaytool
     LIBS += -logg \
         -lvorbis \
         -lvorbisfile \

Index: traverso/widgets/MessageWidget.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/widgets/MessageWidget.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- traverso/widgets/MessageWidget.cpp  14 Aug 2007 10:49:56 -0000      1.6
+++ traverso/widgets/MessageWidget.cpp  6 Oct 2007 14:17:59 -0000       1.7
@@ -25,6 +25,7 @@
 #include <QTextBrowser>
 #include <QHBoxLayout>
 #include <QStyle>
+#include <QDialog>
 #include <Utils.h>
 #include "Themer.h"
 #include <QDir>
@@ -37,7 +38,7 @@
        MessageWidgetPrivate(QWidget* parent = 0);
 
 public slots:
-       void enqueue_message(InfoStruct );
+       void queue_message(InfoStruct );
        void dequeue_messagequeue();
        void show_history();
 
@@ -51,6 +52,7 @@
        QQueue<InfoStruct >     m_messageQueue;
        InfoStruct              m_infoStruct;
        QTextBrowser*           m_log;
+       QDialog*                m_logDialog;
        QString                 m_stringLog;
        
        void create_icons();
@@ -104,7 +106,7 @@
                
        create_icons();
        
-       connect(&info(), SIGNAL(message(InfoStruct)), this, 
SLOT(enqueue_message(InfoStruct)));
+       connect(&info(), SIGNAL(message(InfoStruct)), this, 
SLOT(queue_message(InfoStruct)));
        connect(&m_messageTimer, SIGNAL(timeout()), this, 
SLOT(dequeue_messagequeue()));
 }
 
@@ -159,7 +161,7 @@
        update();
 }
 
-void MessageWidgetPrivate::enqueue_message( InfoStruct infostruct)
+void MessageWidgetPrivate::queue_message( InfoStruct infostruct)
 {
        m_messageQueue.enqueue(infostruct);
 
@@ -168,15 +170,21 @@
                update();
        }
 
-       if (m_messageQueue.size() >= 0) {
-               m_messageTimer.start(3000);
+       if (m_messageQueue.size() <= 1) {
+               m_messageTimer.start(10000);
        }
 
        // If Queue size is >= 1 start to dequeue faster.
        if (m_messageQueue.size() >= 1) {
-               m_messageTimer.start(2000);
+               m_messageTimer.start(1000);
        }
        
+       if (m_messageQueue.size() > 3) {
+               int skip = m_messageQueue.size() - 3;
+               for (int i=0; i<skip; ++i) {
+                       dequeue_messagequeue();
+               }
+       }
        
        log(infostruct);
 
@@ -237,17 +245,20 @@
 void MessageWidgetPrivate::show_history()
 {
        if (!m_log) {
-               m_log = new QTextBrowser(this);
-               m_log->setWindowFlags(Qt::Dialog);
-               m_log->resize(500, 200);
+               m_logDialog = new QDialog(this);
+               m_log = new QTextBrowser(m_logDialog);
+               QHBoxLayout* lay = new QHBoxLayout(m_logDialog);
+               m_logDialog->setLayout(lay);
+               lay->addWidget(m_log);
+               m_logDialog->resize(500, 200);
                m_log->append(m_stringLog);
                m_stringLog.clear();
        }
 
-       if (m_log->isHidden()) {
-               m_log->show();
+       if (m_logDialog->isHidden()) {
+               m_logDialog->show();
        } else {
-               m_log->hide();
+               m_logDialog->hide();
        }
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]