annotate data/fileio/RemoteFile.h @ 211:e2bbb58e6df6

Several changes related to referring to remote URLs for sessions and files: * Pull file dialog wrapper functions out from MainWindow into FileFinder * If a file referred to in a session is not found at its expected location, try a few other alternatives (same location as the session file or same location as the last audio file) before asking the user to locate it * Allow user to give a URL when locating an audio file, not just locate on the filesystem * Make wave file models remember the "original" location (e.g. URL) of the audio file, not just the actual location from which the data was loaded (e.g. local copy of that URL) -- when saving a session, use the original location so as not to refer to a temporary file * Clean up incompletely-downloaded local copies of files
author Chris Cannam
date Thu, 11 Jan 2007 13:29:58 +0000
parents a06afefe45ee
children ce6f65ab3327
rev   line source
Chris@208 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@208 2
Chris@208 3 /*
Chris@208 4 Sonic Visualiser
Chris@208 5 An audio file viewer and annotation editor.
Chris@208 6 Centre for Digital Music, Queen Mary, University of London.
Chris@208 7 This file copyright 2007 QMUL.
Chris@208 8
Chris@208 9 This program is free software; you can redistribute it and/or
Chris@208 10 modify it under the terms of the GNU General Public License as
Chris@208 11 published by the Free Software Foundation; either version 2 of the
Chris@208 12 License, or (at your option) any later version. See the file
Chris@208 13 COPYING included with this distribution for more information.
Chris@208 14 */
Chris@208 15
Chris@208 16 #ifndef _REMOTE_FILE_H_
Chris@208 17 #define _REMOTE_FILE_H_
Chris@208 18
Chris@208 19 #include <QUrl>
Chris@208 20 #include <QMutex>
Chris@208 21 #include <QString>
Chris@210 22 #include <QTimer>
Chris@208 23
Chris@208 24 class QFtp;
Chris@208 25 class QHttp;
Chris@208 26 class QFile;
Chris@208 27 class QProgressDialog;
Chris@210 28 class QHttpResponseHeader;
Chris@208 29
Chris@208 30 class RemoteFile : public QObject
Chris@208 31 {
Chris@208 32 Q_OBJECT
Chris@208 33
Chris@208 34 public:
Chris@208 35 RemoteFile(QUrl url);
Chris@208 36 virtual ~RemoteFile();
Chris@208 37
Chris@210 38 bool isAvailable();
Chris@210 39
Chris@208 40 void wait();
Chris@208 41
Chris@208 42 bool isOK() const;
Chris@208 43 bool isDone() const;
Chris@210 44
Chris@208 45 QString getLocalFilename() const;
Chris@208 46 QString getErrorString() const;
Chris@208 47
Chris@211 48 void deleteLocalFile();
Chris@211 49
Chris@208 50 static bool canHandleScheme(QUrl url);
Chris@208 51
Chris@208 52 signals:
Chris@208 53 void progress(int percent);
Chris@208 54 void ready();
Chris@208 55
Chris@208 56 protected slots:
Chris@208 57 void dataReadProgress(int done, int total);
Chris@210 58 void responseHeaderReceived(const QHttpResponseHeader &resp);
Chris@208 59 void dataTransferProgress(qint64 done, qint64 total);
Chris@208 60 void done(bool error);
Chris@210 61 void showProgressDialog();
Chris@210 62 void cancelled();
Chris@208 63
Chris@208 64 protected:
Chris@208 65 QFtp *m_ftp;
Chris@208 66 QHttp *m_http;
Chris@208 67 QFile *m_localFile;
Chris@208 68 QString m_localFilename;
Chris@208 69 QString m_errorString;
Chris@208 70 bool m_ok;
Chris@210 71 int m_lastStatus;
Chris@208 72 bool m_done;
Chris@208 73 QProgressDialog *m_progressDialog;
Chris@210 74 QTimer m_progressShowTimer;
Chris@208 75
Chris@211 76 void cleanup();
Chris@211 77
Chris@208 78 QString createLocalFile(QUrl url);
Chris@208 79
Chris@208 80 static QMutex m_fileCreationMutex;
Chris@208 81 static int m_count;
Chris@208 82 };
Chris@208 83
Chris@208 84 #endif