mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-16 02:03:07 -07:00
WebUI: Add RSS functionality
Implemented RSS Reader and AutoDownloader in reference WebUI.
This commit is contained in:
parent
a1faef0a3c
commit
2b3c92a4a8
18 changed files with 2902 additions and 27 deletions
|
@ -39,7 +39,10 @@ window.qBittorrent.ContextMenu = (function() {
|
|||
TorrentsTableContextMenu: TorrentsTableContextMenu,
|
||||
CategoriesFilterContextMenu: CategoriesFilterContextMenu,
|
||||
TagsFilterContextMenu: TagsFilterContextMenu,
|
||||
SearchPluginsTableContextMenu: SearchPluginsTableContextMenu
|
||||
SearchPluginsTableContextMenu: SearchPluginsTableContextMenu,
|
||||
RssFeedContextMenu: RssFeedContextMenu,
|
||||
RssArticleContextMenu: RssArticleContextMenu,
|
||||
RssDownloaderRuleContextMenu: RssDownloaderRuleContextMenu
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -538,5 +541,129 @@ window.qBittorrent.ContextMenu = (function() {
|
|||
}
|
||||
});
|
||||
|
||||
const RssFeedContextMenu = new Class({
|
||||
Extends: ContextMenu,
|
||||
updateMenuItems: function() {
|
||||
let selectedRows = window.qBittorrent.Rss.rssFeedTable.selectedRowsIds();
|
||||
this.menu.getElement('a[href$=newSubscription]').parentNode.addClass('separator');
|
||||
switch (selectedRows.length) {
|
||||
case 0:
|
||||
// remove seperator on top of newSubscription entry to avoid double line
|
||||
this.menu.getElement('a[href$=newSubscription]').parentNode.removeClass('separator');
|
||||
// menu when nothing selected
|
||||
this.hideItem('update');
|
||||
this.hideItem('markRead');
|
||||
this.hideItem('rename');
|
||||
this.hideItem('delete');
|
||||
this.showItem('newSubscription');
|
||||
this.showItem('newFolder');
|
||||
this.showItem('updateAll');
|
||||
this.hideItem('copyFeedURL');
|
||||
break;
|
||||
case 1:
|
||||
if (selectedRows[0] === 0) {
|
||||
// menu when "unread" feed selected
|
||||
this.showItem('update');
|
||||
this.showItem('markRead');
|
||||
this.hideItem('rename');
|
||||
this.hideItem('delete');
|
||||
this.showItem('newSubscription');
|
||||
this.hideItem('newFolder');
|
||||
this.hideItem('updateAll');
|
||||
this.hideItem('copyFeedURL');
|
||||
}
|
||||
else if (window.qBittorrent.Rss.rssFeedTable.rows[selectedRows[0]].full_data.dataUid === '') {
|
||||
// menu when single folder selected
|
||||
this.showItem('update');
|
||||
this.showItem('markRead');
|
||||
this.showItem('rename');
|
||||
this.showItem('delete');
|
||||
this.showItem('newSubscription');
|
||||
this.showItem('newFolder');
|
||||
this.hideItem('updateAll');
|
||||
this.hideItem('copyFeedURL');
|
||||
}
|
||||
else {
|
||||
// menu when single feed selected
|
||||
this.showItem('update');
|
||||
this.showItem('markRead');
|
||||
this.showItem('rename');
|
||||
this.showItem('delete');
|
||||
this.showItem('newSubscription');
|
||||
this.hideItem('newFolder');
|
||||
this.hideItem('updateAll');
|
||||
this.showItem('copyFeedURL');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// menu when multiple items selected
|
||||
this.showItem('update');
|
||||
this.showItem('markRead');
|
||||
this.hideItem('rename');
|
||||
this.showItem('delete');
|
||||
this.hideItem('newSubscription');
|
||||
this.hideItem('newFolder');
|
||||
this.hideItem('updateAll');
|
||||
this.showItem('copyFeedURL');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const RssArticleContextMenu = new Class({
|
||||
Extends: ContextMenu
|
||||
});
|
||||
|
||||
const RssDownloaderRuleContextMenu = new Class({
|
||||
Extends: ContextMenu,
|
||||
adjustMenuPosition: function(e) {
|
||||
this.updateMenuItems();
|
||||
|
||||
// draw the menu off-screen to know the menu dimensions
|
||||
this.menu.setStyles({
|
||||
left: '-999em',
|
||||
top: '-999em'
|
||||
});
|
||||
// position the menu
|
||||
let xPosMenu = e.page.x + this.options.offsets.x - $('rssdownloaderpage').offsetLeft;
|
||||
let yPosMenu = e.page.y + this.options.offsets.y - $('rssdownloaderpage').offsetTop;
|
||||
if ((xPosMenu + this.menu.offsetWidth) > document.documentElement.clientWidth)
|
||||
xPosMenu -= this.menu.offsetWidth;
|
||||
if ((yPosMenu + this.menu.offsetHeight) > document.documentElement.clientHeight)
|
||||
yPosMenu = document.documentElement.clientHeight - this.menu.offsetHeight;
|
||||
xPosMenu = Math.max(xPosMenu, 0);
|
||||
yPosMenu = Math.max(yPosMenu, 0);
|
||||
|
||||
this.menu.setStyles({
|
||||
left: xPosMenu,
|
||||
top: yPosMenu,
|
||||
position: 'absolute',
|
||||
'z-index': '2000'
|
||||
});
|
||||
},
|
||||
updateMenuItems: function() {
|
||||
let selectedRows = window.qBittorrent.RssDownloader.rssDownloaderRulesTable.selectedRowsIds();
|
||||
this.showItem('addRule');
|
||||
switch (selectedRows.length) {
|
||||
case 0:
|
||||
// menu when nothing selected
|
||||
this.hideItem('deleteRule');
|
||||
this.hideItem('renameRule');
|
||||
this.hideItem('clearDownloadedEpisodes');
|
||||
break;
|
||||
case 1:
|
||||
// menu when single item selected
|
||||
this.showItem('deleteRule');
|
||||
this.showItem('renameRule');
|
||||
this.showItem('clearDownloadedEpisodes');
|
||||
break;
|
||||
default:
|
||||
// menu when multiple items selected
|
||||
this.showItem('deleteRule');
|
||||
this.hideItem('renameRule');
|
||||
this.showItem('clearDownloadedEpisodes');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return exports();
|
||||
})();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue