mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-17 06:01:33 -06:00
Compare commits
19 Commits
release-3.
...
release-3.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f836c40fc4 | ||
|
|
21fe7f2ca6 | ||
|
|
da85a57f83 | ||
|
|
e35664b188 | ||
|
|
2fc350b265 | ||
|
|
83bcd6a2d7 | ||
|
|
edcfa4df12 | ||
|
|
12a83e1aec | ||
|
|
7d50a8b28c | ||
|
|
232e112d84 | ||
|
|
5b1ee883b4 | ||
|
|
b07fceec65 | ||
|
|
4c9cf6c773 | ||
|
|
164f37e961 | ||
|
|
093fb303f3 | ||
|
|
f3d5039e33 | ||
|
|
007c307388 | ||
|
|
4079689f32 | ||
|
|
2b3d6926c8 |
@@ -1,3 +1,12 @@
|
||||
* Sat Sep 1 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.2
|
||||
- FEATURE: Add "clear" functionality to search field (closes #59)
|
||||
- BUGFIX: Attempt to use qBittorrent icon from theme if available (closes #49)
|
||||
- BUGFIX: Fix crash when a fastresume file is empty (closes #52)
|
||||
- BUGFIX: Fix encoding problem for detected XDG Download folder (closes #53)
|
||||
- BUGFIX: Improve performance when showing torrent content panel (Improves #24)
|
||||
- BUGFIX: Fix label-based filtering of torrents whose label contains special characters
|
||||
- BUGFIX: Fix possible crash due to labels (closes #64)
|
||||
|
||||
* Tue Aug 21 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.1
|
||||
- BUGFIX: Fix possible crash when adding a tracker to a magnet torrent without metadata (Closes #1034254)
|
||||
- BUGFIX: Remember queue position for torrents without metadata (closes #17)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.1</string>
|
||||
<string>3.0.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>qBit</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
|
||||
@@ -445,6 +445,9 @@ QString fsutils::QDesktopServicesDownloadLocation() {
|
||||
QString user_dirs_file = config_path + "/user-dirs.dirs";
|
||||
if (QFile::exists(user_dirs_file)) {
|
||||
QSettings settings(user_dirs_file, QSettings::IniFormat);
|
||||
// We need to force UTF-8 encoding here since this is not
|
||||
// the default for Ini files.
|
||||
settings.setIniCodec("UTF-8");
|
||||
QString xdg_download_dir = settings.value("XDG_DOWNLOAD_DIR").toString();
|
||||
if (!xdg_download_dir.isEmpty()) {
|
||||
// Resolve $HOME environment variables
|
||||
|
||||
@@ -105,7 +105,13 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
|
||||
// Clean exit on log out
|
||||
connect(static_cast<SessionApplication*>(qApp), SIGNAL(sessionIsShuttingDown()), this, SLOT(deleteBTSession()));
|
||||
// Setting icons
|
||||
this->setWindowIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent32.png")));
|
||||
#if defined(Q_WS_X11)
|
||||
if (Preferences().useSystemIconTheme())
|
||||
setWindowIcon(QIcon::fromTheme("qbittorrent", QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent32.png"))));
|
||||
else
|
||||
#else
|
||||
setWindowIcon(QIcon(QString::fromUtf8(":/Icons/skin/qbittorrent32.png")));
|
||||
#endif
|
||||
actionOpen->setIcon(IconProvider::instance()->getIcon("list-add"));
|
||||
actionDownload_from_URL->setIcon(IconProvider::instance()->getIcon("insert-link"));
|
||||
actionSet_upload_limit->setIcon(QIcon(QString::fromUtf8(":/Icons/skin/seeding.png")));
|
||||
@@ -706,7 +712,7 @@ void MainWindow::toggleVisibility(QSystemTrayIcon::ActivationReason e) {
|
||||
return;
|
||||
}
|
||||
// Make sure the window is not minimized
|
||||
setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
|
||||
setWindowState(windowState() & (~Qt::WindowMinimized | Qt::WindowActive));
|
||||
// Then show it
|
||||
show();
|
||||
raise();
|
||||
@@ -1399,8 +1405,15 @@ QIcon MainWindow::getSystrayIcon() const
|
||||
}
|
||||
#endif
|
||||
QIcon icon;
|
||||
#if defined(Q_WS_X11)
|
||||
if (Preferences().useSystemIconTheme()) {
|
||||
icon = QIcon::fromTheme("qbittorrent");
|
||||
}
|
||||
#endif
|
||||
if (icon.isNull()) {
|
||||
icon.addFile(":/Icons/skin/qbittorrent22.png", QSize(22, 22));
|
||||
icon.addFile(":/Icons/skin/qbittorrent16.png", QSize(16, 16));
|
||||
icon.addFile(":/Icons/skin/qbittorrent32.png", QSize(32, 32));
|
||||
}
|
||||
return icon;
|
||||
}
|
||||
|
||||
@@ -234,13 +234,12 @@ void PropertiesWidget::updateTorrentInfos(const QTorrentHandle& _h) {
|
||||
}
|
||||
}
|
||||
|
||||
void PropertiesWidget::loadTorrentInfos(const QTorrentHandle &_h) {
|
||||
void PropertiesWidget::loadTorrentInfos(const QTorrentHandle& _h)
|
||||
{
|
||||
clear();
|
||||
h = _h;
|
||||
if (!h.is_valid()) {
|
||||
clear();
|
||||
if (!h.is_valid())
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Save path
|
||||
@@ -260,10 +259,10 @@ void PropertiesWidget::loadTorrentInfos(const QTorrentHandle &_h) {
|
||||
// List files in torrent
|
||||
PropListModel->model()->setupModelData(h.get_torrent_info());
|
||||
filesList->setExpanded(PropListModel->index(0, 0), true);
|
||||
// Load file priorities
|
||||
PropListModel->model()->updateFilesPriorities(h.file_priorities());
|
||||
}
|
||||
} catch(invalid_handle& e) {
|
||||
|
||||
}
|
||||
} catch(const invalid_handle& e) { }
|
||||
// Load dynamic data
|
||||
loadDynamicData();
|
||||
}
|
||||
@@ -391,8 +390,11 @@ void PropertiesWidget::loadDynamicData() {
|
||||
filesList->setUpdatesEnabled(false);
|
||||
std::vector<size_type> fp;
|
||||
h.file_progress(fp);
|
||||
PropListModel->model()->updateFilesPriorities(h.file_priorities());
|
||||
PropListModel->model()->updateFilesProgress(fp);
|
||||
// XXX: We don't update file priorities regularly for performance
|
||||
// reasons. This means that priorities will not be updated if
|
||||
// set from the Web UI.
|
||||
// PropListModel->model()->updateFilesPriorities(h.file_priorities());
|
||||
filesList->setUpdatesEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -864,11 +864,16 @@ bool QBtSession::loadFastResumeData(const QString &hash, std::vector<char> &buf)
|
||||
const QString fastresume_path = QDir(fsutils::BTBackupLocation()).absoluteFilePath(hash+QString(".fastresume"));
|
||||
qDebug("Trying to load fastresume data: %s", qPrintable(fastresume_path));
|
||||
QFile fastresume_file(fastresume_path);
|
||||
if (!fastresume_file.open(QIODevice::ReadOnly)) return false;
|
||||
if (fastresume_file.size() <= 0)
|
||||
return false;
|
||||
if (!fastresume_file.open(QIODevice::ReadOnly))
|
||||
return false;
|
||||
const QByteArray content = fastresume_file.readAll();
|
||||
const int content_size = content.size();
|
||||
Q_ASSERT(content_size > 0);
|
||||
buf.resize(content_size);
|
||||
memcpy(&buf[0], content.data(), content_size);
|
||||
fastresume_file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,14 +37,15 @@
|
||||
using namespace libtorrent;
|
||||
|
||||
TorrentModelItem::TorrentModelItem(const QTorrentHandle &h)
|
||||
: m_torrent(h)
|
||||
, m_addedTime(TorrentPersistentData::getAddedDate(h.hash()))
|
||||
, m_seedTime(TorrentPersistentData::getSeedDate(h.hash()))
|
||||
, m_label(TorrentPersistentData::getLabel(h.hash()))
|
||||
, m_name(TorrentPersistentData::getName(h.hash()))
|
||||
, m_hash(h.hash())
|
||||
{
|
||||
m_torrent = h;
|
||||
m_hash = h.hash();
|
||||
m_name = TorrentPersistentData::getName(h.hash());
|
||||
if (m_name.isEmpty()) m_name = h.name();
|
||||
m_addedTime = TorrentPersistentData::getAddedDate(h.hash());
|
||||
m_seedTime = TorrentPersistentData::getSeedDate(h.hash());
|
||||
m_label = TorrentPersistentData::getLabel(h.hash());
|
||||
if (m_name.isEmpty())
|
||||
m_name = h.name();
|
||||
}
|
||||
|
||||
TorrentModelItem::State TorrentModelItem::state() const
|
||||
|
||||
@@ -40,13 +40,19 @@ public:
|
||||
unsigned long num_peers;
|
||||
|
||||
//TrackerInfos() {}
|
||||
TrackerInfos(const TrackerInfos &b) {
|
||||
name_or_url = b.name_or_url;
|
||||
TrackerInfos(const TrackerInfos &b)
|
||||
: name_or_url(b.name_or_url)
|
||||
, last_message(b.last_message)
|
||||
, num_peers(b.num_peers)
|
||||
{
|
||||
Q_ASSERT(!name_or_url.isEmpty());
|
||||
last_message = b.last_message;
|
||||
num_peers = b.num_peers;
|
||||
}
|
||||
TrackerInfos(QString name_or_url): name_or_url(name_or_url), last_message(""), num_peers(0) {
|
||||
|
||||
TrackerInfos(QString name_or_url)
|
||||
: name_or_url(name_or_url)
|
||||
, last_message("")
|
||||
, num_peers(0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -88,12 +88,12 @@
|
||||
*/
|
||||
QtLockedFile::QtLockedFile()
|
||||
: QFile()
|
||||
, m_lock_mode(NoLock)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
wmutex = 0;
|
||||
rmutex = 0;
|
||||
#endif
|
||||
m_lock_mode = NoLock;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -105,12 +105,12 @@ QtLockedFile::QtLockedFile()
|
||||
*/
|
||||
QtLockedFile::QtLockedFile(const QString &name)
|
||||
: QFile(name)
|
||||
, m_lock_mode(NoLock)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
wmutex = 0;
|
||||
rmutex = 0;
|
||||
#endif
|
||||
m_lock_mode = NoLock;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -15,20 +15,7 @@
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="search_pattern">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>22</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<layout class="QHBoxLayout" name="searchBarLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboCategory"/>
|
||||
</item>
|
||||
@@ -112,20 +99,8 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="download_button">
|
||||
<property name="enabled">
|
||||
@@ -173,22 +148,5 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>search_pattern</sender>
|
||||
<signal>returnPressed()</signal>
|
||||
<receiver>search_button</receiver>
|
||||
<slot>click()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>421</x>
|
||||
<y>37</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>685</x>
|
||||
<y>45</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -58,12 +58,19 @@
|
||||
#include "qinisettings.h"
|
||||
#include "mainwindow.h"
|
||||
#include "iconprovider.h"
|
||||
#include "lineedit.h"
|
||||
|
||||
#define SEARCHHISTORY_MAXSIZE 50
|
||||
|
||||
/*SEARCH ENGINE START*/
|
||||
SearchEngine::SearchEngine(MainWindow *parent) : QWidget(parent), mp_mainWindow(parent) {
|
||||
SearchEngine::SearchEngine(MainWindow* parent)
|
||||
: QWidget(parent)
|
||||
, search_pattern(new LineEdit)
|
||||
, mp_mainWindow(parent)
|
||||
{
|
||||
setupUi(this);
|
||||
searchBarLayout->insertWidget(0, search_pattern);
|
||||
connect(search_pattern, SIGNAL(returnPressed()), search_button, SLOT(click()));
|
||||
// Icons
|
||||
search_button->setIcon(IconProvider::instance()->getIcon("edit-find"));
|
||||
download_button->setIcon(IconProvider::instance()->getIcon("download"));
|
||||
@@ -98,6 +105,7 @@ SearchEngine::SearchEngine(MainWindow *parent) : QWidget(parent), mp_mainWindow(
|
||||
);
|
||||
// Fill in category combobox
|
||||
fillCatCombobox();
|
||||
|
||||
connect(search_pattern, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(displayPatternContextMenu(QPoint)));
|
||||
connect(search_pattern, SIGNAL(textEdited(QString)), this, SLOT(searchTextEdited(QString)));
|
||||
}
|
||||
@@ -189,6 +197,7 @@ SearchEngine::~SearchEngine() {
|
||||
downloader->waitForFinished();
|
||||
delete downloader;
|
||||
}
|
||||
delete search_pattern;
|
||||
delete searchTimeout;
|
||||
delete searchProcess;
|
||||
delete supported_engines;
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
class DownloadThread;
|
||||
class SearchEngine;
|
||||
class MainWindow;
|
||||
class LineEdit;
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QTimer;
|
||||
@@ -122,6 +123,7 @@ private slots:
|
||||
|
||||
private:
|
||||
// Search related
|
||||
LineEdit* search_pattern;
|
||||
QProcess *searchProcess;
|
||||
QList<QProcess*> downloaders;
|
||||
bool search_stopped;
|
||||
|
||||
@@ -71,8 +71,9 @@ void TorrentContentModel::updateFilesPriorities(const std::vector<int> &fprio)
|
||||
std::vector<int> TorrentContentModel::getFilesPriorities() const
|
||||
{
|
||||
std::vector<int> prio;
|
||||
for (int i=0; i<m_filesIndex.size(); ++i) {
|
||||
prio.push_back(m_filesIndex[i]->getPriority());
|
||||
prio.reserve(m_filesIndex.size());
|
||||
foreach (const TorrentContentModelItem* file, m_filesIndex) {
|
||||
prio.push_back(file->getPriority());
|
||||
}
|
||||
return prio;
|
||||
}
|
||||
@@ -277,26 +278,26 @@ void TorrentContentModel::setupModelData(const libtorrent::torrent_info &t)
|
||||
|
||||
// Iterate over files
|
||||
for (int i=0; i<t.num_files(); ++i) {
|
||||
libtorrent::file_entry fentry = t.file_at(i);
|
||||
const libtorrent::file_entry& fentry = t.file_at(i);
|
||||
current_parent = root_folder;
|
||||
#if LIBTORRENT_VERSION_MINOR >= 16
|
||||
QString path = QDir::cleanPath(misc::toQStringU(fentry.path)).replace("\\", "/");
|
||||
QString path = misc::toQStringU(fentry.path);
|
||||
#else
|
||||
QString path = QDir::cleanPath(misc::toQStringU(fentry.path.string())).replace("\\", "/");
|
||||
QString path = misc::toQStringU(fentry.path.string());
|
||||
#endif
|
||||
// Iterate of parts of the path to create necessary folders
|
||||
QStringList pathFolders = path.split("/");
|
||||
pathFolders.removeAll(".unwanted");
|
||||
pathFolders.takeLast();
|
||||
QStringList pathFolders = path.split(QRegExp("[/\\\\]"), QString::SkipEmptyParts);
|
||||
pathFolders.removeLast();
|
||||
foreach (const QString& pathPart, pathFolders) {
|
||||
if (pathPart == ".unwanted")
|
||||
continue;
|
||||
TorrentContentModelItem* new_parent = current_parent->childWithName(pathPart);
|
||||
if (!new_parent) {
|
||||
if (!new_parent)
|
||||
new_parent = new TorrentContentModelItem(pathPart, current_parent);
|
||||
}
|
||||
current_parent = new_parent;
|
||||
}
|
||||
// Actually create the file
|
||||
m_filesIndex.push_back(new TorrentContentModelItem(t, fentry, current_parent, i));
|
||||
m_filesIndex.push_back(new TorrentContentModelItem(fentry, current_parent, i));
|
||||
}
|
||||
emit layoutChanged();
|
||||
}
|
||||
|
||||
@@ -33,8 +33,7 @@
|
||||
#include "torrentcontentmodelitem.h"
|
||||
#include <QDebug>
|
||||
|
||||
TorrentContentModelItem::TorrentContentModelItem(const libtorrent::torrent_info &t,
|
||||
const libtorrent::file_entry &f,
|
||||
TorrentContentModelItem::TorrentContentModelItem(const libtorrent::file_entry &f,
|
||||
TorrentContentModelItem *parent,
|
||||
int file_index):
|
||||
m_parentItem(parent), m_type(TFILE), m_fileIndex(file_index), m_totalDone(0)
|
||||
@@ -42,7 +41,7 @@ TorrentContentModelItem::TorrentContentModelItem(const libtorrent::torrent_info
|
||||
Q_ASSERT(parent);
|
||||
|
||||
#if LIBTORRENT_VERSION_MINOR >= 16
|
||||
QString name = fsutils::fileName(misc::toQStringU(t.files().file_path(f)));
|
||||
QString name = fsutils::fileName(misc::toQStringU(f.path.c_str()));
|
||||
#else
|
||||
Q_UNUSED(t);
|
||||
QString name = misc::toQStringU(f.path.filename());
|
||||
@@ -252,8 +251,8 @@ void TorrentContentModelItem::updatePriority()
|
||||
return;
|
||||
}
|
||||
}
|
||||
// All child items have the same priorrity
|
||||
// Update mine if necessary
|
||||
// All child items have the same priority
|
||||
// Update own if necessary
|
||||
if (prio != getPriority())
|
||||
setPriority(prio);
|
||||
}
|
||||
@@ -285,7 +284,7 @@ void TorrentContentModelItem::appendChild(TorrentContentModelItem *item)
|
||||
m_childItems.insert(i, item);
|
||||
}
|
||||
|
||||
TorrentContentModelItem* TorrentContentModelItem::child(int row)
|
||||
TorrentContentModelItem* TorrentContentModelItem::child(int row) const
|
||||
{
|
||||
//Q_ASSERT(row >= 0 && row < childItems.size());
|
||||
return m_childItems.value(row, 0);
|
||||
@@ -315,7 +314,7 @@ int TorrentContentModelItem::row() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
TorrentContentModelItem* TorrentContentModelItem::parent()
|
||||
TorrentContentModelItem* TorrentContentModelItem::parent() const
|
||||
{
|
||||
return m_parentItem;
|
||||
}
|
||||
|
||||
@@ -45,8 +45,7 @@ public:
|
||||
enum FileType {TFILE, FOLDER, ROOT};
|
||||
|
||||
// File Construction
|
||||
TorrentContentModelItem(const libtorrent::torrent_info &t,
|
||||
const libtorrent::file_entry &f,
|
||||
TorrentContentModelItem(const libtorrent::file_entry &f,
|
||||
TorrentContentModelItem *parent,
|
||||
int file_index);
|
||||
// Folder constructor
|
||||
@@ -80,13 +79,13 @@ public:
|
||||
bool isFolder() const;
|
||||
|
||||
void appendChild(TorrentContentModelItem *item);
|
||||
TorrentContentModelItem *child(int row);
|
||||
TorrentContentModelItem* child(int row) const;
|
||||
int childCount() const;
|
||||
int columnCount() const;
|
||||
QVariant data(int column) const;
|
||||
int row() const;
|
||||
|
||||
TorrentContentModelItem *parent();
|
||||
TorrentContentModelItem* parent() const;
|
||||
void deleteAllChildren();
|
||||
const QList<TorrentContentModelItem*>& children() const;
|
||||
|
||||
|
||||
@@ -447,6 +447,8 @@ protected slots:
|
||||
if (!label.isEmpty()) {
|
||||
if (!customLabels.contains(label)) {
|
||||
addLabel(label);
|
||||
// addLabel may have changed the label, update the model accordingly.
|
||||
torrentItem->setData(TorrentModelItem::TR_LABEL, label);
|
||||
}
|
||||
// Update label counter
|
||||
Q_ASSERT(customLabels.contains(label));
|
||||
|
||||
@@ -856,11 +856,11 @@ void TransferListWidget::applyLabelFilter(QString label) {
|
||||
return;
|
||||
}
|
||||
qDebug("Applying Label filter: %s", qPrintable(label));
|
||||
labelFilterModel->setFilterRegExp(QRegExp("^"+label+"$", Qt::CaseSensitive));
|
||||
labelFilterModel->setFilterRegExp(QRegExp("^" + QRegExp::escape(label) + "$", Qt::CaseSensitive));
|
||||
}
|
||||
|
||||
void TransferListWidget::applyNameFilter(QString name) {
|
||||
nameFilterModel->setFilterRegExp(QRegExp(name, Qt::CaseInsensitive));
|
||||
void TransferListWidget::applyNameFilter(const QString& name) {
|
||||
nameFilterModel->setFilterRegExp(QRegExp(QRegExp::escape(name), Qt::CaseInsensitive));
|
||||
}
|
||||
|
||||
void TransferListWidget::applyStatusFilter(int f) {
|
||||
|
||||
@@ -78,7 +78,7 @@ public slots:
|
||||
void previewSelectedTorrents();
|
||||
void hidePriorityColumn(bool hide);
|
||||
void displayDLHoSMenu(const QPoint&);
|
||||
void applyNameFilter(QString name);
|
||||
void applyNameFilter(const QString& name);
|
||||
void applyStatusFilter(int f);
|
||||
void applyLabelFilter(QString label);
|
||||
void previewFile(QString filePath);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
PROJECT_NAME = qbittorrent
|
||||
PROJECT_VERSION = 3.0.1
|
||||
PROJECT_VERSION = 3.0.2
|
||||
|
||||
os2 {
|
||||
DEFINES += VERSION=\'\"v$${PROJECT_VERSION}\"\'
|
||||
@@ -9,4 +9,4 @@ os2 {
|
||||
|
||||
DEFINES += VERSION_MAJOR=3
|
||||
DEFINES += VERSION_MINOR=0
|
||||
DEFINES += VERSION_BUGFIX=0
|
||||
DEFINES += VERSION_BUGFIX=2
|
||||
|
||||
Reference in New Issue
Block a user