Refactoring, fix some code errors.
This commit is contained in:
parent
f21f366850
commit
7f8c687e95
73 changed files with 268 additions and 285 deletions
|
|
@ -30,7 +30,7 @@
|
||||||
<url type="donation">https://martinrotter.github.io/donate/</url>
|
<url type="donation">https://martinrotter.github.io/donate/</url>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
<release version="3.5.7" date="2019-04-12"/>
|
<release version="3.5.7" date="2019-05-28"/>
|
||||||
</releases>
|
</releases>
|
||||||
<content_rating type="oars-1.0">
|
<content_rating type="oars-1.0">
|
||||||
<content_attribute id="violence-cartoon">none</content_attribute>
|
<content_attribute id="violence-cartoon">none</content_attribute>
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ void MessagePreviewer::markMessageAsReadUnread(RootItem::ReadStatus read) {
|
||||||
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
if (m_root->getParentServiceRoot()->onBeforeSetMessagesRead(m_root.data(),
|
||||||
QList<Message>() << m_message,
|
QList<Message>() << m_message,
|
||||||
read)) {
|
read)) {
|
||||||
DatabaseQueries::markMessagesReadUnread(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
DatabaseQueries::markMessagesReadUnread(qApp->database()->connection(objectName(), DatabaseFactory::DesiredType::FromSettings),
|
||||||
QStringList() << QString::number(m_message.m_id),
|
QStringList() << QString::number(m_message.m_id),
|
||||||
read);
|
read);
|
||||||
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
m_root->getParentServiceRoot()->onAfterSetMessagesRead(m_root.data(),
|
||||||
|
|
@ -185,7 +185,7 @@ void MessagePreviewer::switchMessageImportance(bool checked) {
|
||||||
:
|
:
|
||||||
RootItem::Important)))
|
RootItem::Important)))
|
||||||
{
|
{
|
||||||
DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::FromSettings),
|
DatabaseQueries::switchMessagesImportance(qApp->database()->connection(objectName(), DatabaseFactory::DesiredType::FromSettings),
|
||||||
QStringList() << QString::number(m_message.m_id));
|
QStringList() << QString::number(m_message.m_id));
|
||||||
m_root->getParentServiceRoot()->onAfterSwitchMessageImportance(m_root.data(),
|
m_root->getParentServiceRoot()->onAfterSwitchMessageImportance(m_root.data(),
|
||||||
QList<ImportanceChange>() << ImportanceChange(m_message,
|
QList<ImportanceChange>() << ImportanceChange(m_message,
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ extern void disableWindowTabbing();
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
for (int i = 0; i < argc; i++) {
|
for (int i = 0; i < argc; i++) {
|
||||||
|
// TODO: use process arg parser
|
||||||
const QString str = QString::fromLocal8Bit(argv[i]);
|
const QString str = QString::fromLocal8Bit(argv[i]);
|
||||||
|
|
||||||
if (str == "-h") {
|
if (str == "-h") {
|
||||||
|
|
@ -62,7 +63,7 @@ int main(int argc, char* argv[]) {
|
||||||
// Instantiate base application object.
|
// Instantiate base application object.
|
||||||
Application application(APP_LOW_NAME, argc, argv);
|
Application application(APP_LOW_NAME, argc, argv);
|
||||||
|
|
||||||
if (application.arguments().contains(QL1S("-log"))) {
|
if (Application::arguments().contains(QL1S("-log"))) {
|
||||||
Debugging::instance()->setTargetFile(IOFactory::getSystemFolder(QStandardPaths::TempLocation) +
|
Debugging::instance()->setTargetFile(IOFactory::getSystemFolder(QStandardPaths::TempLocation) +
|
||||||
QDir::separator() + QL1S("rssguard.log"));
|
QDir::separator() + QL1S("rssguard.log"));
|
||||||
}
|
}
|
||||||
|
|
@ -71,7 +72,7 @@ int main(int argc, char* argv[]) {
|
||||||
qDebug("Instantiated Application class.");
|
qDebug("Instantiated Application class.");
|
||||||
|
|
||||||
// Check if another instance is running.
|
// Check if another instance is running.
|
||||||
if (application.sendMessage((QStringList() << APP_IS_RUNNING << application.arguments().mid(1)).join(ARGUMENTS_LIST_SEPARATOR))) {
|
if (application.sendMessage((QStringList() << APP_IS_RUNNING << Application::arguments().mid(1)).join(ARGUMENTS_LIST_SEPARATOR))) {
|
||||||
qWarning("Another instance of the application is already running. Notifying it.");
|
qWarning("Another instance of the application is already running. Notifying it.");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
@ -137,7 +138,7 @@ int main(int argc, char* argv[]) {
|
||||||
if (qApp->isFirstRun() || qApp->isFirstRun(APP_VERSION)) {
|
if (qApp->isFirstRun() || qApp->isFirstRun(APP_VERSION)) {
|
||||||
qApp->showGuiMessage(QSL(APP_NAME), QObject::tr("Welcome to %1.\n\nPlease, check NEW stuff included in this\n"
|
qApp->showGuiMessage(QSL(APP_NAME), QObject::tr("Welcome to %1.\n\nPlease, check NEW stuff included in this\n"
|
||||||
"version by clicking this popup notification.").arg(APP_LONG_NAME),
|
"version by clicking this popup notification.").arg(APP_LONG_NAME),
|
||||||
QSystemTrayIcon::NoIcon, 0, false, [] {
|
QSystemTrayIcon::NoIcon, nullptr, false, [] {
|
||||||
FormAbout(qApp->mainForm()).exec();
|
FormAbout(qApp->mainForm()).exec();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const {
|
||||||
QDomDocument dokument;
|
QDomDocument dokument;
|
||||||
|
|
||||||
if (!skin_file.open(QIODevice::Text | QIODevice::ReadOnly) || !dokument.setContent(&skin_file, true)) {
|
if (!skin_file.open(QIODevice::Text | QIODevice::ReadOnly) || !dokument.setContent(&skin_file, true)) {
|
||||||
if (ok) {
|
if (ok != nullptr) {
|
||||||
*ok = false;
|
*ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ bool SystemFactory::removeTrolltechJunkRegistryKeys() {
|
||||||
if (qApp->settings()->value(GROUP(General), SETTING(General::RemoveTrolltechJunk)).toBool()) {
|
if (qApp->settings()->value(GROUP(General), SETTING(General::RemoveTrolltechJunk)).toBool()) {
|
||||||
QSettings registry_key(QSL("HKEY_CURRENT_USER\\Software\\TrollTech"), QSettings::NativeFormat);
|
QSettings registry_key(QSL("HKEY_CURRENT_USER\\Software\\TrollTech"), QSettings::NativeFormat);
|
||||||
|
|
||||||
registry_key.remove(QSL(""));
|
registry_key.remove(QString());
|
||||||
registry_key.sync();
|
registry_key.sync();
|
||||||
return registry_key.status() == QSettings::NoError;
|
return registry_key.status() == QSettings::NoError;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
AdBlockDialog::AdBlockDialog(QWidget* parent)
|
AdBlockDialog::AdBlockDialog(QWidget* parent)
|
||||||
: QDialog(parent), m_manager(AdBlockManager::instance()), m_currentTreeWidget(0), m_currentSubscription(0),
|
: QDialog(parent), m_manager(AdBlockManager::instance()), m_currentTreeWidget(nullptr), m_currentSubscription(nullptr),
|
||||||
m_loaded(false), m_ui(new Ui::AdBlockDialog) {
|
m_loaded(false), m_ui(new Ui::AdBlockDialog) {
|
||||||
m_ui->setupUi(this);
|
m_ui->setupUi(this);
|
||||||
m_ui->m_cbEnable->setChecked(m_manager->isEnabled());
|
m_ui->m_cbEnable->setChecked(m_manager->isEnabled());
|
||||||
|
|
@ -45,7 +45,7 @@ AdBlockDialog::AdBlockDialog(QWidget* parent)
|
||||||
QPushButton* btn_options = m_ui->m_buttonBox->addButton(QDialogButtonBox::FirstButton);
|
QPushButton* btn_options = m_ui->m_buttonBox->addButton(QDialogButtonBox::FirstButton);
|
||||||
|
|
||||||
btn_options->setText(tr("Options"));
|
btn_options->setText(tr("Options"));
|
||||||
QMenu* menu = new QMenu(btn_options);
|
auto* menu = new QMenu(btn_options);
|
||||||
|
|
||||||
m_actionAddRule = menu->addAction(tr("Add rule"), this, &AdBlockDialog::addRule);
|
m_actionAddRule = menu->addAction(tr("Add rule"), this, &AdBlockDialog::addRule);
|
||||||
m_actionRemoveRule = menu->addAction(tr("Remove rule"), this, &AdBlockDialog::removeRule);
|
m_actionRemoveRule = menu->addAction(tr("Remove rule"), this, &AdBlockDialog::removeRule);
|
||||||
|
|
@ -67,9 +67,9 @@ AdBlockDialog::AdBlockDialog(QWidget* parent)
|
||||||
void AdBlockDialog::showRule(const AdBlockRule* rule) const {
|
void AdBlockDialog::showRule(const AdBlockRule* rule) const {
|
||||||
AdBlockSubscription* subscription = rule->subscription();
|
AdBlockSubscription* subscription = rule->subscription();
|
||||||
|
|
||||||
if (subscription) {
|
if (subscription != nullptr) {
|
||||||
for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) {
|
for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) {
|
||||||
AdBlockTreeWidget* treeWidget = qobject_cast<AdBlockTreeWidget*>(m_ui->m_tabSubscriptions->widget(i));
|
auto* treeWidget = qobject_cast<AdBlockTreeWidget*>(m_ui->m_tabSubscriptions->widget(i));
|
||||||
|
|
||||||
if (subscription == treeWidget->subscription()) {
|
if (subscription == treeWidget->subscription()) {
|
||||||
treeWidget->showRule(rule);
|
treeWidget->showRule(rule);
|
||||||
|
|
@ -99,7 +99,7 @@ void AdBlockDialog::addSubscription() {
|
||||||
QString url = dialog.url();
|
QString url = dialog.url();
|
||||||
|
|
||||||
if (AdBlockSubscription* subscription = m_manager->addSubscription(title, url)) {
|
if (AdBlockSubscription* subscription = m_manager->addSubscription(title, url)) {
|
||||||
AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions);
|
auto* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions);
|
||||||
int index = m_ui->m_tabSubscriptions->insertTab(m_ui->m_tabSubscriptions->count() - 1, tree, subscription->title());
|
int index = m_ui->m_tabSubscriptions->insertTab(m_ui->m_tabSubscriptions->count() - 1, tree, subscription->title());
|
||||||
|
|
||||||
m_ui->m_tabSubscriptions->setCurrentIndex(index);
|
m_ui->m_tabSubscriptions->setCurrentIndex(index);
|
||||||
|
|
@ -128,8 +128,8 @@ void AdBlockDialog::enableAdBlock(bool state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockDialog::aboutToShowMenu() {
|
void AdBlockDialog::aboutToShowMenu() {
|
||||||
bool subscriptionEditable = m_currentSubscription && m_currentSubscription->canEditRules();
|
bool subscriptionEditable = (m_currentSubscription != nullptr) && m_currentSubscription->canEditRules();
|
||||||
bool subscriptionRemovable = m_currentSubscription && m_currentSubscription->canBeRemoved();
|
bool subscriptionRemovable = (m_currentSubscription != nullptr) && m_currentSubscription->canBeRemoved();
|
||||||
|
|
||||||
m_actionAddRule->setEnabled(subscriptionEditable);
|
m_actionAddRule->setEnabled(subscriptionEditable);
|
||||||
m_actionRemoveRule->setEnabled(subscriptionEditable);
|
m_actionRemoveRule->setEnabled(subscriptionEditable);
|
||||||
|
|
@ -142,7 +142,7 @@ void AdBlockDialog::learnAboutRules() {
|
||||||
|
|
||||||
void AdBlockDialog::loadSubscriptions() {
|
void AdBlockDialog::loadSubscriptions() {
|
||||||
for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) {
|
for (int i = 0; i < m_ui->m_tabSubscriptions->count(); ++i) {
|
||||||
AdBlockTreeWidget* treeWidget = qobject_cast<AdBlockTreeWidget*>(m_ui->m_tabSubscriptions->widget(i));
|
auto* treeWidget = qobject_cast<AdBlockTreeWidget*>(m_ui->m_tabSubscriptions->widget(i));
|
||||||
|
|
||||||
treeWidget->refresh();
|
treeWidget->refresh();
|
||||||
}
|
}
|
||||||
|
|
@ -154,7 +154,7 @@ void AdBlockDialog::load() {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (AdBlockSubscription* subscription, m_manager->subscriptions()) {
|
foreach (AdBlockSubscription* subscription, m_manager->subscriptions()) {
|
||||||
AdBlockTreeWidget* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions);
|
auto* tree = new AdBlockTreeWidget(subscription, m_ui->m_tabSubscriptions);
|
||||||
|
|
||||||
m_ui->m_tabSubscriptions->addTab(tree, subscription->title());
|
m_ui->m_tabSubscriptions->addTab(tree, subscription->title());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
AdBlockIcon::AdBlockIcon(AdBlockManager* parent)
|
AdBlockIcon::AdBlockIcon(AdBlockManager* parent)
|
||||||
: QAction(parent), m_manager(parent), m_flashTimer(0), m_timerTicks(0), m_enabled(m_manager->isEnabled()) {
|
: QAction(parent), m_manager(parent), m_flashTimer(nullptr), m_timerTicks(0), m_enabled(m_manager->isEnabled()) {
|
||||||
setToolTip(tr("AdBlock lets you block unwanted content on web pages"));
|
setToolTip(tr("AdBlock lets you block unwanted content on web pages"));
|
||||||
setText(QSL("AdBlock"));
|
setText(QSL("AdBlock"));
|
||||||
setMenu(new QMenu());
|
setMenu(new QMenu());
|
||||||
|
|
@ -59,7 +59,7 @@ void AdBlockIcon::popupBlocked(const QString& ruleString, const QUrl& url) {
|
||||||
const QString filter = ruleString.mid(index + 2, ruleString.size() - index - 3);
|
const QString filter = ruleString.mid(index + 2, ruleString.size() - index - 3);
|
||||||
AdBlockSubscription* subscription = m_manager->subscriptionByName(subscriptionName);
|
AdBlockSubscription* subscription = m_manager->subscriptionByName(subscriptionName);
|
||||||
|
|
||||||
if (filter.isEmpty() || !subscription) {
|
if (filter.isEmpty() || (subscription == nullptr)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ void AdBlockIcon::popupBlocked(const QString& ruleString, const QUrl& url) {
|
||||||
m_blockedPopups.append(pair);
|
m_blockedPopups.append(pair);
|
||||||
qApp->showGuiMessage(tr("Blocked popup window"), tr("AdBlock blocked unwanted popup window."), QSystemTrayIcon::Information);
|
qApp->showGuiMessage(tr("Blocked popup window"), tr("AdBlock blocked unwanted popup window."), QSystemTrayIcon::Information);
|
||||||
|
|
||||||
if (!m_flashTimer) {
|
if (m_flashTimer == nullptr) {
|
||||||
m_flashTimer = new QTimer(this);
|
m_flashTimer = new QTimer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,10 +83,10 @@ void AdBlockIcon::popupBlocked(const QString& ruleString, const QUrl& url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockIcon::createMenu(QMenu* menu) {
|
void AdBlockIcon::createMenu(QMenu* menu) {
|
||||||
if (!menu) {
|
if (menu == nullptr) {
|
||||||
menu = qobject_cast<QMenu*>(sender());
|
menu = qobject_cast<QMenu*>(sender());
|
||||||
|
|
||||||
if (!menu) {
|
if (menu == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -126,9 +126,9 @@ void AdBlockIcon::showMenu(const QPoint& pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockIcon::toggleCustomFilter() {
|
void AdBlockIcon::toggleCustomFilter() {
|
||||||
QAction* action = qobject_cast<QAction*>(sender());
|
auto* action = qobject_cast<QAction*>(sender());
|
||||||
|
|
||||||
if (!action) {
|
if (action == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,7 +139,7 @@ void AdBlockIcon::toggleCustomFilter() {
|
||||||
customList->removeFilter(filter);
|
customList->removeFilter(filter);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AdBlockRule* rule = new AdBlockRule(filter, customList);
|
auto* rule = new AdBlockRule(filter, customList);
|
||||||
|
|
||||||
customList->addRule(rule);
|
customList->addRule(rule);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ bool AdBlockManager::block(QWebEngineUrlRequestInfo& request) {
|
||||||
bool res = false;
|
bool res = false;
|
||||||
const AdBlockRule* blockedRule = m_matcher->match(request, urlDomain, urlString);
|
const AdBlockRule* blockedRule = m_matcher->match(request, urlDomain, urlString);
|
||||||
|
|
||||||
if (blockedRule) {
|
if (blockedRule != nullptr) {
|
||||||
if (request.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) {
|
if (request.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) {
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
QUrl url(QSL("rssguard:adblockedpage"));
|
QUrl url(QSL("rssguard:adblockedpage"));
|
||||||
|
|
@ -165,7 +165,7 @@ bool AdBlockManager::addSubscriptionFromUrl(const QUrl& url) {
|
||||||
|
|
||||||
AdBlockSubscription* AdBlockManager::addSubscription(const QString& title, const QString& url) {
|
AdBlockSubscription* AdBlockManager::addSubscription(const QString& title, const QString& url) {
|
||||||
if (title.isEmpty() || url.isEmpty()) {
|
if (title.isEmpty() || url.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString fileName = title + QSL(".txt");
|
QString fileName = title + QSL(".txt");
|
||||||
|
|
@ -175,12 +175,12 @@ AdBlockSubscription* AdBlockManager::addSubscription(const QString& title, const
|
||||||
|
|
||||||
if (!file.open(QFile::WriteOnly)) {
|
if (!file.open(QFile::WriteOnly)) {
|
||||||
qWarning("Cannot save AdBlock subscription to file '%s'.", qPrintable(filePath));
|
qWarning("Cannot save AdBlock subscription to file '%s'.", qPrintable(filePath));
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
file.write(data);
|
file.write(data);
|
||||||
file.commit();
|
file.commit();
|
||||||
AdBlockSubscription* subscription = new AdBlockSubscription(title, this);
|
auto* subscription = new AdBlockSubscription(title, this);
|
||||||
|
|
||||||
subscription->setUrl(QUrl(url));
|
subscription->setUrl(QUrl(url));
|
||||||
subscription->setFilePath(filePath);
|
subscription->setFilePath(filePath);
|
||||||
|
|
@ -207,14 +207,14 @@ bool AdBlockManager::removeSubscription(AdBlockSubscription* subscription) {
|
||||||
|
|
||||||
AdBlockCustomList* AdBlockManager::customList() const {
|
AdBlockCustomList* AdBlockManager::customList() const {
|
||||||
foreach (AdBlockSubscription* subscription, m_subscriptions) {
|
foreach (AdBlockSubscription* subscription, m_subscriptions) {
|
||||||
AdBlockCustomList* list = qobject_cast<AdBlockCustomList*>(subscription);
|
auto* list = qobject_cast<AdBlockCustomList*>(subscription);
|
||||||
|
|
||||||
if (list) {
|
if (list != nullptr) {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AdBlockManager::storedListsPath() {
|
QString AdBlockManager::storedListsPath() {
|
||||||
|
|
@ -266,7 +266,7 @@ void AdBlockManager::load() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockSubscription* subscription = new AdBlockSubscription(title, this);
|
auto* subscription = new AdBlockSubscription(title, this);
|
||||||
|
|
||||||
subscription->setUrl(url);
|
subscription->setUrl(url);
|
||||||
subscription->setFilePath(absolutePath);
|
subscription->setFilePath(absolutePath);
|
||||||
|
|
@ -274,7 +274,7 @@ void AdBlockManager::load() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append CustomList.
|
// Append CustomList.
|
||||||
AdBlockCustomList* customList = new AdBlockCustomList(this);
|
auto* customList = new AdBlockCustomList(this);
|
||||||
|
|
||||||
m_subscriptions.append(customList);
|
m_subscriptions.append(customList);
|
||||||
|
|
||||||
|
|
@ -357,11 +357,11 @@ AdBlockSubscription* AdBlockManager::subscriptionByName(const QString& name) con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockManager::showDialog() {
|
void AdBlockManager::showDialog() {
|
||||||
if (!m_adBlockDialog) {
|
if (m_adBlockDialog == nullptr) {
|
||||||
m_adBlockDialog = new AdBlockDialog();
|
m_adBlockDialog = new AdBlockDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ AdBlockMatcher::~AdBlockMatcher() {
|
||||||
const AdBlockRule* AdBlockMatcher::match(const QWebEngineUrlRequestInfo& request, const QString& urlDomain,
|
const AdBlockRule* AdBlockMatcher::match(const QWebEngineUrlRequestInfo& request, const QString& urlDomain,
|
||||||
const QString& urlString) const {
|
const QString& urlString) const {
|
||||||
// Exception rules.
|
// Exception rules.
|
||||||
if (m_networkExceptionTree.find(request, urlDomain, urlString)) {
|
if (m_networkExceptionTree.find(request, urlDomain, urlString) != nullptr) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int count = m_networkExceptionRules.count();
|
int count = m_networkExceptionRules.count();
|
||||||
|
|
@ -44,7 +44,7 @@ const AdBlockRule* AdBlockMatcher::match(const QWebEngineUrlRequestInfo& request
|
||||||
const AdBlockRule* rule = m_networkExceptionRules.at(i);
|
const AdBlockRule* rule = m_networkExceptionRules.at(i);
|
||||||
|
|
||||||
if (rule->networkMatch(request, urlDomain, urlString)) {
|
if (rule->networkMatch(request, urlDomain, urlString)) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +63,7 @@ const AdBlockRule* AdBlockMatcher::match(const QWebEngineUrlRequestInfo& request
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AdBlockMatcher::adBlockDisabledForUrl(const QUrl& url) const {
|
bool AdBlockMatcher::adBlockDisabledForUrl(const QUrl& url) const {
|
||||||
|
|
@ -178,7 +178,7 @@ void AdBlockMatcher::update() {
|
||||||
const AdBlockRule* originalRule = cssRulesHash.value(rule->cssSelector());
|
const AdBlockRule* originalRule = cssRulesHash.value(rule->cssSelector());
|
||||||
|
|
||||||
// If we don't have this selector, the exception does nothing.
|
// If we don't have this selector, the exception does nothing.
|
||||||
if (!originalRule) {
|
if (originalRule == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ static QString toSecondLevelDomain(const QUrl& url) {
|
||||||
|
|
||||||
AdBlockRule::AdBlockRule(const QString& filter, AdBlockSubscription* subscription)
|
AdBlockRule::AdBlockRule(const QString& filter, AdBlockSubscription* subscription)
|
||||||
: m_subscription(subscription), m_type(StringContainsMatchRule), m_caseSensitivity(Qt::CaseInsensitive),
|
: m_subscription(subscription), m_type(StringContainsMatchRule), m_caseSensitivity(Qt::CaseInsensitive),
|
||||||
m_isEnabled(true), m_isException(false), m_isInternalDisabled(false), matchers(QList<QStringMatcher>()) {
|
m_isEnabled(true), m_isException(false), m_isInternalDisabled(false) {
|
||||||
setFilter(filter);
|
setFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -522,8 +522,8 @@ bool AdBlockRule::filterIsOnlyDomain(const QString& filter) const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < filter.size(); ++i) {
|
for (auto i : filter) {
|
||||||
switch (filter.at(i).toLatin1()) {
|
switch (i.toLatin1()) {
|
||||||
case '/':
|
case '/':
|
||||||
case ':':
|
case ':':
|
||||||
case '?':
|
case '?':
|
||||||
|
|
@ -727,11 +727,11 @@ QStringList AdBlockRule::parseRegExpFilter(const QString& filter) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AdBlockRule::hasOption(const AdBlockRule::RuleOption& opt) const {
|
bool AdBlockRule::hasOption(const AdBlockRule::RuleOption& opt) const {
|
||||||
return (m_options & opt);
|
return (m_options & opt) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AdBlockRule::hasException(const AdBlockRule::RuleOption& opt) const {
|
bool AdBlockRule::hasException(const AdBlockRule::RuleOption& opt) const {
|
||||||
return (m_exceptions & opt);
|
return (m_exceptions & opt) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockRule::setOption(const AdBlockRule::RuleOption& opt) {
|
void AdBlockRule::setOption(const AdBlockRule::RuleOption& opt) {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ bool AdBlockSearchTree::add(const AdBlockRule* rule) {
|
||||||
const QChar c = filter.at(i);
|
const QChar c = filter.at(i);
|
||||||
Node* next = node->children.value(c);
|
Node* next = node->children.value(c);
|
||||||
|
|
||||||
if (!next) {
|
if (next == nullptr) {
|
||||||
next = new Node;
|
next = new Node;
|
||||||
next->c = c;
|
next->c = c;
|
||||||
node->children[c] = next;
|
node->children[c] = next;
|
||||||
|
|
@ -69,50 +69,48 @@ const AdBlockRule* AdBlockSearchTree::find(const QWebEngineUrlRequestInfo& reque
|
||||||
int len = urlString.size();
|
int len = urlString.size();
|
||||||
|
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QChar* string = urlString.constData();
|
|
||||||
|
|
||||||
for (int i = 0; i < len; ++i) {
|
for (int i = 0; i < len; ++i) {
|
||||||
const AdBlockRule* rule = prefixSearch(request, domain, urlString, string++, len - i);
|
const AdBlockRule* rule = prefixSearch(request, domain, urlString, urlString.mid(i), len - i);
|
||||||
|
|
||||||
if (rule) {
|
if (rule != nullptr) {
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const AdBlockRule* AdBlockSearchTree::prefixSearch(const QWebEngineUrlRequestInfo& request, const QString& domain, const QString& urlString,
|
const AdBlockRule* AdBlockSearchTree::prefixSearch(const QWebEngineUrlRequestInfo& request, const QString& domain,
|
||||||
const QChar* string, int len) const {
|
const QString& urlString, const QString& choppedUrlString, int len) const {
|
||||||
if (len <= 0) {
|
if (len <= 0) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QChar c = string[0];
|
QChar c = choppedUrlString.at(0);
|
||||||
Node* node = m_root->children.value(c);
|
Node* node = m_root->children.value(c);
|
||||||
|
|
||||||
if (!node) {
|
if (node == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 1; i < len; ++i) {
|
for (int i = 1; i < len; ++i) {
|
||||||
const QChar c = (++string)[0];
|
const QChar c = choppedUrlString.at(i);
|
||||||
|
|
||||||
if (node->rule && node->rule->networkMatch(request, domain, urlString)) {
|
if ((node->rule != nullptr) && node->rule->networkMatch(request, domain, urlString)) {
|
||||||
return node->rule;
|
return node->rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
node = node->children.value(c);
|
node = node->children.value(c);
|
||||||
|
|
||||||
if (!node) {
|
if (node == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->rule && node->rule->networkMatch(request, domain, urlString)) {
|
if ((node->rule != nullptr) && node->rule->networkMatch(request, domain, urlString)) {
|
||||||
return node->rule;
|
return node->rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -120,7 +118,7 @@ const AdBlockRule* AdBlockSearchTree::prefixSearch(const QWebEngineUrlRequestInf
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockSearchTree::deleteNode(AdBlockSearchTree::Node* node) {
|
void AdBlockSearchTree::deleteNode(AdBlockSearchTree::Node* node) {
|
||||||
if (!node) {
|
if (node == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class AdBlockSearchTree {
|
||||||
|
|
||||||
};
|
};
|
||||||
const AdBlockRule* prefixSearch(const QWebEngineUrlRequestInfo& request, const QString& domain,
|
const AdBlockRule* prefixSearch(const QWebEngineUrlRequestInfo& request, const QString& domain,
|
||||||
const QString& urlString, const QChar* string, int len) const;
|
const QString& urlString, const QString& choppedUrlString, int len) const;
|
||||||
|
|
||||||
void deleteNode(Node* node);
|
void deleteNode(Node* node);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,10 @@
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QSaveFile>
|
#include <QSaveFile>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
AdBlockSubscription::AdBlockSubscription(const QString& title, QObject* parent)
|
AdBlockSubscription::AdBlockSubscription(QString title, QObject* parent)
|
||||||
: QObject(parent), m_reply(0), m_title(title), m_updated(false) {}
|
: QObject(parent), m_reply(nullptr), m_title(std::move(title)), m_updated(false) {}
|
||||||
|
|
||||||
QString AdBlockSubscription::title() const {
|
QString AdBlockSubscription::title() const {
|
||||||
return m_title;
|
return m_title;
|
||||||
|
|
@ -134,11 +135,11 @@ void AdBlockSubscription::loadSubscription(const QStringList& disabledRules) {
|
||||||
void AdBlockSubscription::saveSubscription() {}
|
void AdBlockSubscription::saveSubscription() {}
|
||||||
|
|
||||||
void AdBlockSubscription::updateSubscription() {
|
void AdBlockSubscription::updateSubscription() {
|
||||||
if (m_reply || !m_url.isValid()) {
|
if ((m_reply != nullptr) || !m_url.isValid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SilentNetworkAccessManager* mgs = new SilentNetworkAccessManager(this);
|
auto* mgs = new SilentNetworkAccessManager(this);
|
||||||
|
|
||||||
m_reply = mgs->get(QNetworkRequest(m_url));
|
m_reply = mgs->get(QNetworkRequest(m_url));
|
||||||
connect(m_reply, &QNetworkReply::finished, this, &AdBlockSubscription::subscriptionDownloaded);
|
connect(m_reply, &QNetworkReply::finished, this, &AdBlockSubscription::subscriptionDownloaded);
|
||||||
|
|
@ -158,7 +159,7 @@ void AdBlockSubscription::subscriptionDownloaded() {
|
||||||
|
|
||||||
m_reply->manager()->deleteLater();
|
m_reply->manager()->deleteLater();
|
||||||
m_reply->deleteLater();
|
m_reply->deleteLater();
|
||||||
m_reply = 0;
|
m_reply = nullptr;
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
emit subscriptionError(tr("Cannot load subscription!"));
|
emit subscriptionError(tr("Cannot load subscription!"));
|
||||||
|
|
@ -192,7 +193,7 @@ const AdBlockRule* AdBlockSubscription::rule(int offset) const {
|
||||||
return m_rules[offset];
|
return m_rules[offset];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -211,13 +212,13 @@ const AdBlockRule* AdBlockSubscription::enableRule(int offset) {
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const AdBlockRule* AdBlockSubscription::disableRule(int offset) {
|
const AdBlockRule* AdBlockSubscription::disableRule(int offset) {
|
||||||
if (!IS_IN_ARRAY(offset, m_rules)) {
|
if (!IS_IN_ARRAY(offset, m_rules)) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockRule* rule = m_rules[offset];
|
AdBlockRule* rule = m_rules[offset];
|
||||||
|
|
@ -250,7 +251,7 @@ bool AdBlockSubscription::removeRule(int offset) {
|
||||||
const AdBlockRule* AdBlockSubscription::replaceRule(AdBlockRule* rule, int offset) {
|
const AdBlockRule* AdBlockSubscription::replaceRule(AdBlockRule* rule, int offset) {
|
||||||
Q_UNUSED(rule)
|
Q_UNUSED(rule)
|
||||||
Q_UNUSED(offset)
|
Q_UNUSED(offset)
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockSubscription::~AdBlockSubscription() {
|
AdBlockSubscription::~AdBlockSubscription() {
|
||||||
|
|
@ -378,7 +379,7 @@ bool AdBlockCustomList::removeRule(int offset) {
|
||||||
|
|
||||||
const AdBlockRule* AdBlockCustomList::replaceRule(AdBlockRule* rule, int offset) {
|
const AdBlockRule* AdBlockCustomList::replaceRule(AdBlockRule* rule, int offset) {
|
||||||
if (!IS_IN_ARRAY(offset, m_rules)) {
|
if (!IS_IN_ARRAY(offset, m_rules)) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockRule* oldRule = m_rules.at(offset);
|
AdBlockRule* oldRule = m_rules.at(offset);
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ class AdBlockSubscription : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AdBlockSubscription(const QString& title, QObject* parent = 0);
|
explicit AdBlockSubscription(QString title, QObject* parent = 0);
|
||||||
virtual ~AdBlockSubscription();
|
virtual ~AdBlockSubscription();
|
||||||
|
|
||||||
QString title() const;
|
QString title() const;
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
AdBlockTreeWidget::AdBlockTreeWidget(AdBlockSubscription* subscription, QWidget* parent)
|
AdBlockTreeWidget::AdBlockTreeWidget(AdBlockSubscription* subscription, QWidget* parent)
|
||||||
: TreeWidget(parent), m_subscription(subscription), m_topItem(0), m_itemChangingBlock(false) {
|
: TreeWidget(parent), m_subscription(subscription), m_topItem(nullptr), m_itemChangingBlock(false) {
|
||||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
setDefaultItemShowMode(TreeWidget::ItemsExpanded);
|
setDefaultItemShowMode(TreeWidget::ItemsExpanded);
|
||||||
setHeaderHidden(true);
|
setHeaderHidden(true);
|
||||||
|
|
@ -46,7 +46,7 @@ AdBlockSubscription* AdBlockTreeWidget::subscription() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockTreeWidget::showRule(const AdBlockRule* rule) {
|
void AdBlockTreeWidget::showRule(const AdBlockRule* rule) {
|
||||||
if (!m_topItem && rule) {
|
if ((m_topItem == nullptr) && (rule != nullptr)) {
|
||||||
m_ruleToBeSelected = rule->filter();
|
m_ruleToBeSelected = rule->filter();
|
||||||
}
|
}
|
||||||
else if (!m_ruleToBeSelected.isEmpty()) {
|
else if (!m_ruleToBeSelected.isEmpty()) {
|
||||||
|
|
@ -70,7 +70,7 @@ void AdBlockTreeWidget::contextMenuRequested(const QPoint& pos) {
|
||||||
|
|
||||||
QTreeWidgetItem* item = itemAt(pos);
|
QTreeWidgetItem* item = itemAt(pos);
|
||||||
|
|
||||||
if (!item) {
|
if (item == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,7 +80,7 @@ void AdBlockTreeWidget::contextMenuRequested(const QPoint& pos) {
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
QAction* deleteAction = menu.addAction(tr("Remove rule"), this, SLOT(removeRule()));
|
QAction* deleteAction = menu.addAction(tr("Remove rule"), this, SLOT(removeRule()));
|
||||||
|
|
||||||
if (!item->parent()) {
|
if (item->parent() == nullptr) {
|
||||||
deleteAction->setDisabled(true);
|
deleteAction->setDisabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -88,7 +88,7 @@ void AdBlockTreeWidget::contextMenuRequested(const QPoint& pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockTreeWidget::itemChanged(QTreeWidgetItem* item) {
|
void AdBlockTreeWidget::itemChanged(QTreeWidgetItem* item) {
|
||||||
if (!item || m_itemChangingBlock) {
|
if ((item == nullptr) || m_itemChangingBlock) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,7 +122,7 @@ void AdBlockTreeWidget::itemChanged(QTreeWidgetItem* item) {
|
||||||
void AdBlockTreeWidget::copyFilter() {
|
void AdBlockTreeWidget::copyFilter() {
|
||||||
QTreeWidgetItem* item = currentItem();
|
QTreeWidgetItem* item = currentItem();
|
||||||
|
|
||||||
if (!item) {
|
if (item == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,9 +140,9 @@ void AdBlockTreeWidget::addRule() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockRule* rule = new AdBlockRule(newRule, m_subscription);
|
auto* rule = new AdBlockRule(newRule, m_subscription);
|
||||||
int offset = m_subscription->addRule(rule);
|
int offset = m_subscription->addRule(rule);
|
||||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
auto* item = new QTreeWidgetItem();
|
||||||
|
|
||||||
item->setText(0, newRule);
|
item->setText(0, newRule);
|
||||||
item->setData(0, Qt::UserRole + 10, offset);
|
item->setData(0, Qt::UserRole + 10, offset);
|
||||||
|
|
@ -156,7 +156,7 @@ void AdBlockTreeWidget::addRule() {
|
||||||
void AdBlockTreeWidget::removeRule() {
|
void AdBlockTreeWidget::removeRule() {
|
||||||
QTreeWidgetItem* item = currentItem();
|
QTreeWidgetItem* item = currentItem();
|
||||||
|
|
||||||
if (!item || !m_subscription->canEditRules() || item == m_topItem) {
|
if ((item == nullptr) || !m_subscription->canEditRules() || item == m_topItem) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,7 +210,7 @@ void AdBlockTreeWidget::adjustItemFeatures(QTreeWidgetItem* item, const AdBlockR
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdBlockTreeWidget::keyPressEvent(QKeyEvent* event) {
|
void AdBlockTreeWidget::keyPressEvent(QKeyEvent* event) {
|
||||||
if (event->key() == Qt::Key_C && event->modifiers() & Qt::ControlModifier) {
|
if (event->key() == Qt::Key_C && (event->modifiers() & Qt::ControlModifier) != 0) {
|
||||||
copyFilter();
|
copyFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -236,7 +236,7 @@ void AdBlockTreeWidget::refresh() {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
foreach (const AdBlockRule* rule, allRules) {
|
foreach (const AdBlockRule* rule, allRules) {
|
||||||
QTreeWidgetItem* item = new QTreeWidgetItem(m_topItem);
|
auto* item = new QTreeWidgetItem(m_topItem);
|
||||||
|
|
||||||
item->setText(0, rule->filter());
|
item->setText(0, rule->filter());
|
||||||
item->setData(0, Qt::UserRole + 10, index);
|
item->setData(0, Qt::UserRole + 10, index);
|
||||||
|
|
@ -249,6 +249,6 @@ void AdBlockTreeWidget::refresh() {
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
|
|
||||||
showRule(0);
|
showRule(nullptr);
|
||||||
m_itemChangingBlock = false;
|
m_itemChangingBlock = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ BaseNetworkAccessManager::BaseNetworkAccessManager(QObject* parent)
|
||||||
loadSettings();
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseNetworkAccessManager::~BaseNetworkAccessManager() {}
|
BaseNetworkAccessManager::~BaseNetworkAccessManager() = default;
|
||||||
|
|
||||||
void BaseNetworkAccessManager::loadSettings() {
|
void BaseNetworkAccessManager::loadSettings() {
|
||||||
QNetworkProxy new_proxy;
|
QNetworkProxy new_proxy;
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,15 @@
|
||||||
|
|
||||||
Downloader::Downloader(QObject* parent)
|
Downloader::Downloader(QObject* parent)
|
||||||
: QObject(parent), m_activeReply(nullptr), m_downloadManager(new SilentNetworkAccessManager(this)),
|
: QObject(parent), m_activeReply(nullptr), m_downloadManager(new SilentNetworkAccessManager(this)),
|
||||||
m_timer(new QTimer(this)), m_customHeaders(QHash<QByteArray, QByteArray>()), m_inputData(QByteArray()),
|
m_timer(new QTimer(this)), m_inputData(QByteArray()),
|
||||||
m_inputMultipartData(nullptr), m_targetProtected(false), m_targetUsername(QString()), m_targetPassword(QString()),
|
m_inputMultipartData(nullptr), m_targetProtected(false), m_targetUsername(QString()), m_targetPassword(QString()),
|
||||||
m_lastOutputData(QByteArray()), m_lastOutputMultipartData(QList<HttpResponse>()), m_lastOutputError(QNetworkReply::NoError),
|
m_lastOutputData(QByteArray()), m_lastOutputError(QNetworkReply::NoError) {
|
||||||
m_lastContentType(QVariant()) {
|
|
||||||
m_timer->setInterval(DOWNLOAD_TIMEOUT);
|
m_timer->setInterval(DOWNLOAD_TIMEOUT);
|
||||||
m_timer->setSingleShot(true);
|
m_timer->setSingleShot(true);
|
||||||
connect(m_timer, &QTimer::timeout, this, &Downloader::cancel);
|
connect(m_timer, &QTimer::timeout, this, &Downloader::cancel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Downloader::~Downloader() {}
|
Downloader::~Downloader() = default;
|
||||||
|
|
||||||
void Downloader::downloadFile(const QString& url, int timeout, bool protected_contents, const QString& username,
|
void Downloader::downloadFile(const QString& url, int timeout, bool protected_contents, const QString& username,
|
||||||
const QString& password) {
|
const QString& password) {
|
||||||
|
|
@ -100,7 +99,7 @@ void Downloader::manipulateData(const QString& url,
|
||||||
}
|
}
|
||||||
|
|
||||||
void Downloader::finished() {
|
void Downloader::finished() {
|
||||||
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
|
auto* reply = qobject_cast<QNetworkReply*>(sender());
|
||||||
|
|
||||||
QNetworkAccessManager::Operation reply_operation = reply->operation();
|
QNetworkAccessManager::Operation reply_operation = reply->operation();
|
||||||
m_timer->stop();
|
m_timer->stop();
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
#include "miscellaneous/settings.h"
|
#include "miscellaneous/settings.h"
|
||||||
#include "network-web/silentnetworkaccessmanager.h"
|
#include "network-web/silentnetworkaccessmanager.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <cmath>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
|
@ -216,7 +216,7 @@ void DownloadItem::tryAgain() {
|
||||||
m_ui->m_progressDownload->setVisible(true);
|
m_ui->m_progressDownload->setVisible(true);
|
||||||
QNetworkReply* new_download = qApp->downloadManager()->networkManager()->get(QNetworkRequest(m_url));
|
QNetworkReply* new_download = qApp->downloadManager()->networkManager()->get(QNetworkRequest(m_url));
|
||||||
|
|
||||||
if (m_reply) {
|
if (m_reply != nullptr) {
|
||||||
m_reply->deleteLater();
|
m_reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -406,7 +406,7 @@ void DownloadItem::finished() {
|
||||||
tr("File '%1' is downloaded.\nClick here to open parent directory.").arg(QDir::toNativeSeparators(
|
tr("File '%1' is downloaded.\nClick here to open parent directory.").arg(QDir::toNativeSeparators(
|
||||||
m_output.fileName())),
|
m_output.fileName())),
|
||||||
QSystemTrayIcon::Information,
|
QSystemTrayIcon::Information,
|
||||||
0,
|
nullptr,
|
||||||
false,
|
false,
|
||||||
[this] {
|
[this] {
|
||||||
openFolder();
|
openFolder();
|
||||||
|
|
@ -467,7 +467,7 @@ int DownloadManager::downloadProgress() const {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return (bytes_received * 100.0) / bytes_total;
|
return int((bytes_received * 100.0) / bytes_total);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -494,7 +494,7 @@ void DownloadManager::handleUnsupportedContent(QNetworkReply* reply) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadItem* item = new DownloadItem(reply, this);
|
auto* item = new DownloadItem(reply, this);
|
||||||
|
|
||||||
addItem(item);
|
addItem(item);
|
||||||
|
|
||||||
|
|
@ -537,7 +537,7 @@ void DownloadManager::itemFinished() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DownloadManager::updateRow() {
|
void DownloadManager::updateRow() {
|
||||||
if (DownloadItem* item = qobject_cast<DownloadItem*>(sender())) {
|
if (auto* item = qobject_cast<DownloadItem*>(sender())) {
|
||||||
updateRow(item);
|
updateRow(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -644,7 +644,7 @@ void DownloadManager::load() {
|
||||||
bool done = settings->value(GROUP(Downloads), QString(Downloads::ItemDone).arg(i), true).toBool();
|
bool done = settings->value(GROUP(Downloads), QString(Downloads::ItemDone).arg(i), true).toBool();
|
||||||
|
|
||||||
if (!url.isEmpty() && !file_name.isEmpty()) {
|
if (!url.isEmpty() && !file_name.isEmpty()) {
|
||||||
DownloadItem* item = new DownloadItem(0, this);
|
auto* item = new DownloadItem(nullptr, this);
|
||||||
|
|
||||||
item->m_output.setFileName(file_name);
|
item->m_output.setFileName(file_name);
|
||||||
item->m_url = url;
|
item->m_url = url;
|
||||||
|
|
@ -773,7 +773,7 @@ Qt::ItemFlags DownloadModel::flags(const QModelIndex& index) const {
|
||||||
return Qt::NoItemFlags;
|
return Qt::NoItemFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
Qt::ItemFlags default_flags = QAbstractItemModel::flags(index);
|
Qt::ItemFlags default_flags = QAbstractListModel::flags(index);
|
||||||
DownloadItem* item = m_downloadManager->m_downloads.at(index.row());
|
DownloadItem* item = m_downloadManager->m_downloads.at(index.row());
|
||||||
|
|
||||||
if (item->downloadedSuccessfully()) {
|
if (item->downloadedSuccessfully()) {
|
||||||
|
|
@ -784,7 +784,7 @@ Qt::ItemFlags DownloadModel::flags(const QModelIndex& index) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
QMimeData* DownloadModel::mimeData(const QModelIndexList& indexes) const {
|
QMimeData* DownloadModel::mimeData(const QModelIndexList& indexes) const {
|
||||||
QMimeData* mimeData = new QMimeData();
|
auto* mimeData = new QMimeData();
|
||||||
|
|
||||||
QList<QUrl> urls;
|
QList<QUrl> urls;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ GoogleSuggest::GoogleSuggest(LocationLineEdit* editor, QObject* parent)
|
||||||
connect(editor, &LocationLineEdit::textEdited, timer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
connect(editor, &LocationLineEdit::textEdited, timer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
||||||
}
|
}
|
||||||
|
|
||||||
GoogleSuggest::~GoogleSuggest() {}
|
GoogleSuggest::~GoogleSuggest() = default;
|
||||||
|
|
||||||
bool GoogleSuggest::eventFilter(QObject* object, QEvent* event) {
|
bool GoogleSuggest::eventFilter(QObject* object, QEvent* event) {
|
||||||
if (object != popup.data()) {
|
if (object != popup.data()) {
|
||||||
|
|
@ -83,11 +83,13 @@ bool GoogleSuggest::eventFilter(QObject* object, QEvent* event) {
|
||||||
case Qt::Key_Return:
|
case Qt::Key_Return:
|
||||||
doneCompletion();
|
doneCompletion();
|
||||||
consumed = true;
|
consumed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case Qt::Key_Escape:
|
case Qt::Key_Escape:
|
||||||
editor->setFocus();
|
editor->setFocus();
|
||||||
popup->hide();
|
popup->hide();
|
||||||
consumed = true;
|
consumed = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case Qt::Key_Up:
|
case Qt::Key_Up:
|
||||||
case Qt::Key_Down:
|
case Qt::Key_Down:
|
||||||
|
|
@ -157,7 +159,7 @@ void GoogleSuggest::autoSuggest() {
|
||||||
void GoogleSuggest::handleNetworkData() {
|
void GoogleSuggest::handleNetworkData() {
|
||||||
QScopedPointer<QNetworkReply> reply(static_cast<QNetworkReply*>(sender()));
|
QScopedPointer<QNetworkReply> reply(static_cast<QNetworkReply*>(sender()));
|
||||||
|
|
||||||
if (!reply->error()) {
|
if (reply->error() == 0) {
|
||||||
QStringList choices;
|
QStringList choices;
|
||||||
QDomDocument xml;
|
QDomDocument xml;
|
||||||
QByteArray response = reply->readAll();
|
QByteArray response = reply->readAll();
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include "network-web/httpresponse.h"
|
#include "network-web/httpresponse.h"
|
||||||
|
|
||||||
HttpResponse::HttpResponse() : m_headers(QList<HttpHeader>()), m_body(QString()) {}
|
HttpResponse::HttpResponse() : m_body(QString()) {}
|
||||||
|
|
||||||
QString HttpResponse::body() const {
|
QString HttpResponse::body() const {
|
||||||
return m_body;
|
return m_body;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
NetworkFactory::NetworkFactory() {}
|
NetworkFactory::NetworkFactory() = default;
|
||||||
|
|
||||||
QStringList NetworkFactory::extractFeedLinksFromHtmlPage(const QUrl& url, const QString& html) {
|
QStringList NetworkFactory::extractFeedLinksFromHtmlPage(const QUrl& url, const QString& html) {
|
||||||
QStringList feeds;
|
QStringList feeds;
|
||||||
|
|
@ -166,7 +166,7 @@ Downloader* NetworkFactory::performAsyncNetworkOperation(const QString& url, int
|
||||||
QList<QPair<QByteArray, QByteArray>> additional_headers,
|
QList<QPair<QByteArray, QByteArray>> additional_headers,
|
||||||
bool protected_contents, const QString& username,
|
bool protected_contents, const QString& username,
|
||||||
const QString& password) {
|
const QString& password) {
|
||||||
Downloader* downloader = new Downloader();
|
auto* downloader = new Downloader();
|
||||||
|
|
||||||
QObject::connect(downloader, &Downloader::completed, downloader, &Downloader::deleteLater);
|
QObject::connect(downloader, &Downloader::completed, downloader, &Downloader::deleteLater);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,10 +45,11 @@ Q_GLOBAL_STATIC(OAuthHttpHandler, qz_silent_acmanager)
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
OAuth2Service::OAuth2Service(const QString& auth_url, const QString& token_url, const QString& client_id,
|
OAuth2Service::OAuth2Service(const QString& auth_url, const QString& token_url, const QString& client_id,
|
||||||
const QString& client_secret, const QString& scope, QObject* parent)
|
const QString& client_secret, const QString& scope, QObject* parent)
|
||||||
: QObject(parent), m_id(QString::number(std::rand())), m_timerId(-1), m_tokensExpireIn(QDateTime()) {
|
: QObject(parent), m_id(QString::number(std::rand())), m_timerId(-1) {
|
||||||
m_redirectUrl = QSL(LOCALHOST_ADDRESS);
|
m_redirectUrl = QSL(LOCALHOST_ADDRESS);
|
||||||
m_tokenGrantType = QSL("authorization_code");
|
m_tokenGrantType = QSL("authorization_code");
|
||||||
m_tokenUrl = QUrl(token_url);
|
m_tokenUrl = QUrl(token_url);
|
||||||
|
|
@ -102,7 +103,7 @@ bool OAuth2Service::isFullyLoggedIn() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OAuth2Service::setOAuthTokenGrantType(QString grant_type) {
|
void OAuth2Service::setOAuthTokenGrantType(QString grant_type) {
|
||||||
m_tokenGrantType = grant_type;
|
m_tokenGrantType = std::move(grant_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString OAuth2Service::oAuthTokenGrantType() {
|
QString OAuth2Service::oAuthTokenGrantType() {
|
||||||
|
|
@ -143,7 +144,7 @@ OAuthHttpHandler* OAuth2Service::handler() {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void OAuth2Service::retrieveAccessToken(QString auth_code) {
|
void OAuth2Service::retrieveAccessToken(const QString& auth_code) {
|
||||||
QNetworkRequest networkRequest;
|
QNetworkRequest networkRequest;
|
||||||
|
|
||||||
networkRequest.setUrl(m_tokenUrl);
|
networkRequest.setUrl(m_tokenUrl);
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class OAuth2Service : public QObject {
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void retrieveAuthCode();
|
void retrieveAuthCode();
|
||||||
void retrieveAccessToken(QString auth_code);
|
void retrieveAccessToken(const QString& auth_code);
|
||||||
void refreshAccessToken(QString refresh_token = QString());
|
void refreshAccessToken(QString refresh_token = QString());
|
||||||
|
|
||||||
// Performs login if needed. If some refresh token is set, then
|
// Performs login if needed. If some refresh token is set, then
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ void OAuthHttpHandler::handleRedirection(const QVariantMap& data) {
|
||||||
const QString code = data.value(QSL("code")).toString();
|
const QString code = data.value(QSL("code")).toString();
|
||||||
const QString received_state = data.value(QSL("state")).toString();
|
const QString received_state = data.value(QSL("state")).toString();
|
||||||
|
|
||||||
if (error.size()) {
|
if (error.size() != 0) {
|
||||||
const QString uri = data.value(QSL("error_uri")).toString();
|
const QString uri = data.value(QSL("error_uri")).toString();
|
||||||
const QString description = data.value(QSL("error_description")).toString();
|
const QString description = data.value(QSL("error_description")).toString();
|
||||||
|
|
||||||
|
|
@ -73,8 +73,8 @@ void OAuthHttpHandler::answerClient(QTcpSocket* socket, const QUrl& url) {
|
||||||
const QUrlQuery query(url.query());
|
const QUrlQuery query(url.query());
|
||||||
const auto items = query.queryItems();
|
const auto items = query.queryItems();
|
||||||
|
|
||||||
for (auto it = items.begin(), end = items.end(); it != end; ++it) {
|
for (const auto & item : items) {
|
||||||
received_data.insert(it->first, it->second);
|
received_data.insert(item.first, item.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleRedirection(received_data);
|
handleRedirection(received_data);
|
||||||
|
|
@ -144,10 +144,10 @@ void OAuthHttpHandler::readReceivedData(QTcpSocket* socket) {
|
||||||
bool OAuthHttpHandler::QHttpRequest::readMethod(QTcpSocket* socket) {
|
bool OAuthHttpHandler::QHttpRequest::readMethod(QTcpSocket* socket) {
|
||||||
bool finished = false;
|
bool finished = false;
|
||||||
|
|
||||||
while (socket->bytesAvailable() && !finished) {
|
while ((socket->bytesAvailable() != 0) && !finished) {
|
||||||
const auto c = socket->read(1).at(0);
|
const auto c = socket->read(1).at(0);
|
||||||
|
|
||||||
if (std::isupper(c) && m_fragment.size() < 6) {
|
if ((std::isupper(c) != 0) && m_fragment.size() < 6) {
|
||||||
m_fragment += c;
|
m_fragment += c;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -187,10 +187,10 @@ bool OAuthHttpHandler::QHttpRequest::readMethod(QTcpSocket* socket) {
|
||||||
bool OAuthHttpHandler::QHttpRequest::readUrl(QTcpSocket* socket) {
|
bool OAuthHttpHandler::QHttpRequest::readUrl(QTcpSocket* socket) {
|
||||||
bool finished = false;
|
bool finished = false;
|
||||||
|
|
||||||
while (socket->bytesAvailable() && !finished) {
|
while ((socket->bytesAvailable() != 0) && !finished) {
|
||||||
const auto c = socket->read(1).at(0);
|
const auto c = socket->read(1).at(0);
|
||||||
|
|
||||||
if (std::isspace(c)) {
|
if (std::isspace(c) != 0) {
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -222,7 +222,7 @@ bool OAuthHttpHandler::QHttpRequest::readUrl(QTcpSocket* socket) {
|
||||||
bool OAuthHttpHandler::QHttpRequest::readStatus(QTcpSocket* socket) {
|
bool OAuthHttpHandler::QHttpRequest::readStatus(QTcpSocket* socket) {
|
||||||
bool finished = false;
|
bool finished = false;
|
||||||
|
|
||||||
while (socket->bytesAvailable() && !finished) {
|
while ((socket->bytesAvailable() != 0) && !finished) {
|
||||||
m_fragment += socket->read(1);
|
m_fragment += socket->read(1);
|
||||||
|
|
||||||
if (m_fragment.endsWith("\r\n")) {
|
if (m_fragment.endsWith("\r\n")) {
|
||||||
|
|
@ -232,7 +232,7 @@ bool OAuthHttpHandler::QHttpRequest::readStatus(QTcpSocket* socket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finished) {
|
if (finished) {
|
||||||
if (!std::isdigit(m_fragment.at(m_fragment.size() - 3)) || !std::isdigit(m_fragment.at(m_fragment.size() - 1))) {
|
if ((std::isdigit(m_fragment.at(m_fragment.size() - 3)) == 0) || (std::isdigit(m_fragment.at(m_fragment.size() - 1)) == 0)) {
|
||||||
qWarning("OAuth HTTP handler: Invalid version");
|
qWarning("OAuth HTTP handler: Invalid version");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -246,7 +246,7 @@ bool OAuthHttpHandler::QHttpRequest::readStatus(QTcpSocket* socket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OAuthHttpHandler::QHttpRequest::readHeader(QTcpSocket* socket) {
|
bool OAuthHttpHandler::QHttpRequest::readHeader(QTcpSocket* socket) {
|
||||||
while (socket->bytesAvailable()) {
|
while (socket->bytesAvailable() != 0) {
|
||||||
m_fragment += socket->read(1);
|
m_fragment += socket->read(1);
|
||||||
|
|
||||||
if (m_fragment.endsWith("\r\n")) {
|
if (m_fragment.endsWith("\r\n")) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
RssGuardSchemeHandler::RssGuardSchemeHandler(QObject* parent) : QWebEngineUrlSchemeHandler(parent) {}
|
RssGuardSchemeHandler::RssGuardSchemeHandler(QObject* parent) : QWebEngineUrlSchemeHandler(parent) {}
|
||||||
|
|
||||||
RssGuardSchemeHandler::~RssGuardSchemeHandler() {}
|
RssGuardSchemeHandler::~RssGuardSchemeHandler() = default;
|
||||||
|
|
||||||
void RssGuardSchemeHandler::requestStarted(QWebEngineUrlRequestJob* job) {
|
void RssGuardSchemeHandler::requestStarted(QWebEngineUrlRequestJob* job) {
|
||||||
// Decide which data we want.
|
// Decide which data we want.
|
||||||
|
|
@ -39,7 +39,7 @@ void RssGuardSchemeHandler::requestStarted(QWebEngineUrlRequestJob* job) {
|
||||||
job->fail(QWebEngineUrlRequestJob::UrlNotFound);
|
job->fail(QWebEngineUrlRequestJob::UrlNotFound);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QBuffer* buf = new QBuffer(job);
|
auto* buf = new QBuffer(job);
|
||||||
|
|
||||||
buf->setData(data);
|
buf->setData(data);
|
||||||
job->reply(QByteArray("text/html"), buf);
|
job->reply(QByteArray("text/html"), buf);
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WebFactory::WebFactory(QObject* parent)
|
WebFactory::WebFactory(QObject* parent)
|
||||||
: QObject(parent), m_escapes(QMap<QString, QString>()), m_deEscapes(QMap<QString, QString>()) {
|
: QObject(parent) {
|
||||||
#if defined (USE_WEBENGINE)
|
#if defined (USE_WEBENGINE)
|
||||||
m_engineSettings = nullptr;
|
m_engineSettings = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -182,7 +182,7 @@ void WebFactory::webEngineSettingChanged(bool enabled) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute) {
|
QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute) {
|
||||||
QAction* act = new QAction(title, m_engineSettings->menu());
|
auto* act = new QAction(title, m_engineSettings->menu());
|
||||||
|
|
||||||
act->setData(attribute);
|
act->setData(attribute);
|
||||||
act->setCheckable(true);
|
act->setCheckable(true);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ void WebPage::javaScriptAlert(const QUrl& securityOrigin, const QString& msg) {
|
||||||
|
|
||||||
if (parts.size() == 2) {
|
if (parts.size() == 2) {
|
||||||
int message_id = parts.at(0).toInt();
|
int message_id = parts.at(0).toInt();
|
||||||
QString action = parts.at(1);
|
const QString& action = parts.at(1);
|
||||||
|
|
||||||
if (action == QSL("read")) {
|
if (action == QSL("read")) {
|
||||||
emit messageStatusChangeRequested(message_id, MarkRead);
|
emit messageStatusChangeRequested(message_id, MarkRead);
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@
|
||||||
#include "miscellaneous/iconfactory.h"
|
#include "miscellaneous/iconfactory.h"
|
||||||
|
|
||||||
AccountCheckModel::AccountCheckModel(QObject* parent)
|
AccountCheckModel::AccountCheckModel(QObject* parent)
|
||||||
: QAbstractItemModel(parent), m_rootItem(nullptr), m_checkStates(QHash<RootItem*, Qt::CheckState>()), m_recursiveChange(false) {}
|
: QAbstractItemModel(parent), m_rootItem(nullptr), m_recursiveChange(false) {}
|
||||||
|
|
||||||
AccountCheckModel::~AccountCheckModel() {}
|
AccountCheckModel::~AccountCheckModel() = default;
|
||||||
|
|
||||||
RootItem* AccountCheckModel::itemForIndex(const QModelIndex& index) const {
|
RootItem* AccountCheckModel::itemForIndex(const QModelIndex& index) const {
|
||||||
if (index.isValid() && index.model() == this) {
|
if (index.isValid() && index.model() == this) {
|
||||||
|
|
@ -25,9 +25,8 @@ RootItem* AccountCheckModel::rootItem() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountCheckModel::setRootItem(RootItem* root_item) {
|
void AccountCheckModel::setRootItem(RootItem* root_item) {
|
||||||
if (m_rootItem != nullptr) {
|
|
||||||
delete m_rootItem;
|
delete m_rootItem;
|
||||||
}
|
|
||||||
|
|
||||||
m_rootItem = root_item;
|
m_rootItem = root_item;
|
||||||
}
|
}
|
||||||
|
|
@ -60,7 +59,7 @@ QModelIndex AccountCheckModel::index(int row, int column, const QModelIndex& par
|
||||||
RootItem* parent_item = itemForIndex(parent);
|
RootItem* parent_item = itemForIndex(parent);
|
||||||
RootItem* child_item = parent_item->child(row);
|
RootItem* child_item = parent_item->child(row);
|
||||||
|
|
||||||
if (child_item) {
|
if (child_item != nullptr) {
|
||||||
return createIndex(row, column, child_item);
|
return createIndex(row, column, child_item);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -258,7 +257,7 @@ Qt::ItemFlags AccountCheckModel::flags(const QModelIndex& index) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AccountCheckModel::isItemChecked(RootItem* item) {
|
bool AccountCheckModel::isItemChecked(RootItem* item) {
|
||||||
return m_checkStates.contains(item) && m_checkStates.value(item, Qt::Unchecked);
|
return m_checkStates.value(item, Qt::CheckState::Unchecked) == Qt::CheckState::Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AccountCheckModel::setItemChecked(RootItem* item, Qt::CheckState check) {
|
bool AccountCheckModel::setItemChecked(RootItem* item, Qt::CheckState check) {
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
|
|
||||||
CacheForServiceRoot::CacheForServiceRoot() : m_cacheSaveMutex(new Mutex(QMutex::NonRecursive, nullptr)),
|
CacheForServiceRoot::CacheForServiceRoot() : m_cacheSaveMutex(new Mutex(QMutex::NonRecursive, nullptr)) {}
|
||||||
m_cachedStatesRead(QMap<RootItem::ReadStatus, QStringList>()),
|
|
||||||
m_cachedStatesImportant(QMap<RootItem::Importance, QList<Message>>()) {}
|
|
||||||
|
|
||||||
CacheForServiceRoot::~CacheForServiceRoot() {
|
CacheForServiceRoot::~CacheForServiceRoot() {
|
||||||
m_cacheSaveMutex->deleteLater();
|
m_cacheSaveMutex->deleteLater();
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ Category::Category(const QSqlRecord& record) : Category(nullptr) {
|
||||||
setIcon(qApp->icons()->fromByteArray(record.value(CAT_DB_ICON_INDEX).toByteArray()));
|
setIcon(qApp->icons()->fromByteArray(record.value(CAT_DB_ICON_INDEX).toByteArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Category::~Category() {}
|
Category::~Category() = default;
|
||||||
|
|
||||||
void Category::updateCounts(bool including_total_count) {
|
void Category::updateCounts(bool including_total_count) {
|
||||||
QList<Feed*> feeds;
|
QList<Feed*> feeds;
|
||||||
|
|
@ -78,7 +78,7 @@ bool Category::cleanMessages(bool clean_read_only) {
|
||||||
|
|
||||||
bool Category::markAsReadUnread(RootItem::ReadStatus status) {
|
bool Category::markAsReadUnread(RootItem::ReadStatus status) {
|
||||||
ServiceRoot* service = getParentServiceRoot();
|
ServiceRoot* service = getParentServiceRoot();
|
||||||
CacheForServiceRoot* cache = dynamic_cast<CacheForServiceRoot*>(service);
|
auto* cache = dynamic_cast<CacheForServiceRoot*>(service);
|
||||||
|
|
||||||
if (cache != nullptr) {
|
if (cache != nullptr) {
|
||||||
cache->addMessageStatesToCache(service->customIDSOfMessagesForItem(this), status);
|
cache->addMessageStatesToCache(service->customIDSOfMessagesForItem(this), status);
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@
|
||||||
|
|
||||||
Feed::Feed(RootItem* parent)
|
Feed::Feed(RootItem* parent)
|
||||||
: RootItem(parent), m_url(QString()), m_status(Normal), m_autoUpdateType(DefaultAutoUpdate),
|
: RootItem(parent), m_url(QString()), m_status(Normal), m_autoUpdateType(DefaultAutoUpdate),
|
||||||
m_autoUpdateInitialInterval(DEFAULT_AUTO_UPDATE_INTERVAL), m_autoUpdateRemainingInterval(DEFAULT_AUTO_UPDATE_INTERVAL),
|
m_autoUpdateInitialInterval(DEFAULT_AUTO_UPDATE_INTERVAL), m_autoUpdateRemainingInterval(DEFAULT_AUTO_UPDATE_INTERVAL) {
|
||||||
m_totalCount(0), m_unreadCount(0) {
|
|
||||||
setKind(RootItemKind::Feed);
|
setKind(RootItemKind::Feed);
|
||||||
setAutoDelete(false);
|
setAutoDelete(false);
|
||||||
}
|
}
|
||||||
|
|
@ -55,7 +54,7 @@ Feed::Feed(const Feed& other) : RootItem(other) {
|
||||||
setAutoUpdateRemainingInterval(other.autoUpdateRemainingInterval());
|
setAutoUpdateRemainingInterval(other.autoUpdateRemainingInterval());
|
||||||
}
|
}
|
||||||
|
|
||||||
Feed::~Feed() {}
|
Feed::~Feed() = default;
|
||||||
|
|
||||||
QList<Message> Feed::undeletedMessages() const {
|
QList<Message> Feed::undeletedMessages() const {
|
||||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||||
|
|
@ -176,19 +175,19 @@ void Feed::run() {
|
||||||
<< QThread::currentThreadId() << "\'.";
|
<< QThread::currentThreadId() << "\'.";
|
||||||
|
|
||||||
// Now, do some general operations on messages (tweak encoding etc.).
|
// Now, do some general operations on messages (tweak encoding etc.).
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (auto& msg : msgs) {
|
||||||
// Also, make sure that HTML encoding, encoding of special characters, etc., is fixed.
|
// Also, make sure that HTML encoding, encoding of special characters, etc., is fixed.
|
||||||
msgs[i].m_contents = QUrl::fromPercentEncoding(msgs[i].m_contents.toUtf8());
|
msg.m_contents = QUrl::fromPercentEncoding(msg.m_contents.toUtf8());
|
||||||
msgs[i].m_author = msgs[i].m_author.toUtf8();
|
msg.m_author = msg.m_author.toUtf8();
|
||||||
|
|
||||||
// Sanitize title. Remove newlines etc.
|
// Sanitize title. Remove newlines etc.
|
||||||
msgs[i].m_title = QUrl::fromPercentEncoding(msgs[i].m_title.toUtf8())
|
msg.m_title = QUrl::fromPercentEncoding(msg.m_title.toUtf8())
|
||||||
|
|
||||||
// Replace all continuous white space.
|
// Replace all continuous white space.
|
||||||
.replace(QRegularExpression(QSL("[\\s]{2,}")), QSL(" "))
|
.replace(QRegularExpression(QSL("[\\s]{2,}")), QSL(" "))
|
||||||
|
|
||||||
// Remove all newlines and leading white space.
|
// Remove all newlines and leading white space.
|
||||||
.remove(QRegularExpression(QSL("([\\n\\r])|(^\\s)")));
|
.remove(QRegularExpression(QSL("([\\n\\r])|(^\\s)")));
|
||||||
}
|
}
|
||||||
|
|
||||||
emit messagesObtained(msgs, error_during_obtaining);
|
emit messagesObtained(msgs, error_during_obtaining);
|
||||||
|
|
@ -200,7 +199,7 @@ bool Feed::cleanMessages(bool clean_read_only) {
|
||||||
|
|
||||||
bool Feed::markAsReadUnread(RootItem::ReadStatus status) {
|
bool Feed::markAsReadUnread(RootItem::ReadStatus status) {
|
||||||
ServiceRoot* service = getParentServiceRoot();
|
ServiceRoot* service = getParentServiceRoot();
|
||||||
CacheForServiceRoot* cache = dynamic_cast<CacheForServiceRoot*>(service);
|
auto* cache = dynamic_cast<CacheForServiceRoot*>(service);
|
||||||
|
|
||||||
if (cache != nullptr) {
|
if (cache != nullptr) {
|
||||||
cache->addMessageStatesToCache(service->customIDSOfMessagesForItem(this), status);
|
cache->addMessageStatesToCache(service->customIDSOfMessagesForItem(this), status);
|
||||||
|
|
@ -271,7 +270,7 @@ QString Feed::getAutoUpdateStatusDescription() const {
|
||||||
|
|
||||||
//: Describes feed auto-update status.
|
//: Describes feed auto-update status.
|
||||||
auto_update_string = tr("uses global settings (%n minute(s) to next auto-update)",
|
auto_update_string = tr("uses global settings (%n minute(s) to next auto-update)",
|
||||||
0,
|
nullptr,
|
||||||
qApp->feedReader()->autoUpdateRemainingInterval());
|
qApp->feedReader()->autoUpdateRemainingInterval());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -279,7 +278,7 @@ QString Feed::getAutoUpdateStatusDescription() const {
|
||||||
default:
|
default:
|
||||||
|
|
||||||
//: Describes feed auto-update status.
|
//: Describes feed auto-update status.
|
||||||
auto_update_string = tr("uses specific settings (%n minute(s) to next auto-update)", 0, autoUpdateRemainingInterval());
|
auto_update_string = tr("uses specific settings (%n minute(s) to next auto-update)", nullptr, autoUpdateRemainingInterval());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,10 @@ class Feed : public RootItem, public QRunnable {
|
||||||
QString m_url;
|
QString m_url;
|
||||||
Status m_status;
|
Status m_status;
|
||||||
AutoUpdateType m_autoUpdateType;
|
AutoUpdateType m_autoUpdateType;
|
||||||
int m_autoUpdateInitialInterval;
|
int m_autoUpdateInitialInterval{};
|
||||||
int m_autoUpdateRemainingInterval;
|
int m_autoUpdateRemainingInterval{};
|
||||||
int m_totalCount;
|
int m_totalCount{};
|
||||||
int m_unreadCount;
|
int m_unreadCount{};
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(Feed::AutoUpdateType)
|
Q_DECLARE_METATYPE(Feed::AutoUpdateType)
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ FormFeedDetails::FormFeedDetails(ServiceRoot* service_root, QWidget* parent)
|
||||||
onPasswordChanged(QString());
|
onPasswordChanged(QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
FormFeedDetails::~FormFeedDetails() {}
|
FormFeedDetails::~FormFeedDetails() = default;
|
||||||
|
|
||||||
int FormFeedDetails::addEditFeed(Feed* input_feed, RootItem* parent_to_select, const QString& url) {
|
int FormFeedDetails::addEditFeed(Feed* input_feed, RootItem* parent_to_select, const QString& url) {
|
||||||
// Load categories.
|
// Load categories.
|
||||||
|
|
@ -114,7 +114,7 @@ void FormFeedDetails::onUrlChanged(const QString& new_url) {
|
||||||
else if (!new_url.simplified().isEmpty()) {
|
else if (!new_url.simplified().isEmpty()) {
|
||||||
// New url is not well-formed but is not empty on the other hand.
|
// New url is not well-formed but is not empty on the other hand.
|
||||||
m_ui->m_txtUrl->setStatus(LineEditWithStatus::Warning,
|
m_ui->m_txtUrl->setStatus(LineEditWithStatus::Warning,
|
||||||
tr("The URL does not meet standard pattern. Does your URL start with \"http://\" or \"https://\" prefix."));
|
tr(R"(The URL does not meet standard pattern. Does your URL start with "http://" or "https://" prefix.)"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// New url is empty.
|
// New url is empty.
|
||||||
|
|
@ -376,7 +376,7 @@ void FormFeedDetails::initialize() {
|
||||||
m_ui->m_txtUrl->lineEdit()->setFocus(Qt::TabFocusReason);
|
m_ui->m_txtUrl->lineEdit()->setFocus(Qt::TabFocusReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormFeedDetails::loadCategories(const QList<Category*> categories, RootItem* root_item) {
|
void FormFeedDetails::loadCategories(const QList<Category*>& categories, RootItem* root_item) {
|
||||||
m_ui->m_cmbParentCategory->addItem(root_item->icon(),
|
m_ui->m_cmbParentCategory->addItem(root_item->icon(),
|
||||||
root_item->title(),
|
root_item->title(),
|
||||||
QVariant::fromValue((void*) root_item));
|
QVariant::fromValue((void*) root_item));
|
||||||
|
|
|
||||||
|
|
@ -67,16 +67,16 @@ class FormFeedDetails : public QDialog {
|
||||||
void initialize();
|
void initialize();
|
||||||
|
|
||||||
// Loads categories into the dialog from the model.
|
// Loads categories into the dialog from the model.
|
||||||
void loadCategories(const QList<Category*> categories, RootItem* root_item);
|
void loadCategories(const QList<Category*>& categories, RootItem* root_item);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QScopedPointer<Ui::FormFeedDetails> m_ui;
|
QScopedPointer<Ui::FormFeedDetails> m_ui;
|
||||||
Feed* m_editableFeed;
|
Feed* m_editableFeed;
|
||||||
ServiceRoot* m_serviceRoot;
|
ServiceRoot* m_serviceRoot;
|
||||||
QMenu* m_iconMenu;
|
QMenu* m_iconMenu{};
|
||||||
QAction* m_actionLoadIconFromFile;
|
QAction* m_actionLoadIconFromFile{};
|
||||||
QAction* m_actionUseDefaultIcon;
|
QAction* m_actionUseDefaultIcon{};
|
||||||
QAction* m_actionFetchIcon;
|
QAction* m_actionFetchIcon{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FORMFEEDDETAILS_H
|
#endif // FORMFEEDDETAILS_H
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
|
||||||
RecycleBin::RecycleBin(RootItem* parent_item) : RootItem(parent_item), m_totalCount(0),
|
RecycleBin::RecycleBin(RootItem* parent_item) : RootItem(parent_item), m_totalCount(0),
|
||||||
m_unreadCount(0), m_contextMenu(QList<QAction*>()) {
|
m_unreadCount(0) {
|
||||||
setKind(RootItemKind::Bin);
|
setKind(RootItemKind::Bin);
|
||||||
setId(ID_RECYCLE_BIN);
|
setId(ID_RECYCLE_BIN);
|
||||||
setIcon(qApp->icons()->fromTheme(QSL("user-trash")));
|
setIcon(qApp->icons()->fromTheme(QSL("user-trash")));
|
||||||
|
|
@ -21,10 +21,10 @@ RecycleBin::RecycleBin(RootItem* parent_item) : RootItem(parent_item), m_totalCo
|
||||||
setCreationDate(QDateTime::currentDateTime());
|
setCreationDate(QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
RecycleBin::~RecycleBin() {}
|
RecycleBin::~RecycleBin() = default;
|
||||||
|
|
||||||
QString RecycleBin::additionalTooltip() const {
|
QString RecycleBin::additionalTooltip() const {
|
||||||
return tr("%n deleted message(s).", 0, countOfAllMessages());
|
return tr("%n deleted message(s).", nullptr, countOfAllMessages());
|
||||||
}
|
}
|
||||||
|
|
||||||
int RecycleBin::countOfUnreadMessages() const {
|
int RecycleBin::countOfUnreadMessages() const {
|
||||||
|
|
@ -77,7 +77,7 @@ QList<Message> RecycleBin::undeletedMessages() const {
|
||||||
bool RecycleBin::markAsReadUnread(RootItem::ReadStatus status) {
|
bool RecycleBin::markAsReadUnread(RootItem::ReadStatus status) {
|
||||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||||
ServiceRoot* parent_root = getParentServiceRoot();
|
ServiceRoot* parent_root = getParentServiceRoot();
|
||||||
CacheForServiceRoot* cache = dynamic_cast<CacheForServiceRoot*>(parent_root);
|
auto* cache = dynamic_cast<CacheForServiceRoot*>(parent_root);
|
||||||
|
|
||||||
if (cache != nullptr) {
|
if (cache != nullptr) {
|
||||||
cache->addMessageStatesToCache(parent_root->customIDSOfMessagesForItem(this), status);
|
cache->addMessageStatesToCache(parent_root->customIDSOfMessagesForItem(this), status);
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,7 @@
|
||||||
|
|
||||||
RootItem::RootItem(RootItem* parent_item)
|
RootItem::RootItem(RootItem* parent_item)
|
||||||
: QObject(nullptr), m_kind(RootItemKind::Root), m_id(NO_PARENT_CATEGORY), m_customId(QSL("")),
|
: QObject(nullptr), m_kind(RootItemKind::Root), m_id(NO_PARENT_CATEGORY), m_customId(QSL("")),
|
||||||
m_title(QString()), m_description(QString()), m_icon(QIcon()), m_creationDate(QDateTime()),
|
m_title(QString()), m_description(QString()), m_keepOnTop(false), m_parentItem(parent_item) {}
|
||||||
m_keepOnTop(false), m_childItems(QList<RootItem*>()), m_parentItem(parent_item) {}
|
|
||||||
|
|
||||||
RootItem::RootItem(const RootItem& other) : RootItem(nullptr) {
|
RootItem::RootItem(const RootItem& other) : RootItem(nullptr) {
|
||||||
setTitle(other.title());
|
setTitle(other.title());
|
||||||
|
|
@ -104,7 +103,7 @@ void RootItem::updateCounts(bool including_total_count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int RootItem::row() const {
|
int RootItem::row() const {
|
||||||
if (m_parentItem) {
|
if (m_parentItem != nullptr) {
|
||||||
return m_parentItem->m_childItems.indexOf(const_cast<RootItem*>(this));
|
return m_parentItem->m_childItems.indexOf(const_cast<RootItem*>(this));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -136,7 +135,7 @@ QVariant RootItem::data(int column, int role) const {
|
||||||
}
|
}
|
||||||
else if (column == FDS_MODEL_COUNTS_INDEX) {
|
else if (column == FDS_MODEL_COUNTS_INDEX) {
|
||||||
//: Tooltip for "unread" column of feed list.
|
//: Tooltip for "unread" column of feed list.
|
||||||
return tr("%n unread message(s).", 0, countOfUnreadMessages());
|
return tr("%n unread message(s).", nullptr, countOfUnreadMessages());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
@ -439,15 +438,15 @@ void RootItem::setCustomId(const QString& custom_id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Category* RootItem::toCategory() const {
|
Category* RootItem::toCategory() const {
|
||||||
return static_cast<Category*>(const_cast<RootItem*>(this));
|
return dynamic_cast<Category*>(const_cast<RootItem*>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
Feed* RootItem::toFeed() const {
|
Feed* RootItem::toFeed() const {
|
||||||
return static_cast<Feed*>(const_cast<RootItem*>(this));
|
return dynamic_cast<Feed*>(const_cast<RootItem*>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceRoot* RootItem::toServiceRoot() const {
|
ServiceRoot* RootItem::toServiceRoot() const {
|
||||||
return static_cast<ServiceRoot*>(const_cast<RootItem*>(this));
|
return dynamic_cast<ServiceRoot*>(const_cast<RootItem*>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RootItem::keepOnTop() const {
|
bool RootItem::keepOnTop() const {
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
#include "services/abstract/serviceentrypoint.h"
|
#include "services/abstract/serviceentrypoint.h"
|
||||||
|
|
||||||
ServiceEntryPoint::~ServiceEntryPoint() {}
|
ServiceEntryPoint::~ServiceEntryPoint() = default;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ ServiceRoot::ServiceRoot(RootItem* parent) : RootItem(parent), m_recycleBin(new
|
||||||
setCreationDate(QDateTime::currentDateTime());
|
setCreationDate(QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceRoot::~ServiceRoot() {}
|
ServiceRoot::~ServiceRoot() = default;
|
||||||
|
|
||||||
bool ServiceRoot::deleteViaGui() {
|
bool ServiceRoot::deleteViaGui() {
|
||||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||||
|
|
@ -34,7 +34,7 @@ bool ServiceRoot::deleteViaGui() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ServiceRoot::markAsReadUnread(RootItem::ReadStatus status) {
|
bool ServiceRoot::markAsReadUnread(RootItem::ReadStatus status) {
|
||||||
CacheForServiceRoot* cache = dynamic_cast<CacheForServiceRoot*>(this);
|
auto* cache = dynamic_cast<CacheForServiceRoot*>(this);
|
||||||
|
|
||||||
if (cache != nullptr) {
|
if (cache != nullptr) {
|
||||||
cache->addMessageStatesToCache(customIDSOfMessagesForItem(this), status);
|
cache->addMessageStatesToCache(customIDSOfMessagesForItem(this), status);
|
||||||
|
|
@ -424,8 +424,8 @@ QStringList ServiceRoot::textualFeedIds(const QList<Feed*>& feeds) const {
|
||||||
QStringList ServiceRoot::customIDsOfMessages(const QList<ImportanceChange>& changes) {
|
QStringList ServiceRoot::customIDsOfMessages(const QList<ImportanceChange>& changes) {
|
||||||
QStringList list;
|
QStringList list;
|
||||||
|
|
||||||
for (int i = 0; i < changes.size(); i++) {
|
for (const auto & change : changes) {
|
||||||
list.append(changes.at(i).first.m_customId);
|
list.append(change.first.m_customId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
GmailServiceRoot::GmailServiceRoot(GmailNetworkFactory* network, RootItem* parent) : ServiceRoot(parent),
|
GmailServiceRoot::GmailServiceRoot(GmailNetworkFactory* network, RootItem* parent) : ServiceRoot(parent), m_network(network) {
|
||||||
CacheForServiceRoot(), m_serviceMenu(QList<QAction*>()), m_network(network) {
|
|
||||||
if (network == nullptr) {
|
if (network == nullptr) {
|
||||||
m_network = new GmailNetworkFactory(this);
|
m_network = new GmailNetworkFactory(this);
|
||||||
}
|
}
|
||||||
|
|
@ -33,14 +32,14 @@ GmailServiceRoot::GmailServiceRoot(GmailNetworkFactory* network, RootItem* paren
|
||||||
setRecycleBin(nullptr);
|
setRecycleBin(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
GmailServiceRoot::~GmailServiceRoot() {}
|
GmailServiceRoot::~GmailServiceRoot() = default;
|
||||||
|
|
||||||
void GmailServiceRoot::updateTitle() {
|
void GmailServiceRoot::updateTitle() {
|
||||||
setTitle(m_network->userName() + QSL(" (Gmail)"));
|
setTitle(m_network->userName() + QSL(" (Gmail)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
RootItem* GmailServiceRoot::obtainNewTreeForSyncIn() const {
|
RootItem* GmailServiceRoot::obtainNewTreeForSyncIn() const {
|
||||||
RootItem* root = new RootItem();
|
auto* root = new RootItem();
|
||||||
GmailFeed* inbox = new GmailFeed(tr("Inbox"), QSL(GMAIL_SYSTEM_LABEL_INBOX), qApp->icons()->fromTheme(QSL("mail-inbox")), root);
|
GmailFeed* inbox = new GmailFeed(tr("Inbox"), QSL(GMAIL_SYSTEM_LABEL_INBOX), qApp->icons()->fromTheme(QSL("mail-inbox")), root);
|
||||||
|
|
||||||
inbox->setKeepOnTop(true);
|
inbox->setKeepOnTop(true);
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ FormEditGmailAccount::FormEditGmailAccount(QWidget* parent) : QDialog(parent),
|
||||||
hookNetwork();
|
hookNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
FormEditGmailAccount::~FormEditGmailAccount() {}
|
FormEditGmailAccount::~FormEditGmailAccount() = default;
|
||||||
|
|
||||||
void FormEditGmailAccount::testSetup() {
|
void FormEditGmailAccount::testSetup() {
|
||||||
if (m_oauth->clientId() != m_ui.m_txtAppId->lineEdit()->text() ||
|
if (m_oauth->clientId() != m_ui.m_txtAppId->lineEdit()->text() ||
|
||||||
|
|
@ -181,7 +181,7 @@ void FormEditGmailAccount::execForEdit(GmailServiceRoot* existing_root) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormEditGmailAccount::checkOAuthValue(const QString& value) {
|
void FormEditGmailAccount::checkOAuthValue(const QString& value) {
|
||||||
LineEditWithStatus* line_edit = qobject_cast<LineEditWithStatus*>(sender()->parent());
|
auto* line_edit = qobject_cast<LineEditWithStatus*>(sender()->parent());
|
||||||
|
|
||||||
if (line_edit != nullptr) {
|
if (line_edit != nullptr) {
|
||||||
if (value.isEmpty()) {
|
if (value.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -73,13 +73,13 @@ void GmailNetworkFactory::setUsername(const QString& username) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Downloader* GmailNetworkFactory::downloadAttachment(const QString& msg_id, const QString& attachment_id) {
|
Downloader* GmailNetworkFactory::downloadAttachment(const QString& msg_id, const QString& attachment_id) {
|
||||||
Downloader* downloader = new Downloader();
|
|
||||||
QString bearer = m_oauth2->bearer().toLocal8Bit();
|
QString bearer = m_oauth2->bearer().toLocal8Bit();
|
||||||
|
|
||||||
if (bearer.isEmpty()) {
|
if (bearer.isEmpty()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
auto* downloader = new Downloader();
|
||||||
QString target_url = QString(GMAIL_API_GET_ATTACHMENT).arg(msg_id, attachment_id);
|
QString target_url = QString(GMAIL_API_GET_ATTACHMENT).arg(msg_id, attachment_id);
|
||||||
|
|
||||||
downloader->appendRawHeader(QString(HTTP_HEADERS_AUTHORIZATION).toLocal8Bit(), bearer.toLocal8Bit());
|
downloader->appendRawHeader(QString(HTTP_HEADERS_AUTHORIZATION).toLocal8Bit(), bearer.toLocal8Bit());
|
||||||
|
|
@ -374,7 +374,7 @@ bool GmailNetworkFactory::fillFullMessage(Message& msg, const QJsonObject& json,
|
||||||
bool GmailNetworkFactory::obtainAndDecodeFullMessages(const QList<Message>& lite_messages,
|
bool GmailNetworkFactory::obtainAndDecodeFullMessages(const QList<Message>& lite_messages,
|
||||||
const QString& feed_id,
|
const QString& feed_id,
|
||||||
QList<Message>& full_messages) {
|
QList<Message>& full_messages) {
|
||||||
QHttpMultiPart* multi = new QHttpMultiPart();
|
auto* multi = new QHttpMultiPart();
|
||||||
|
|
||||||
multi->setContentType(QHttpMultiPart::ContentType::MixedType);
|
multi->setContentType(QHttpMultiPart::ContentType::MixedType);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ FormEditInoreaderAccount::FormEditInoreaderAccount(QWidget* parent) : QDialog(pa
|
||||||
hookNetwork();
|
hookNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
FormEditInoreaderAccount::~FormEditInoreaderAccount() {}
|
FormEditInoreaderAccount::~FormEditInoreaderAccount() = default;
|
||||||
|
|
||||||
void FormEditInoreaderAccount::testSetup() {
|
void FormEditInoreaderAccount::testSetup() {
|
||||||
if (m_oauth->clientId() != m_ui.m_txtAppId->lineEdit()->text() ||
|
if (m_oauth->clientId() != m_ui.m_txtAppId->lineEdit()->text() ||
|
||||||
|
|
@ -178,7 +178,7 @@ void FormEditInoreaderAccount::execForEdit(InoreaderServiceRoot* existing_root)
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormEditInoreaderAccount::checkOAuthValue(const QString& value) {
|
void FormEditInoreaderAccount::checkOAuthValue(const QString& value) {
|
||||||
LineEditWithStatus* line_edit = qobject_cast<LineEditWithStatus*>(sender()->parent());
|
auto* line_edit = qobject_cast<LineEditWithStatus*>(sender()->parent());
|
||||||
|
|
||||||
if (line_edit != nullptr) {
|
if (line_edit != nullptr) {
|
||||||
if (value.isEmpty()) {
|
if (value.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,7 @@
|
||||||
#include "services/inoreader/network/inoreadernetworkfactory.h"
|
#include "services/inoreader/network/inoreadernetworkfactory.h"
|
||||||
#include "services/inoreader/network/inoreadernetworkfactory.h"
|
#include "services/inoreader/network/inoreadernetworkfactory.h"
|
||||||
|
|
||||||
InoreaderServiceRoot::InoreaderServiceRoot(InoreaderNetworkFactory* network, RootItem* parent) : ServiceRoot(parent),
|
InoreaderServiceRoot::InoreaderServiceRoot(InoreaderNetworkFactory* network, RootItem* parent) : ServiceRoot(parent), m_network(network) {
|
||||||
CacheForServiceRoot(), m_serviceMenu(QList<QAction*>()), m_network(network) {
|
|
||||||
if (network == nullptr) {
|
if (network == nullptr) {
|
||||||
m_network = new InoreaderNetworkFactory(this);
|
m_network = new InoreaderNetworkFactory(this);
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +41,7 @@ InoreaderServiceRoot::InoreaderServiceRoot(InoreaderNetworkFactory* network, Roo
|
||||||
setIcon(InoreaderEntryPoint().icon());
|
setIcon(InoreaderEntryPoint().icon());
|
||||||
}
|
}
|
||||||
|
|
||||||
InoreaderServiceRoot::~InoreaderServiceRoot() {}
|
InoreaderServiceRoot::~InoreaderServiceRoot() = default;
|
||||||
|
|
||||||
void InoreaderServiceRoot::updateTitle() {
|
void InoreaderServiceRoot::updateTitle() {
|
||||||
setTitle(m_network->userName() + QSL(" (Inoreader)"));
|
setTitle(m_network->userName() + QSL(" (Inoreader)"));
|
||||||
|
|
|
||||||
|
|
@ -361,7 +361,7 @@ QList<Message> InoreaderNetworkFactory::decodeMessages(const QString& messages_j
|
||||||
}
|
}
|
||||||
|
|
||||||
RootItem* InoreaderNetworkFactory::decodeFeedCategoriesData(const QString& categories, const QString& feeds, bool obtain_icons) {
|
RootItem* InoreaderNetworkFactory::decodeFeedCategoriesData(const QString& categories, const QString& feeds, bool obtain_icons) {
|
||||||
RootItem* parent = new RootItem();
|
auto* parent = new RootItem();
|
||||||
QJsonArray json = QJsonDocument::fromJson(categories.toUtf8()).object()["tags"].toArray();
|
QJsonArray json = QJsonDocument::fromJson(categories.toUtf8()).object()["tags"].toArray();
|
||||||
|
|
||||||
QMap<QString, RootItem*> cats;
|
QMap<QString, RootItem*> cats;
|
||||||
|
|
@ -373,7 +373,7 @@ RootItem* InoreaderNetworkFactory::decodeFeedCategoriesData(const QString& categ
|
||||||
|
|
||||||
if (label_id.contains(QSL("/label/"))) {
|
if (label_id.contains(QSL("/label/"))) {
|
||||||
// We have label (not "state").
|
// We have label (not "state").
|
||||||
Category* category = new Category();
|
auto* category = new Category();
|
||||||
|
|
||||||
category->setDescription(label["htmlUrl"].toString());
|
category->setDescription(label["htmlUrl"].toString());
|
||||||
category->setTitle(label_id.mid(label_id.lastIndexOf(QL1C('/')) + 1));
|
category->setTitle(label_id.mid(label_id.lastIndexOf(QL1C('/')) + 1));
|
||||||
|
|
@ -406,7 +406,7 @@ RootItem* InoreaderNetworkFactory::decodeFeedCategoriesData(const QString& categ
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have label (not "state").
|
// We have label (not "state").
|
||||||
InoreaderFeed* feed = new InoreaderFeed();
|
auto* feed = new InoreaderFeed();
|
||||||
|
|
||||||
feed->setDescription(url);
|
feed->setDescription(url);
|
||||||
feed->setUrl(url);
|
feed->setUrl(url);
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ FormEditOwnCloudAccount::FormEditOwnCloudAccount(QWidget* parent)
|
||||||
displayPassword(false);
|
displayPassword(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FormEditOwnCloudAccount::~FormEditOwnCloudAccount() {}
|
FormEditOwnCloudAccount::~FormEditOwnCloudAccount() = default;
|
||||||
|
|
||||||
OwnCloudServiceRoot* FormEditOwnCloudAccount::execForCreate() {
|
OwnCloudServiceRoot* FormEditOwnCloudAccount::execForCreate() {
|
||||||
setWindowTitle(tr("Add new ownCloud News account"));
|
setWindowTitle(tr("Add new ownCloud News account"));
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,11 @@ void FormOwnCloudFeedDetails::apply() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// User edited auto-update status. Save it.
|
// User edited auto-update status. Save it.
|
||||||
OwnCloudFeed* new_feed_data = new OwnCloudFeed();
|
auto* new_feed_data = new OwnCloudFeed();
|
||||||
|
|
||||||
new_feed_data->setAutoUpdateType(static_cast<Feed::AutoUpdateType>(m_ui->m_cmbAutoUpdateType->itemData(
|
new_feed_data->setAutoUpdateType(static_cast<Feed::AutoUpdateType>(m_ui->m_cmbAutoUpdateType->itemData(
|
||||||
m_ui->m_cmbAutoUpdateType->currentIndex()).toInt()));
|
m_ui->m_cmbAutoUpdateType->currentIndex()).toInt()));
|
||||||
new_feed_data->setAutoUpdateInitialInterval(m_ui->m_spinAutoUpdateInterval->value());
|
new_feed_data->setAutoUpdateInitialInterval(int(m_ui->m_spinAutoUpdateInterval->value()));
|
||||||
qobject_cast<OwnCloudFeed*>(m_editableFeed)->editItself(new_feed_data);
|
qobject_cast<OwnCloudFeed*>(m_editableFeed)->editItself(new_feed_data);
|
||||||
delete new_feed_data;
|
delete new_feed_data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
OwnCloudNetworkFactory::OwnCloudNetworkFactory()
|
OwnCloudNetworkFactory::OwnCloudNetworkFactory()
|
||||||
: m_url(QString()), m_fixedUrl(QString()), m_forceServerSideUpdate(false),
|
: m_url(QString()), m_fixedUrl(QString()), m_forceServerSideUpdate(false),
|
||||||
|
|
@ -23,7 +24,7 @@ OwnCloudNetworkFactory::OwnCloudNetworkFactory()
|
||||||
m_urlFolders(QString()), m_urlFeeds(QString()), m_urlMessages(QString()), m_urlFeedsUpdate(QString()),
|
m_urlFolders(QString()), m_urlFeeds(QString()), m_urlMessages(QString()), m_urlFeedsUpdate(QString()),
|
||||||
m_urlDeleteFeed(QString()), m_urlRenameFeed(QString()), m_userId(QString()) {}
|
m_urlDeleteFeed(QString()), m_urlRenameFeed(QString()), m_userId(QString()) {}
|
||||||
|
|
||||||
OwnCloudNetworkFactory::~OwnCloudNetworkFactory() {}
|
OwnCloudNetworkFactory::~OwnCloudNetworkFactory() = default;
|
||||||
|
|
||||||
QString OwnCloudNetworkFactory::url() const {
|
QString OwnCloudNetworkFactory::url() const {
|
||||||
return m_url;
|
return m_url;
|
||||||
|
|
@ -434,7 +435,7 @@ OwnCloudResponse::OwnCloudResponse(const QString& raw_content) {
|
||||||
m_emptyString = raw_content.isEmpty();
|
m_emptyString = raw_content.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
OwnCloudResponse::~OwnCloudResponse() {}
|
OwnCloudResponse::~OwnCloudResponse() = default;
|
||||||
|
|
||||||
bool OwnCloudResponse::isLoaded() const {
|
bool OwnCloudResponse::isLoaded() const {
|
||||||
return !m_emptyString && !m_rawContent.isEmpty();
|
return !m_emptyString && !m_rawContent.isEmpty();
|
||||||
|
|
@ -446,7 +447,7 @@ QString OwnCloudResponse::toString() const {
|
||||||
|
|
||||||
OwnCloudUserResponse::OwnCloudUserResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
OwnCloudUserResponse::OwnCloudUserResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
||||||
|
|
||||||
OwnCloudUserResponse::~OwnCloudUserResponse() {}
|
OwnCloudUserResponse::~OwnCloudUserResponse() = default;
|
||||||
|
|
||||||
QString OwnCloudUserResponse::displayName() const {
|
QString OwnCloudUserResponse::displayName() const {
|
||||||
if (isLoaded()) {
|
if (isLoaded()) {
|
||||||
|
|
@ -491,7 +492,7 @@ QIcon OwnCloudUserResponse::avatar() const {
|
||||||
|
|
||||||
OwnCloudStatusResponse::OwnCloudStatusResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
OwnCloudStatusResponse::OwnCloudStatusResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
||||||
|
|
||||||
OwnCloudStatusResponse::~OwnCloudStatusResponse() {}
|
OwnCloudStatusResponse::~OwnCloudStatusResponse() = default;
|
||||||
|
|
||||||
QString OwnCloudStatusResponse::version() const {
|
QString OwnCloudStatusResponse::version() const {
|
||||||
if (isLoaded()) {
|
if (isLoaded()) {
|
||||||
|
|
@ -511,14 +512,14 @@ bool OwnCloudStatusResponse::misconfiguredCron() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OwnCloudGetFeedsCategoriesResponse::OwnCloudGetFeedsCategoriesResponse(const QString& raw_categories,
|
OwnCloudGetFeedsCategoriesResponse::OwnCloudGetFeedsCategoriesResponse(QString raw_categories,
|
||||||
const QString& raw_feeds)
|
QString raw_feeds)
|
||||||
: m_contentCategories(raw_categories), m_contentFeeds(raw_feeds) {}
|
: m_contentCategories(std::move(raw_categories)), m_contentFeeds(std::move(raw_feeds)) {}
|
||||||
|
|
||||||
OwnCloudGetFeedsCategoriesResponse::~OwnCloudGetFeedsCategoriesResponse() {}
|
OwnCloudGetFeedsCategoriesResponse::~OwnCloudGetFeedsCategoriesResponse() = default;
|
||||||
|
|
||||||
RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) const {
|
RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons) const {
|
||||||
RootItem* parent = new RootItem();
|
auto* parent = new RootItem();
|
||||||
|
|
||||||
QMap<QString, RootItem*> cats;
|
QMap<QString, RootItem*> cats;
|
||||||
|
|
||||||
|
|
@ -528,7 +529,7 @@ RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
|
||||||
// Process categories first, then process feeds.
|
// Process categories first, then process feeds.
|
||||||
foreach (const QJsonValue& cat, QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray()) {
|
foreach (const QJsonValue& cat, QJsonDocument::fromJson(m_contentCategories.toUtf8()).object()["folders"].toArray()) {
|
||||||
QJsonObject item = cat.toObject();
|
QJsonObject item = cat.toObject();
|
||||||
Category* category = new Category();
|
auto* category = new Category();
|
||||||
|
|
||||||
category->setTitle(item["name"].toString());
|
category->setTitle(item["name"].toString());
|
||||||
category->setCustomId(QString::number(item["id"].toInt()));
|
category->setCustomId(QString::number(item["id"].toInt()));
|
||||||
|
|
@ -541,7 +542,7 @@ RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
|
||||||
// We have categories added, now add all feeds.
|
// We have categories added, now add all feeds.
|
||||||
foreach (const QJsonValue& fed, QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray()) {
|
foreach (const QJsonValue& fed, QJsonDocument::fromJson(m_contentFeeds.toUtf8()).object()["feeds"].toArray()) {
|
||||||
QJsonObject item = fed.toObject();
|
QJsonObject item = fed.toObject();
|
||||||
OwnCloudFeed* feed = new OwnCloudFeed();
|
auto* feed = new OwnCloudFeed();
|
||||||
|
|
||||||
if (obtain_icons) {
|
if (obtain_icons) {
|
||||||
QString icon_path = item["faviconLink"].toString();
|
QString icon_path = item["faviconLink"].toString();
|
||||||
|
|
@ -574,7 +575,7 @@ RootItem* OwnCloudGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons)
|
||||||
|
|
||||||
OwnCloudGetMessagesResponse::OwnCloudGetMessagesResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
OwnCloudGetMessagesResponse::OwnCloudGetMessagesResponse(const QString& raw_content) : OwnCloudResponse(raw_content) {}
|
||||||
|
|
||||||
OwnCloudGetMessagesResponse::~OwnCloudGetMessagesResponse() {}
|
OwnCloudGetMessagesResponse::~OwnCloudGetMessagesResponse() = default;
|
||||||
|
|
||||||
QList<Message>OwnCloudGetMessagesResponse::messages() const {
|
QList<Message>OwnCloudGetMessagesResponse::messages() const {
|
||||||
QList<Message>msgs;
|
QList<Message>msgs;
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ class RootItem;
|
||||||
|
|
||||||
class OwnCloudGetFeedsCategoriesResponse {
|
class OwnCloudGetFeedsCategoriesResponse {
|
||||||
public:
|
public:
|
||||||
explicit OwnCloudGetFeedsCategoriesResponse(const QString& raw_categories = QString(), const QString& raw_feeds = QString());
|
explicit OwnCloudGetFeedsCategoriesResponse(QString raw_categories = QString(), QString raw_feeds = QString());
|
||||||
virtual ~OwnCloudGetFeedsCategoriesResponse();
|
virtual ~OwnCloudGetFeedsCategoriesResponse();
|
||||||
|
|
||||||
// Returns tree of feeds/categories.
|
// Returns tree of feeds/categories.
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ OwnCloudFeed::OwnCloudFeed(RootItem* parent) : Feed(parent) {}
|
||||||
|
|
||||||
OwnCloudFeed::OwnCloudFeed(const QSqlRecord& record) : Feed(record) {}
|
OwnCloudFeed::OwnCloudFeed(const QSqlRecord& record) : Feed(record) {}
|
||||||
|
|
||||||
OwnCloudFeed::~OwnCloudFeed() {}
|
OwnCloudFeed::~OwnCloudFeed() = default;
|
||||||
|
|
||||||
bool OwnCloudFeed::canBeEdited() const {
|
bool OwnCloudFeed::canBeEdited() const {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,7 @@
|
||||||
#include "services/owncloud/owncloudserviceentrypoint.h"
|
#include "services/owncloud/owncloudserviceentrypoint.h"
|
||||||
|
|
||||||
OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem* parent)
|
OwnCloudServiceRoot::OwnCloudServiceRoot(RootItem* parent)
|
||||||
: ServiceRoot(parent), CacheForServiceRoot(),
|
: ServiceRoot(parent), m_actionSyncIn(nullptr), m_network(new OwnCloudNetworkFactory()) {
|
||||||
m_actionSyncIn(nullptr), m_serviceMenu(QList<QAction*>()), m_network(new OwnCloudNetworkFactory()) {
|
|
||||||
setIcon(OwnCloudServiceEntryPoint().icon());
|
setIcon(OwnCloudServiceEntryPoint().icon());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ AtomParser::AtomParser(const QString& data) : FeedParser(data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomParser::~AtomParser() {}
|
AtomParser::~AtomParser() = default;
|
||||||
|
|
||||||
QString AtomParser::feedAuthor() const {
|
QString AtomParser::feedAuthor() const {
|
||||||
QDomNodeList authors = m_xml.documentElement().elementsByTagNameNS(m_atomNamespace, QSL("author"));
|
QDomNodeList authors = m_xml.documentElement().elementsByTagNameNS(m_atomNamespace, QSL("author"));
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,13 @@
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
FeedParser::FeedParser(const QString& data) : m_xmlData(data) {
|
FeedParser::FeedParser(QString data) : m_xmlData(std::move(data)) {
|
||||||
m_xml.setContent(m_xmlData, true);
|
m_xml.setContent(m_xmlData, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
FeedParser::~FeedParser() {}
|
FeedParser::~FeedParser() = default;
|
||||||
|
|
||||||
QList<Message> FeedParser::messages() {
|
QList<Message> FeedParser::messages() {
|
||||||
QString feed_author = feedAuthor();
|
QString feed_author = feedAuthor();
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
class FeedParser {
|
class FeedParser {
|
||||||
public:
|
public:
|
||||||
explicit FeedParser(const QString& data);
|
explicit FeedParser(QString data);
|
||||||
virtual ~FeedParser();
|
virtual ~FeedParser();
|
||||||
|
|
||||||
virtual QList<Message> messages();
|
virtual QList<Message> messages();
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ int FormStandardCategoryDetails::addEditCategory(StandardCategory* input_categor
|
||||||
|
|
||||||
void FormStandardCategoryDetails::apply() {
|
void FormStandardCategoryDetails::apply() {
|
||||||
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
||||||
StandardCategory* new_category = new StandardCategory();
|
auto* new_category = new StandardCategory();
|
||||||
|
|
||||||
new_category->setTitle(m_ui->m_txtTitle->lineEdit()->text());
|
new_category->setTitle(m_ui->m_txtTitle->lineEdit()->text());
|
||||||
new_category->setCreationDate(QDateTime::currentDateTime());
|
new_category->setCreationDate(QDateTime::currentDateTime());
|
||||||
|
|
@ -215,7 +215,7 @@ void FormStandardCategoryDetails::initialize() {
|
||||||
m_ui->m_txtTitle->lineEdit()->setFocus(Qt::TabFocusReason);
|
m_ui->m_txtTitle->lineEdit()->setFocus(Qt::TabFocusReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormStandardCategoryDetails::loadCategories(const QList<Category*> categories,
|
void FormStandardCategoryDetails::loadCategories(const QList<Category*>& categories,
|
||||||
RootItem* root_item,
|
RootItem* root_item,
|
||||||
StandardCategory* input_category) {
|
StandardCategory* input_category) {
|
||||||
m_ui->m_cmbParentCategory->addItem(root_item->icon(),
|
m_ui->m_cmbParentCategory->addItem(root_item->icon(),
|
||||||
|
|
|
||||||
|
|
@ -60,15 +60,15 @@ class FormStandardCategoryDetails : public QDialog {
|
||||||
// Loads categories into the dialog + give root "category"
|
// Loads categories into the dialog + give root "category"
|
||||||
// and make sure that no childs of input category (including)
|
// and make sure that no childs of input category (including)
|
||||||
// input category are loaded.
|
// input category are loaded.
|
||||||
void loadCategories(const QList<Category*> categories, RootItem* root_item, StandardCategory* input_category);
|
void loadCategories(const QList<Category*>& categories, RootItem* root_item, StandardCategory* input_category);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<Ui::FormStandardCategoryDetails> m_ui;
|
QScopedPointer<Ui::FormStandardCategoryDetails> m_ui;
|
||||||
StandardCategory* m_editableCategory;
|
StandardCategory* m_editableCategory;
|
||||||
StandardServiceRoot* m_serviceRoot;
|
StandardServiceRoot* m_serviceRoot;
|
||||||
QMenu* m_iconMenu;
|
QMenu* m_iconMenu{};
|
||||||
QAction* m_actionLoadIconFromFile;
|
QAction* m_actionLoadIconFromFile{};
|
||||||
QAction* m_actionUseDefaultIcon;
|
QAction* m_actionUseDefaultIcon{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FORMCATEGORYDETAILS_H
|
#endif // FORMCATEGORYDETAILS_H
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ void FormStandardFeedDetails::apply() {
|
||||||
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
||||||
|
|
||||||
StandardFeed::Type type = static_cast<StandardFeed::Type>(m_ui->m_cmbType->itemData(m_ui->m_cmbType->currentIndex()).value<int>());
|
StandardFeed::Type type = static_cast<StandardFeed::Type>(m_ui->m_cmbType->itemData(m_ui->m_cmbType->currentIndex()).value<int>());
|
||||||
StandardFeed* new_feed = new StandardFeed();
|
auto* new_feed = new StandardFeed();
|
||||||
|
|
||||||
// Setup data for new_feed.
|
// Setup data for new_feed.
|
||||||
new_feed->setTitle(m_ui->m_txtTitle->lineEdit()->text());
|
new_feed->setTitle(m_ui->m_txtTitle->lineEdit()->text());
|
||||||
|
|
@ -65,7 +65,7 @@ void FormStandardFeedDetails::apply() {
|
||||||
|
|
||||||
void FormStandardFeedDetails::setEditableFeed(Feed* editable_feed) {
|
void FormStandardFeedDetails::setEditableFeed(Feed* editable_feed) {
|
||||||
FormFeedDetails::setEditableFeed(editable_feed);
|
FormFeedDetails::setEditableFeed(editable_feed);
|
||||||
StandardFeed* feed = qobject_cast<StandardFeed*>(editable_feed);
|
auto* feed = qobject_cast<StandardFeed*>(editable_feed);
|
||||||
|
|
||||||
m_ui->m_cmbType->setCurrentIndex(m_ui->m_cmbType->findData(QVariant::fromValue(int(feed->type()))));
|
m_ui->m_cmbType->setCurrentIndex(m_ui->m_cmbType->findData(QVariant::fromValue(int(feed->type()))));
|
||||||
m_ui->m_cmbEncoding->setCurrentIndex(m_ui->m_cmbEncoding->findData(feed->encoding(), Qt::DisplayRole, Qt::MatchFixedString));
|
m_ui->m_cmbEncoding->setCurrentIndex(m_ui->m_cmbEncoding->findData(feed->encoding(), Qt::DisplayRole, Qt::MatchFixedString));
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ FormStandardImportExport::FormStandardImportExport(StandardServiceRoot* service_
|
||||||
connect(m_ui->m_btnUncheckAllItems, &QPushButton::clicked, m_model, &FeedsImportExportModel::uncheckAllItems);
|
connect(m_ui->m_btnUncheckAllItems, &QPushButton::clicked, m_model, &FeedsImportExportModel::uncheckAllItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
FormStandardImportExport::~FormStandardImportExport() {}
|
FormStandardImportExport::~FormStandardImportExport() = default;
|
||||||
|
|
||||||
void FormStandardImportExport::setMode(const FeedsImportExportModel::Mode& mode) {
|
void FormStandardImportExport::setMode(const FeedsImportExportModel::Mode& mode) {
|
||||||
m_model->setMode(mode);
|
m_model->setMode(mode);
|
||||||
|
|
@ -284,7 +284,7 @@ void FormStandardImportExport::importFeeds() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormStandardImportExport::loadCategories(const QList<Category*> categories, RootItem* root_item) {
|
void FormStandardImportExport::loadCategories(const QList<Category*>& categories, RootItem* root_item) {
|
||||||
m_ui->m_cmbRootNode->addItem(root_item->icon(), root_item->title(), QVariant::fromValue((void*) root_item));
|
m_ui->m_cmbRootNode->addItem(root_item->icon(), root_item->title(), QVariant::fromValue((void*) root_item));
|
||||||
|
|
||||||
foreach (Category* category, categories) {
|
foreach (Category* category, categories) {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class FormStandardImportExport : public QDialog {
|
||||||
void exportFeeds();
|
void exportFeeds();
|
||||||
void importFeeds();
|
void importFeeds();
|
||||||
|
|
||||||
void loadCategories(const QList<Category*> categories, RootItem* root_item);
|
void loadCategories(const QList<Category*>& categories, RootItem* root_item);
|
||||||
|
|
||||||
QScopedPointer<Ui::FormStandardImportExport> m_ui;
|
QScopedPointer<Ui::FormStandardImportExport> m_ui;
|
||||||
ConversionType m_conversionType;
|
ConversionType m_conversionType;
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
#include <QDomDocument>
|
#include <QDomDocument>
|
||||||
|
|
||||||
RdfParser::RdfParser() {}
|
RdfParser::RdfParser() = default;
|
||||||
|
|
||||||
RdfParser::~RdfParser() {}
|
RdfParser::~RdfParser() = default;
|
||||||
|
|
||||||
QList<Message> RdfParser::parseXmlData(const QString& data) {
|
QList<Message> RdfParser::parseXmlData(const QString& data) {
|
||||||
QList<Message> messages;
|
QList<Message> messages;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
RssParser::RssParser(const QString& data) : FeedParser(data) {}
|
RssParser::RssParser(const QString& data) : FeedParser(data) {}
|
||||||
|
|
||||||
RssParser::~RssParser() {}
|
RssParser::~RssParser() = default;
|
||||||
|
|
||||||
QDomNodeList RssParser::messageElements() {
|
QDomNodeList RssParser::messageElements() {
|
||||||
QDomNode channel_elem = m_xml.namedItem(QSL("rss")).namedItem(QSL("channel"));
|
QDomNode channel_elem = m_xml.namedItem(QSL("rss")).namedItem(QSL("channel"));
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,6 @@
|
||||||
|
|
||||||
StandardCategory::StandardCategory(RootItem* parent_item) : Category(parent_item) {}
|
StandardCategory::StandardCategory(RootItem* parent_item) : Category(parent_item) {}
|
||||||
|
|
||||||
StandardCategory::StandardCategory(const StandardCategory& other) : Category(other) {}
|
|
||||||
|
|
||||||
StandardCategory::~StandardCategory() {}
|
|
||||||
|
|
||||||
StandardServiceRoot* StandardCategory::serviceRoot() const {
|
StandardServiceRoot* StandardCategory::serviceRoot() const {
|
||||||
return qobject_cast<StandardServiceRoot*>(getParentServiceRoot());
|
return qobject_cast<StandardServiceRoot*>(getParentServiceRoot());
|
||||||
}
|
}
|
||||||
|
|
@ -31,7 +27,7 @@ Qt::ItemFlags StandardCategory::additionalFlags() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StandardCategory::performDragDropChange(RootItem* target_item) {
|
bool StandardCategory::performDragDropChange(RootItem* target_item) {
|
||||||
StandardCategory* category_new = new StandardCategory(*this);
|
auto* category_new = new StandardCategory(*this);
|
||||||
|
|
||||||
category_new->clearChildren();
|
category_new->clearChildren();
|
||||||
category_new->setParent(target_item);
|
category_new->setParent(target_item);
|
||||||
|
|
@ -78,10 +74,10 @@ bool StandardCategory::removeItself() {
|
||||||
// from the database.
|
// from the database.
|
||||||
foreach (RootItem* child, childItems()) {
|
foreach (RootItem* child, childItems()) {
|
||||||
if (child->kind() == RootItemKind::Category) {
|
if (child->kind() == RootItemKind::Category) {
|
||||||
children_removed &= static_cast<StandardCategory*>(child)->removeItself();
|
children_removed &= dynamic_cast<StandardCategory*>(child)->removeItself();
|
||||||
}
|
}
|
||||||
else if (child->kind() == RootItemKind::Feed) {
|
else if (child->kind() == RootItemKind::Feed) {
|
||||||
children_removed &= static_cast<StandardFeed*>(child)->removeItself();
|
children_removed &= dynamic_cast<StandardFeed*>(child)->removeItself();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ class StandardCategory : public Category {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StandardCategory(RootItem* parent_item = nullptr);
|
explicit StandardCategory(RootItem* parent_item = nullptr);
|
||||||
explicit StandardCategory(const StandardCategory& other);
|
explicit StandardCategory(const StandardCategory& other) = default;
|
||||||
explicit StandardCategory(const QSqlRecord& record);
|
explicit StandardCategory(const QSqlRecord& record);
|
||||||
virtual ~StandardCategory();
|
virtual ~StandardCategory() = default;
|
||||||
|
|
||||||
StandardServiceRoot* serviceRoot() const;
|
StandardServiceRoot* serviceRoot() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@ Qt::ItemFlags StandardFeed::additionalFlags() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StandardFeed::performDragDropChange(RootItem* target_item) {
|
bool StandardFeed::performDragDropChange(RootItem* target_item) {
|
||||||
StandardFeed* feed_new = new StandardFeed(*this);
|
auto* feed_new = new StandardFeed(*this);
|
||||||
|
|
||||||
feed_new->setParent(target_item);
|
feed_new->setParent(target_item);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ class StandardFeed : public Feed {
|
||||||
QList<Message> obtainNewMessages(bool* error_during_obtaining);
|
QList<Message> obtainNewMessages(bool* error_during_obtaining);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_passwordProtected;
|
bool m_passwordProtected{};
|
||||||
QString m_username;
|
QString m_username;
|
||||||
QString m_password;
|
QString m_password;
|
||||||
Type m_type;
|
Type m_type;
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray& result) {
|
||||||
}
|
}
|
||||||
|
|
||||||
case RootItemKind::Feed: {
|
case RootItemKind::Feed: {
|
||||||
StandardFeed* child_feed = static_cast<StandardFeed*>(child_item);
|
auto* child_feed = dynamic_cast<StandardFeed*>(child_item);
|
||||||
QDomElement outline_feed = opml_document.createElement("outline");
|
QDomElement outline_feed = opml_document.createElement("outline");
|
||||||
|
|
||||||
outline_feed.setAttribute(QSL("type"), QSL("rss"));
|
outline_feed.setAttribute(QSL("type"), QSL("rss"));
|
||||||
|
|
@ -145,7 +145,7 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m
|
||||||
}
|
}
|
||||||
|
|
||||||
int completed = 0, total = 0, succeded = 0, failed = 0;
|
int completed = 0, total = 0, succeded = 0, failed = 0;
|
||||||
StandardServiceRoot* root_item = new StandardServiceRoot();
|
auto* root_item = new StandardServiceRoot();
|
||||||
|
|
||||||
QStack<RootItem*> model_items;
|
QStack<RootItem*> model_items;
|
||||||
model_items.push(root_item);
|
model_items.push(root_item);
|
||||||
|
|
@ -188,7 +188,7 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m
|
||||||
QString feed_type = child_element.attribute(QSL("version"), DEFAULT_FEED_TYPE).toUpper();
|
QString feed_type = child_element.attribute(QSL("version"), DEFAULT_FEED_TYPE).toUpper();
|
||||||
QString feed_description = child_element.attribute(QSL("description"));
|
QString feed_description = child_element.attribute(QSL("description"));
|
||||||
QIcon feed_icon = qApp->icons()->fromByteArray(child_element.attribute(QSL("rssguard:icon")).toLocal8Bit());
|
QIcon feed_icon = qApp->icons()->fromByteArray(child_element.attribute(QSL("rssguard:icon")).toLocal8Bit());
|
||||||
StandardFeed* new_feed = new StandardFeed(active_model_item);
|
auto* new_feed = new StandardFeed(active_model_item);
|
||||||
|
|
||||||
new_feed->setTitle(feed_title);
|
new_feed->setTitle(feed_title);
|
||||||
new_feed->setDescription(feed_description);
|
new_feed->setDescription(feed_description);
|
||||||
|
|
@ -234,7 +234,7 @@ void FeedsImportExportModel::importAsOPML20(const QByteArray& data, bool fetch_m
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StandardCategory* new_category = new StandardCategory(active_model_item);
|
auto* new_category = new StandardCategory(active_model_item);
|
||||||
|
|
||||||
new_category->setTitle(category_title);
|
new_category->setTitle(category_title);
|
||||||
new_category->setIcon(category_icon);
|
new_category->setIcon(category_icon);
|
||||||
|
|
@ -275,7 +275,7 @@ void FeedsImportExportModel::importAsTxtURLPerLine(const QByteArray& data, bool
|
||||||
setRootItem(nullptr);
|
setRootItem(nullptr);
|
||||||
emit layoutChanged();
|
emit layoutChanged();
|
||||||
int completed = 0, succeded = 0, failed = 0;
|
int completed = 0, succeded = 0, failed = 0;
|
||||||
StandardServiceRoot* root_item = new StandardServiceRoot();
|
auto* root_item = new StandardServiceRoot();
|
||||||
|
|
||||||
QList<QByteArray> urls = data.split('\n');
|
QList<QByteArray> urls = data.split('\n');
|
||||||
|
|
||||||
|
|
@ -290,7 +290,7 @@ void FeedsImportExportModel::importAsTxtURLPerLine(const QByteArray& data, bool
|
||||||
succeded++;
|
succeded++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
StandardFeed* feed = new StandardFeed();
|
auto* feed = new StandardFeed();
|
||||||
|
|
||||||
feed->setUrl(url);
|
feed->setUrl(url);
|
||||||
feed->setTitle(url);
|
feed->setTitle(url);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ ServiceRoot* StandardServiceEntryPoint::createNewRoot() const {
|
||||||
int new_id = DatabaseQueries::createAccount(database, code(), &ok);
|
int new_id = DatabaseQueries::createAccount(database, code(), &ok);
|
||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
StandardServiceRoot* root = new StandardServiceRoot();
|
auto* root = new StandardServiceRoot();
|
||||||
|
|
||||||
root->setAccountId(new_id);
|
root->setAccountId(new_id);
|
||||||
return root;
|
return root;
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,7 @@
|
||||||
|
|
||||||
StandardServiceRoot::StandardServiceRoot(RootItem* parent)
|
StandardServiceRoot::StandardServiceRoot(RootItem* parent)
|
||||||
: ServiceRoot(parent),
|
: ServiceRoot(parent),
|
||||||
m_actionExportFeeds(nullptr), m_actionImportFeeds(nullptr), m_serviceMenu(QList<QAction*>()),
|
m_actionExportFeeds(nullptr), m_actionImportFeeds(nullptr), m_actionFeedFetchMetadata(nullptr) {
|
||||||
m_feedContextMenu(QList<QAction*>()), m_actionFeedFetchMetadata(nullptr) {
|
|
||||||
setTitle(qApp->system()->loggedInUser() + QSL(" (RSS/RDF/ATOM)"));
|
setTitle(qApp->system()->loggedInUser() + QSL(" (RSS/RDF/ATOM)"));
|
||||||
setIcon(StandardServiceEntryPoint().icon());
|
setIcon(StandardServiceEntryPoint().icon());
|
||||||
setDescription(tr("This is obligatory service account for standard RSS/RDF/ATOM feeds."));
|
setDescription(tr("This is obligatory service account for standard RSS/RDF/ATOM feeds."));
|
||||||
|
|
@ -204,8 +203,8 @@ bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_item->kind() == RootItemKind::Category) {
|
if (source_item->kind() == RootItemKind::Category) {
|
||||||
StandardCategory* source_category = static_cast<StandardCategory*>(source_item);
|
auto* source_category = dynamic_cast<StandardCategory*>(source_item);
|
||||||
StandardCategory* new_category = new StandardCategory(*source_category);
|
auto* new_category = new StandardCategory(*source_category);
|
||||||
QString new_category_title = new_category->title();
|
QString new_category_title = new_category->title();
|
||||||
|
|
||||||
// Add category to model.
|
// Add category to model.
|
||||||
|
|
@ -242,8 +241,8 @@ bool StandardServiceRoot::mergeImportExportModel(FeedsImportExportModel* model,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (source_item->kind() == RootItemKind::Feed) {
|
else if (source_item->kind() == RootItemKind::Feed) {
|
||||||
StandardFeed* source_feed = static_cast<StandardFeed*>(source_item);
|
auto* source_feed = dynamic_cast<StandardFeed*>(source_item);
|
||||||
StandardFeed* new_feed = new StandardFeed(*source_feed);
|
auto* new_feed = new StandardFeed(*source_feed);
|
||||||
|
|
||||||
// Append this feed and end this iteration.
|
// Append this feed and end this iteration.
|
||||||
if (new_feed->addItself(target_parent)) {
|
if (new_feed->addItself(target_parent)) {
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ FormEditTtRssAccount::FormEditTtRssAccount(QWidget* parent)
|
||||||
displayHttpPassword(false);
|
displayHttpPassword(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FormEditTtRssAccount::~FormEditTtRssAccount() {}
|
FormEditTtRssAccount::~FormEditTtRssAccount() = default;
|
||||||
|
|
||||||
TtRssServiceRoot* FormEditTtRssAccount::execForCreate() {
|
TtRssServiceRoot* FormEditTtRssAccount::execForCreate() {
|
||||||
setWindowTitle(tr("Add new Tiny Tiny RSS account"));
|
setWindowTitle(tr("Add new Tiny Tiny RSS account"));
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ FormTtRssFeedDetails::FormTtRssFeedDetails(ServiceRoot* service_root, QWidget* p
|
||||||
void FormTtRssFeedDetails::apply() {
|
void FormTtRssFeedDetails::apply() {
|
||||||
if (m_editableFeed != nullptr) {
|
if (m_editableFeed != nullptr) {
|
||||||
// User edited auto-update status. Save it.
|
// User edited auto-update status. Save it.
|
||||||
TtRssFeed* new_feed_data = new TtRssFeed();
|
auto* new_feed_data = new TtRssFeed();
|
||||||
|
|
||||||
new_feed_data->setAutoUpdateType(static_cast<Feed::AutoUpdateType>(m_ui->m_cmbAutoUpdateType->itemData(
|
new_feed_data->setAutoUpdateType(static_cast<Feed::AutoUpdateType>(m_ui->m_cmbAutoUpdateType->itemData(
|
||||||
m_ui->m_cmbAutoUpdateType->currentIndex()).toInt()));
|
m_ui->m_cmbAutoUpdateType->currentIndex()).toInt()));
|
||||||
|
|
@ -36,7 +36,7 @@ void FormTtRssFeedDetails::apply() {
|
||||||
else {
|
else {
|
||||||
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(
|
RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(
|
||||||
m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
||||||
TtRssServiceRoot* root = qobject_cast<TtRssServiceRoot*>(parent->getParentServiceRoot());
|
auto* root = qobject_cast<TtRssServiceRoot*>(parent->getParentServiceRoot());
|
||||||
const int category_id = parent->kind() == RootItemKind::ServiceRoot ?
|
const int category_id = parent->kind() == RootItemKind::ServiceRoot ?
|
||||||
0 :
|
0 :
|
||||||
parent->customId().toInt();
|
parent->customId().toInt();
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,8 @@
|
||||||
|
|
||||||
TtRssNetworkFactory::TtRssNetworkFactory()
|
TtRssNetworkFactory::TtRssNetworkFactory()
|
||||||
: m_bareUrl(QString()), m_fullUrl(QString()), m_username(QString()), m_password(QString()), m_forceServerSideUpdate(false),
|
: m_bareUrl(QString()), m_fullUrl(QString()), m_username(QString()), m_password(QString()), m_forceServerSideUpdate(false),
|
||||||
m_authIsUsed(false),
|
m_authIsUsed(false), m_authUsername(QString()), m_authPassword(QString()), m_sessionId(QString()),
|
||||||
m_authUsername(QString()), m_authPassword(QString()), m_sessionId(QString()),
|
m_lastError(QNetworkReply::NoError) {}
|
||||||
m_lastLoginTime(QDateTime()), m_lastError(QNetworkReply::NoError) {}
|
|
||||||
|
|
||||||
TtRssNetworkFactory::~TtRssNetworkFactory() {}
|
|
||||||
|
|
||||||
QString TtRssNetworkFactory::url() const {
|
QString TtRssNetworkFactory::url() const {
|
||||||
return m_bareUrl;
|
return m_bareUrl;
|
||||||
|
|
@ -404,8 +401,7 @@ TtRssResponse::TtRssResponse(const QString& raw_content) {
|
||||||
m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()).object();
|
m_rawContent = QJsonDocument::fromJson(raw_content.toUtf8()).object();
|
||||||
}
|
}
|
||||||
|
|
||||||
TtRssResponse::~TtRssResponse() {}
|
TtRssResponse::~TtRssResponse() = default;
|
||||||
|
|
||||||
bool TtRssResponse::isLoaded() const {
|
bool TtRssResponse::isLoaded() const {
|
||||||
return !m_rawContent.isEmpty();
|
return !m_rawContent.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
@ -438,8 +434,7 @@ QString TtRssResponse::toString() const {
|
||||||
|
|
||||||
TtRssLoginResponse::TtRssLoginResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssLoginResponse::TtRssLoginResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssLoginResponse::~TtRssLoginResponse() {}
|
TtRssLoginResponse::~TtRssLoginResponse() = default;
|
||||||
|
|
||||||
int TtRssLoginResponse::apiLevel() const {
|
int TtRssLoginResponse::apiLevel() const {
|
||||||
if (!isLoaded()) {
|
if (!isLoaded()) {
|
||||||
return TTRSS_CONTENT_NOT_LOADED;
|
return TTRSS_CONTENT_NOT_LOADED;
|
||||||
|
|
@ -478,10 +473,9 @@ bool TtRssResponse::hasError() const {
|
||||||
|
|
||||||
TtRssGetFeedsCategoriesResponse::TtRssGetFeedsCategoriesResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssGetFeedsCategoriesResponse::TtRssGetFeedsCategoriesResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssGetFeedsCategoriesResponse::~TtRssGetFeedsCategoriesResponse() {}
|
TtRssGetFeedsCategoriesResponse::~TtRssGetFeedsCategoriesResponse() = default;
|
||||||
|
|
||||||
RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QString base_address) const {
|
RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QString base_address) const {
|
||||||
RootItem* parent = new RootItem();
|
auto* parent = new RootItem();
|
||||||
|
|
||||||
// Chop the "api/" from the end of the address.
|
// Chop the "api/" from the end of the address.
|
||||||
base_address.chop(4);
|
base_address.chop(4);
|
||||||
|
|
@ -515,7 +509,7 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Category* category = new Category();
|
auto* category = new Category();
|
||||||
|
|
||||||
category->setTitle(item["name"].toString());
|
category->setTitle(item["name"].toString());
|
||||||
category->setCustomId(QString::number(item_id));
|
category->setCustomId(QString::number(item_id));
|
||||||
|
|
@ -530,7 +524,7 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// We have feed.
|
// We have feed.
|
||||||
TtRssFeed* feed = new TtRssFeed();
|
auto* feed = new TtRssFeed();
|
||||||
|
|
||||||
if (obtain_icons) {
|
if (obtain_icons) {
|
||||||
QString icon_path = item["icon"].type() == QJsonValue::String ? item["icon"].toString() : QString();
|
QString icon_path = item["icon"].type() == QJsonValue::String ? item["icon"].toString() : QString();
|
||||||
|
|
@ -565,7 +559,7 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS
|
||||||
|
|
||||||
TtRssGetHeadlinesResponse::TtRssGetHeadlinesResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssGetHeadlinesResponse::TtRssGetHeadlinesResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssGetHeadlinesResponse::~TtRssGetHeadlinesResponse() {}
|
TtRssGetHeadlinesResponse::~TtRssGetHeadlinesResponse() = default;
|
||||||
|
|
||||||
QList<Message> TtRssGetHeadlinesResponse::messages() const {
|
QList<Message> TtRssGetHeadlinesResponse::messages() const {
|
||||||
QList<Message> messages;
|
QList<Message> messages;
|
||||||
|
|
@ -580,8 +574,9 @@ QList<Message> TtRssGetHeadlinesResponse::messages() const {
|
||||||
message.m_contents = mapped["content"].toString();
|
message.m_contents = mapped["content"].toString();
|
||||||
|
|
||||||
// Multiply by 1000 because Tiny Tiny RSS API does not include miliseconds in Unix
|
// Multiply by 1000 because Tiny Tiny RSS API does not include miliseconds in Unix
|
||||||
// date/time number.
|
// date/time number.
|
||||||
const qint64 t = static_cast<qint64>(mapped["updated"].toDouble()) * 1000;
|
const qint64 t = static_cast<qint64>(mapped["updated"].toDouble()) * 1000;
|
||||||
|
|
||||||
message.m_created = TextFactory::parseDateTime(t);
|
message.m_created = TextFactory::parseDateTime(t);
|
||||||
message.m_createdFromFeed = true;
|
message.m_createdFromFeed = true;
|
||||||
message.m_customId = QString::number(mapped["id"].toInt());
|
message.m_customId = QString::number(mapped["id"].toInt());
|
||||||
|
|
@ -609,7 +604,7 @@ QList<Message> TtRssGetHeadlinesResponse::messages() const {
|
||||||
|
|
||||||
TtRssUpdateArticleResponse::TtRssUpdateArticleResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssUpdateArticleResponse::TtRssUpdateArticleResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssUpdateArticleResponse::~TtRssUpdateArticleResponse() {}
|
TtRssUpdateArticleResponse::~TtRssUpdateArticleResponse() = default;
|
||||||
|
|
||||||
QString TtRssUpdateArticleResponse::updateStatus() const {
|
QString TtRssUpdateArticleResponse::updateStatus() const {
|
||||||
if (m_rawContent.contains(QSL("content"))) {
|
if (m_rawContent.contains(QSL("content"))) {
|
||||||
|
|
@ -631,8 +626,7 @@ int TtRssUpdateArticleResponse::articlesUpdated() const {
|
||||||
|
|
||||||
TtRssSubscribeToFeedResponse::TtRssSubscribeToFeedResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssSubscribeToFeedResponse::TtRssSubscribeToFeedResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssSubscribeToFeedResponse::~TtRssSubscribeToFeedResponse() {}
|
TtRssSubscribeToFeedResponse::~TtRssSubscribeToFeedResponse() = default;
|
||||||
|
|
||||||
int TtRssSubscribeToFeedResponse::code() const {
|
int TtRssSubscribeToFeedResponse::code() const {
|
||||||
if (m_rawContent.contains(QSL("content"))) {
|
if (m_rawContent.contains(QSL("content"))) {
|
||||||
return m_rawContent["content"].toObject()["status"].toObject()["code"].toInt();
|
return m_rawContent["content"].toObject()["status"].toObject()["code"].toInt();
|
||||||
|
|
@ -644,8 +638,7 @@ int TtRssSubscribeToFeedResponse::code() const {
|
||||||
|
|
||||||
TtRssUnsubscribeFeedResponse::TtRssUnsubscribeFeedResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
TtRssUnsubscribeFeedResponse::TtRssUnsubscribeFeedResponse(const QString& raw_content) : TtRssResponse(raw_content) {}
|
||||||
|
|
||||||
TtRssUnsubscribeFeedResponse::~TtRssUnsubscribeFeedResponse() {}
|
TtRssUnsubscribeFeedResponse::~TtRssUnsubscribeFeedResponse() = default;
|
||||||
|
|
||||||
QString TtRssUnsubscribeFeedResponse::code() const {
|
QString TtRssUnsubscribeFeedResponse::code() const {
|
||||||
if (m_rawContent.contains(QSL("content"))) {
|
if (m_rawContent.contains(QSL("content"))) {
|
||||||
QJsonObject map = m_rawContent["content"].toObject();
|
QJsonObject map = m_rawContent["content"].toObject();
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ namespace UpdateArticle {
|
||||||
class TtRssNetworkFactory {
|
class TtRssNetworkFactory {
|
||||||
public:
|
public:
|
||||||
explicit TtRssNetworkFactory();
|
explicit TtRssNetworkFactory();
|
||||||
virtual ~TtRssNetworkFactory();
|
virtual ~TtRssNetworkFactory() = default;
|
||||||
|
|
||||||
QString url() const;
|
QString url() const;
|
||||||
void setUrl(const QString& url);
|
void setUrl(const QString& url);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ TtRssFeed::TtRssFeed(RootItem* parent)
|
||||||
|
|
||||||
TtRssFeed::TtRssFeed(const QSqlRecord& record) : Feed(record) {}
|
TtRssFeed::TtRssFeed(const QSqlRecord& record) : Feed(record) {}
|
||||||
|
|
||||||
TtRssFeed::~TtRssFeed() {}
|
TtRssFeed::~TtRssFeed() = default;
|
||||||
|
|
||||||
TtRssServiceRoot* TtRssFeed::serviceRoot() const {
|
TtRssServiceRoot* TtRssFeed::serviceRoot() const {
|
||||||
return qobject_cast<TtRssServiceRoot*>(getParentServiceRoot());
|
return qobject_cast<TtRssServiceRoot*>(getParentServiceRoot());
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,7 @@
|
||||||
#include <QSqlTableModel>
|
#include <QSqlTableModel>
|
||||||
|
|
||||||
TtRssServiceRoot::TtRssServiceRoot(RootItem* parent)
|
TtRssServiceRoot::TtRssServiceRoot(RootItem* parent)
|
||||||
: ServiceRoot(parent), CacheForServiceRoot(),
|
: ServiceRoot(parent), m_actionSyncIn(nullptr), m_network(new TtRssNetworkFactory()) {
|
||||||
m_actionSyncIn(nullptr), m_serviceMenu(QList<QAction*>()), m_network(new TtRssNetworkFactory()) {
|
|
||||||
setIcon(TtRssServiceEntryPoint().icon());
|
setIcon(TtRssServiceEntryPoint().icon());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue