2022-10-18 22:39:32 -04:00
< style >
#searchPluginsContainer {
height: calc(100% - 20px);
margin: 10px;
overflow: auto;
}
#searchPluginsContainer button {
padding: 2px;
}
#searchPluginsContainer span {
display: block;
margin-top: 10px;
}
#searchPluginsTable {
width: 100%;
height: calc(100% - 150px);
}
#searchPluginsTable .dynamicTable {
width: 100%;
}
#searchPluginsTableDiv {
height: calc(100% - 26px);
}
#dynamicTableFixedHeaderDiv {
height: 26px;
}
#searchPlugins_content {
height: 100%;
}
< / style >
< div id = "searchPluginsContainer" >
2022-11-30 13:49:48 -05:00
< h2 > Installed search plugins:< / h2 >
2022-10-18 22:39:32 -04:00
< div id = "searchPluginsTable" >
< div id = "searchPluginsTableFixedHeaderDiv" class = "dynamicTableFixedHeaderDiv" >
< table class = "dynamicTable unselectable" style = "position:relative;" >
< thead >
< tr class = "dynamicTableHeader" id = "searchPluginsTableFixedHeaderRow" > < / tr >
< / thead >
< / table >
< / div >
< div id = "searchPluginsTableDiv" class = "dynamicTableDiv" >
< table class = "dynamicTable unselectable" >
< thead >
< tr class = "dynamicTableHeader" > < / tr >
< / thead >
< tbody > < / tbody >
< / table >
< / div >
< / div >
2022-11-30 13:49:48 -05:00
< span > Warning: Be sure to comply with your country's copyright laws when downloading torrents from any of these search engines.< / span >
2024-10-03 08:37:11 -04:00
< span style = "font-style: italic;" > You can get new search engine plugins here: < a href = "https://plugins.qbittorrent.org" target = "_blank" > https://plugins.qbittorrent.org< / a > < / span >
2022-10-18 22:39:32 -04:00
< div style = "width: 100%; margin-top: 10px;" >
2024-10-03 08:37:11 -04:00
< button type = "button" style = "width: 33%; line-height: 1.4em;" onclick = "qBittorrent.SearchPlugins.installPlugin();" > Install new plugin< / button >
< button type = "button" style = "width: 33%; line-height: 1.4em;" onclick = "qBittorrent.SearchPlugins.checkForUpdates();" > Check for updates< / button >
< button type = "button" style = "width: 32%; line-height: 1.4em;" onclick = "qBittorrent.SearchPlugins.closeSearchWindow('searchPlugins');" > Close< / button >
2022-10-18 22:39:32 -04:00
< / div >
< / div >
< ul id = "searchPluginsTableMenu" class = "contextMenu" >
2024-10-03 08:37:11 -04:00
< li > < a href = "#Enabled" > < img src = "images/checked-completed.svg" alt = "Enabled" > Enabled< / a > < / li >
< li class = "separator" > < a href = "#Uninstall" > < img src = "images/list-remove.svg" alt = "Uninstall" > Uninstall< / a > < / li >
2022-10-18 22:39:32 -04:00
< / ul >
< script >
2024-10-03 08:37:11 -04:00
"use strict";
2022-10-18 22:39:32 -04:00
2024-10-03 08:37:11 -04:00
window.qBittorrent ??= {};
window.qBittorrent.SearchPlugins ??= (() => {
const exports = () => {
2022-10-18 22:39:32 -04:00
return {
closeSearchWindow: closeSearchWindow,
2024-10-03 08:37:11 -04:00
setup: setup,
2022-10-18 22:39:32 -04:00
installPlugin: installPlugin,
checkForUpdates: checkForUpdates,
updateTable: updateTable
};
};
let searchPluginsTable;
let searchPluginsTableContextMenu;
let prevOffsetLeft;
let prevOffsetTop;
2024-10-03 08:37:11 -04:00
const setup = function() {
2022-10-18 22:39:32 -04:00
searchPluginsTable = new window.qBittorrent.DynamicTable.SearchPluginsTable();
searchPluginsTableContextMenu = new window.qBittorrent.ContextMenu.SearchPluginsTableContextMenu({
2024-10-03 08:37:11 -04:00
targets: ".searchPluginsTableRow",
menu: "searchPluginsTableMenu",
2022-10-18 22:39:32 -04:00
actions: {
Enabled: enablePlugin,
Uninstall: uninstallPlugin
},
offsets: calculateContextMenuOffsets()
});
2024-10-03 08:37:11 -04:00
searchPluginsTable.setup("searchPluginsTableDiv", "searchPluginsTableFixedHeaderDiv", searchPluginsTableContextMenu);
2022-10-18 22:39:32 -04:00
updateTable();
};
const closeSearchWindow = function(id) {
window.parent.MochaUI.closeWindow(window.parent.$(id));
};
const installPlugin = function(path) {
new MochaUI.Window({
2024-10-03 08:37:11 -04:00
id: "installSearchPlugin",
icon: "images/qbittorrent-tray.svg",
2022-11-30 13:49:48 -05:00
title: "Install plugin",
2024-10-03 08:37:11 -04:00
loadMethod: "xhr",
contentURL: "views/installsearchplugin.html",
2022-10-18 22:39:32 -04:00
scrollbars: false,
resizable: false,
maximizable: false,
paddingVertical: 0,
paddingHorizontal: 0,
width: 500,
height: 120
});
};
const uninstallPlugin = function() {
2024-10-03 08:37:11 -04:00
const plugins = searchPluginsTable.selectedRowsIds().join("|");
const url = new URI("api/v2/search/uninstallPlugin");
2022-10-18 22:39:32 -04:00
new Request({
url: url,
2024-10-03 08:37:11 -04:00
method: "post",
2022-10-18 22:39:32 -04:00
data: {
names: plugins,
}
}).send();
};
const enablePlugin = function() {
const plugins = searchPluginsTable.selectedRowsIds();
let enable = true;
if (plugins & & plugins.length)
enable = !window.qBittorrent.Search.getPlugin(plugins[0]).enabled;
2024-10-03 08:37:11 -04:00
const url = new URI("api/v2/search/enablePlugin");
2022-10-18 22:39:32 -04:00
new Request({
url: url,
2024-10-03 08:37:11 -04:00
method: "post",
2022-10-18 22:39:32 -04:00
data: {
2024-10-03 08:37:11 -04:00
names: plugins.join("|"),
2022-10-18 22:39:32 -04:00
enable: enable
}
}).send();
};
const checkForUpdates = function() {
2024-10-03 08:37:11 -04:00
const url = new URI("api/v2/search/updatePlugins");
2022-10-18 22:39:32 -04:00
new Request({
url: url,
2024-10-03 08:37:11 -04:00
method: "post"
2022-10-18 22:39:32 -04:00
}).send();
};
const calculateContextMenuOffsets = function() {
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
return {
x: -(prevOffsetLeft + 20),
y: -(prevOffsetTop + 2)
};
};
const updateSearchPluginsTableContextMenuOffset = function() {
// only re-calculate if window has moved
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
};
const setupSearchPluginTableEvents = function(enable) {
2024-10-03 08:37:11 -04:00
const clickHandler = (e) => { enablePlugin(); };
const menuHandler = (e) => { updateSearchPluginsTableContextMenuOffset(); };
if (enable) {
$$(".searchPluginsTableRow").each((target) => {
target.addEventListener("dblclick", clickHandler);
target.addEventListener("contextmenu", menuHandler, true);
2022-10-18 22:39:32 -04:00
});
2024-10-03 08:37:11 -04:00
}
else {
$$(".searchPluginsTableRow").each((target) => {
target.removeEventListener("dblclick", clickHandler);
target.removeEventListener("contextmenu", menuHandler, true);
2022-10-18 22:39:32 -04:00
});
2024-10-03 08:37:11 -04:00
}
2022-10-18 22:39:32 -04:00
};
const updateTable = function() {
// clear event listeners
setupSearchPluginTableEvents(false);
2024-10-03 08:37:11 -04:00
const oldPlugins = [...searchPluginsTable.getRowIds()];
2022-10-18 22:39:32 -04:00
// remove old rows from the table
for (let i = 0; i < oldPlugins.length ; + + i ) {
let found = false;
for (let j = 0; j < window.qBittorrent.Search.searchPlugins.length ; + + j ) {
if (window.qBittorrent.Search.searchPlugins[j].name === oldPlugins[i]) {
found = true;
break;
}
}
if (!found)
searchPluginsTable.removeRow(oldPlugins[i]);
}
for (let i = 0; i < window.qBittorrent.Search.searchPlugins.length ; + + i ) {
window.qBittorrent.Search.searchPlugins[i].rowId = window.qBittorrent.Search.searchPlugins[i].name;
searchPluginsTable.updateRowData(window.qBittorrent.Search.searchPlugins[i]);
}
searchPluginsTable.updateTable();
// add event listeners
setupSearchPluginTableEvents(true);
};
return exports();
})();
Object.freeze(window.qBittorrent.SearchPlugins);
2024-10-03 08:37:11 -04:00
window.qBittorrent.SearchPlugins.setup();
2022-10-18 22:39:32 -04:00
< / script >