diff --git a/TODO b/TODO index 4dfab6ad6..6d75f663f 100644 --- a/TODO +++ b/TODO @@ -89,4 +89,5 @@ beta5->beta6 changelog: - BUGFIX: Improved ETA calculation - BUGFIX: ETA was wrong for torrents with filtered files - BUGFIX: Display the torrent that are being checked as 'checking' in seeding list +- BUGFIX: Fixed file preview and improved previewable files detection - I18N: Removed no longer maintained Traditional chinese translation \ No newline at end of file diff --git a/src/bittorrent.cpp b/src/bittorrent.cpp index 7108bda4d..923067686 100644 --- a/src/bittorrent.cpp +++ b/src/bittorrent.cpp @@ -46,9 +46,6 @@ bittorrent::bittorrent() : timerScan(0), DHTEnabled(false){ // To avoid some exceptions fs::path::default_name_check(fs::no_check); - // Supported preview extensions - // XXX: A bit dirty to do it this way (use mime types?) - supported_preview_extensions << "AVI" << "DIVX" << "MPG" << "MPEG" << "MPE" << "MP3" << "OGG" << "WMV" << "WMA" << "RMV" << "RMVB" << "ASF" << "MOV" << "WAV" << "MP2" << "SWF" << "AC3" << "OGM" << "MP4" << "FLV" << "VOB" << "QT" << "MKV" << "AIF" << "AIFF" << "AIFC" << "MID" << "MPG" << "RA" << "RAM" << "AU" << "M4A" << "FLAC" << "M4P" << "3GP" << "AAC" << "RM" << "SWA" << "MPC" << "MPP"; // Creating bittorrent session s = new session(fingerprint("qB", VERSION_MAJOR, VERSION_MINOR, VERSION_BUGFIX, 0)); // Set severity level of libtorrent session @@ -782,10 +779,9 @@ bool bittorrent::isFilePreviewPossible(QString hash) const{ unsigned int nbFiles = h.num_files(); for(unsigned int i=0; i= 0) { + QString extension = fileName.split('.').last(); + if(misc::isPreviewable(extension)) return true; - } } return false; } diff --git a/src/bittorrent.h b/src/bittorrent.h index 21f74deab..88bf21ca1 100644 --- a/src/bittorrent.h +++ b/src/bittorrent.h @@ -45,7 +45,6 @@ class bittorrent : public QObject{ QTimer *timerAlerts; bool DHTEnabled; downloadThread *downloader; - QStringList supported_preview_extensions; QString defaultSavePath; QStringList torrentsToPauseAfterChecking; QStringList reloadingTorrents; diff --git a/src/misc.h b/src/misc.h index faf8c72ef..dac2a0fb7 100644 --- a/src/misc.h +++ b/src/misc.h @@ -120,6 +120,51 @@ class misc : public QObject{ return QString(QByteArray::number(val, 'f', 1)) + tr("TiB", "tebibytes (1024 gibibytes)"); } + static bool isPreviewable(QString extension){ + extension = extension.toUpper(); + if(extension == "AVI") return true; + if(extension == "MP3") return true; + if(extension == "OGG") return true; + if(extension == "OGM") return true; + if(extension == "WMV") return true; + if(extension == "WMA") return true; + if(extension == "MPEG") return true; + if(extension == "MPG") return true; + if(extension == "ASF") return true; + if(extension == "QT") return true; + if(extension == "RM") return true; + if(extension == "RMVB") return true; + if(extension == "RMV") return true; + if(extension == "SWF") return true; + if(extension == "FLV") return true; + if(extension == "WAV") return true; + if(extension == "MOV") return true; + if(extension == "VOB") return true; + if(extension == "MID") return true; + if(extension == "AC3") return true; + if(extension == "MP4") return true; + if(extension == "MP2") return true; + if(extension == "AVI") return true; + if(extension == "FLAC") return true; + if(extension == "AU") return true; + if(extension == "MPE") return true; + if(extension == "MOV") return true; + if(extension == "MKV") return true; + if(extension == "AIF") return true; + if(extension == "AIFF") return true; + if(extension == "AIFC") return true; + if(extension == "RA") return true; + if(extension == "RAM") return true; + if(extension == "M4P") return true; + if(extension == "M4A") return true; + if(extension == "3GP") return true; + if(extension == "AAC") return true; + if(extension == "SWA") return true; + if(extension == "MPC") return true; + if(extension == "MPP") return true; + return false; + } + // return qBittorrent config path static QString qBittorrentPath() { QString qBtPath = QDir::homePath()+QDir::separator()+QString::fromUtf8(".qbittorrent") + QDir::separator(); diff --git a/src/previewSelect.h b/src/previewSelect.h index 119f85d06..addcaa16b 100644 --- a/src/previewSelect.h +++ b/src/previewSelect.h @@ -44,7 +44,6 @@ class previewSelect: public QDialog, private Ui::preview { private: QStandardItemModel *previewListModel; PreviewListDelegate *listDelegate; - QStringList supported_preview_extensions; QTorrentHandle h; signals: @@ -53,36 +52,22 @@ class previewSelect: public QDialog, private Ui::preview { protected slots: void on_previewButton_clicked(){ QModelIndex index; - bool found = false; QModelIndexList selectedIndexes = previewList->selectionModel()->selectedIndexes(); + if(selectedIndexes.size() == 0) return; + QString path; foreach(index, selectedIndexes){ if(index.column() == NAME){ - QString root_path = h.save_path(); - if(root_path.at(root_path.length()-1) != QDir::separator()){ - root_path += QString::fromUtf8("/"); - } - // Get the file name - QString fileName = index.data().toString(); + path = h.files_path().at(index.row()); // File - if(QFile::exists(root_path+fileName)){ - emit readyToPreviewFile(root_path+fileName); - found = true; - }else{ - // Folder - QString folder_name = h.name(); - // Will find the file even if it is in a sub directory - QString result = misc::findFileInDir(root_path+folder_name, fileName); - if(!result.isNull()){ - emit readyToPreviewFile(result); - found = true; - } + if(QFile::exists(path)){ + emit readyToPreviewFile(path); } - break; + close(); + return; } } - if(!found){ - QMessageBox::critical(0, tr("Preview impossible"), tr("Sorry, we can't preview this file")); - } + qDebug("Cannot find file: %s", path.toUtf8().data()); + QMessageBox::critical(0, tr("Preview impossible"), tr("Sorry, we can't preview this file")); close(); } @@ -102,7 +87,6 @@ class previewSelect: public QDialog, private Ui::preview { previewList->setModel(previewListModel); listDelegate = new PreviewListDelegate(this); previewList->setItemDelegate(listDelegate); - supported_preview_extensions << QString::fromUtf8("AVI") << QString::fromUtf8("DIVX") << QString::fromUtf8("MPG") << QString::fromUtf8("MPEG") << QString::fromUtf8("MPE") << QString::fromUtf8("MP3") << QString::fromUtf8("OGG") << QString::fromUtf8("WMV") << QString::fromUtf8("WMA") << QString::fromUtf8("RMV") << QString::fromUtf8("RMVB") << QString::fromUtf8("ASF") << QString::fromUtf8("MOV") << QString::fromUtf8("WAV") << QString::fromUtf8("MP2") << QString::fromUtf8("SWF") << QString::fromUtf8("AC3") << QString::fromUtf8("OGM") << QString::fromUtf8("MP4") << QString::fromUtf8("FLV") << QString::fromUtf8("VOB") << QString::fromUtf8("QT") << QString::fromUtf8("MKV") << QString::fromUtf8("AIF") << QString::fromUtf8("AIFF") << QString::fromUtf8("AIFC") << QString::fromUtf8("MID") << QString::fromUtf8("MPG") << QString::fromUtf8("RA") << QString::fromUtf8("RAM") << QString::fromUtf8("AU") << QString::fromUtf8("M4A") << QString::fromUtf8("FLAC") << QString::fromUtf8("M4P") << QString::fromUtf8("3GP") << QString::fromUtf8("AAC") << QString::fromUtf8("RM") << QString::fromUtf8("SWA") << QString::fromUtf8("MPC") << QString::fromUtf8("MPP"); previewList->header()->resizeSection(0, 200); // Fill list in std::vector fp; @@ -111,7 +95,7 @@ class previewSelect: public QDialog, private Ui::preview { for(unsigned int i=0; i= 0){ + if(misc::isPreviewable(extension)) { int row = previewListModel->rowCount(); previewListModel->insertRow(row); previewListModel->setData(previewListModel->index(row, NAME), QVariant(fileName)); diff --git a/src/qtorrenthandle.cpp b/src/qtorrenthandle.cpp index fd7b73710..fa7d90ec9 100644 --- a/src/qtorrenthandle.cpp +++ b/src/qtorrenthandle.cpp @@ -173,13 +173,15 @@ entry QTorrentHandle::write_resume_data() const { return h.write_resume_data(); } -QString QTorrentHandle::file_at(int index) const { +QString QTorrentHandle::file_at(unsigned int index) const { Q_ASSERT(h.is_valid()); + Q_ASSERT(index < (unsigned int)h.get_torrent_info().num_files()); return misc::toQString(h.get_torrent_info().file_at(index).path.leaf()); } -size_type QTorrentHandle::filesize_at(int index) const { +size_type QTorrentHandle::filesize_at(unsigned int index) const { Q_ASSERT(h.is_valid()); + Q_ASSERT(index < (unsigned int)h.get_torrent_info().num_files()); return h.get_torrent_info().file_at(index).size; } diff --git a/src/qtorrenthandle.h b/src/qtorrenthandle.h index 60d69e342..7d3b572cf 100644 --- a/src/qtorrenthandle.h +++ b/src/qtorrenthandle.h @@ -72,8 +72,8 @@ class QTorrentHandle { int num_files() const; bool has_metadata() const; entry write_resume_data() const; - QString file_at(int index) const; - size_type filesize_at(int index) const; + QString file_at(unsigned int index) const; + size_type filesize_at(unsigned int index) const; std::vector const& trackers() const; torrent_status::state_t state() const; QString creator() const;