|
|
@ -65,13 +65,13 @@ namespace Article |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// display a right-click menu
|
|
|
|
// display a right-click menu
|
|
|
|
void RSSImp::displayRSSListMenu(const QPoint& pos) |
|
|
|
void RSSImp::displayRSSListMenu(const QPoint &pos) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!m_feedList->indexAt(pos).isValid()) |
|
|
|
if (!m_feedList->indexAt(pos).isValid()) |
|
|
|
// No item under the mouse, clear selection
|
|
|
|
// No item under the mouse, clear selection
|
|
|
|
m_feedList->clearSelection(); |
|
|
|
m_feedList->clearSelection(); |
|
|
|
QMenu myRSSListMenu(this); |
|
|
|
QMenu myRSSListMenu(this); |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
if (selectedItems.size() > 0) { |
|
|
|
if (selectedItems.size() > 0) { |
|
|
|
myRSSListMenu.addAction(actionUpdate); |
|
|
|
myRSSListMenu.addAction(actionUpdate); |
|
|
|
myRSSListMenu.addAction(actionMark_items_read); |
|
|
|
myRSSListMenu.addAction(actionMark_items_read); |
|
|
@ -104,16 +104,16 @@ void RSSImp::displayRSSListMenu(const QPoint& pos) |
|
|
|
myRSSListMenu.exec(QCursor::pos()); |
|
|
|
myRSSListMenu.exec(QCursor::pos()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::displayItemsListMenu(const QPoint&) |
|
|
|
void RSSImp::displayItemsListMenu(const QPoint &) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QMenu myItemListMenu(this); |
|
|
|
QMenu myItemListMenu(this); |
|
|
|
QList<QListWidgetItem*> selectedItems = listArticles->selectedItems(); |
|
|
|
QList<QListWidgetItem * > selectedItems = listArticles->selectedItems(); |
|
|
|
if (selectedItems.size() <= 0) |
|
|
|
if (selectedItems.size() <= 0) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
bool hasTorrent = false; |
|
|
|
bool hasTorrent = false; |
|
|
|
bool hasLink = false; |
|
|
|
bool hasLink = false; |
|
|
|
foreach (const QListWidgetItem* item, selectedItems) { |
|
|
|
foreach (const QListWidgetItem *item, selectedItems) { |
|
|
|
if (!item) continue; |
|
|
|
if (!item) continue; |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
if (!feed) continue; |
|
|
|
if (!feed) continue; |
|
|
@ -137,7 +137,7 @@ void RSSImp::displayItemsListMenu(const QPoint&) |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::askNewFolder() |
|
|
|
void RSSImp::askNewFolder() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QTreeWidgetItem* parent_item = 0; |
|
|
|
QTreeWidgetItem *parent_item = 0; |
|
|
|
Rss::FolderPtr rss_parent; |
|
|
|
Rss::FolderPtr rss_parent; |
|
|
|
if (m_feedList->selectedItems().size() > 0) { |
|
|
|
if (m_feedList->selectedItems().size() > 0) { |
|
|
|
parent_item = m_feedList->selectedItems().at(0); |
|
|
|
parent_item = m_feedList->selectedItems().at(0); |
|
|
@ -154,7 +154,7 @@ void RSSImp::askNewFolder() |
|
|
|
|
|
|
|
|
|
|
|
Rss::FolderPtr newFolder(new Rss::Folder(new_name)); |
|
|
|
Rss::FolderPtr newFolder(new Rss::Folder(new_name)); |
|
|
|
rss_parent->addFile(newFolder); |
|
|
|
rss_parent->addFile(newFolder); |
|
|
|
QTreeWidgetItem* folderItem = createFolderListItem(newFolder); |
|
|
|
QTreeWidgetItem *folderItem = createFolderListItem(newFolder); |
|
|
|
if (parent_item) |
|
|
|
if (parent_item) |
|
|
|
parent_item->addChild(folderItem); |
|
|
|
parent_item->addChild(folderItem); |
|
|
|
else |
|
|
|
else |
|
|
@ -172,7 +172,7 @@ void RSSImp::on_newFeedButton_clicked() |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Determine parent folder for new feed
|
|
|
|
// Determine parent folder for new feed
|
|
|
|
QTreeWidgetItem *parent_item = 0; |
|
|
|
QTreeWidgetItem *parent_item = 0; |
|
|
|
QList<QTreeWidgetItem *> selected_items = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selected_items = m_feedList->selectedItems(); |
|
|
|
if (!selected_items.empty()) { |
|
|
|
if (!selected_items.empty()) { |
|
|
|
parent_item = selected_items.first(); |
|
|
|
parent_item = selected_items.first(); |
|
|
|
// Consider the case where the user clicked on Unread item
|
|
|
|
// Consider the case where the user clicked on Unread item
|
|
|
@ -212,7 +212,7 @@ void RSSImp::on_newFeedButton_clicked() |
|
|
|
Rss::FeedPtr stream(new Rss::Feed(newUrl, m_rssManager.data())); |
|
|
|
Rss::FeedPtr stream(new Rss::Feed(newUrl, m_rssManager.data())); |
|
|
|
rss_parent->addFile(stream); |
|
|
|
rss_parent->addFile(stream); |
|
|
|
// Create TreeWidget item
|
|
|
|
// Create TreeWidget item
|
|
|
|
QTreeWidgetItem* item = createFolderListItem(stream); |
|
|
|
QTreeWidgetItem *item = createFolderListItem(stream); |
|
|
|
if (parent_item) |
|
|
|
if (parent_item) |
|
|
|
parent_item->addChild(item); |
|
|
|
parent_item->addChild(item); |
|
|
|
else |
|
|
|
else |
|
|
@ -226,23 +226,23 @@ void RSSImp::on_newFeedButton_clicked() |
|
|
|
// delete a stream by a button
|
|
|
|
// delete a stream by a button
|
|
|
|
void RSSImp::deleteSelectedItems() |
|
|
|
void RSSImp::deleteSelectedItems() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
if (selectedItems.isEmpty()) |
|
|
|
if (selectedItems.isEmpty()) |
|
|
|
return; |
|
|
|
return; |
|
|
|
if ((selectedItems.size() == 1) && (selectedItems.first() == m_feedList->stickyUnreadItem())) |
|
|
|
if ((selectedItems.size() == 1) && (selectedItems.first() == m_feedList->stickyUnreadItem())) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Deletion confirmation"), |
|
|
|
QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Deletion confirmation"), |
|
|
|
tr("Are you sure you want to delete the selected RSS feeds?"), |
|
|
|
tr("Are you sure you want to delete the selected RSS feeds?"), |
|
|
|
QMessageBox::Yes|QMessageBox::No, QMessageBox::No); |
|
|
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No); |
|
|
|
if (answer == QMessageBox::No) |
|
|
|
if (answer == QMessageBox::No) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
foreach (QTreeWidgetItem* item, selectedItems) { |
|
|
|
foreach (QTreeWidgetItem *item, selectedItems) { |
|
|
|
if (item == m_feedList->stickyUnreadItem()) |
|
|
|
if (item == m_feedList->stickyUnreadItem()) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
|
QTreeWidgetItem* parent = item->parent(); |
|
|
|
QTreeWidgetItem *parent = item->parent(); |
|
|
|
// Notify TreeWidget
|
|
|
|
// Notify TreeWidget
|
|
|
|
m_feedList->itemAboutToBeRemoved(item); |
|
|
|
m_feedList->itemAboutToBeRemoved(item); |
|
|
|
// Actually delete the item
|
|
|
|
// Actually delete the item
|
|
|
@ -259,23 +259,22 @@ void RSSImp::deleteSelectedItems() |
|
|
|
updateItemInfos(m_feedList->stickyUnreadItem()); |
|
|
|
updateItemInfos(m_feedList->stickyUnreadItem()); |
|
|
|
if (m_feedList->currentItem() == m_feedList->stickyUnreadItem()) |
|
|
|
if (m_feedList->currentItem() == m_feedList->stickyUnreadItem()) |
|
|
|
populateArticleList(m_feedList->stickyUnreadItem()); |
|
|
|
populateArticleList(m_feedList->stickyUnreadItem()); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::loadFoldersOpenState() |
|
|
|
void RSSImp::loadFoldersOpenState() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QStringList open_folders = Preferences::instance()->getRssOpenFolders(); |
|
|
|
QStringList open_folders = Preferences::instance()->getRssOpenFolders(); |
|
|
|
foreach (const QString& var_path, open_folders) { |
|
|
|
foreach (const QString &var_path, open_folders) { |
|
|
|
QStringList path = var_path.split("\\"); |
|
|
|
QStringList path = var_path.split("\\"); |
|
|
|
QTreeWidgetItem* parent = 0; |
|
|
|
QTreeWidgetItem *parent = 0; |
|
|
|
foreach (const QString& name, path) { |
|
|
|
foreach (const QString &name, path) { |
|
|
|
int nbChildren = 0; |
|
|
|
int nbChildren = 0; |
|
|
|
if (parent) |
|
|
|
if (parent) |
|
|
|
nbChildren = parent->childCount(); |
|
|
|
nbChildren = parent->childCount(); |
|
|
|
else |
|
|
|
else |
|
|
|
nbChildren = m_feedList->topLevelItemCount(); |
|
|
|
nbChildren = m_feedList->topLevelItemCount(); |
|
|
|
for (int i = 0; i < nbChildren; ++i) { |
|
|
|
for (int i = 0; i < nbChildren; ++i) { |
|
|
|
QTreeWidgetItem* child; |
|
|
|
QTreeWidgetItem *child; |
|
|
|
if (parent) |
|
|
|
if (parent) |
|
|
|
child = parent->child(i); |
|
|
|
child = parent->child(i); |
|
|
|
else |
|
|
|
else |
|
|
@ -294,8 +293,8 @@ void RSSImp::loadFoldersOpenState() |
|
|
|
void RSSImp::saveFoldersOpenState() |
|
|
|
void RSSImp::saveFoldersOpenState() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QStringList open_folders; |
|
|
|
QStringList open_folders; |
|
|
|
QList<QTreeWidgetItem*> items = m_feedList->getAllOpenFolders(); |
|
|
|
QList<QTreeWidgetItem * > items = m_feedList->getAllOpenFolders(); |
|
|
|
foreach (QTreeWidgetItem* item, items) { |
|
|
|
foreach (QTreeWidgetItem *item, items) { |
|
|
|
QString path = m_feedList->getItemPath(item).join("\\"); |
|
|
|
QString path = m_feedList->getItemPath(item).join("\\"); |
|
|
|
qDebug("saving open folder: %s", qPrintable(path)); |
|
|
|
qDebug("saving open folder: %s", qPrintable(path)); |
|
|
|
open_folders << path; |
|
|
|
open_folders << path; |
|
|
@ -306,17 +305,17 @@ void RSSImp::saveFoldersOpenState() |
|
|
|
// refresh all streams by a button
|
|
|
|
// refresh all streams by a button
|
|
|
|
void RSSImp::refreshAllFeeds() |
|
|
|
void RSSImp::refreshAllFeeds() |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach (QTreeWidgetItem* item, m_feedList->getAllFeedItems()) |
|
|
|
foreach (QTreeWidgetItem *item, m_feedList->getAllFeedItems()) |
|
|
|
item->setData(0, Qt::DecorationRole, QVariant(QIcon(":/icons/loading.png"))); |
|
|
|
item->setData(0, Qt::DecorationRole, QVariant(QIcon(":/icons/loading.png"))); |
|
|
|
m_rssManager->refresh(); |
|
|
|
m_rssManager->refresh(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::downloadSelectedTorrents() |
|
|
|
void RSSImp::downloadSelectedTorrents() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QListWidgetItem*> selected_items = listArticles->selectedItems(); |
|
|
|
QList<QListWidgetItem * > selected_items = listArticles->selectedItems(); |
|
|
|
if (selected_items.size() <= 0) |
|
|
|
if (selected_items.size() <= 0) |
|
|
|
return; |
|
|
|
return; |
|
|
|
foreach (QListWidgetItem* item, selected_items) { |
|
|
|
foreach (QListWidgetItem *item, selected_items) { |
|
|
|
if (!item) continue; |
|
|
|
if (!item) continue; |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
if (!feed) continue; |
|
|
|
if (!feed) continue; |
|
|
@ -343,10 +342,10 @@ void RSSImp::downloadSelectedTorrents() |
|
|
|
// open the url of the selected RSS articles in the Web browser
|
|
|
|
// open the url of the selected RSS articles in the Web browser
|
|
|
|
void RSSImp::openSelectedArticlesUrls() |
|
|
|
void RSSImp::openSelectedArticlesUrls() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QListWidgetItem *> selected_items = listArticles->selectedItems(); |
|
|
|
QList<QListWidgetItem * > selected_items = listArticles->selectedItems(); |
|
|
|
if (selected_items.size() <= 0) |
|
|
|
if (selected_items.size() <= 0) |
|
|
|
return; |
|
|
|
return; |
|
|
|
foreach (QListWidgetItem* item, selected_items) { |
|
|
|
foreach (QListWidgetItem *item, selected_items) { |
|
|
|
if (!item) continue; |
|
|
|
if (!item) continue; |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
Rss::FeedPtr feed = m_feedList->getRSSItemFromUrl(item->data(Article::FeedUrlRole).toString()); |
|
|
|
if (!feed) continue; |
|
|
|
if (!feed) continue; |
|
|
@ -367,13 +366,13 @@ void RSSImp::openSelectedArticlesUrls() |
|
|
|
updateItemInfos(m_feedList->getTreeItemFromUrl(selected_items.first()->data(Article::FeedUrlRole).toString())); |
|
|
|
updateItemInfos(m_feedList->getTreeItemFromUrl(selected_items.first()->data(Article::FeedUrlRole).toString())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//right-click on stream : give it an alias
|
|
|
|
// right-click on stream : give it an alias
|
|
|
|
void RSSImp::renameSelectedRssFile() |
|
|
|
void RSSImp::renameSelectedRssFile() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
if (selectedItems.size() != 1) |
|
|
|
if (selectedItems.size() != 1) |
|
|
|
return; |
|
|
|
return; |
|
|
|
QTreeWidgetItem* item = selectedItems.first(); |
|
|
|
QTreeWidgetItem *item = selectedItems.first(); |
|
|
|
if (item == m_feedList->stickyUnreadItem()) |
|
|
|
if (item == m_feedList->stickyUnreadItem()) |
|
|
|
return; |
|
|
|
return; |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
@ -401,8 +400,8 @@ void RSSImp::renameSelectedRssFile() |
|
|
|
// right-click on stream : refresh it
|
|
|
|
// right-click on stream : refresh it
|
|
|
|
void RSSImp::refreshSelectedItems() |
|
|
|
void RSSImp::refreshSelectedItems() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
foreach (QTreeWidgetItem* item, selectedItems) { |
|
|
|
foreach (QTreeWidgetItem *item, selectedItems) { |
|
|
|
Rss::FilePtr file = m_feedList->getRSSItem(item); |
|
|
|
Rss::FilePtr file = m_feedList->getRSSItem(item); |
|
|
|
// Update icons
|
|
|
|
// Update icons
|
|
|
|
if (item == m_feedList->stickyUnreadItem()) { |
|
|
|
if (item == m_feedList->stickyUnreadItem()) { |
|
|
@ -428,8 +427,8 @@ void RSSImp::refreshSelectedItems() |
|
|
|
void RSSImp::copySelectedFeedsURL() |
|
|
|
void RSSImp::copySelectedFeedsURL() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QStringList URLs; |
|
|
|
QStringList URLs; |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
QTreeWidgetItem* item; |
|
|
|
QTreeWidgetItem *item; |
|
|
|
foreach (item, selectedItems) |
|
|
|
foreach (item, selectedItems) |
|
|
|
if (m_feedList->isFeed(item)) |
|
|
|
if (m_feedList->isFeed(item)) |
|
|
|
URLs << m_feedList->getItemID(item); |
|
|
|
URLs << m_feedList->getItemID(item); |
|
|
@ -438,8 +437,8 @@ void RSSImp::copySelectedFeedsURL() |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::on_markReadButton_clicked() |
|
|
|
void RSSImp::on_markReadButton_clicked() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QTreeWidgetItem*> selectedItems = m_feedList->selectedItems(); |
|
|
|
QList<QTreeWidgetItem * > selectedItems = m_feedList->selectedItems(); |
|
|
|
foreach (QTreeWidgetItem* item, selectedItems) { |
|
|
|
foreach (QTreeWidgetItem *item, selectedItems) { |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
|
Rss::FilePtr rss_item = m_feedList->getRSSItem(item); |
|
|
|
Q_ASSERT(rss_item); |
|
|
|
Q_ASSERT(rss_item); |
|
|
|
rss_item->markAsRead(); |
|
|
|
rss_item->markAsRead(); |
|
|
@ -450,25 +449,25 @@ void RSSImp::on_markReadButton_clicked() |
|
|
|
populateArticleList(m_feedList->currentItem()); |
|
|
|
populateArticleList(m_feedList->currentItem()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QTreeWidgetItem* RSSImp::createFolderListItem(const Rss::FilePtr& rssFile) |
|
|
|
QTreeWidgetItem *RSSImp::createFolderListItem(const Rss::FilePtr &rssFile) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Q_ASSERT(rssFile); |
|
|
|
Q_ASSERT(rssFile); |
|
|
|
QTreeWidgetItem* item = new QTreeWidgetItem; |
|
|
|
QTreeWidgetItem *item = new QTreeWidgetItem; |
|
|
|
item->setData(0, Qt::DisplayRole, QVariant(rssFile->displayName() + QString::fromUtf8(" (") + QString::number(rssFile->unreadCount()) + QString(")"))); |
|
|
|
item->setData(0, Qt::DisplayRole, QVariant(rssFile->displayName() + QString::fromUtf8(" (") + QString::number(rssFile->unreadCount()) + QString(")"))); |
|
|
|
item->setData(0, Qt::DecorationRole, QIcon(rssFile->iconPath())); |
|
|
|
item->setData(0, Qt::DecorationRole, QIcon(rssFile->iconPath())); |
|
|
|
|
|
|
|
|
|
|
|
return item; |
|
|
|
return item; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::fillFeedsList(QTreeWidgetItem* parent, const Rss::FolderPtr& rss_parent) |
|
|
|
void RSSImp::fillFeedsList(QTreeWidgetItem *parent, const Rss::FolderPtr &rss_parent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<Rss::FilePtr> children; |
|
|
|
QList<Rss::FilePtr> children; |
|
|
|
if (parent) |
|
|
|
if (parent) |
|
|
|
children = rss_parent->getContent(); |
|
|
|
children = rss_parent->getContent(); |
|
|
|
else |
|
|
|
else |
|
|
|
children = m_rssManager->rootFolder()->getContent(); |
|
|
|
children = m_rssManager->rootFolder()->getContent(); |
|
|
|
foreach (const Rss::FilePtr& rssFile, children) { |
|
|
|
foreach (const Rss::FilePtr &rssFile, children) { |
|
|
|
QTreeWidgetItem* item = createFolderListItem(rssFile); |
|
|
|
QTreeWidgetItem *item = createFolderListItem(rssFile); |
|
|
|
Q_ASSERT(item); |
|
|
|
Q_ASSERT(item); |
|
|
|
if (parent) |
|
|
|
if (parent) |
|
|
|
parent->addChild(item); |
|
|
|
parent->addChild(item); |
|
|
@ -484,10 +483,10 @@ void RSSImp::fillFeedsList(QTreeWidgetItem* parent, const Rss::FolderPtr& rss_pa |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QListWidgetItem* RSSImp::createArticleListItem(const Rss::ArticlePtr& article) |
|
|
|
QListWidgetItem *RSSImp::createArticleListItem(const Rss::ArticlePtr &article) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Q_ASSERT(article); |
|
|
|
Q_ASSERT(article); |
|
|
|
QListWidgetItem* item = new QListWidgetItem; |
|
|
|
QListWidgetItem *item = new QListWidgetItem; |
|
|
|
|
|
|
|
|
|
|
|
item->setData(Article::TitleRole, article->title()); |
|
|
|
item->setData(Article::TitleRole, article->title()); |
|
|
|
item->setData(Article::FeedUrlRole, article->parent()->url()); |
|
|
|
item->setData(Article::FeedUrlRole, article->parent()->url()); |
|
|
@ -505,7 +504,7 @@ QListWidgetItem* RSSImp::createArticleListItem(const Rss::ArticlePtr& article) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// fills the newsList
|
|
|
|
// fills the newsList
|
|
|
|
void RSSImp::populateArticleList(QTreeWidgetItem* item) |
|
|
|
void RSSImp::populateArticleList(QTreeWidgetItem *item) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (!item) { |
|
|
|
if (!item) { |
|
|
|
listArticles->clear(); |
|
|
|
listArticles->clear(); |
|
|
@ -529,8 +528,8 @@ void RSSImp::populateArticleList(QTreeWidgetItem* item) |
|
|
|
articles = rss_item->articleListByDateDesc(); |
|
|
|
articles = rss_item->articleListByDateDesc(); |
|
|
|
|
|
|
|
|
|
|
|
qDebug("Got the list of news"); |
|
|
|
qDebug("Got the list of news"); |
|
|
|
foreach (const Rss::ArticlePtr& article, articles) { |
|
|
|
foreach (const Rss::ArticlePtr &article, articles) { |
|
|
|
QListWidgetItem* articleItem = createArticleListItem(article); |
|
|
|
QListWidgetItem *articleItem = createArticleListItem(article); |
|
|
|
listArticles->addItem(articleItem); |
|
|
|
listArticles->addItem(articleItem); |
|
|
|
} |
|
|
|
} |
|
|
|
qDebug("Added all news to the GUI"); |
|
|
|
qDebug("Added all news to the GUI"); |
|
|
@ -539,7 +538,7 @@ void RSSImp::populateArticleList(QTreeWidgetItem* item) |
|
|
|
// display a news
|
|
|
|
// display a news
|
|
|
|
void RSSImp::refreshTextBrowser() |
|
|
|
void RSSImp::refreshTextBrowser() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QList<QListWidgetItem*> selection = listArticles->selectedItems(); |
|
|
|
QList<QListWidgetItem * > selection = listArticles->selectedItems(); |
|
|
|
if (selection.empty()) return; |
|
|
|
if (selection.empty()) return; |
|
|
|
QListWidgetItem *item = selection.first(); |
|
|
|
QListWidgetItem *item = selection.first(); |
|
|
|
Q_ASSERT(item); |
|
|
|
Q_ASSERT(item); |
|
|
@ -559,7 +558,7 @@ void RSSImp::refreshTextBrowser() |
|
|
|
html += "<div style='background-color: #efefef;'><b>" + tr("Author: ") + "</b>" + article->author() + "</div>"; |
|
|
|
html += "<div style='background-color: #efefef;'><b>" + tr("Author: ") + "</b>" + article->author() + "</div>"; |
|
|
|
html += "</div>"; |
|
|
|
html += "</div>"; |
|
|
|
html += "<div style='margin-left: 5px; margin-right: 5px;'>"; |
|
|
|
html += "<div style='margin-left: 5px; margin-right: 5px;'>"; |
|
|
|
if(Qt::mightBeRichText(article->description())) { |
|
|
|
if (Qt::mightBeRichText(article->description())) { |
|
|
|
html += article->description(); |
|
|
|
html += article->description(); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
@ -602,7 +601,7 @@ void RSSImp::refreshTextBrowser() |
|
|
|
void RSSImp::saveSlidersPosition() |
|
|
|
void RSSImp::saveSlidersPosition() |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Remember sliders positions
|
|
|
|
// Remember sliders positions
|
|
|
|
Preferences* const pref = Preferences::instance(); |
|
|
|
Preferences *const pref = Preferences::instance(); |
|
|
|
pref->setRssSideSplitterState(splitterSide->saveState()); |
|
|
|
pref->setRssSideSplitterState(splitterSide->saveState()); |
|
|
|
pref->setRssMainSplitterState(splitterMain->saveState()); |
|
|
|
pref->setRssMainSplitterState(splitterMain->saveState()); |
|
|
|
qDebug("Splitters position saved"); |
|
|
|
qDebug("Splitters position saved"); |
|
|
@ -610,7 +609,7 @@ void RSSImp::saveSlidersPosition() |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::restoreSlidersPosition() |
|
|
|
void RSSImp::restoreSlidersPosition() |
|
|
|
{ |
|
|
|
{ |
|
|
|
const Preferences* const pref = Preferences::instance(); |
|
|
|
const Preferences *const pref = Preferences::instance(); |
|
|
|
const QByteArray stateSide = pref->getRssSideSplitterState(); |
|
|
|
const QByteArray stateSide = pref->getRssSideSplitterState(); |
|
|
|
if (!stateSide.isEmpty()) |
|
|
|
if (!stateSide.isEmpty()) |
|
|
|
splitterSide->restoreState(stateSide); |
|
|
|
splitterSide->restoreState(stateSide); |
|
|
@ -619,9 +618,9 @@ void RSSImp::restoreSlidersPosition() |
|
|
|
splitterMain->restoreState(stateMain); |
|
|
|
splitterMain->restoreState(stateMain); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::updateItemsInfos(const QList<QTreeWidgetItem*>& items) |
|
|
|
void RSSImp::updateItemsInfos(const QList<QTreeWidgetItem *> &items) |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach (QTreeWidgetItem* item, items) |
|
|
|
foreach (QTreeWidgetItem *item, items) |
|
|
|
updateItemInfos(item); |
|
|
|
updateItemInfos(item); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -636,21 +635,22 @@ void RSSImp::updateItemInfos(QTreeWidgetItem *item) |
|
|
|
name = tr("Unread"); |
|
|
|
name = tr("Unread"); |
|
|
|
emit updateRSSCount(rss_item->unreadCount()); |
|
|
|
emit updateRSSCount(rss_item->unreadCount()); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else { |
|
|
|
name = rss_item->displayName(); |
|
|
|
name = rss_item->displayName(); |
|
|
|
|
|
|
|
} |
|
|
|
item->setText(0, name + QString::fromUtf8(" (") + QString::number(rss_item->unreadCount()) + QString(")")); |
|
|
|
item->setText(0, name + QString::fromUtf8(" (") + QString::number(rss_item->unreadCount()) + QString(")")); |
|
|
|
// If item has a parent, update it too
|
|
|
|
// If item has a parent, update it too
|
|
|
|
if (item->parent()) |
|
|
|
if (item->parent()) |
|
|
|
updateItemInfos(item->parent()); |
|
|
|
updateItemInfos(item->parent()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::updateFeedIcon(const QString& url, const QString& iconPath) |
|
|
|
void RSSImp::updateFeedIcon(const QString &url, const QString &iconPath) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QTreeWidgetItem* item = m_feedList->getTreeItemFromUrl(url); |
|
|
|
QTreeWidgetItem *item = m_feedList->getTreeItemFromUrl(url); |
|
|
|
item->setData(0, Qt::DecorationRole, QVariant(QIcon(iconPath))); |
|
|
|
item->setData(0, Qt::DecorationRole, QVariant(QIcon(iconPath))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::updateFeedInfos(const QString& url, const QString& display_name, uint nbUnread) |
|
|
|
void RSSImp::updateFeedInfos(const QString &url, const QString &display_name, uint nbUnread) |
|
|
|
{ |
|
|
|
{ |
|
|
|
qDebug() << Q_FUNC_INFO << display_name; |
|
|
|
qDebug() << Q_FUNC_INFO << display_name; |
|
|
|
QTreeWidgetItem *item = m_feedList->getTreeItemFromUrl(url); |
|
|
|
QTreeWidgetItem *item = m_feedList->getTreeItemFromUrl(url); |
|
|
@ -665,7 +665,7 @@ void RSSImp::updateFeedInfos(const QString& url, const QString& display_name, ui |
|
|
|
updateItemInfos(m_feedList->stickyUnreadItem()); |
|
|
|
updateItemInfos(m_feedList->stickyUnreadItem()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RSSImp::onFeedContentChanged(const QString& url) |
|
|
|
void RSSImp::onFeedContentChanged(const QString &url) |
|
|
|
{ |
|
|
|
{ |
|
|
|
qDebug() << Q_FUNC_INFO << url; |
|
|
|
qDebug() << Q_FUNC_INFO << url; |
|
|
|
QTreeWidgetItem *item = m_feedList->getTreeItemFromUrl(url); |
|
|
|
QTreeWidgetItem *item = m_feedList->getTreeItemFromUrl(url); |
|
|
@ -682,8 +682,8 @@ void RSSImp::updateRefreshInterval(uint val) |
|
|
|
m_rssManager->updateRefreshInterval(val); |
|
|
|
m_rssManager->updateRefreshInterval(val); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RSSImp::RSSImp(QWidget *parent): |
|
|
|
RSSImp::RSSImp(QWidget *parent) |
|
|
|
QWidget(parent), |
|
|
|
: QWidget(parent), |
|
|
|
m_rssManager(new Rss::Manager) |
|
|
|
m_rssManager(new Rss::Manager) |
|
|
|
{ |
|
|
|
{ |
|
|
|
setupUi(this); |
|
|
|
setupUi(this); |
|
|
@ -717,12 +717,12 @@ RSSImp::RSSImp(QWidget *parent): |
|
|
|
populateArticleList(m_feedList->currentItem()); |
|
|
|
populateArticleList(m_feedList->currentItem()); |
|
|
|
|
|
|
|
|
|
|
|
loadFoldersOpenState(); |
|
|
|
loadFoldersOpenState(); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedInfosChanged(QString, QString, unsigned int)), SLOT(updateFeedInfos(QString, QString, unsigned int))); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedInfosChanged(QString,QString,unsigned int)), SLOT(updateFeedInfos(QString,QString,unsigned int))); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedContentChanged(QString)), SLOT(onFeedContentChanged(QString))); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedContentChanged(QString)), SLOT(onFeedContentChanged(QString))); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedIconChanged(QString, QString)), SLOT(updateFeedIcon(QString, QString))); |
|
|
|
connect(m_rssManager.data(), SIGNAL(feedIconChanged(QString,QString)), SLOT(updateFeedIcon(QString,QString))); |
|
|
|
|
|
|
|
|
|
|
|
connect(m_feedList, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(displayRSSListMenu(const QPoint &))); |
|
|
|
connect(m_feedList, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(displayRSSListMenu(const QPoint&))); |
|
|
|
connect(listArticles, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(displayItemsListMenu(const QPoint &))); |
|
|
|
connect(listArticles, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(displayItemsListMenu(const QPoint&))); |
|
|
|
|
|
|
|
|
|
|
|
// Feeds list actions
|
|
|
|
// Feeds list actions
|
|
|
|
connect(actionDelete, SIGNAL(triggered()), this, SLOT(deleteSelectedItems())); |
|
|
|
connect(actionDelete, SIGNAL(triggered()), this, SLOT(deleteSelectedItems())); |
|
|
@ -738,8 +738,8 @@ RSSImp::RSSImp(QWidget *parent): |
|
|
|
connect(actionOpen_news_URL, SIGNAL(triggered()), this, SLOT(openSelectedArticlesUrls())); |
|
|
|
connect(actionOpen_news_URL, SIGNAL(triggered()), this, SLOT(openSelectedArticlesUrls())); |
|
|
|
connect(actionDownload_torrent, SIGNAL(triggered()), this, SLOT(downloadSelectedTorrents())); |
|
|
|
connect(actionDownload_torrent, SIGNAL(triggered()), this, SLOT(downloadSelectedTorrents())); |
|
|
|
|
|
|
|
|
|
|
|
connect(m_feedList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(populateArticleList(QTreeWidgetItem*))); |
|
|
|
connect(m_feedList, SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)), this, SLOT(populateArticleList(QTreeWidgetItem *))); |
|
|
|
connect(m_feedList, SIGNAL(foldersAltered(QList<QTreeWidgetItem*>)), this, SLOT(updateItemsInfos(QList<QTreeWidgetItem*>))); |
|
|
|
connect(m_feedList, SIGNAL(foldersAltered(QList<QTreeWidgetItem * >)), this, SLOT(updateItemsInfos(QList<QTreeWidgetItem * >))); |
|
|
|
|
|
|
|
|
|
|
|
connect(listArticles, SIGNAL(itemSelectionChanged()), this, SLOT(refreshTextBrowser())); |
|
|
|
connect(listArticles, SIGNAL(itemSelectionChanged()), this, SLOT(refreshTextBrowser())); |
|
|
|
connect(listArticles, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(downloadSelectedTorrents())); |
|
|
|
connect(listArticles, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(downloadSelectedTorrents())); |
|
|
@ -747,8 +747,8 @@ RSSImp::RSSImp(QWidget *parent): |
|
|
|
// Restore sliders position
|
|
|
|
// Restore sliders position
|
|
|
|
restoreSlidersPosition(); |
|
|
|
restoreSlidersPosition(); |
|
|
|
// Bind saveSliders slots
|
|
|
|
// Bind saveSliders slots
|
|
|
|
connect(splitterMain, SIGNAL(splitterMoved(int, int)), this, SLOT(saveSlidersPosition())); |
|
|
|
connect(splitterMain, SIGNAL(splitterMoved(int,int)), this, SLOT(saveSlidersPosition())); |
|
|
|
connect(splitterSide, SIGNAL(splitterMoved(int, int)), this, SLOT(saveSlidersPosition())); |
|
|
|
connect(splitterSide, SIGNAL(splitterMoved(int,int)), this, SLOT(saveSlidersPosition())); |
|
|
|
|
|
|
|
|
|
|
|
qDebug("RSSImp constructed"); |
|
|
|
qDebug("RSSImp constructed"); |
|
|
|
} |
|
|
|
} |
|
|
|