Compare commits

..

14 Commits

Author SHA1 Message Date
Christophe Dumez
89a1eb1bca Update Changelog 2012-05-20 19:31:40 +03:00
Christophe Dumez
de228fe074 Fix style of left panel 2012-05-20 19:29:21 +03:00
Christophe Dumez
8846f52ce1 Fix compilation error 2012-05-20 19:28:29 +03:00
Christophe Dumez
545ce42d4e Bump version to v2.9.9 2012-05-20 18:50:46 +03:00
Christophe Dumez
faf8b0e3f5 Update Changelog 2012-05-20 17:31:44 +03:00
Christophe Dumez
70a0b3cff3 Fix KickAssTorrents plugin 2012-05-20 17:28:32 +03:00
Christophe Dumez
24ab195d2f Make sure the hide/show text in the tray icon menu is correct 2012-05-20 16:54:12 +03:00
Christophe Dumez
4bd2641d70 Update Changelog 2012-05-20 16:06:53 +03:00
Christophe Dumez
7c5779eee0 RSS: Better cookies support 2012-05-20 16:05:42 +03:00
Christophe Dumez
0bbe4426c2 BUGFIX: More reliable RSS feed parsing (closes #1001777) 2012-05-20 14:10:46 +03:00
Christophe Dumez
595a190508 Options: Make sure first tab is initially selected 2012-05-17 18:41:21 +03:00
Christophe Dumez
ec30fe2498 Never disable the properties panel 2012-05-17 17:13:55 +03:00
Christophe Dumez
4d80d6ef5c Remove focus from widgets on left panel 2012-05-17 16:50:05 +03:00
Christophe Dumez
3d53e641c1 Fix compilation on Mac OS 2012-05-05 14:45:30 +03:00
18 changed files with 88 additions and 57 deletions

View File

@@ -1,3 +1,12 @@
* Sun May 20 - Christophe Dumez <chris@qbittorrent.org> - v2.9.9
- BUGFIX: More reliable RSS feed parsing (closes #1001777)
- BUGFIX: Better support for cookies in RSS
- BUGFIX: Make sure show/hide text in tray icon menu is correct
- COSMETIC: Improve style of left panel
- COSMETIC: Never disable properties panel
- COSMETIC: Make sure first tab is initially selected in options dialog
- COSMETIC: Fix a few focus issues on Mac OS X
* Sat May 5 2012 - Christophe Dumez <chris@qbittorrent.org> - v2.9.8
- BUGFIX: Various UI style fixes
- BUGFIX: Fix compilation with gcc 4.7

View File

@@ -5,6 +5,7 @@ DATADIR = /usr/local/share
# Use pkg-config to get all necessary libtorrent DEFINES
CONFIG += link_pkgconfig
PKGCONFIG += libtorrent-rasterbar
DEFINES += BOOST_ASIO_DYN_LINK
# Special include/libs paths (macports)
INCLUDEPATH += /usr/include/openssl /usr/include /opt/local/include/boost /opt/local/include

View File

@@ -47,7 +47,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleGetInfoString</key>
<string>2.9.8</string>
<string>2.9.9</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>

View File

@@ -32,7 +32,6 @@
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkProxy>
#include <QNetworkCookie>
#include <QNetworkCookieJar>
#include "downloadthread.h"
@@ -109,39 +108,21 @@ void DownloadThread::processDlFinished(QNetworkReply* reply) {
reply->deleteLater();
}
#ifndef DISABLE_GUI
void DownloadThread::loadCookies(const QString &host_name, QString url) {
const QList<QByteArray> raw_cookies = RssSettings().getHostNameCookies(host_name);
QNetworkCookieJar *cookie_jar = m_networkManager.cookieJar();
QList<QNetworkCookie> cookies;
qDebug("Loading cookies for host name: %s", qPrintable(host_name));
foreach(const QByteArray& raw_cookie, raw_cookies) {
QList<QByteArray> cookie_parts = raw_cookie.split('=');
if(cookie_parts.size() == 2) {
qDebug("Loading cookie: %s", raw_cookie.constData());
cookies << QNetworkCookie(cookie_parts.first(), cookie_parts.last());
}
}
cookie_jar->setCookiesFromUrl(cookies, url);
m_networkManager.setCookieJar(cookie_jar);
}
#endif
void DownloadThread::downloadTorrentUrl(const QString &url) {
void DownloadThread::downloadTorrentUrl(const QString &url, const QList<QNetworkCookie>& cookies)
{
// Process request
QNetworkReply *reply = downloadUrl(url);
QNetworkReply *reply = downloadUrl(url, cookies);
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(checkDownloadSize(qint64,qint64)));
}
QNetworkReply* DownloadThread::downloadUrl(const QString &url){
QNetworkReply* DownloadThread::downloadUrl(const QString &url, const QList<QNetworkCookie>& cookies) {
// Update proxy settings
applyProxySettings();
#ifndef DISABLE_GUI
// Load cookies
QString host_name = QUrl::fromEncoded(url.toUtf8()).host();
if(!host_name.isEmpty())
loadCookies(host_name, url);
#endif
// Set cookies
if (!cookies.empty()) {
qDebug("Setting %d cookies for url: %s", cookies.size(), qPrintable(url));
m_networkManager.cookieJar()->setCookiesFromUrl(cookies, url);
}
// Process download request
qDebug("url is %s", qPrintable(url));
const QUrl qurl = QUrl::fromEncoded(url.toUtf8());

View File

@@ -32,6 +32,7 @@
#define DOWNLOADTHREAD_H
#include <QNetworkReply>
#include <QNetworkCookie>
#include <QObject>
#include <QHash>
#include <QSslError>
@@ -45,8 +46,8 @@ class DownloadThread : public QObject {
public:
DownloadThread(QObject* parent = 0);
QNetworkReply* downloadUrl(const QString &url);
void downloadTorrentUrl(const QString &url);
QNetworkReply* downloadUrl(const QString &url, const QList<QNetworkCookie>& raw_cookies = QList<QNetworkCookie>());
void downloadTorrentUrl(const QString &url, const QList<QNetworkCookie>& raw_cookies = QList<QNetworkCookie>());
//void setProxy(QString IP, int port, QString username, QString password);
signals:
@@ -63,9 +64,6 @@ private slots:
private:
QString errorCodeToString(QNetworkReply::NetworkError status);
void applyProxySettings();
#ifndef DISABLE_GUI
void loadCookies(const QString &host_name, QString url);
#endif
private:
QNetworkAccessManager m_networkManager;

View File

@@ -714,7 +714,6 @@ void MainWindow::toggleVisibility(QSystemTrayIcon::ActivationReason e) {
hide();
}
}
actionToggleVisibility->setText(isVisible() ? tr("Hide") : tr("Show"));
}
// Display About Dialog
@@ -1209,12 +1208,17 @@ void MainWindow::updateAltSpeedsBtn(bool alternative) {
actionUse_alternative_speed_limits->setChecked(alternative);
}
void MainWindow::updateTrayIconMenu()
{
actionToggleVisibility->setText(isVisible() ? tr("Hide") : tr("Show"));
}
QMenu* MainWindow::getTrayIconMenu() {
if(myTrayIconMenu)
return myTrayIconMenu;
// Tray icon Menu
myTrayIconMenu = new QMenu(this);
actionToggleVisibility->setText(isVisible() ? tr("Hide") : tr("Show"));
connect(myTrayIconMenu, SIGNAL(aboutToShow()), SLOT(updateTrayIconMenu()));
myTrayIconMenu->addAction(actionToggleVisibility);
myTrayIconMenu->addSeparator();
myTrayIconMenu->addAction(actionOpen);

View File

@@ -111,6 +111,7 @@ protected slots:
void notifyOfUpdate(QString);
void showConnectionSettings();
void minimizeWindow();
void updateTrayIconMenu();
// Keyboard shortcuts
void createKeyboardShortcuts();
void displayTransferTab() const;

View File

@@ -72,7 +72,7 @@
<bool>false</bool>
</property>
<property name="currentRow">
<number>-1</number>
<number>0</number>
</property>
<item>
<property name="text">
@@ -1419,7 +1419,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>395</width>
<width>363</width>
<height>480</height>
</rect>
</property>

View File

@@ -70,7 +70,6 @@ PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, Tra
trackerDownButton->setIcon(IconProvider::instance()->getIcon("go-down"));
state = VISIBLE;
setEnabled(false);
// Set Properties list model
PropListModel = new TorrentFilesFilterModel();
@@ -204,7 +203,6 @@ void PropertiesWidget::clear() {
PropListModel->model()->clear();
showPiecesAvailability(false);
showPiecesDownloaded(false);
setEnabled(false);
}
QTorrentHandle PropertiesWidget::getCurrentTorrent() const {
@@ -241,7 +239,6 @@ void PropertiesWidget::loadTorrentInfos(const QTorrentHandle &_h) {
clear();
return;
}
setEnabled(true);
try {
// Save path

View File

@@ -2757,7 +2757,8 @@ QString QBtSession::getSavePath(const QString &hash, bool fromScanDir, QString f
// Take an url string to a torrent file,
// download the torrent file to a tmp location, then
// add it to download list
void QBtSession::downloadFromUrl(const QString &url) {
void QBtSession::downloadFromUrl(const QString &url, const QList<QNetworkCookie>& cookies)
{
addConsoleMessage(tr("Downloading '%1', please wait...", "e.g: Downloading 'xxx.torrent', please wait...").arg(url)
#ifndef DISABLE_GUI
, QPalette::WindowText
@@ -2765,7 +2766,7 @@ void QBtSession::downloadFromUrl(const QString &url) {
);
//emit aboutToDownloadFromUrl(url);
// Launch downloader thread
downloader->downloadTorrentUrl(url);
downloader->downloadTorrentUrl(url, cookies);
}
void QBtSession::downloadFromURLList(const QStringList& urls) {

View File

@@ -41,6 +41,7 @@
#endif
#include <QPointer>
#include <QTimer>
#include <QNetworkCookie>
#include <libtorrent/version.hpp>
#include <libtorrent/session.hpp>
@@ -107,7 +108,7 @@ public slots:
QTorrentHandle addMagnetUri(QString magnet_uri, bool resumed=false);
void loadSessionState();
void saveSessionState();
void downloadFromUrl(const QString &url);
void downloadFromUrl(const QString &url, const QList<QNetworkCookie>& cookies = QList<QNetworkCookie>());
void deleteTorrent(const QString &hash, bool delete_local_files = false);
void startUpTorrents();
void recheckTorrent(const QString &hash);

View File

@@ -124,13 +124,14 @@ void RSSImp::on_actionManage_cookies_triggered() {
Q_ASSERT(!m_feedList->selectedItems().empty());
// Get feed hostname
QString feed_url = m_feedList->getItemID(m_feedList->selectedItems().first());
QString feed_hostname = QUrl::fromEncoded(feed_url.toLocal8Bit()).host();
QString feed_hostname = QUrl::fromEncoded(feed_url.toUtf8()).host();
qDebug("RSS Feed hostname is: %s", qPrintable(feed_hostname));
Q_ASSERT(!feed_hostname.isEmpty());
bool ok = false;
RssSettings settings;
QList<QByteArray> raw_cookies = CookiesDlg::askForCookies(this, settings.getHostNameCookies(feed_hostname), &ok);
if(ok) {
if (ok) {
qDebug() << "Settings cookies for host name: " << feed_hostname;
settings.setHostNameCookies(feed_hostname, raw_cookies);
}
}
@@ -325,10 +326,23 @@ void RSSImp::downloadTorrent() {
foreach(const QListWidgetItem* item, selected_items) {
const RssArticle article = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString())
->getItem(item->data(Article::IdRole).toString());
if(article.hasAttachment()) {
QBtSession::instance()->downloadFromUrl(article.torrentUrl());
// Load possible cookies
QList<QNetworkCookie> cookies;
QString feed_url = m_feedList->getItemID(m_feedList->selectedItems().first());
QString feed_hostname = QUrl::fromEncoded(feed_url.toUtf8()).host();
const QList<QByteArray> raw_cookies = RssSettings().getHostNameCookies(feed_hostname);
foreach (const QByteArray& raw_cookie, raw_cookies) {
QList<QByteArray> cookie_parts = raw_cookie.split('=');
if (cookie_parts.size() == 2) {
qDebug("Loading cookie: %s = %s", cookie_parts.first().constData(), cookie_parts.last().constData());
cookies << QNetworkCookie(cookie_parts.first(), cookie_parts.last());
}
}
qDebug("Loaded %d cookies for RSS item\n", cookies.size());
if (article.hasAttachment()) {
QBtSession::instance()->downloadFromUrl(article.torrentUrl(), cookies);
} else {
QBtSession::instance()->downloadFromUrl(article.link());
QBtSession::instance()->downloadFromUrl(article.link(), cookies);
}
}
}

View File

@@ -229,6 +229,13 @@ RssArticle::RssArticle(RssFeed* parent, QXmlStreamReader& xml)
}
}
}
// If guid is empty, fall back to some other identifier
if (d->guid.isEmpty()) {
if (!d->link.isEmpty())
d->guid = d->link;
else if (!d->title.isEmpty())
d->guid = d->title;
}
}
RssArticle::RssArticle(RssFeed* parent, const QString &guid) {

View File

@@ -1,4 +1,4 @@
#VERSION: 1.21
#VERSION: 1.22
#AUTHORS: Christophe Dumez (chris@qbittorrent.org)
# Redistribution and use in source and binary forms, with or without
@@ -39,7 +39,7 @@ class kickasstorrents(object):
self.results = []
def download_torrent(self, info):
print download_file(info)
print download_file(info, info)
def search(self, what, cat='all'):
ret = []

View File

@@ -1,4 +1,4 @@
#VERSION: 1.21
#VERSION: 1.22
#AUTHORS: Christophe Dumez (chris@qbittorrent.org)
# Redistribution and use in source and binary forms, with or without
@@ -39,7 +39,7 @@ class kickasstorrents(object):
self.results = []
def download_torrent(self, info):
print(download_file(info))
print(download_file(info, info))
def search(self, what, cat='all'):
ret = []

View File

@@ -421,7 +421,8 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) {
qDebug("Converting bc link to magnet link");
torrent_url = misc::bcLinkToMagnet(torrent_url);
}
if(torrent_url.startsWith("magnet:")) {
qDebug() << Q_FUNC_INFO << torrent_url;
if (torrent_url.startsWith("magnet:")) {
QStringList urls;
urls << torrent_url;
mp_mainWindow->downloadFromURLList(urls);

View File

@@ -42,6 +42,7 @@
#include <QStandardItemModel>
#include <QMessageBox>
#include <QScrollBar>
#include <QLabel>
#include "transferlistdelegate.h"
#include "transferlistwidget.h"
@@ -62,6 +63,7 @@ public:
// Accept drop
setAcceptDrops(true);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
setStyleSheet("QListWidget { background: transparent; border: 0 }");
}
// Redefine addItem() to make sure the list stays sorted
@@ -158,13 +160,14 @@ public:
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// Height is fixed (sizeHint().height() is used)
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
setStyleSheet("QListWidget { background: transparent; border: 0 }");
}
protected:
QSize sizeHint() const {
QSize size = QListWidget::sizeHint();
// Height should be exactly the height of the content
size.setHeight(contentsSize().height() + 2 * frameWidth());
size.setHeight(contentsSize().height() + 2 * frameWidth() + 6);
return size;
}
@@ -190,10 +193,23 @@ public:
// Construct lists
vLayout = new QVBoxLayout();
vLayout->setContentsMargins(0, 4, 0, 4);
QFont font;
font.setBold(true);
font.setCapitalization(QFont::SmallCaps);
QLabel *torrentsLabel = new QLabel(tr("Torrents"));
torrentsLabel->setIndent(2);
torrentsLabel->setFont(font);
vLayout->addWidget(torrentsLabel);
statusFilters = new StatusFiltersWidget(this);
vLayout->addWidget(statusFilters);
statusFilters->setFocusPolicy(Qt::NoFocus);
QLabel *labelsLabel = new QLabel(tr("Labels"));
labelsLabel->setIndent(2);
labelsLabel->setFont(font);
vLayout->addWidget(labelsLabel);
labelFilters = new LabelFiltersList(this);
vLayout->addWidget(labelFilters);
labelFilters->setFocusPolicy(Qt::NoFocus);
setLayout(vLayout);
labelFilters->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
statusFilters->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

View File

@@ -1,5 +1,5 @@
PROJECT_NAME = qbittorrent
PROJECT_VERSION = 2.9.8
PROJECT_VERSION = 2.9.9
os2 {
DEFINES += VERSION=\'\"v$${PROJECT_VERSION}\"\'
@@ -9,4 +9,4 @@ os2 {
DEFINES += VERSION_MAJOR=2
DEFINES += VERSION_MINOR=9
DEFINES += VERSION_BUGFIX=8
DEFINES += VERSION_BUGFIX=9