Fixing new selection approach.
This commit is contained in:
parent
63d4b93433
commit
5bcf351dc7
@ -37,32 +37,23 @@ FeedsModelRootItem *FeedsSelection::selectedItem() const {
|
||||
return m_selectedItem;
|
||||
}
|
||||
|
||||
QString FeedsSelection::generateDatabaseFilter() {
|
||||
if (m_selectedItem == NULL) {
|
||||
return "feed IN () AND is_deleted = 0";
|
||||
}
|
||||
QString FeedsSelection::generateListOfIds() {
|
||||
if (m_selectedItem != NULL &&
|
||||
(m_selectedItem->kind() == FeedsModelRootItem::Feed || m_selectedItem->kind() == FeedsModelRootItem::Category)) {
|
||||
QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren();
|
||||
QStringList stringy_ids;
|
||||
|
||||
switch (m_selectedItem->kind()) {
|
||||
case FeedsModelRootItem::RecycleBin:
|
||||
return "is_deleted = 1 AND is_pdeleted = 0";
|
||||
children.append(m_selectedItem);
|
||||
|
||||
case FeedsModelRootItem::Category:
|
||||
case FeedsModelRootItem::Feed: {
|
||||
QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren();
|
||||
QStringList stringy_ids;
|
||||
|
||||
children.append(m_selectedItem);
|
||||
|
||||
foreach (FeedsModelRootItem *child, children) {
|
||||
if (child->kind() == FeedsModelRootItem::Feed) {
|
||||
stringy_ids.append(QString::number(child->id()));
|
||||
}
|
||||
foreach (FeedsModelRootItem *child, children) {
|
||||
if (child->kind() == FeedsModelRootItem::Feed) {
|
||||
stringy_ids.append(QString::number(child->id()));
|
||||
}
|
||||
|
||||
return QString("feed IN (%1) AND is_deleted = 0").arg(stringy_ids.join(", "));
|
||||
}
|
||||
|
||||
default:
|
||||
return "feed IN () AND is_deleted = 0";
|
||||
return stringy_ids.join(", ");
|
||||
}
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ class FeedsSelection {
|
||||
|
||||
MessageMode mode();
|
||||
FeedsModelRootItem *selectedItem() const;
|
||||
QString generateDatabaseFilter();
|
||||
QString generateListOfIds();
|
||||
|
||||
private:
|
||||
FeedsModelRootItem *m_selectedItem;
|
||||
|
@ -55,8 +55,8 @@ void MessagesModel::setupIcons() {
|
||||
m_unreadIcon = qApp->icons()->fromTheme("mail-mark-unread");
|
||||
}
|
||||
|
||||
FeedsSelection MessagesModel::currentFeeds() const {
|
||||
return m_currentFeeds;
|
||||
FeedsSelection MessagesModel::loadedSelection() const {
|
||||
return m_currentSelection;
|
||||
}
|
||||
|
||||
void MessagesModel::fetchAll() {
|
||||
@ -72,21 +72,18 @@ void MessagesModel::setupFonts() {
|
||||
}
|
||||
|
||||
void MessagesModel::loadMessages(const FeedsSelection &selection) {
|
||||
m_currentFeeds = selection;
|
||||
m_currentSelection = selection;
|
||||
|
||||
/* if (selection.size() == 1 && selection[0] == ID_RECYCLE_BIN) {
|
||||
m_messageMode = MessagesFromRecycleBin;
|
||||
if (m_currentSelection.mode() == FeedsSelection::MessagesFromRecycleBin) {
|
||||
setFilter("is_deleted = 1 AND is_pdeleted = 0");
|
||||
}
|
||||
else {
|
||||
m_messageMode = MessagesFromFeeds;
|
||||
QString assembled_ids = textualFeeds().join(", ");
|
||||
QString assembled_ids = m_currentSelection.generateListOfIds();
|
||||
|
||||
setFilter(QString("feed IN (%1) AND is_deleted = 0").arg(assembled_ids));
|
||||
qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids));
|
||||
}*/
|
||||
}
|
||||
|
||||
setFilter(m_currentFeeds.generateDatabaseFilter());
|
||||
select();
|
||||
fetchAll();
|
||||
}
|
||||
@ -282,7 +279,7 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
|
||||
// If commit succeeded, then emit changes, so that view
|
||||
// can reflect.
|
||||
emit dataChanged(index(row_index, 0), index(row_index, columnCount() - 1));
|
||||
emit messageCountsChanged(m_currentFeeds.mode(), false, false);
|
||||
emit messageCountsChanged(m_currentSelection.mode(), false, false);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
@ -381,7 +378,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
|
||||
|
||||
QString sql_delete_query;
|
||||
|
||||
if (m_currentFeeds.mode() == FeedsSelection::MessagesFromFeeds) {
|
||||
if (m_currentSelection.mode() == FeedsSelection::MessagesFromFeeds) {
|
||||
sql_delete_query = QString("UPDATE Messages SET is_deleted = %2 WHERE id IN (%1);").arg(message_ids.join(", "),
|
||||
QString::number(deleted));
|
||||
}
|
||||
@ -394,7 +391,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
|
||||
select();
|
||||
fetchAll();
|
||||
|
||||
emit messageCountsChanged(m_currentFeeds.mode(), true, false);
|
||||
emit messageCountsChanged(m_currentSelection.mode(), true, false);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
@ -419,7 +416,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
|
||||
select();
|
||||
fetchAll();
|
||||
|
||||
emit messageCountsChanged(m_currentFeeds.mode(), false, false);
|
||||
emit messageCountsChanged(m_currentSelection.mode(), false, false);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
@ -428,7 +425,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
|
||||
}
|
||||
|
||||
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
|
||||
if (m_currentFeeds.mode() == FeedsSelection::MessagesFromFeeds) {
|
||||
if (m_currentSelection.mode() == FeedsSelection::MessagesFromFeeds) {
|
||||
qDebug("Cannot restore non-deleted messages.");
|
||||
return false;
|
||||
}
|
||||
@ -450,7 +447,7 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
|
||||
select();
|
||||
fetchAll();
|
||||
|
||||
emit messageCountsChanged(m_currentFeeds.mode(), true, true);
|
||||
emit messageCountsChanged(m_currentSelection.mode(), true, true);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
|
@ -99,9 +99,7 @@ class MessagesModel : public QSqlTableModel {
|
||||
Message messageAt(int row_index) const;
|
||||
int messageId(int row_index) const;
|
||||
|
||||
void updateDateFormat();
|
||||
|
||||
FeedsSelection currentFeeds() const;
|
||||
FeedsSelection loadedSelection() const;
|
||||
|
||||
public slots:
|
||||
// To disable persistent changes submissions.
|
||||
@ -110,6 +108,7 @@ class MessagesModel : public QSqlTableModel {
|
||||
return false;
|
||||
}
|
||||
|
||||
void updateDateFormat();
|
||||
void reloadWholeLayout();
|
||||
|
||||
// CORE messages manipulators.
|
||||
@ -155,7 +154,7 @@ class MessagesModel : public QSqlTableModel {
|
||||
MessageFilter m_messageFilter;
|
||||
|
||||
QString m_customDateFormat;
|
||||
FeedsSelection m_currentFeeds;
|
||||
FeedsSelection m_currentSelection;
|
||||
QList<QString> m_headerData;
|
||||
QList<QString> m_tooltipData;
|
||||
|
||||
|
@ -624,24 +624,7 @@ void FeedsView::setupAppearance() {
|
||||
}
|
||||
|
||||
void FeedsView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) {
|
||||
/*QTreeView::selectionChanged(selected, deselected);
|
||||
|
||||
QList<FeedsModelFeed*> selected_feeds = selectedFeeds();
|
||||
QList<int> selected_ids;
|
||||
|
||||
if (!selected_feeds.isEmpty()) {
|
||||
foreach (FeedsModelFeed *feed, selected_feeds) {
|
||||
#if defined(DEBUG)
|
||||
QModelIndex index_for_feed = m_sourceModel->indexForItem(feed);
|
||||
qDebug("Selecting feed '%s' (source index [%d, %d]).", qPrintable(feed->title()), index_for_feed.row(), index_for_feed.column());
|
||||
#endif
|
||||
|
||||
selected_ids << feed->id();
|
||||
}
|
||||
}
|
||||
else if (selectedRecycleBin() != NULL) {
|
||||
selected_ids << ID_RECYCLE_BIN;
|
||||
}*/
|
||||
QTreeView::selectionChanged(selected, deselected);
|
||||
|
||||
emit feedsSelected(FeedsSelection(selectedItem()));
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ void MessagesView::contextMenuEvent(QContextMenuEvent *event) {
|
||||
initializeContextMenu();
|
||||
}
|
||||
|
||||
if (sourceModel()->currentFeeds().mode() != FeedsSelection::MessagesFromRecycleBin) {
|
||||
if (sourceModel()->loadedSelection().mode() != FeedsSelection::MessagesFromRecycleBin) {
|
||||
m_contextMenu->removeAction(qApp->mainForm()->m_ui->m_actionRestoreSelectedMessagesFromRecycleBin);
|
||||
}
|
||||
else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user