Compare commits

...

6 Commits

Author SHA1 Message Date
Andrei Stepanov
260563d340 NSIS: Update Russian translation
PR #23602.
2025-12-15 16:40:17 +08:00
Burak Yavuz
b792ecede5 NSIS: Update Turkish translation
PR #23434.
2025-12-15 16:34:24 +08:00
John Veness
19ebf67c74 Use consistent text for "Do not download" priority
To match priority setting in menu.

PR #23593.
2025-12-15 16:28:19 +08:00
xavier2k6
56cd98e06e GHA CI: Bump Boost dependency in coverity-scan workflow
* Bumped Boost to `1.90.0`
https://www.boost.org/releases/1.90.0/

PR #23591.
2025-12-15 16:21:34 +08:00
Mark Yu
c25bd6aaea GHA CI: Include all image format plugins in Windows installer
Add support for WebP in the RSS viewer

Closes #23169.
Closes #23573.
PR #23590.
2025-12-15 16:14:49 +08:00
tehcneko
26e42abf32 WebUI: Clean up duplicated codes in dynamic table
Call class super methods.

PR #23576.
2025-12-15 16:07:35 +08:00
8 changed files with 23 additions and 197 deletions

View File

@@ -79,6 +79,7 @@ jobs:
with:
version: ${{ matrix.qt_version }}
archives: qtbase qtdeclarative qtsvg qttools
modules: qtimageformats
# Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0
cache: true

View File

@@ -74,6 +74,7 @@ jobs:
with:
version: ${{ matrix.qt_version }}
archives: icu qtbase qtdeclarative qtsvg qttools
modules: qtimageformats
cache: true
- name: Install libtorrent

View File

@@ -115,6 +115,7 @@ jobs:
version: "6.10.1"
arch: ${{ matrix.config.qt_arch }}
archives: qtbase qtsvg qttools
modules: qtimageformats
cache: true
- name: Install libtorrent
@@ -182,8 +183,16 @@ jobs:
mkdir upload/qBittorrent/plugins/iconengines
copy "${{ env.Qt_ROOT_DIR }}/plugins/iconengines/qsvgicon.dll" upload/qBittorrent/plugins/iconengines
mkdir upload/qBittorrent/plugins/imageformats
# include all imageformats dlls since CI (dev) build links dynamically
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qgif.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qicns.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qico.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qjpeg.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qsvg.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qtga.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qtiff.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qwbmp.dll" upload/qBittorrent/plugins/imageformats
copy "${{ env.Qt_ROOT_DIR }}/plugins/imageformats/qwebp.dll" upload/qBittorrent/plugins/imageformats
mkdir upload/qBittorrent/plugins/platforms
copy "${{ env.Qt_ROOT_DIR }}/plugins/platforms/qwindows.dll" upload/qBittorrent/plugins/platforms
mkdir upload/qBittorrent/plugins/sqldrivers

View File

@@ -39,7 +39,7 @@ jobs:
- name: Install boost
env:
BOOST_MAJOR_VERSION: "1"
BOOST_MINOR_VERSION: "88"
BOOST_MINOR_VERSION: "90"
BOOST_PATCH_VERSION: "0"
run: |
boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"

View File

@@ -33,9 +33,9 @@ LangString inst_requires_win10 ${LANG_RUSSIAN} "Для работы этого
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_RUSSIAN} "Удалить qBittorrent"
;LangString inst_arch_mismatch_x64_on_arm64 ${LANG_ENGLISH} "Error: This x64 version of qBittorrent cannot run on ARM64 systems. Please download the ARM64 installer."
LangString inst_arch_mismatch_x64_on_arm64 ${LANG_RUSSIAN} "This x64 version of qBittorrent cannot run on ARM64 systems. Please download the ARM64 installer."
LangString inst_arch_mismatch_x64_on_arm64 ${LANG_RUSSIAN} "Эта версия qBittorrent для x64 не может работать на системах ARM64. Пожалуйста, скачайте установщик для ARM64."
;LangString inst_arch_mismatch_arm64_on_x64 ${LANG_ENGLISH} "Error: This ARM64 version of qBittorrent cannot run on x64 systems. Please download the x64 installer."
LangString inst_arch_mismatch_arm64_on_x64 ${LANG_RUSSIAN} "This ARM64 version of qBittorrent cannot run on x64 systems. Please download the x64 installer."
LangString inst_arch_mismatch_arm64_on_x64 ${LANG_RUSSIAN} "Эта версия qBittorrent для ARM64 не может работать на системах x64. Пожалуйста, скачайте установщик для x64."
;------------------------------------
;Uninstaller strings

View File

@@ -21,7 +21,7 @@ LangString inst_firewallinfo ${LANG_TURKISH} "Windows Güvenlik Duvarı kuralı
;LangString inst_warning ${LANG_ENGLISH} "qBittorrent is running. Please close the application before installing."
LangString inst_warning ${LANG_TURKISH} "qBittorrent çalışıyor. Lütfen yüklemeden önce uygulamayı kapatın."
;LangString inst_uninstall_question ${LANG_ENGLISH} "Current version will be uninstalled. User settings and torrents will remain intact."
LangString inst_uninstall_question ${LANG_TURKISH} "Şu anki sürüm kaldırılacaktır. Kullanıcı ayarları ve torrent'ler bozulmadan kalacaktır."
LangString inst_uninstall_question ${LANG_TURKISH} "Şu anki sürüm kaldırılacak. Kullanıcı ayarları ve torrent'ler bozulmadan kalacaktır."
;LangString inst_unist ${LANG_ENGLISH} "Uninstalling previous version."
LangString inst_unist ${LANG_TURKISH} "Önceki sürüm kaldırılıyor."
;LangString launch_qbt ${LANG_ENGLISH} "Launch qBittorrent."
@@ -33,9 +33,9 @@ LangString inst_requires_win10 ${LANG_TURKISH} "Bu yükleyici en az Windows 10
;LangString inst_uninstall_link_description ${LANG_ENGLISH} "Uninstall qBittorrent"
LangString inst_uninstall_link_description ${LANG_TURKISH} "qBittorrent'i kaldır"
;LangString inst_arch_mismatch_x64_on_arm64 ${LANG_ENGLISH} "Error: This x64 version of qBittorrent cannot run on ARM64 systems. Please download the ARM64 installer."
LangString inst_arch_mismatch_x64_on_arm64 ${LANG_TURKISH} "This x64 version of qBittorrent cannot run on ARM64 systems. Please download the ARM64 installer."
LangString inst_arch_mismatch_x64_on_arm64 ${LANG_TURKISH} "qBittorrent'in bu x64 sürümü ARM64 sistemlerde çalışamaz. Lütfen ARM64 yükleyicisini indirin."
;LangString inst_arch_mismatch_arm64_on_x64 ${LANG_ENGLISH} "Error: This ARM64 version of qBittorrent cannot run on x64 systems. Please download the x64 installer."
LangString inst_arch_mismatch_arm64_on_x64 ${LANG_TURKISH} "This ARM64 version of qBittorrent cannot run on x64 systems. Please download the x64 installer."
LangString inst_arch_mismatch_arm64_on_x64 ${LANG_TURKISH} "qBittorrent'in bu ARM64 sürümü x64 sistemlerde çalışamaz. Lütfen x64 yükleyicisini indirin."
;------------------------------------
;Uninstaller strings

View File

@@ -112,7 +112,7 @@ QString TorrentContentModelItem::displayData(const int column) const
case BitTorrent::DownloadPriority::Mixed:
return tr("Mixed", "Mixed (priorities");
case BitTorrent::DownloadPriority::Ignored:
return tr("Not downloaded");
return tr("Do not download", "Do not download (priority)");
case BitTorrent::DownloadPriority::High:
return tr("High", "High (priority)");
case BitTorrent::DownloadPriority::Maximum:

View File

@@ -564,7 +564,8 @@ window.qBittorrent.DynamicTable ??= (() => {
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
column["width"] = localPreferences.get(`column_${name}_width_${this.dynamicTableDivId}`, defaultWidth);
if (defaultWidth !== -1)
column["width"] = localPreferences.get(`column_${name}_width_${this.dynamicTableDivId}`, defaultWidth);
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
@@ -3098,9 +3099,7 @@ window.qBittorrent.DynamicTable ??= (() => {
return [...this.getRowValues()];
}
selectRow(rowId) {
this.selectedRows.push(rowId);
this.setRowClass();
this.onSelectedRowChanged();
super.selectRow(rowId);
let path = "";
for (const row of this.getRowValues()) {
@@ -3177,42 +3176,6 @@ window.qBittorrent.DynamicTable ??= (() => {
}
}
}
newColumn(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
column["name"] = name;
column["title"] = name;
column["visible"] = defaultVisible;
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
if (defaultWidth !== -1)
column["width"] = defaultWidth;
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
pos = 0;
return row["full_data"][this.dataProperties[pos]];
};
column["compareRows"] = function(row1, row2) {
const value1 = this.getRowValue(row1);
const value2 = this.getRowValue(row2);
if ((typeof(value1) === "number") && (typeof(value2) === "number"))
return compareNumbers(value1, value2);
return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2);
};
column["updateTd"] = function(td, row) {
const value = this.getRowValue(row);
td.textContent = value;
td.title = value;
};
column["onResize"] = null;
this.columns.push(column);
this.columns[name] = column;
this.hiddenTableHeader.append(document.createElement("th"));
this.fixedTableHeader.append(document.createElement("th"));
}
}
class RssArticleTable extends DynamicTable {
@@ -3225,9 +3188,7 @@ window.qBittorrent.DynamicTable ??= (() => {
return [...this.getRowValues()];
}
selectRow(rowId) {
this.selectedRows.push(rowId);
this.setRowClass();
this.onSelectedRowChanged();
super.selectRow(rowId);
let articleId = "";
let feedUid = "";
@@ -3259,42 +3220,6 @@ window.qBittorrent.DynamicTable ??= (() => {
return super.updateRow(tr, fullUpdate);
}
newColumn(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
column["name"] = name;
column["title"] = name;
column["visible"] = defaultVisible;
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
if (defaultWidth !== -1)
column["width"] = defaultWidth;
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
pos = 0;
return row["full_data"][this.dataProperties[pos]];
};
column["compareRows"] = function(row1, row2) {
const value1 = this.getRowValue(row1);
const value2 = this.getRowValue(row2);
if ((typeof(value1) === "number") && (typeof(value2) === "number"))
return compareNumbers(value1, value2);
return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2);
};
column["updateTd"] = function(td, row) {
const value = this.getRowValue(row);
td.textContent = value;
td.title = value;
};
column["onResize"] = null;
this.columns.push(column);
this.columns[name] = column;
this.hiddenTableHeader.append(document.createElement("th"));
this.fixedTableHeader.append(document.createElement("th"));
}
}
class RssDownloaderRulesTable extends DynamicTable {
@@ -3342,46 +3267,8 @@ window.qBittorrent.DynamicTable ??= (() => {
window.qBittorrent.RssDownloader.renameRule(this.getRow(tr.rowId).full_data.name);
});
}
newColumn(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
column["name"] = name;
column["title"] = name;
column["visible"] = defaultVisible;
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
if (defaultWidth !== -1)
column["width"] = defaultWidth;
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
pos = 0;
return row["full_data"][this.dataProperties[pos]];
};
column["compareRows"] = function(row1, row2) {
const value1 = this.getRowValue(row1);
const value2 = this.getRowValue(row2);
if ((typeof(value1) === "number") && (typeof(value2) === "number"))
return compareNumbers(value1, value2);
return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2);
};
column["updateTd"] = function(td, row) {
const value = this.getRowValue(row);
td.textContent = value;
td.title = value;
};
column["onResize"] = null;
this.columns.push(column);
this.columns[name] = column;
this.hiddenTableHeader.append(document.createElement("th"));
this.fixedTableHeader.append(document.createElement("th"));
}
selectRow(rowId) {
this.selectedRows.push(rowId);
this.setRowClass();
this.onSelectedRowChanged();
super.selectRow(rowId);
let name = "";
for (const row of this.getRowValues()) {
@@ -3427,42 +3314,6 @@ window.qBittorrent.DynamicTable ??= (() => {
getFilteredAndSortedRows() {
return [...this.getRowValues()];
}
newColumn(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
column["name"] = name;
column["title"] = name;
column["visible"] = defaultVisible;
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
if (defaultWidth !== -1)
column["width"] = defaultWidth;
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
pos = 0;
return row["full_data"][this.dataProperties[pos]];
};
column["compareRows"] = function(row1, row2) {
const value1 = this.getRowValue(row1);
const value2 = this.getRowValue(row2);
if ((typeof(value1) === "number") && (typeof(value2) === "number"))
return compareNumbers(value1, value2);
return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2);
};
column["updateTd"] = function(td, row) {
const value = this.getRowValue(row);
td.textContent = value;
td.title = value;
};
column["onResize"] = null;
this.columns.push(column);
this.columns[name] = column;
this.hiddenTableHeader.append(document.createElement("th"));
this.fixedTableHeader.append(document.createElement("th"));
}
selectRow() {}
}
@@ -3475,42 +3326,6 @@ window.qBittorrent.DynamicTable ??= (() => {
getFilteredAndSortedRows() {
return [...this.getRowValues()];
}
newColumn(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
column["name"] = name;
column["title"] = name;
column["visible"] = defaultVisible;
column["force_hide"] = false;
column["caption"] = caption;
column["style"] = style;
if (defaultWidth !== -1)
column["width"] = defaultWidth;
column["dataProperties"] = [name];
column["getRowValue"] = function(row, pos) {
if (pos === undefined)
pos = 0;
return row["full_data"][this.dataProperties[pos]];
};
column["compareRows"] = function(row1, row2) {
const value1 = this.getRowValue(row1);
const value2 = this.getRowValue(row2);
if ((typeof(value1) === "number") && (typeof(value2) === "number"))
return compareNumbers(value1, value2);
return window.qBittorrent.Misc.naturalSortCollator.compare(value1, value2);
};
column["updateTd"] = function(td, row) {
const value = this.getRowValue(row);
td.textContent = value;
td.title = value;
};
column["onResize"] = null;
this.columns.push(column);
this.columns[name] = column;
this.hiddenTableHeader.append(document.createElement("th"));
this.fixedTableHeader.append(document.createElement("th"));
}
selectRow() {}
updateRow(tr, fullUpdate) {
const row = this.rows.get(tr.rowId);