Almost done with complete refactoring (no queue yet)
This commit is contained in:
parent
2a9fc8e0a9
commit
0808d3b5fe
@ -27,9 +27,27 @@ DataManager::DataManager()
|
|||||||
m_feeds[url]->setLastUpdated(lastUpdated);
|
m_feeds[url]->setLastUpdated(lastUpdated);
|
||||||
// TODO: signal feedmodel: Q_EMIT dataChanged(createIndex(i, 0), createIndex(i, 0));
|
// TODO: signal feedmodel: Q_EMIT dataChanged(createIndex(i, 0), createIndex(i, 0));
|
||||||
});
|
});
|
||||||
connect(&Fetcher::instance(), &Fetcher::feedUpdated, this, [this](const QString &url) {
|
connect(&Fetcher::instance(), &Fetcher::entryAdded, this, [this](const QString &feedurl, const QString &id) {
|
||||||
// TODO: make DataManager rescan entries
|
// Only add the new entry to m_entries
|
||||||
Q_EMIT feedEntriesUpdated(url);
|
// we will repopulate m_entrymap once all new entries have been added,
|
||||||
|
// such that m_entrymap will show all new entries in the correct order
|
||||||
|
m_entries[id] = nullptr;
|
||||||
|
Q_EMIT entryAdded(feedurl, id);
|
||||||
|
});
|
||||||
|
connect(&Fetcher::instance(), &Fetcher::feedUpdated, this, [this](const QString &feedurl) {
|
||||||
|
// Update m_entrymap for feedurl, such that the new and old entries show
|
||||||
|
// up in the correct order
|
||||||
|
// TODO: put this code into a separate method and re-use this in the constructor
|
||||||
|
QSqlQuery query;
|
||||||
|
m_entrymap[feedurl].clear();
|
||||||
|
query.prepare(QStringLiteral("SELECT id FROM Entries WHERE feed=:feed ORDER BY updated DESC;"));
|
||||||
|
query.bindValue(QStringLiteral(":feed"), feedurl);
|
||||||
|
Database::instance().execute(query);
|
||||||
|
while (query.next()) {
|
||||||
|
m_entrymap[feedurl] += query.value(QStringLiteral("id")).toString();
|
||||||
|
qDebug() << m_entrymap[feedurl];
|
||||||
|
}
|
||||||
|
Q_EMIT feedEntriesUpdated(feedurl);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Only read unique feedurls and entry ids from the database.
|
// Only read unique feedurls and entry ids from the database.
|
||||||
@ -43,11 +61,12 @@ DataManager::DataManager()
|
|||||||
qDebug() << m_feedmap;
|
qDebug() << m_feedmap;
|
||||||
|
|
||||||
for (auto &feedurl : m_feedmap) {
|
for (auto &feedurl : m_feedmap) {
|
||||||
query.prepare(QStringLiteral("SELECT id FROM Entries WHERE feed=:feed ORDER BY updated;"));
|
query.prepare(QStringLiteral("SELECT id FROM Entries WHERE feed=:feed ORDER BY updated DESC;"));
|
||||||
query.bindValue(QStringLiteral(":feed"), feedurl);
|
query.bindValue(QStringLiteral(":feed"), feedurl);
|
||||||
Database::instance().execute(query);
|
Database::instance().execute(query);
|
||||||
while (query.next()) {
|
while (query.next()) {
|
||||||
m_entrymap[feedurl] += query.value(QStringLiteral("id")).toString();
|
m_entrymap[feedurl] += query.value(QStringLiteral("id")).toString();
|
||||||
|
m_entries[query.value(QStringLiteral("id")).toString()] = nullptr;
|
||||||
qDebug() << m_entrymap[feedurl];
|
qDebug() << m_entrymap[feedurl];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,7 +162,9 @@ void DataManager::removeFeed(const int &index)
|
|||||||
query.bindValue(QStringLiteral(":url"), feed->url());
|
query.bindValue(QStringLiteral(":url"), feed->url());
|
||||||
Database::instance().execute(query);
|
Database::instance().execute(query);
|
||||||
|
|
||||||
// Then delete the instances and mappings
|
// TODO: delete files: enclosure files and images
|
||||||
|
|
||||||
|
// Then delete the object instances and mappings
|
||||||
for (auto& id : m_entrymap[feed->url()]) {
|
for (auto& id : m_entrymap[feed->url()]) {
|
||||||
delete m_entries[id]; // delete pointer
|
delete m_entries[id]; // delete pointer
|
||||||
m_entries.remove(id); // delete the hash key
|
m_entries.remove(id); // delete the hash key
|
||||||
|
@ -43,8 +43,8 @@ public:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void feedAdded(const QString &url);
|
void feedAdded(const QString &url);
|
||||||
void feedRemoved(const int &index);
|
void feedRemoved(const int &index);
|
||||||
void entryAdded(const QString &id);
|
void entryAdded(const QString &feedurl, const QString &id);
|
||||||
void entryRemoved(const Feed*, const int &index);
|
void entryRemoved(const Feed*, const int &index); // TODO: implement this method
|
||||||
void feedEntriesUpdated(const QString &url);
|
void feedEntriesUpdated(const QString &url);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -17,10 +17,12 @@ EntriesModel::EntriesModel(Feed *feed)
|
|||||||
: QAbstractListModel(feed)
|
: QAbstractListModel(feed)
|
||||||
, m_feed(feed)
|
, m_feed(feed)
|
||||||
{
|
{
|
||||||
|
// When feed is updated, the entire model needs to be reset because we
|
||||||
|
// cannot know where the new entries will be inserted into the list (or that
|
||||||
|
// maybe even items have been removed.
|
||||||
connect(&DataManager::instance(), &DataManager::feedEntriesUpdated, this, [this](const QString &url) {
|
connect(&DataManager::instance(), &DataManager::feedEntriesUpdated, this, [this](const QString &url) {
|
||||||
if (m_feed->url() == url) {
|
if (m_feed->url() == url) {
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
// TODO: make sure to pop the entrylistpage if it's the active one
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -133,6 +133,7 @@ void Fetcher::processEntry(Syndication::ItemPtr entry, const QString &url)
|
|||||||
for (const auto &enclosure : entry->enclosures()) {
|
for (const auto &enclosure : entry->enclosures()) {
|
||||||
processEnclosure(enclosure, entry, url);
|
processEnclosure(enclosure, entry, url);
|
||||||
}
|
}
|
||||||
|
Q_EMIT entryAdded(url, entry->id());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fetcher::processAuthor(Syndication::PersonPtr author, const QString &entryId, const QString &url)
|
void Fetcher::processAuthor(Syndication::PersonPtr author, const QString &entryId, const QString &url)
|
||||||
|
@ -44,5 +44,6 @@ Q_SIGNALS:
|
|||||||
void feedUpdated(const QString &url);
|
void feedUpdated(const QString &url);
|
||||||
void feedDetailsUpdated(const QString &url, const QString &name, const QString &image, const QString &link, const QString &description, const QDateTime &lastUpdated);
|
void feedDetailsUpdated(const QString &url, const QString &name, const QString &image, const QString &link, const QString &description, const QDateTime &lastUpdated);
|
||||||
void error(const QString &url, int errorId, const QString &errorString);
|
void error(const QString &url, int errorId, const QString &errorString);
|
||||||
|
void entryAdded(const QString &feedurl, const QString &id);
|
||||||
void downloadFinished(QString url);
|
void downloadFinished(QString url);
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,6 @@ Kirigami.ApplicationWindow {
|
|||||||
pageStack.push(feedList)
|
pageStack.push(feedList)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Kirigami.Action{ separator: true },
|
|
||||||
Kirigami.Action {
|
Kirigami.Action {
|
||||||
text: i18n("Settings")
|
text: i18n("Settings")
|
||||||
iconName: "settings-configure"
|
iconName: "settings-configure"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user