You've already forked qBittorrent
mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-10-09 18:32:15 +02:00
Compare commits
222 Commits
v3_3_x
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
55259ff3ba | ||
![]() |
da5b49fe5a | ||
![]() |
89bc0fb3e3 | ||
![]() |
c86bfe53d0 | ||
![]() |
dd177c03e6 | ||
![]() |
6615d4987b | ||
![]() |
c6e0facc0b | ||
![]() |
c6845781c7 | ||
![]() |
5decf71772 | ||
![]() |
b7f313a35c | ||
![]() |
8c14c7926f | ||
![]() |
ca6ec01f1f | ||
![]() |
2c42ab7544 | ||
![]() |
2dbbfc1031 | ||
![]() |
3762401cd9 | ||
![]() |
65c0f3f041 | ||
![]() |
7ab877c95e | ||
![]() |
7b658a52dd | ||
![]() |
3705cb8067 | ||
![]() |
8b4be9bef6 | ||
![]() |
38bef752dc | ||
![]() |
a61a84d419 | ||
![]() |
553abb6442 | ||
![]() |
14419c190e | ||
![]() |
4e6ab18446 | ||
![]() |
fdeec686bf | ||
![]() |
25e4f562e7 | ||
![]() |
d86baf1ed8 | ||
![]() |
8112405498 | ||
![]() |
7f73eca01d | ||
![]() |
9951017f8b | ||
![]() |
57bbaeab06 | ||
![]() |
52fefd3dd6 | ||
![]() |
c1cddd2f7a | ||
![]() |
caabe526ca | ||
![]() |
19475f5abb | ||
![]() |
dca36a4817 | ||
![]() |
e38ef96c94 | ||
![]() |
43aff3885d | ||
![]() |
4b4d52d8d3 | ||
![]() |
735247f41f | ||
![]() |
422d0c9210 | ||
![]() |
6ea90c9741 | ||
![]() |
c2bbb5b71a | ||
![]() |
a2656670f7 | ||
![]() |
ae2781b4c8 | ||
![]() |
65a81f4fca | ||
![]() |
e025b2aa10 | ||
![]() |
9399f06db9 | ||
![]() |
2e6370084a | ||
![]() |
adc478a8dc | ||
![]() |
247c9a85e2 | ||
![]() |
40fc98d354 | ||
![]() |
5797d86c05 | ||
![]() |
62de16c56e | ||
![]() |
d89f2b0783 | ||
![]() |
d6b2131a91 | ||
![]() |
b085fc12d0 | ||
![]() |
0da431b7a3 | ||
![]() |
3e18308301 | ||
![]() |
47c7ffba99 | ||
![]() |
42b1dffbb9 | ||
![]() |
73ebe7e1fb | ||
![]() |
c9c3589946 | ||
![]() |
62596ab533 | ||
![]() |
0be1c661aa | ||
![]() |
eb10a80c3c | ||
![]() |
3679c79b5c | ||
![]() |
a0816d1ec6 | ||
![]() |
175ac42b43 | ||
![]() |
d39874551c | ||
![]() |
16402f75cf | ||
![]() |
aacea44d41 | ||
![]() |
f2a90520d7 | ||
![]() |
34d25006f4 | ||
![]() |
e382fb1bec | ||
![]() |
ba9e3558a2 | ||
![]() |
f6514b4e7d | ||
![]() |
fe7ffdd413 | ||
![]() |
8d1a4cb40a | ||
![]() |
ad3f4842f8 | ||
![]() |
944fc5cf38 | ||
![]() |
026c065ebc | ||
![]() |
00ac784a4d | ||
![]() |
7d99223547 | ||
![]() |
65a338b5c2 | ||
![]() |
b0fd6ac756 | ||
![]() |
c268ca1278 | ||
![]() |
13e3141dfb | ||
![]() |
70fbd61758 | ||
![]() |
db638319c7 | ||
![]() |
8d36a03f68 | ||
![]() |
2b8dc3df18 | ||
![]() |
11c5172588 | ||
![]() |
43f55f5d3c | ||
![]() |
153ebe2b77 | ||
![]() |
70d11217de | ||
![]() |
82beff5527 | ||
![]() |
2e4f0876b0 | ||
![]() |
072a72316f | ||
![]() |
d199482205 | ||
![]() |
eae7953061 | ||
![]() |
d88d4e9165 | ||
![]() |
cea36bc756 | ||
![]() |
c517444258 | ||
![]() |
a109274d1f | ||
![]() |
490cb9dfdb | ||
![]() |
ab748166d5 | ||
![]() |
a796df9019 | ||
![]() |
85abc98759 | ||
![]() |
041540de6b | ||
![]() |
72a06ad176 | ||
![]() |
eea69630fb | ||
![]() |
19846758d8 | ||
![]() |
7532fcfd3c | ||
![]() |
616575911f | ||
![]() |
227a1f6532 | ||
![]() |
2c7186a381 | ||
![]() |
b4775b9d29 | ||
![]() |
ad8d7e3373 | ||
![]() |
b5e7443ae3 | ||
![]() |
5a33c0d9ba | ||
![]() |
7064ac994b | ||
![]() |
3c05e660b3 | ||
![]() |
ed54c5f7ac | ||
![]() |
63d6dd3735 | ||
![]() |
02d56fd026 | ||
![]() |
d4c9da6475 | ||
![]() |
99f126d0b6 | ||
![]() |
8110d0eb01 | ||
![]() |
90a2021948 | ||
![]() |
7bfd0e058b | ||
![]() |
6dcfe5b215 | ||
![]() |
7daeb0297d | ||
![]() |
76597fa080 | ||
![]() |
14908f3fc8 | ||
![]() |
3269cdfa70 | ||
![]() |
5f0e3e3443 | ||
![]() |
fcd37dcbb4 | ||
![]() |
528759fdaa | ||
![]() |
cfe1235b57 | ||
![]() |
e5d5f84ae7 | ||
![]() |
bbda5c4f44 | ||
![]() |
9605192834 | ||
![]() |
4c6e526e6c | ||
![]() |
e43fa17429 | ||
![]() |
c5dd14788a | ||
![]() |
334ba32d69 | ||
![]() |
8ba1941ab9 | ||
![]() |
ea85532cc2 | ||
![]() |
d3ee2e66af | ||
![]() |
4ac917ef66 | ||
![]() |
41660385d7 | ||
![]() |
e5ae8e5ac9 | ||
![]() |
7fb87660ac | ||
![]() |
6ea7b5b1d0 | ||
![]() |
b624ad312b | ||
![]() |
b64f4081cf | ||
![]() |
bd9b153e9b | ||
![]() |
32ca66f234 | ||
![]() |
753e9181fe | ||
![]() |
9546a73182 | ||
![]() |
c0ee99c553 | ||
![]() |
50976b8dc2 | ||
![]() |
6a312461a1 | ||
![]() |
3fe09bde12 | ||
![]() |
f851b18b80 | ||
![]() |
ced29ced1b | ||
![]() |
5023b1ab74 | ||
![]() |
c2ef78de8d | ||
![]() |
6fbe452b55 | ||
![]() |
51c4a0d8d0 | ||
![]() |
b191a977af | ||
![]() |
61858814ee | ||
![]() |
365387f092 | ||
![]() |
df295d96c2 | ||
![]() |
a069f806d9 | ||
![]() |
4638a9e6ee | ||
![]() |
af790e40f8 | ||
![]() |
76fd5d3eb4 | ||
![]() |
dc8a8fbc06 | ||
![]() |
30e0cc20c8 | ||
![]() |
63dcb81384 | ||
![]() |
ce391ad328 | ||
![]() |
7b908c7adf | ||
![]() |
0d26d734b3 | ||
![]() |
f836c40fc4 | ||
![]() |
21fe7f2ca6 | ||
![]() |
da85a57f83 | ||
![]() |
e35664b188 | ||
![]() |
2fc350b265 | ||
![]() |
83bcd6a2d7 | ||
![]() |
edcfa4df12 | ||
![]() |
12a83e1aec | ||
![]() |
7d50a8b28c | ||
![]() |
232e112d84 | ||
![]() |
5b1ee883b4 | ||
![]() |
b07fceec65 | ||
![]() |
4c9cf6c773 | ||
![]() |
164f37e961 | ||
![]() |
093fb303f3 | ||
![]() |
f3d5039e33 | ||
![]() |
007c307388 | ||
![]() |
4079689f32 | ||
![]() |
2b3d6926c8 | ||
![]() |
14b3414e9d | ||
![]() |
73254962f1 | ||
![]() |
74f042516b | ||
![]() |
8c0853248c | ||
![]() |
80ea0a67b5 | ||
![]() |
6d2b51203c | ||
![]() |
8ac82156b3 | ||
![]() |
c1806b099a | ||
![]() |
1046c816bf | ||
![]() |
cfbb5ecde5 | ||
![]() |
afdec02674 | ||
![]() |
927e6bc6cc | ||
![]() |
e862d3332c | ||
![]() |
699144a83d | ||
![]() |
1792f44bfa | ||
![]() |
64e4095ef1 | ||
![]() |
1d1ffcec7c |
3
AUTHORS
3
AUTHORS
@@ -92,8 +92,9 @@ Translations authors:
|
||||
- Georgian: Beqa Arabuli (arabulibeqa@yahoo.com)
|
||||
- German: Niels Hoffmann (zentralmaschine@users.sourceforge.net)
|
||||
- Greek: Tsvetan Bankov (emerge_life@users.sourceforge.net) and Stephanos Antaris (santaris@csd.auth.gr)
|
||||
- Hebrew: David Deutsch (d.deffo@gmail.com)
|
||||
- Hungarian: Majoros Péter (majoros.j.p@t-online.hu)
|
||||
- Italian: Matteo Sechi (bu17714@gmail.com)
|
||||
- Italian: bovirus (bovirus@live.it) and Matteo Sechi (bu17714@gmail.com)
|
||||
- Japanese: Masato Hashimoto (cabezon.hashimoto@gmail.com)
|
||||
- Korean: Jin Woo Sin (jin828sin@users.sourceforge.net)
|
||||
- Lithuanian: Naglis Jonaitis (njonaitis@gmail.com)
|
||||
|
71
Changelog
71
Changelog
@@ -1,3 +1,74 @@
|
||||
* Sat Mar 16 2013 - Christophe Dumez <chris@qbittorrent.org> - v3.0.9
|
||||
- BUGFIX: Raise qBittorrent windows when another instance is launched
|
||||
- BUGFIX: Show human readable names for network interfaces in preferences (Windows)
|
||||
- BUGFIX: Fix torrent creator bug when saving non-latin path (Windows)
|
||||
- BUGFIX: Enable 'copy magnet uri' for torrents without metadata too
|
||||
- BUGFIX: Fix a few JSON parser issues (Gelmir)
|
||||
- BUGFIX: Add support for gzipped encoded HTTP responses (daimor)
|
||||
- BUGFIX: Fix possibly missing "Add torrent" icon (Driim)
|
||||
- OTHER: Add search plugin for Legit Torrents
|
||||
|
||||
* Sun Jan 20 2013 - Christophe Dumez <chris@qbittorrent.org> - v3.0.8
|
||||
- BUGFIX: Fix support for --no-splash command line argument
|
||||
- BUGFIX: Fix compilation error with libtorrent v0.15
|
||||
- BUGFIX: Fix search issues with Python3
|
||||
- BUGFIX: Fix dead link about certificates in program preferences
|
||||
|
||||
* Sat Jan 19 2013 - Christophe Dumez <chris@qbittorrent.org> - v3.0.7
|
||||
- BUGFIX: Update max write cache size to 2048MB and set it to automatic by default (closes #148)
|
||||
- BUGFIX: Add m4v to the list of previewable file extensions (closes #216)
|
||||
- BUGFIX: Fix "Couldn't set environment variable..." message on start up (closes #245)
|
||||
- BUGFIX: Use right path separator in torrent addition dialog on Windows
|
||||
- BUGFIX: Fix "Set as default save path" setting (closes #254)
|
||||
- BUGFIX: Reenable disk cache on Windows since the memory issue seems to be gone
|
||||
- BUGFIX: Fixed several search engine plugins and removed the dead ones
|
||||
- BUGFIX: Use https links in search plugins when possible
|
||||
- BUGFIX: Bump Mootools to v1.4.5 (Web UI)
|
||||
- BUGFIX: Require password to exit qBittorrent from tray icon when locked (closes #311)
|
||||
- BUGFIX: Fix possible crash in loadPeers() (closes #222)
|
||||
|
||||
* Sun Oct 7 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.6
|
||||
- BUGFIX: Fix unicode support for command-line arguments on Windows (closes #139)
|
||||
- BUGFIX: Do not store created torrent in memory before writing it to a file (closes #133)
|
||||
- BUGFIX: No longer fallback to ANY interface if the user-selected interface cannot be found (closes #143)
|
||||
- BUGFIX: Fix timezone parsing in RSS (closes #136)
|
||||
- BUGFIX: Fix cookie support for RSS feeds (closes #119)
|
||||
|
||||
* Sun Sep 30 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.5
|
||||
- BUGFIX: Disabling systray icon no longer disables file association settings (closes #114)
|
||||
- BUGFIX: Import new trackers from magnet link in case of duplicate torrent (closes #111)
|
||||
- BUGFIX: Fix "Skip hash check" feature in torrent import dialog (closes #128)
|
||||
- BUGFIX: Several Web UI connection fixes
|
||||
- BUGFIX: Add Basque locale to Web UI
|
||||
|
||||
* Tue Sep 18 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.4
|
||||
- BUGFIX: Fix issue with downloads starting from scratch on startup if temporary
|
||||
directory setting is enabled.
|
||||
|
||||
* Sun Sep 16 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.3
|
||||
- BUGFIX: Fix issue with temporary directory not being taken into consideration (closes #94)
|
||||
- BUGFIX: Address encoding issues when using search engine on Windows (closes #29)
|
||||
- BUGFIX: Bypass cache when uploading a torrent file in Web UI (closes #68)
|
||||
- BUGFIX: "Completed On" column is not updated until restart (closes #84)
|
||||
- BUGFIX: Fix possible build error on some systems
|
||||
- I18N: Add hebrew translation
|
||||
|
||||
* 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)
|
||||
- BUGFIX: Fix crash when using unauthorized characters in label names (closes #19)
|
||||
- BUGFIX: Fix search plugins updating (closes #25)
|
||||
- BUGFIX: Make uTP connections rate limited by default
|
||||
|
||||
* Thu Aug 09 2012 - Christophe Dumez <chris@qbittorrent.org> - v3.0.0
|
||||
- FEATURE: Brand new torrent addition dialog
|
||||
- FEATURE: Add the ability to choose the save path when using magnet links (mutoso)
|
||||
|
15
README.os2
15
README.os2
@@ -42,7 +42,10 @@ LIBS += -Lx:/trees/libtorrent/trunk/src/.libs \
|
||||
|
||||
Of course all the above path references have to be adjusted to your build env.
|
||||
|
||||
It should now be easy to build qBittorrent:
|
||||
Now you can either do a normal build or a shadow build. A shadow build has the
|
||||
advantage that no created files are in the same dir as the sources are.
|
||||
|
||||
For a normal build do the following:
|
||||
|
||||
Simply type:
|
||||
$ qmake
|
||||
@@ -50,6 +53,16 @@ $ qmake
|
||||
Followed by:
|
||||
$ make
|
||||
|
||||
For a shadow build do the following:
|
||||
given your sources are in x:\trees\qbittorrent\trunk create a
|
||||
x:\trees\qbittorrent\build directory
|
||||
|
||||
Now switch to the created directory and type:
|
||||
$ qmake ..\trunk
|
||||
|
||||
Followed by:
|
||||
$ make
|
||||
|
||||
If all works fine you should get a working qbittorrent executable.
|
||||
|
||||
If you have any question regarding the eCS (OS/2) port of qBittorrent you can meet me (_diver) on IRC:
|
||||
|
15
install.os2
15
install.os2
@@ -67,7 +67,7 @@ ZIP Installation:
|
||||
klibc
|
||||
-----
|
||||
|
||||
1. Download klibc 0.6.4 or better (see http://svn.netlabs.org/libc for more information)
|
||||
1. Download klibc 0.6.5 or better (see http://svn.netlabs.org/libc for more information)
|
||||
2. Install the files to your libpath eg x:\ecs\dll
|
||||
|
||||
openssl 1.0
|
||||
@@ -146,6 +146,19 @@ development, you can do so in one of the following ways:
|
||||
7. HISTORY
|
||||
==========
|
||||
|
||||
2012-09-19
|
||||
|
||||
* updated to 3.0.4 code level of QBittorrent
|
||||
* updated libtorrent to 0.16.3 level
|
||||
|
||||
2012-09-06
|
||||
|
||||
* updated to 3.0.2 code level of QBittorrent
|
||||
|
||||
2012-05-14
|
||||
|
||||
* updated to 2.9.8 code level of QBittorrent
|
||||
|
||||
2012-03-15
|
||||
|
||||
* updated to 2.9.5 code level of QBittorrent
|
||||
|
46
macxconf.pri
46
macxconf.pri
@@ -16,16 +16,52 @@ LIBS += -lssl -lcrypto
|
||||
# Boost system lib
|
||||
LIBS += -lboost_system-mt
|
||||
# Boost filesystem lib (Not needed for libtorrent >= 0.16.0)
|
||||
LIBS += -lboost_filesystem-mt
|
||||
#LIBS += -lboost_filesystem-mt
|
||||
# Carbon
|
||||
LIBS += -framework Carbon -framework IOKit
|
||||
# Zlib
|
||||
LIBS += -lz
|
||||
|
||||
document_icon.path = Contents/Resources
|
||||
document_icon.files = Icons/qBitTorrentDocument.icns
|
||||
|
||||
document_icon.files = mac/qBitTorrentDocument.icns
|
||||
QMAKE_BUNDLE_DATA += document_icon
|
||||
ICON = Icons/qbittorrent_mac.icns
|
||||
QMAKE_INFO_PLIST = Info.plist
|
||||
|
||||
qt_conf.path = Contents/Resources
|
||||
qt_conf.files = mac/qt.conf
|
||||
QMAKE_BUNDLE_DATA += qt_conf
|
||||
|
||||
qt_translations.path = Contents/MacOS/translations
|
||||
qt_translations.files = qt-translations/qt_ar.qm \
|
||||
qt-translations/qt_bg.qm \
|
||||
qt-translations/qt_ca.qm \
|
||||
qt-translations/qt_cs.qm \
|
||||
qt-translations/qt_da.qm \
|
||||
qt-translations/qt_de.qm \
|
||||
qt-translations/qt_es.qm \
|
||||
qt-translations/qt_fi.qm \
|
||||
qt-translations/qt_fr.qm \
|
||||
qt-translations/qt_gl.qm \
|
||||
qt-translations/qt_he.qm \
|
||||
qt-translations/qt_hu.qm \
|
||||
qt-translations/qt_it.qm \
|
||||
qt-translations/qt_ja.qm \
|
||||
qt-translations/qt_ko.qm \
|
||||
qt-translations/qt_lt.qm \
|
||||
qt-translations/qt_nl.qm \
|
||||
qt-translations/qt_pl.qm \
|
||||
qt-translations/qt_pt.qm \
|
||||
qt-translations/qt_pt_BR.qm \
|
||||
qt-translations/qt_ru.qm \
|
||||
qt-translations/qt_sk.qm \
|
||||
qt-translations/qt_sv.qm \
|
||||
qt-translations/qt_tr.qm \
|
||||
qt-translations/qt_uk.qm \
|
||||
qt-translations/qt_zh_CN.qm \
|
||||
qt-translations/qt_zh_TW.qm
|
||||
QMAKE_BUNDLE_DATA += qt_translations
|
||||
|
||||
ICON = mac/qbittorrent_mac.icns
|
||||
QMAKE_INFO_PLIST = mac/Info.plist
|
||||
|
||||
DEFINES += WITH_GEOIP_EMBEDDED
|
||||
message("On Mac OS X, GeoIP database must be embedded.")
|
||||
|
@@ -7,12 +7,13 @@ LIBS += -ltorrent-rasterbar \
|
||||
-lboost_thread \
|
||||
-lboost_system \
|
||||
-lboost_filesystem \
|
||||
-lssl -lcrypto -lidn -lpthread
|
||||
-lssl -lcrypto -lidn -lpthread -lz
|
||||
|
||||
RC_FILE = qbittorrent_os2.rc
|
||||
|
||||
# LIBTORRENT DEFINES
|
||||
DEFINES += WITH_SHIPPED_GEOIP_H
|
||||
DEFINES += BOOST_ASIO_DYN_LINK
|
||||
|
||||
DEFINES += WITH_GEOIP_EMBEDDED
|
||||
message("On eCS(OS/2), GeoIP database must be embedded.")
|
||||
|
@@ -80,8 +80,9 @@ class about : public QDialog, private Ui::AboutDlg{
|
||||
<li><u>Georgian:</u> Beqa Arabuli (arabulibeqa@yahoo.com)</li>\
|
||||
<li><u>German:</u> Niels Hoffmann (zentralmaschine@users.sourceforge.net)</li>\
|
||||
<li><u>Greek:</u> Tsvetan Bankov (emerge_life@users.sourceforge.net)</li>\
|
||||
<li><u>Hebrew:</u> David Deutsch (d.deffo@gmail.com)</li>\
|
||||
<li><u>Hungarian:</u> Majoros Péter (majoros.peterj@gmail.com)</li>\
|
||||
<li><u>Italian:</u> Matteo Sechi (bu17714@gmail.com)</li>\
|
||||
<li><u>Italian:</u> bovirus (bovirus@live.it) and Matteo Sechi (bu17714@gmail.com)</li>\
|
||||
<li><u>Japanese:</u> Masato Hashimoto (cabezon.hashimoto@gmail.com)</li>\
|
||||
<li><u>Korean:</u> Jin Woo Sin (jin828sin@users.sourceforge.net)</li>\
|
||||
<li><u>Lithuanian:</u> Naglis Jonaitis (njonaitis@gmail.com)</li>\
|
||||
|
@@ -65,7 +65,7 @@ AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent) :
|
||||
QIniSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent"));
|
||||
Preferences pref;
|
||||
ui->start_torrent_cb->setChecked(!pref.addTorrentsInPause());
|
||||
ui->save_path_combo->addItem(fsutils::toDisplayPath(pref.getSavePath()));
|
||||
ui->save_path_combo->addItem(fsutils::toDisplayPath(pref.getSavePath()), pref.getSavePath());
|
||||
loadSavePathHistory();
|
||||
ui->save_path_combo->insertSeparator(ui->save_path_combo->count());
|
||||
ui->save_path_combo->addItem(tr("Other...", "Other save path..."));
|
||||
@@ -225,7 +225,7 @@ bool AddNewTorrentDialog::loadTorrent(const QString& torrent_path, const QString
|
||||
QString single_file_relpath = misc::toQStringU(m_torrentInfo->file_at(0).path.string());
|
||||
#endif
|
||||
for (int i=0; i<ui->save_path_combo->count()-1; ++i) {
|
||||
ui->save_path_combo->setItemText(i, QDir(ui->save_path_combo->itemText(i)).absoluteFilePath(single_file_relpath));
|
||||
ui->save_path_combo->setItemText(i, fsutils::toDisplayPath(QDir(ui->save_path_combo->itemText(i)).absoluteFilePath(single_file_relpath)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,7 +323,7 @@ void AddNewTorrentDialog::updateDiskSpaceLabel()
|
||||
void AddNewTorrentDialog::onSavePathChanged(int index)
|
||||
{
|
||||
static int old_index = 0;
|
||||
static QDir defaultSaveDir(ui->save_path_combo->itemData(0).toString());
|
||||
Preferences pref;
|
||||
|
||||
if (index == (ui->save_path_combo->count() - 1)) {
|
||||
disconnect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onSavePathChanged(int)));
|
||||
@@ -370,7 +370,7 @@ void AddNewTorrentDialog::onSavePathChanged(int index)
|
||||
}
|
||||
// Toggle default save path setting checkbox visibility
|
||||
ui->default_save_path_cb->setChecked(false);
|
||||
ui->default_save_path_cb->setVisible(QDir(ui->save_path_combo->itemData(ui->save_path_combo->currentIndex()).toString()) != defaultSaveDir);
|
||||
ui->default_save_path_cb->setVisible(QDir(ui->save_path_combo->itemData(ui->save_path_combo->currentIndex()).toString()) != pref.getSavePath());
|
||||
relayout();
|
||||
// Remember index
|
||||
old_index = ui->save_path_combo->currentIndex();
|
||||
@@ -394,7 +394,7 @@ void AddNewTorrentDialog::renameSelectedFile()
|
||||
bool ok;
|
||||
const QString new_name_last = QInputDialog::getText(this, tr("Rename the file"),
|
||||
tr("New name:"), QLineEdit::Normal,
|
||||
index.data().toString(), &ok);
|
||||
index.data().toString(), &ok).trimmed();
|
||||
if (ok && !new_name_last.isEmpty()) {
|
||||
if (!fsutils::isValidFileSystemName(new_name_last)) {
|
||||
QMessageBox::warning(this, tr("The file could not be renamed"),
|
||||
@@ -594,6 +594,8 @@ void AddNewTorrentDialog::on_buttonBox_accepted()
|
||||
saveSavePathHistory();
|
||||
// Save settings
|
||||
pref.useAdditionDialog(!ui->never_show_cb->isChecked());
|
||||
if (ui->default_save_path_cb->isChecked())
|
||||
if (ui->default_save_path_cb->isChecked()) {
|
||||
pref.setSavePath(ui->save_path_combo->itemData(ui->save_path_combo->currentIndex()).toString());
|
||||
QBtSession::instance()->setDefaultSavePath(pref.getSavePath());
|
||||
}
|
||||
}
|
||||
|
@@ -50,6 +50,56 @@ DownloadThread::DownloadThread(QObject* parent) : QObject(parent) {
|
||||
#endif
|
||||
}
|
||||
|
||||
QByteArray DownloadThread::gUncompress(Bytef *inData, size_t len) {
|
||||
if (len <= 4) {
|
||||
qWarning("gUncompress: Input data is truncated");
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
QByteArray result;
|
||||
z_stream strm;
|
||||
static const int CHUNK_SIZE = 1024;
|
||||
char out[CHUNK_SIZE];
|
||||
|
||||
/* allocate inflate state */
|
||||
strm.zalloc = Z_NULL;
|
||||
strm.zfree = Z_NULL;
|
||||
strm.opaque = Z_NULL;
|
||||
strm.avail_in = len;
|
||||
strm.next_in = inData;
|
||||
|
||||
const int windowBits = 15;
|
||||
const int ENABLE_ZLIB_GZIP = 32;
|
||||
|
||||
int ret = inflateInit2(&strm, windowBits|ENABLE_ZLIB_GZIP); // gzip decoding
|
||||
if (ret != Z_OK)
|
||||
return QByteArray();
|
||||
|
||||
// run inflate()
|
||||
do {
|
||||
strm.avail_out = CHUNK_SIZE;
|
||||
strm.next_out = reinterpret_cast<unsigned char*>(out);
|
||||
|
||||
ret = inflate(&strm, Z_NO_FLUSH);
|
||||
Q_ASSERT(ret != Z_STREAM_ERROR); // state not clobbered
|
||||
|
||||
switch (ret) {
|
||||
case Z_NEED_DICT:
|
||||
case Z_DATA_ERROR:
|
||||
case Z_MEM_ERROR:
|
||||
(void) inflateEnd(&strm);
|
||||
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
result.append(out, CHUNK_SIZE - strm.avail_out);
|
||||
} while (!strm.avail_out);
|
||||
|
||||
// clean up and return
|
||||
inflateEnd(&strm);
|
||||
return result;
|
||||
}
|
||||
|
||||
void DownloadThread::processDlFinished(QNetworkReply* reply) {
|
||||
QString url = reply->url().toString();
|
||||
qDebug("Download finished: %s", qPrintable(url));
|
||||
@@ -72,7 +122,8 @@ void DownloadThread::processDlFinished(QNetworkReply* reply) {
|
||||
const QString newUrlString = newUrl.toString();
|
||||
qDebug("Redirecting from %s to %s", qPrintable(url), qPrintable(newUrlString));
|
||||
m_redirectMapping.insert(newUrlString, url);
|
||||
downloadUrl(newUrlString);
|
||||
// redirecting with first cookies
|
||||
downloadUrl(newUrlString, m_networkManager.cookieJar()->cookiesForUrl(url));
|
||||
reply->deleteLater();
|
||||
return;
|
||||
}
|
||||
@@ -87,8 +138,12 @@ void DownloadThread::processDlFinished(QNetworkReply* reply) {
|
||||
QString filePath = tmpfile->fileName();
|
||||
qDebug("Temporary filename is: %s", qPrintable(filePath));
|
||||
if (reply->isOpen() || reply->open(QIODevice::ReadOnly)) {
|
||||
// TODO: Support GZIP compression
|
||||
tmpfile->write(reply->readAll());
|
||||
QByteArray replyData = reply->readAll();
|
||||
if (reply->rawHeader("Content-Encoding") == "gzip") {
|
||||
// uncompress gzip reply
|
||||
replyData = gUncompress(reinterpret_cast<unsigned char*>(replyData.data()), replyData.length());
|
||||
}
|
||||
tmpfile->write(replyData);
|
||||
tmpfile->close();
|
||||
// XXX: tmpfile needs to be deleted on Windows before using the file
|
||||
// or it will complain that the file is used by another process.
|
||||
@@ -136,6 +191,8 @@ QNetworkReply* DownloadThread::downloadUrl(const QString &url, const QList<QNetw
|
||||
qDebug("%s=%s", m_networkManager.cookieJar()->cookiesForUrl(url).at(i).name().data(), m_networkManager.cookieJar()->cookiesForUrl(url).at(i).value().data());
|
||||
qDebug("Domain: %s, Path: %s", qPrintable(m_networkManager.cookieJar()->cookiesForUrl(url).at(i).domain()), qPrintable(m_networkManager.cookieJar()->cookiesForUrl(url).at(i).path()));
|
||||
}
|
||||
// accept gzip
|
||||
request.setRawHeader("Accept-Encoding", "gzip");
|
||||
return m_networkManager.get(request);
|
||||
}
|
||||
|
||||
|
@@ -36,6 +36,7 @@
|
||||
#include <QObject>
|
||||
#include <QHash>
|
||||
#include <QSslError>
|
||||
#include <zlib.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QNetworkAccessManager;
|
||||
@@ -46,8 +47,8 @@ class DownloadThread : public QObject {
|
||||
|
||||
public:
|
||||
DownloadThread(QObject* parent = 0);
|
||||
QNetworkReply* downloadUrl(const QString &url, const QList<QNetworkCookie>& raw_cookies = QList<QNetworkCookie>());
|
||||
void downloadTorrentUrl(const QString &url, const QList<QNetworkCookie>& raw_cookies = QList<QNetworkCookie>());
|
||||
QNetworkReply* downloadUrl(const QString &url, const QList<QNetworkCookie>& cookies = QList<QNetworkCookie>());
|
||||
void downloadTorrentUrl(const QString &url, const QList<QNetworkCookie>& cookies = QList<QNetworkCookie>());
|
||||
//void setProxy(QString IP, int port, QString username, QString password);
|
||||
|
||||
signals:
|
||||
@@ -62,6 +63,7 @@ private slots:
|
||||
#endif
|
||||
|
||||
private:
|
||||
static QByteArray gUncompress(Bytef *inData, size_t len);
|
||||
QString errorCodeToString(QNetworkReply::NetworkError status);
|
||||
void applyProxySettings();
|
||||
|
||||
|
@@ -66,9 +66,6 @@
|
||||
|
||||
using namespace libtorrent;
|
||||
|
||||
// EXT2/3/4 file systems support a maximum of 255 bytes for filenames.
|
||||
const int MAX_FILENAME_BYTES = 255;
|
||||
|
||||
/**
|
||||
* Converts a path to a string suitable for display.
|
||||
* This function makes sure the directory separator used is consistent
|
||||
@@ -76,12 +73,7 @@ const int MAX_FILENAME_BYTES = 255;
|
||||
*/
|
||||
QString fsutils::toDisplayPath(const QString& path)
|
||||
{
|
||||
#if defined(Q_WS_WIN) || defined(Q_OS_OS2)
|
||||
QString ret = path;
|
||||
return ret.replace("/", "\\");
|
||||
#else
|
||||
return path;
|
||||
#endif
|
||||
return QDir::toNativeSeparators(path);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -204,54 +196,6 @@ qint64 fsutils::computePathSize(const QString& path)
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fixes the given file path by shortening the file names if too long.
|
||||
*/
|
||||
QString fsutils::fixFileNames(const QString& path)
|
||||
{
|
||||
QByteArray raw_path = path.toLocal8Bit();
|
||||
raw_path.replace("\\", "/");
|
||||
QList<QByteArray> parts = raw_path.split('/');
|
||||
if (parts.isEmpty()) return path;
|
||||
QByteArray last_part = parts.takeLast();
|
||||
|
||||
QList<QByteArray>::iterator it = parts.begin();
|
||||
QList<QByteArray>::iterator itend = parts.end();
|
||||
for ( ; it != itend; ++it) {
|
||||
// Make sure the filename is not too long
|
||||
if (it->size() > MAX_FILENAME_BYTES) {
|
||||
qWarning() << "Folder" << *it << "was cut because it was too long";
|
||||
it->resize(MAX_FILENAME_BYTES);
|
||||
qWarning() << "New folder name is" << *it;
|
||||
Q_ASSERT(it->length() == MAX_FILENAME_BYTES);
|
||||
}
|
||||
}
|
||||
// Fix the last part (file name)
|
||||
qDebug() << "Last part length:" << last_part.length();
|
||||
if (last_part.length() > MAX_FILENAME_BYTES) {
|
||||
qWarning() << "Filename" << last_part << "was cut because it was too long";
|
||||
// Shorten the name, keep the file extension
|
||||
const int point_index = last_part.lastIndexOf(".");
|
||||
QByteArray extension = "";
|
||||
if (point_index >= 0) {
|
||||
extension = last_part.mid(point_index);
|
||||
last_part = last_part.left(point_index);
|
||||
}
|
||||
last_part.resize(MAX_FILENAME_BYTES - extension.length());
|
||||
last_part += extension;
|
||||
Q_ASSERT(last_part.length() == MAX_FILENAME_BYTES);
|
||||
qWarning() << "New file name is" << last_part;
|
||||
}
|
||||
|
||||
QString ret;
|
||||
foreach(const QByteArray& part, parts) {
|
||||
ret += QString::fromLocal8Bit(part.constData()) + "/";
|
||||
}
|
||||
ret += QString::fromLocal8Bit(last_part.constData());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes deep comparison of two files to make sure they are identical.
|
||||
*/
|
||||
@@ -452,7 +396,7 @@ QString fsutils::QDesktopServicesDataLocation() {
|
||||
}
|
||||
|
||||
QString fsutils::QDesktopServicesCacheLocation() {
|
||||
#ifdef Q_WS_WIN
|
||||
#if defined(Q_WS_WIN) || defined(Q_OS_OS2)
|
||||
return QDesktopServicesDataLocation() + QLatin1String("\\cache");
|
||||
#else
|
||||
#ifdef Q_WS_MAC
|
||||
@@ -496,6 +440,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
|
||||
|
@@ -46,7 +46,6 @@ static QString toDisplayPath(const QString& path);
|
||||
static QString fileExtension(const QString& filename);
|
||||
static QString fileName(const QString& file_path);
|
||||
static qint64 computePathSize(const QString& path);
|
||||
static QString fixFileNames(const QString& path);
|
||||
static bool sameFiles(const QString& path1, const QString& path2);
|
||||
static QString updateLabelInSavePath(QString defaultSavePath, QString save_path, const QString& old_label, const QString& new_label);
|
||||
static QString toValidFileSystemName(QString filename);
|
||||
|
646
src/icons.qrc
646
src/icons.qrc
File diff suppressed because it is too large
Load Diff
67
src/lang.qrc
67
src/lang.qrc
@@ -1,40 +1,41 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>lang/qbittorrent_nl.qm</file>
|
||||
<file>lang/qbittorrent_hu.qm</file>
|
||||
<file>lang/qbittorrent_ru.qm</file>
|
||||
<file>lang/qbittorrent_zh_TW.qm</file>
|
||||
<file>lang/qbittorrent_tr.qm</file>
|
||||
<file>lang/qbittorrent_fi.qm</file>
|
||||
<file>lang/qbittorrent_sk.qm</file>
|
||||
<file>lang/qbittorrent_ja.qm</file>
|
||||
<file>lang/qbittorrent_el.qm</file>
|
||||
<file>lang/qbittorrent_ar.qm</file>
|
||||
<file>lang/qbittorrent_be.qm</file>
|
||||
<file>lang/qbittorrent_bg.qm</file>
|
||||
<file>lang/qbittorrent_ca.qm</file>
|
||||
<file>lang/qbittorrent_pt.qm</file>
|
||||
<file>lang/qbittorrent_it.qm</file>
|
||||
<file>lang/qbittorrent_cs.qm</file>
|
||||
<file>lang/qbittorrent_da.qm</file>
|
||||
<file>lang/qbittorrent_de.qm</file>
|
||||
<file>lang/qbittorrent_el.qm</file>
|
||||
<file>lang/qbittorrent_en.qm</file>
|
||||
<file>lang/qbittorrent_es.qm</file>
|
||||
<file>lang/qbittorrent_eu.qm</file>
|
||||
<file>lang/qbittorrent_fi.qm</file>
|
||||
<file>lang/qbittorrent_fr.qm</file>
|
||||
<file>lang/qbittorrent_gl.qm</file>
|
||||
<file>lang/qbittorrent_he.qm</file>
|
||||
<file>lang/qbittorrent_hr.qm</file>
|
||||
<file>lang/qbittorrent_hu.qm</file>
|
||||
<file>lang/qbittorrent_hy.qm</file>
|
||||
<file>lang/qbittorrent_it.qm</file>
|
||||
<file>lang/qbittorrent_ja.qm</file>
|
||||
<file>lang/qbittorrent_ka.qm</file>
|
||||
<file>lang/qbittorrent_ko.qm</file>
|
||||
<file>lang/qbittorrent_lt.qm</file>
|
||||
<file>lang/qbittorrent_nb.qm</file>
|
||||
<file>lang/qbittorrent_nl.qm</file>
|
||||
<file>lang/qbittorrent_pl.qm</file>
|
||||
<file>lang/qbittorrent_pt.qm</file>
|
||||
<file>lang/qbittorrent_pt_BR.qm</file>
|
||||
<file>lang/qbittorrent_ro.qm</file>
|
||||
<file>lang/qbittorrent_ru.qm</file>
|
||||
<file>lang/qbittorrent_sk.qm</file>
|
||||
<file>lang/qbittorrent_sr.qm</file>
|
||||
<file>lang/qbittorrent_sv.qm</file>
|
||||
<file>lang/qbittorrent_tr.qm</file>
|
||||
<file>lang/qbittorrent_uk.qm</file>
|
||||
<file>lang/qbittorrent_zh.qm</file>
|
||||
<file>lang/qbittorrent_lt.qm</file>
|
||||
<file>lang/qbittorrent_ko.qm</file>
|
||||
<file>lang/qbittorrent_nb.qm</file>
|
||||
<file>lang/qbittorrent_sv.qm</file>
|
||||
<file>lang/qbittorrent_de.qm</file>
|
||||
<file>lang/qbittorrent_gl.qm</file>
|
||||
<file>lang/qbittorrent_sr.qm</file>
|
||||
<file>lang/qbittorrent_pt_BR.qm</file>
|
||||
<file>lang/qbittorrent_da.qm</file>
|
||||
<file>lang/qbittorrent_cs.qm</file>
|
||||
<file>lang/qbittorrent_hy.qm</file>
|
||||
<file>lang/qbittorrent_pl.qm</file>
|
||||
<file>lang/qbittorrent_bg.qm</file>
|
||||
<file>lang/qbittorrent_ar.qm</file>
|
||||
<file>lang/qbittorrent_es.qm</file>
|
||||
<file>lang/qbittorrent_en.qm</file>
|
||||
<file>lang/qbittorrent_hr.qm</file>
|
||||
<file>lang/qbittorrent_ro.qm</file>
|
||||
<file>lang/qbittorrent_ka.qm</file>
|
||||
<file>lang/qbittorrent_be.qm</file>
|
||||
<file>lang/qbittorrent_eu.qm</file>
|
||||
<file>lang/qbittorrent_zh_TW.qm</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
</RCC>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user