Refactoring.
This commit is contained in:
parent
cad2fffa87
commit
070bb7a389
@ -21,5 +21,6 @@
|
||||
--close-templates
|
||||
--max-code-length=140
|
||||
--lineend=linux
|
||||
--delete-empty-lines
|
||||
-t -p
|
||||
-M60Ucv
|
@ -55,7 +55,6 @@ void FeedDownloader::updateAvailableFeeds() {
|
||||
m_feeds.removeFirst();
|
||||
m_feedsUpdating++;
|
||||
}
|
||||
|
||||
else {
|
||||
// We want to start update of some feeds but all working threads are occupied.
|
||||
break;
|
||||
@ -70,7 +69,6 @@ void FeedDownloader::updateFeeds(const QList<Feed*>& feeds) {
|
||||
qDebug("No feeds to update in worker thread, aborting update.");
|
||||
finalizeUpdate();
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug().nospace() << "Starting feed updates from worker in thread: \'" << QThread::currentThreadId() << "\'.";
|
||||
m_feeds = feeds;
|
||||
|
@ -39,506 +39,496 @@
|
||||
|
||||
|
||||
FeedsModel::FeedsModel(QObject* parent) : QAbstractItemModel(parent) {
|
||||
setObjectName(QSL("FeedsModel"));
|
||||
// Create root item.
|
||||
m_rootItem = new RootItem();
|
||||
//: Name of root item of feed list which can be seen in feed add/edit dialog.
|
||||
m_rootItem->setTitle(tr("Root"));
|
||||
m_rootItem->setIcon(qApp->icons()->fromTheme(QSL("folder")));
|
||||
// Setup icons.
|
||||
m_countsIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread"));
|
||||
//: Title text in the feed list header.
|
||||
m_headerData << tr("Title");
|
||||
m_tooltipData << /*: Feed list header "titles" column tooltip.*/ tr("Titles of feeds/categories.") <<
|
||||
/*: Feed list header "counts" column tooltip.*/ tr("Counts of unread/all mesages.");
|
||||
setObjectName(QSL("FeedsModel"));
|
||||
// Create root item.
|
||||
m_rootItem = new RootItem();
|
||||
//: Name of root item of feed list which can be seen in feed add/edit dialog.
|
||||
m_rootItem->setTitle(tr("Root"));
|
||||
m_rootItem->setIcon(qApp->icons()->fromTheme(QSL("folder")));
|
||||
// Setup icons.
|
||||
m_countsIcon = qApp->icons()->fromTheme(QSL("mail-mark-unread"));
|
||||
//: Title text in the feed list header.
|
||||
m_headerData << tr("Title");
|
||||
m_tooltipData << /*: Feed list header "titles" column tooltip.*/ tr("Titles of feeds/categories.") <<
|
||||
/*: Feed list header "counts" column tooltip.*/ tr("Counts of unread/all mesages.");
|
||||
}
|
||||
|
||||
FeedsModel::~FeedsModel() {
|
||||
qDebug("Destroying FeedsModel instance.");
|
||||
// Delete all model items.
|
||||
delete m_rootItem;
|
||||
qDebug("Destroying FeedsModel instance.");
|
||||
// Delete all model items.
|
||||
delete m_rootItem;
|
||||
}
|
||||
|
||||
QMimeData* FeedsModel::mimeData(const QModelIndexList& indexes) const {
|
||||
QMimeData* mime_data = new QMimeData();
|
||||
QByteArray encoded_data;
|
||||
QDataStream stream(&encoded_data, QIODevice::WriteOnly);
|
||||
QMimeData* mime_data = new QMimeData();
|
||||
QByteArray encoded_data;
|
||||
QDataStream stream(&encoded_data, QIODevice::WriteOnly);
|
||||
|
||||
foreach (const QModelIndex& index, indexes) {
|
||||
if (index.column() != 0) {
|
||||
continue;
|
||||
}
|
||||
foreach (const QModelIndex& index, indexes) {
|
||||
if (index.column() != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RootItem* item_for_index = itemForIndex(index);
|
||||
RootItem* item_for_index = itemForIndex(index);
|
||||
|
||||
if (item_for_index->kind() != RootItemKind::Root) {
|
||||
stream << (quintptr) item_for_index;
|
||||
}
|
||||
}
|
||||
if (item_for_index->kind() != RootItemKind::Root) {
|
||||
stream << (quintptr) item_for_index;
|
||||
}
|
||||
}
|
||||
|
||||
mime_data->setData(QSL(MIME_TYPE_ITEM_POINTER), encoded_data);
|
||||
return mime_data;
|
||||
mime_data->setData(QSL(MIME_TYPE_ITEM_POINTER), encoded_data);
|
||||
return mime_data;
|
||||
}
|
||||
|
||||
QStringList FeedsModel::mimeTypes() const {
|
||||
return QStringList() << QSL(MIME_TYPE_ITEM_POINTER);
|
||||
return QStringList() << QSL(MIME_TYPE_ITEM_POINTER);
|
||||
}
|
||||
|
||||
bool FeedsModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) {
|
||||
Q_UNUSED(row)
|
||||
Q_UNUSED(column)
|
||||
Q_UNUSED(row)
|
||||
Q_UNUSED(column)
|
||||
|
||||
if (action == Qt::IgnoreAction) {
|
||||
return true;
|
||||
}
|
||||
if (action == Qt::IgnoreAction) {
|
||||
return true;
|
||||
}
|
||||
else if (action != Qt::MoveAction) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else if (action != Qt::MoveAction) {
|
||||
return false;
|
||||
}
|
||||
QByteArray dragged_items_data = data->data(QSL(MIME_TYPE_ITEM_POINTER));
|
||||
|
||||
QByteArray dragged_items_data = data->data(QSL(MIME_TYPE_ITEM_POINTER));
|
||||
if (dragged_items_data.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
QDataStream stream(&dragged_items_data, QIODevice::ReadOnly);
|
||||
|
||||
if (dragged_items_data.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
while (!stream.atEnd()) {
|
||||
quintptr pointer_to_item;
|
||||
stream >> pointer_to_item;
|
||||
// We have item we want to drag, we also determine the target item.
|
||||
RootItem* dragged_item = (RootItem*) pointer_to_item;
|
||||
RootItem* target_item = itemForIndex(parent);
|
||||
ServiceRoot* dragged_item_root = dragged_item->getParentServiceRoot();
|
||||
ServiceRoot* target_item_root = target_item->getParentServiceRoot();
|
||||
|
||||
else {
|
||||
QDataStream stream(&dragged_items_data, QIODevice::ReadOnly);
|
||||
if (dragged_item == target_item || dragged_item->parent() == target_item) {
|
||||
qDebug("Dragged item is equal to target item or its parent is equal to target item. Cancelling drag-drop action.");
|
||||
return false;
|
||||
}
|
||||
|
||||
while (!stream.atEnd()) {
|
||||
quintptr pointer_to_item;
|
||||
stream >> pointer_to_item;
|
||||
// We have item we want to drag, we also determine the target item.
|
||||
RootItem* dragged_item = (RootItem*) pointer_to_item;
|
||||
RootItem* target_item = itemForIndex(parent);
|
||||
ServiceRoot* dragged_item_root = dragged_item->getParentServiceRoot();
|
||||
ServiceRoot* target_item_root = target_item->getParentServiceRoot();
|
||||
if (dragged_item_root != target_item_root) {
|
||||
// Transferring of items between different accounts is not possible.
|
||||
qApp->showGuiMessage(tr("Cannot perform drag & drop operation"),
|
||||
tr("You can't transfer dragged item into different account, this is not supported."),
|
||||
QSystemTrayIcon::Warning,
|
||||
qApp->mainFormWidget(),
|
||||
true);
|
||||
qDebug("Dragged item cannot be dragged into different account. Cancelling drag-drop action.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dragged_item == target_item || dragged_item->parent() == target_item) {
|
||||
qDebug("Dragged item is equal to target item or its parent is equal to target item. Cancelling drag-drop action.");
|
||||
return false;
|
||||
}
|
||||
if (dragged_item->performDragDropChange(target_item)) {
|
||||
// Drag & drop is supported by the dragged item and was
|
||||
// completed on data level and in item hierarchy.
|
||||
emit requireItemValidationAfterDragDrop(indexForItem(dragged_item));
|
||||
}
|
||||
}
|
||||
|
||||
if (dragged_item_root != target_item_root) {
|
||||
// Transferring of items between different accounts is not possible.
|
||||
qApp->showGuiMessage(tr("Cannot perform drag & drop operation"),
|
||||
tr("You can't transfer dragged item into different account, this is not supported."),
|
||||
QSystemTrayIcon::Warning,
|
||||
qApp->mainFormWidget(),
|
||||
true);
|
||||
qDebug("Dragged item cannot be dragged into different account. Cancelling drag-drop action.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dragged_item->performDragDropChange(target_item)) {
|
||||
// Drag & drop is supported by the dragged item and was
|
||||
// completed on data level and in item hierarchy.
|
||||
emit requireItemValidationAfterDragDrop(indexForItem(dragged_item));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
Qt::DropActions FeedsModel::supportedDropActions() const {
|
||||
return Qt::MoveAction;
|
||||
return Qt::MoveAction;
|
||||
}
|
||||
|
||||
Qt::ItemFlags FeedsModel::flags(const QModelIndex& index) const {
|
||||
Qt::ItemFlags base_flags = QAbstractItemModel::flags(index);
|
||||
const RootItem* item_for_index = itemForIndex(index);
|
||||
Qt::ItemFlags additional_flags = item_for_index->additionalFlags();
|
||||
return base_flags | additional_flags;
|
||||
Qt::ItemFlags base_flags = QAbstractItemModel::flags(index);
|
||||
const RootItem* item_for_index = itemForIndex(index);
|
||||
Qt::ItemFlags additional_flags = item_for_index->additionalFlags();
|
||||
return base_flags | additional_flags;
|
||||
}
|
||||
|
||||
QVariant FeedsModel::headerData(int section, Qt::Orientation orientation, int role) const {
|
||||
if (orientation != Qt::Horizontal) {
|
||||
return QVariant();
|
||||
}
|
||||
if (orientation != Qt::Horizontal) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
if (section == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_headerData.at(FDS_MODEL_TITLE_INDEX);
|
||||
}
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
if (section == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_headerData.at(FDS_MODEL_TITLE_INDEX);
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
case Qt::ToolTipRole:
|
||||
return m_tooltipData.at(section);
|
||||
|
||||
case Qt::ToolTipRole:
|
||||
return m_tooltipData.at(section);
|
||||
case Qt::DecorationRole:
|
||||
if (section == FDS_MODEL_COUNTS_INDEX) {
|
||||
return m_countsIcon;
|
||||
}
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
case Qt::DecorationRole:
|
||||
if (section == FDS_MODEL_COUNTS_INDEX) {
|
||||
return m_countsIcon;
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
|
||||
QModelIndex FeedsModel::index(int row, int column, const QModelIndex& parent) const {
|
||||
if (!hasIndex(row, column, parent)) {
|
||||
return QModelIndex();
|
||||
}
|
||||
if (!hasIndex(row, column, parent)) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
RootItem* parent_item = itemForIndex(parent);
|
||||
RootItem* child_item = parent_item->child(row);
|
||||
RootItem* parent_item = itemForIndex(parent);
|
||||
RootItem* child_item = parent_item->child(row);
|
||||
|
||||
if (child_item) {
|
||||
return createIndex(row, column, child_item);
|
||||
}
|
||||
|
||||
else {
|
||||
return QModelIndex();
|
||||
}
|
||||
if (child_item) {
|
||||
return createIndex(row, column, child_item);
|
||||
}
|
||||
else {
|
||||
return QModelIndex();
|
||||
}
|
||||
}
|
||||
|
||||
QModelIndex FeedsModel::parent(const QModelIndex& child) const {
|
||||
if (!child.isValid()) {
|
||||
return QModelIndex();
|
||||
}
|
||||
if (!child.isValid()) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
RootItem* child_item = itemForIndex(child);
|
||||
RootItem* parent_item = child_item->parent();
|
||||
RootItem* child_item = itemForIndex(child);
|
||||
RootItem* parent_item = child_item->parent();
|
||||
|
||||
if (parent_item == m_rootItem) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
else {
|
||||
return createIndex(parent_item->row(), 0, parent_item);
|
||||
}
|
||||
if (parent_item == m_rootItem) {
|
||||
return QModelIndex();
|
||||
}
|
||||
else {
|
||||
return createIndex(parent_item->row(), 0, parent_item);
|
||||
}
|
||||
}
|
||||
|
||||
int FeedsModel::rowCount(const QModelIndex& parent) const {
|
||||
if (parent.column() > 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
else {
|
||||
return itemForIndex(parent)->childCount();
|
||||
}
|
||||
if (parent.column() > 0) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return itemForIndex(parent)->childCount();
|
||||
}
|
||||
}
|
||||
|
||||
int FeedsModel::countOfAllMessages() const {
|
||||
return m_rootItem->countOfAllMessages();
|
||||
return m_rootItem->countOfAllMessages();
|
||||
}
|
||||
|
||||
int FeedsModel::countOfUnreadMessages() const {
|
||||
return m_rootItem->countOfUnreadMessages();
|
||||
return m_rootItem->countOfUnreadMessages();
|
||||
}
|
||||
|
||||
void FeedsModel::reloadCountsOfWholeModel() {
|
||||
m_rootItem->updateCounts(true);
|
||||
reloadWholeLayout();
|
||||
notifyWithCounts();
|
||||
m_rootItem->updateCounts(true);
|
||||
reloadWholeLayout();
|
||||
notifyWithCounts();
|
||||
}
|
||||
|
||||
void FeedsModel::removeItem(const QModelIndex& index) {
|
||||
if (index.isValid()) {
|
||||
RootItem* deleting_item = itemForIndex(index);
|
||||
QModelIndex parent_index = index.parent();
|
||||
RootItem* parent_item = deleting_item->parent();
|
||||
beginRemoveRows(parent_index, index.row(), index.row());
|
||||
parent_item->removeChild(deleting_item);
|
||||
endRemoveRows();
|
||||
deleting_item->deleteLater();
|
||||
notifyWithCounts();
|
||||
}
|
||||
if (index.isValid()) {
|
||||
RootItem* deleting_item = itemForIndex(index);
|
||||
QModelIndex parent_index = index.parent();
|
||||
RootItem* parent_item = deleting_item->parent();
|
||||
beginRemoveRows(parent_index, index.row(), index.row());
|
||||
parent_item->removeChild(deleting_item);
|
||||
endRemoveRows();
|
||||
deleting_item->deleteLater();
|
||||
notifyWithCounts();
|
||||
}
|
||||
}
|
||||
|
||||
void FeedsModel::removeItem(RootItem* deleting_item) {
|
||||
if (deleting_item != nullptr) {
|
||||
QModelIndex index = indexForItem(deleting_item);
|
||||
QModelIndex parent_index = index.parent();
|
||||
RootItem* parent_item = deleting_item->parent();
|
||||
beginRemoveRows(parent_index, index.row(), index.row());
|
||||
parent_item->removeChild(deleting_item);
|
||||
endRemoveRows();
|
||||
deleting_item->deleteLater();
|
||||
notifyWithCounts();
|
||||
}
|
||||
if (deleting_item != nullptr) {
|
||||
QModelIndex index = indexForItem(deleting_item);
|
||||
QModelIndex parent_index = index.parent();
|
||||
RootItem* parent_item = deleting_item->parent();
|
||||
beginRemoveRows(parent_index, index.row(), index.row());
|
||||
parent_item->removeChild(deleting_item);
|
||||
endRemoveRows();
|
||||
deleting_item->deleteLater();
|
||||
notifyWithCounts();
|
||||
}
|
||||
}
|
||||
|
||||
void FeedsModel::reassignNodeToNewParent(RootItem* original_node, RootItem* new_parent) {
|
||||
RootItem* original_parent = original_node->parent();
|
||||
RootItem* original_parent = original_node->parent();
|
||||
|
||||
if (original_parent != new_parent) {
|
||||
if (original_parent != nullptr) {
|
||||
int original_index_of_item = original_parent->childItems().indexOf(original_node);
|
||||
if (original_parent != new_parent) {
|
||||
if (original_parent != nullptr) {
|
||||
int original_index_of_item = original_parent->childItems().indexOf(original_node);
|
||||
|
||||
if (original_index_of_item >= 0) {
|
||||
// Remove the original item from the model...
|
||||
beginRemoveRows(indexForItem(original_parent), original_index_of_item, original_index_of_item);
|
||||
original_parent->removeChild(original_node);
|
||||
endRemoveRows();
|
||||
}
|
||||
}
|
||||
if (original_index_of_item >= 0) {
|
||||
// Remove the original item from the model...
|
||||
beginRemoveRows(indexForItem(original_parent), original_index_of_item, original_index_of_item);
|
||||
original_parent->removeChild(original_node);
|
||||
endRemoveRows();
|
||||
}
|
||||
}
|
||||
|
||||
int new_index_of_item = new_parent->childCount();
|
||||
// ... and insert it under the new parent.
|
||||
beginInsertRows(indexForItem(new_parent), new_index_of_item, new_index_of_item);
|
||||
new_parent->appendChild(original_node);
|
||||
endInsertRows();
|
||||
}
|
||||
int new_index_of_item = new_parent->childCount();
|
||||
// ... and insert it under the new parent.
|
||||
beginInsertRows(indexForItem(new_parent), new_index_of_item, new_index_of_item);
|
||||
new_parent->appendChild(original_node);
|
||||
endInsertRows();
|
||||
}
|
||||
}
|
||||
|
||||
QList<ServiceRoot*> FeedsModel::serviceRoots() const {
|
||||
QList<ServiceRoot*> roots;
|
||||
QList<ServiceRoot*> roots;
|
||||
|
||||
foreach (RootItem* root, m_rootItem->childItems()) {
|
||||
if (root->kind() == RootItemKind::ServiceRoot) {
|
||||
roots.append(root->toServiceRoot());
|
||||
}
|
||||
}
|
||||
foreach (RootItem* root, m_rootItem->childItems()) {
|
||||
if (root->kind() == RootItemKind::ServiceRoot) {
|
||||
roots.append(root->toServiceRoot());
|
||||
}
|
||||
}
|
||||
|
||||
return roots;
|
||||
return roots;
|
||||
}
|
||||
|
||||
bool FeedsModel::containsServiceRootFromEntryPoint(const ServiceEntryPoint* point) const {
|
||||
foreach (const ServiceRoot* root, serviceRoots()) {
|
||||
if (root->code() == point->code()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
foreach (const ServiceRoot* root, serviceRoots()) {
|
||||
if (root->code() == point->code()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
StandardServiceRoot* FeedsModel::standardServiceRoot() const {
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
StandardServiceRoot* std_service_root;
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
StandardServiceRoot* std_service_root;
|
||||
|
||||
if ((std_service_root = dynamic_cast<StandardServiceRoot*>(root)) != nullptr) {
|
||||
return std_service_root;
|
||||
}
|
||||
}
|
||||
if ((std_service_root = dynamic_cast<StandardServiceRoot*>(root)) != nullptr) {
|
||||
return std_service_root;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QList<Feed*> FeedsModel::feedsForScheduledUpdate(bool auto_update_now) {
|
||||
QList<Feed*> feeds_for_update;
|
||||
QList<Feed*> feeds_for_update;
|
||||
|
||||
foreach (Feed* feed, m_rootItem->getSubTreeFeeds()) {
|
||||
switch (feed->autoUpdateType()) {
|
||||
case Feed::DontAutoUpdate:
|
||||
// Do not auto-update this feed ever.
|
||||
continue;
|
||||
foreach (Feed* feed, m_rootItem->getSubTreeFeeds()) {
|
||||
switch (feed->autoUpdateType()) {
|
||||
case Feed::DontAutoUpdate:
|
||||
// Do not auto-update this feed ever.
|
||||
continue;
|
||||
|
||||
case Feed::DefaultAutoUpdate:
|
||||
if (auto_update_now) {
|
||||
feeds_for_update.append(feed);
|
||||
}
|
||||
case Feed::DefaultAutoUpdate:
|
||||
if (auto_update_now) {
|
||||
feeds_for_update.append(feed);
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
|
||||
case Feed::SpecificAutoUpdate:
|
||||
default:
|
||||
int remaining_interval = feed->autoUpdateRemainingInterval();
|
||||
case Feed::SpecificAutoUpdate:
|
||||
default:
|
||||
int remaining_interval = feed->autoUpdateRemainingInterval();
|
||||
|
||||
if (--remaining_interval <= 0) {
|
||||
// Interval of this feed passed, include this feed in the output list
|
||||
// and reset the interval.
|
||||
feeds_for_update.append(feed);
|
||||
feed->setAutoUpdateRemainingInterval(feed->autoUpdateInitialInterval());
|
||||
}
|
||||
if (--remaining_interval <= 0) {
|
||||
// Interval of this feed passed, include this feed in the output list
|
||||
// and reset the interval.
|
||||
feeds_for_update.append(feed);
|
||||
feed->setAutoUpdateRemainingInterval(feed->autoUpdateInitialInterval());
|
||||
}
|
||||
else {
|
||||
// Interval did not pass, set new decremented interval and do NOT
|
||||
// include this feed in the output list.
|
||||
feed->setAutoUpdateRemainingInterval(remaining_interval);
|
||||
}
|
||||
|
||||
else {
|
||||
// Interval did not pass, set new decremented interval and do NOT
|
||||
// include this feed in the output list.
|
||||
feed->setAutoUpdateRemainingInterval(remaining_interval);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return feeds_for_update;
|
||||
return feeds_for_update;
|
||||
}
|
||||
|
||||
QList<Message> FeedsModel::messagesForItem(RootItem* item) const {
|
||||
return item->undeletedMessages();
|
||||
return item->undeletedMessages();
|
||||
}
|
||||
|
||||
int FeedsModel::columnCount(const QModelIndex& parent) const {
|
||||
Q_UNUSED(parent)
|
||||
return FEEDS_VIEW_COLUMN_COUNT;
|
||||
Q_UNUSED(parent)
|
||||
return FEEDS_VIEW_COLUMN_COUNT;
|
||||
}
|
||||
|
||||
RootItem* FeedsModel::itemForIndex(const QModelIndex& index) const {
|
||||
if (index.isValid() && index.model() == this) {
|
||||
return static_cast<RootItem*>(index.internalPointer());
|
||||
}
|
||||
|
||||
else {
|
||||
return m_rootItem;
|
||||
}
|
||||
if (index.isValid() && index.model() == this) {
|
||||
return static_cast<RootItem*>(index.internalPointer());
|
||||
}
|
||||
else {
|
||||
return m_rootItem;
|
||||
}
|
||||
}
|
||||
|
||||
QModelIndex FeedsModel::indexForItem(const RootItem* item) const {
|
||||
if (item == nullptr || item->kind() == RootItemKind::Root) {
|
||||
// Root item lies on invalid index.
|
||||
return QModelIndex();
|
||||
}
|
||||
if (item == nullptr || item->kind() == RootItemKind::Root) {
|
||||
// Root item lies on invalid index.
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
QStack<const RootItem*> chain;
|
||||
QStack<const RootItem*> chain;
|
||||
|
||||
while (item->kind() != RootItemKind::Root) {
|
||||
chain.push(item);
|
||||
item = item->parent();
|
||||
}
|
||||
while (item->kind() != RootItemKind::Root) {
|
||||
chain.push(item);
|
||||
item = item->parent();
|
||||
}
|
||||
|
||||
// Now, we have complete chain list: parent --- ..... --- parent --- leaf (item).
|
||||
QModelIndex target_index = indexForItem(m_rootItem);
|
||||
// Now, we have complete chain list: parent --- ..... --- parent --- leaf (item).
|
||||
QModelIndex target_index = indexForItem(m_rootItem);
|
||||
|
||||
// We go through the stack and create our target index.
|
||||
while (!chain.isEmpty()) {
|
||||
const RootItem* parent_item = chain.pop();
|
||||
target_index = index(parent_item->parent()->childItems().indexOf(const_cast<RootItem* const>(parent_item)), 0, target_index);
|
||||
}
|
||||
// We go through the stack and create our target index.
|
||||
while (!chain.isEmpty()) {
|
||||
const RootItem* parent_item = chain.pop();
|
||||
target_index = index(parent_item->parent()->childItems().indexOf(const_cast<RootItem* const>(parent_item)), 0, target_index);
|
||||
}
|
||||
|
||||
return target_index;
|
||||
return target_index;
|
||||
}
|
||||
|
||||
bool FeedsModel::hasAnyFeedNewMessages() const {
|
||||
foreach (const Feed* feed, m_rootItem->getSubTreeFeeds()) {
|
||||
if (feed->status() == Feed::NewMessages) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
foreach (const Feed* feed, m_rootItem->getSubTreeFeeds()) {
|
||||
if (feed->status() == Feed::NewMessages) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
RootItem* FeedsModel::rootItem() const {
|
||||
return m_rootItem;
|
||||
return m_rootItem;
|
||||
}
|
||||
|
||||
void FeedsModel::reloadChangedLayout(QModelIndexList list) {
|
||||
while (!list.isEmpty()) {
|
||||
QModelIndex indx = list.takeFirst();
|
||||
while (!list.isEmpty()) {
|
||||
QModelIndex indx = list.takeFirst();
|
||||
|
||||
if (indx.isValid()) {
|
||||
QModelIndex indx_parent = indx.parent();
|
||||
// Underlying data are changed.
|
||||
emit dataChanged(index(indx.row(), 0, indx_parent), index(indx.row(), FDS_MODEL_COUNTS_INDEX, indx_parent));
|
||||
list.append(indx_parent);
|
||||
}
|
||||
}
|
||||
if (indx.isValid()) {
|
||||
QModelIndex indx_parent = indx.parent();
|
||||
// Underlying data are changed.
|
||||
emit dataChanged(index(indx.row(), 0, indx_parent), index(indx.row(), FDS_MODEL_COUNTS_INDEX, indx_parent));
|
||||
list.append(indx_parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FeedsModel::reloadChangedItem(RootItem* item) {
|
||||
QModelIndex index_item = indexForItem(item);
|
||||
reloadChangedLayout(QModelIndexList() << index_item);
|
||||
QModelIndex index_item = indexForItem(item);
|
||||
reloadChangedLayout(QModelIndexList() << index_item);
|
||||
}
|
||||
|
||||
void FeedsModel::notifyWithCounts() {
|
||||
emit messageCountsChanged(countOfUnreadMessages(), hasAnyFeedNewMessages());
|
||||
emit messageCountsChanged(countOfUnreadMessages(), hasAnyFeedNewMessages());
|
||||
}
|
||||
|
||||
void FeedsModel::onItemDataChanged(const QList<RootItem*>& items) {
|
||||
if (items.size() > RELOAD_MODEL_BORDER_NUM) {
|
||||
qDebug("There is request to reload feed model for more than %d items, reloading model fully.", RELOAD_MODEL_BORDER_NUM);
|
||||
reloadWholeLayout();
|
||||
}
|
||||
if (items.size() > RELOAD_MODEL_BORDER_NUM) {
|
||||
qDebug("There is request to reload feed model for more than %d items, reloading model fully.", RELOAD_MODEL_BORDER_NUM);
|
||||
reloadWholeLayout();
|
||||
}
|
||||
else {
|
||||
qDebug("There is request to reload feed model, reloading the %d items individually.", items.size());
|
||||
|
||||
else {
|
||||
qDebug("There is request to reload feed model, reloading the %d items individually.", items.size());
|
||||
foreach (RootItem* item, items) {
|
||||
reloadChangedItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (RootItem* item, items) {
|
||||
reloadChangedItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
notifyWithCounts();
|
||||
notifyWithCounts();
|
||||
}
|
||||
|
||||
void FeedsModel::reloadWholeLayout() {
|
||||
emit layoutAboutToBeChanged();
|
||||
emit layoutChanged();
|
||||
emit layoutAboutToBeChanged();
|
||||
emit layoutChanged();
|
||||
}
|
||||
|
||||
bool FeedsModel::addServiceAccount(ServiceRoot* root, bool freshly_activated) {
|
||||
int new_row_index = m_rootItem->childCount();
|
||||
beginInsertRows(indexForItem(m_rootItem), new_row_index, new_row_index);
|
||||
m_rootItem->appendChild(root);
|
||||
endInsertRows();
|
||||
// Connect.
|
||||
connect(root, &ServiceRoot::itemRemovalRequested, this, static_cast<void (FeedsModel::*)(RootItem*)>(&FeedsModel::removeItem));
|
||||
connect(root, &ServiceRoot::itemReassignmentRequested, this, &FeedsModel::reassignNodeToNewParent);
|
||||
connect(root, &ServiceRoot::dataChanged, this, &FeedsModel::onItemDataChanged);
|
||||
connect(root, &ServiceRoot::reloadMessageListRequested, this, &FeedsModel::reloadMessageListRequested);
|
||||
connect(root, &ServiceRoot::itemExpandRequested, this, &FeedsModel::itemExpandRequested);
|
||||
connect(root, &ServiceRoot::itemExpandStateSaveRequested, this, &FeedsModel::itemExpandStateSaveRequested);
|
||||
root->start(freshly_activated);
|
||||
return true;
|
||||
int new_row_index = m_rootItem->childCount();
|
||||
beginInsertRows(indexForItem(m_rootItem), new_row_index, new_row_index);
|
||||
m_rootItem->appendChild(root);
|
||||
endInsertRows();
|
||||
// Connect.
|
||||
connect(root, &ServiceRoot::itemRemovalRequested, this, static_cast<void (FeedsModel::*)(RootItem*)>(&FeedsModel::removeItem));
|
||||
connect(root, &ServiceRoot::itemReassignmentRequested, this, &FeedsModel::reassignNodeToNewParent);
|
||||
connect(root, &ServiceRoot::dataChanged, this, &FeedsModel::onItemDataChanged);
|
||||
connect(root, &ServiceRoot::reloadMessageListRequested, this, &FeedsModel::reloadMessageListRequested);
|
||||
connect(root, &ServiceRoot::itemExpandRequested, this, &FeedsModel::itemExpandRequested);
|
||||
connect(root, &ServiceRoot::itemExpandStateSaveRequested, this, &FeedsModel::itemExpandStateSaveRequested);
|
||||
root->start(freshly_activated);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FeedsModel::restoreAllBins() {
|
||||
bool result = true;
|
||||
bool result = true;
|
||||
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
RecycleBin* bin_of_root = root->recycleBin();
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
RecycleBin* bin_of_root = root->recycleBin();
|
||||
|
||||
if (bin_of_root != nullptr) {
|
||||
result &= bin_of_root->restore();
|
||||
}
|
||||
}
|
||||
if (bin_of_root != nullptr) {
|
||||
result &= bin_of_root->restore();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool FeedsModel::emptyAllBins() {
|
||||
bool result = true;
|
||||
bool result = true;
|
||||
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
RecycleBin* bin_of_root = root->recycleBin();
|
||||
foreach (ServiceRoot* root, serviceRoots()) {
|
||||
RecycleBin* bin_of_root = root->recycleBin();
|
||||
|
||||
if (bin_of_root != nullptr) {
|
||||
result &= bin_of_root->empty();
|
||||
}
|
||||
}
|
||||
if (bin_of_root != nullptr) {
|
||||
result &= bin_of_root->empty();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
void FeedsModel::loadActivatedServiceAccounts() {
|
||||
// Iterate all globally available feed "service plugins".
|
||||
foreach (const ServiceEntryPoint* entry_point, qApp->feedReader()->feedServices()) {
|
||||
// Load all stored root nodes from the entry point and add those to the model.
|
||||
QList<ServiceRoot*> roots = entry_point->initializeSubtree();
|
||||
// Iterate all globally available feed "service plugins".
|
||||
foreach (const ServiceEntryPoint* entry_point, qApp->feedReader()->feedServices()) {
|
||||
// Load all stored root nodes from the entry point and add those to the model.
|
||||
QList<ServiceRoot*> roots = entry_point->initializeSubtree();
|
||||
|
||||
foreach (ServiceRoot* root, roots) {
|
||||
addServiceAccount(root, false);
|
||||
}
|
||||
}
|
||||
foreach (ServiceRoot* root, roots) {
|
||||
addServiceAccount(root, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FeedsModel::stopServiceAccounts() {
|
||||
foreach (ServiceRoot* account, serviceRoots()) {
|
||||
account->stop();
|
||||
}
|
||||
foreach (ServiceRoot* account, serviceRoots()) {
|
||||
account->stop();
|
||||
}
|
||||
}
|
||||
|
||||
QList<Feed*> FeedsModel::feedsForIndex(const QModelIndex& index) const {
|
||||
return itemForIndex(index)->getSubTreeFeeds();
|
||||
return itemForIndex(index)->getSubTreeFeeds();
|
||||
}
|
||||
|
||||
bool FeedsModel::markItemRead(RootItem* item, RootItem::ReadStatus read) {
|
||||
return item->markAsReadUnread(read);
|
||||
return item->markAsReadUnread(read);
|
||||
}
|
||||
|
||||
bool FeedsModel::markItemCleared(RootItem* item, bool clean_read_only) {
|
||||
return item->cleanMessages(clean_read_only);
|
||||
return item->cleanMessages(clean_read_only);
|
||||
}
|
||||
|
@ -71,7 +71,6 @@ QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const
|
||||
result.append(idx);
|
||||
}
|
||||
}
|
||||
|
||||
// QString based matching.
|
||||
else {
|
||||
if (entered_text.isEmpty()) {
|
||||
@ -157,28 +156,23 @@ bool FeedsProxyModel::lessThan(const QModelIndex& left, const QModelIndex& right
|
||||
// User wants to sort according to counts.
|
||||
return left_item->countOfUnreadMessages() < right_item->countOfUnreadMessages();
|
||||
}
|
||||
|
||||
else {
|
||||
// In other cases, sort by title.
|
||||
return QString::localeAwareCompare(left_item->title(), right_item->title()) < 0;
|
||||
}
|
||||
}
|
||||
|
||||
else if (left_item->kind() == RootItemKind::Bin) {
|
||||
// Left item is recycle bin. Make sure it is "biggest" item if we have selected ascending order.
|
||||
return sortOrder() == Qt::DescendingOrder;
|
||||
}
|
||||
|
||||
else if (right_item->kind() == RootItemKind::Bin) {
|
||||
// Right item is recycle bin. Make sure it is "smallest" item if we have selected descending order.
|
||||
return sortOrder() == Qt::AscendingOrder;
|
||||
}
|
||||
|
||||
else if (left_item->kind() == RootItemKind::Feed) {
|
||||
// Left item is feed, right item is category.
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
// Left item is category, right item is feed.
|
||||
// NOTE: Category is in fact "more" than feed but we consider it to be "less" because it should be "placed"
|
||||
@ -187,7 +181,6 @@ bool FeedsProxyModel::lessThan(const QModelIndex& left, const QModelIndex& right
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -226,12 +219,10 @@ bool FeedsProxyModel::filterAcceptsRowInternal(int source_row, const QModelIndex
|
||||
// Recycle bin is always displayed.
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (item->isParentOf(m_selectedItem)/* || item->isChildOf(m_selectedItem)*/ || m_selectedItem == item) {
|
||||
// Currently selected item and all its parents and children must be displayed.
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
// NOTE: If item has < 0 of unread message it may mean, that the count
|
||||
// of unread messages is not (yet) known, display that item too.
|
||||
|
@ -36,7 +36,6 @@ QList<Enclosure> Enclosures::decodeEnclosuresFromString(const QString& enclosure
|
||||
enclosure.m_mimeType = QByteArray::fromBase64(mime_url.at(0).toLocal8Bit());
|
||||
enclosure.m_url = QByteArray::fromBase64(mime_url.at(1).toLocal8Bit());
|
||||
}
|
||||
|
||||
else {
|
||||
enclosure.m_url = QByteArray::fromBase64(single_enclosure.toLocal8Bit());
|
||||
}
|
||||
@ -54,7 +53,6 @@ QString Enclosures::encodeEnclosuresToString(const QList<Enclosure>& enclosures)
|
||||
if (enclosure.m_mimeType.isEmpty()) {
|
||||
enclosures_str.append(enclosure.m_url.toLocal8Bit().toBase64());
|
||||
}
|
||||
|
||||
else {
|
||||
enclosures_str.append(QString(enclosure.m_mimeType.toLocal8Bit().toBase64()) +
|
||||
ECNLOSURES_INNER_SEPARATOR +
|
||||
|
@ -82,7 +82,6 @@ void MessagesModel::loadMessages(RootItem* item) {
|
||||
if (item == nullptr) {
|
||||
setFilter(QSL(DEFAULT_SQL_MESSAGES_FILTER));
|
||||
}
|
||||
|
||||
else {
|
||||
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
||||
setFilter(QSL("true != true"));
|
||||
@ -138,7 +137,6 @@ void MessagesModel::updateDateFormat() {
|
||||
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::UseCustomDate)).toBool()) {
|
||||
m_customDateFormat = qApp->settings()->value(GROUP(Messages), SETTING(Messages::CustomDateFormat)).toString();
|
||||
}
|
||||
|
||||
else {
|
||||
m_customDateFormat = QString();
|
||||
}
|
||||
@ -202,21 +200,17 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
||||
if (m_customDateFormat.isEmpty()) {
|
||||
return dt.toString(Qt::DefaultLocaleShortDate);
|
||||
}
|
||||
|
||||
else {
|
||||
return dt.toString(m_customDateFormat);
|
||||
}
|
||||
}
|
||||
|
||||
else if (index_column == MSG_DB_AUTHOR_INDEX) {
|
||||
const QString author_name = QSqlQueryModel::data(idx, role).toString();
|
||||
return author_name.isEmpty() ? QSL("-") : author_name;
|
||||
}
|
||||
|
||||
else if (index_column != MSG_DB_IMPORTANT_INDEX && index_column != MSG_DB_READ_INDEX) {
|
||||
return QSqlQueryModel::data(idx, role);
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -235,7 +229,6 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
||||
QModelIndex idx_del = index(idx.row(), MSG_DB_PDELETED_INDEX);
|
||||
is_deleted = data(idx_del, Qt::EditRole).toBool();
|
||||
}
|
||||
|
||||
else {
|
||||
QModelIndex idx_del = index(idx.row(), MSG_DB_DELETED_INDEX);
|
||||
is_deleted = data(idx_del, Qt::EditRole).toBool();
|
||||
@ -246,7 +239,6 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
||||
if (data_read.toBool()) {
|
||||
return striked ? m_normalStrikedFont : m_normalFont;
|
||||
}
|
||||
|
||||
else {
|
||||
return striked ? m_boldStrikedFont : m_boldFont;
|
||||
}
|
||||
@ -279,13 +271,11 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
||||
QVariant dta = m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read);
|
||||
return dta.toInt() == 1 ? m_readIcon : m_unreadIcon;
|
||||
}
|
||||
|
||||
else if (index_column == MSG_DB_IMPORTANT_INDEX) {
|
||||
QModelIndex idx_important = index(idx.row(), MSG_DB_IMPORTANT_INDEX);
|
||||
QVariant dta = m_cache->containsData(idx_important.row()) ? m_cache->data(idx_important) : QSqlQueryModel::data(idx_important);
|
||||
return dta.toInt() == 1 ? m_favoriteIcon : QVariant();
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -322,7 +312,6 @@ bool MessagesModel::setMessageRead(int row_index, RootItem::ReadStatus read) {
|
||||
if (DatabaseQueries::markMessagesReadUnread(m_db, QStringList() << QString::number(message.m_id), read)) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, QList<Message>() << message, read);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -374,7 +363,6 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem,
|
||||
QList<QPair<Message, RootItem::Importance>>() << pair);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -407,7 +395,6 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList& messages
|
||||
if (DatabaseQueries::switchMessagesImportance(m_db, message_ids)) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSwitchMessageImportance(m_selectedItem, message_states);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -426,7 +413,6 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
||||
if (qobject_cast<RecycleBin*>(m_selectedItem) != nullptr) {
|
||||
setData(index(message.row(), MSG_DB_PDELETED_INDEX), 1);
|
||||
}
|
||||
|
||||
else {
|
||||
setData(index(message.row(), MSG_DB_DELETED_INDEX), 1);
|
||||
}
|
||||
@ -443,7 +429,6 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
||||
if (m_selectedItem->kind() != RootItemKind::Bin) {
|
||||
deleted = DatabaseQueries::deleteOrRestoreMessagesToFromBin(m_db, message_ids, true);
|
||||
}
|
||||
|
||||
else {
|
||||
deleted = DatabaseQueries::permanentlyDeleteMessages(m_db, message_ids);
|
||||
}
|
||||
@ -451,7 +436,6 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList& messages) {
|
||||
if (deleted) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesDelete(m_selectedItem, msgs);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -478,7 +462,6 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList& messages, RootIt
|
||||
if (DatabaseQueries::markMessagesReadUnread(m_db, message_ids, read)) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterSetMessagesRead(m_selectedItem, msgs, read);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -506,7 +489,6 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList& messages) {
|
||||
if (DatabaseQueries::deleteOrRestoreMessagesToFromBin(m_db, message_ids, false)) {
|
||||
return m_selectedItem->getParentServiceRoot()->onAfterMessagesRestoredFromBin(m_selectedItem, msgs);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -523,7 +505,6 @@ QVariant MessagesModel::headerData(int section, Qt::Orientation orientation, int
|
||||
if (section != MSG_DB_READ_INDEX && section != MSG_DB_IMPORTANT_INDEX) {
|
||||
return m_headerData.at(section);
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
@ -64,7 +64,6 @@ void MessagesModelSqlLayer::addSortState(int column, Qt::SortOrder order) {
|
||||
m_sortColumns.append(column);
|
||||
m_sortOrders.append(order);
|
||||
}
|
||||
|
||||
else {
|
||||
m_sortColumns.prepend(column);
|
||||
m_sortOrders.prepend(order);
|
||||
@ -91,7 +90,6 @@ QString MessagesModelSqlLayer::orderByClause() const {
|
||||
if (m_sortColumns.isEmpty()) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
else {
|
||||
QStringList sorts;
|
||||
|
||||
|
@ -59,7 +59,6 @@ QModelIndex MessagesProxyModel::getNextUnreadItemIndex(int default_row, int max_
|
||||
// We found unread message, mark it.
|
||||
return proxy_index;
|
||||
}
|
||||
|
||||
else {
|
||||
default_row++;
|
||||
}
|
||||
@ -83,7 +82,6 @@ QModelIndexList MessagesProxyModel::mapListFromSource(const QModelIndexList& ind
|
||||
// Construct new source index.
|
||||
mapped_indexes << mapFromSource(m_sourceModel->index(index.row(), index.column()));
|
||||
}
|
||||
|
||||
else {
|
||||
mapped_indexes << mapFromSource(index);
|
||||
}
|
||||
@ -119,7 +117,6 @@ QModelIndexList MessagesProxyModel::match(const QModelIndex& start, int role,
|
||||
result.append(idx);
|
||||
}
|
||||
}
|
||||
|
||||
// QString based matching.
|
||||
else {
|
||||
if (entered_text.isEmpty()) {
|
||||
|
@ -48,7 +48,6 @@ bool DynamicShortcutsWidget::areShortcutsUnique() const {
|
||||
// Problem, two identical non-empty shortcuts found.
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
all_shortcuts.append(binding.second->shortcut());
|
||||
}
|
||||
|
@ -99,7 +99,6 @@ void ShortcutButton::keyPressEvent(QKeyEvent* event) {
|
||||
if ((pressed_key == Qt::Key_Backtab) && (m_catcher->m_modifierKeys & Qt::SHIFT)) {
|
||||
pressed_key = Qt::Key_Tab | m_catcher->m_modifierKeys;
|
||||
}
|
||||
|
||||
else {
|
||||
pressed_key |= m_catcher->m_modifierKeys;
|
||||
}
|
||||
|
@ -30,9 +30,7 @@
|
||||
FormAbout::FormAbout(QWidget* parent) : QDialog(parent) {
|
||||
m_ui.setupUi(this);
|
||||
m_ui.m_lblIcon->setPixmap(QPixmap(APP_ICON_PATH));
|
||||
|
||||
GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("help-about")), tr("About %1").arg(APP_NAME));
|
||||
|
||||
loadLicenseAndInformation();
|
||||
loadSettingsAndPaths();
|
||||
}
|
||||
@ -45,7 +43,6 @@ void FormAbout::loadSettingsAndPaths() {
|
||||
if (qApp->settings()->type() == SettingsProperties::Portable) {
|
||||
m_ui.m_txtPathsSettingsType->setText(tr("FULLY portable"));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui.m_txtPathsSettingsType->setText(tr("NOT portable"));
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ void FormAddAccount::addSelectedAccount() {
|
||||
if (new_root != nullptr) {
|
||||
m_model->addServiceAccount(new_root, true);
|
||||
}
|
||||
|
||||
else {
|
||||
qCritical("Cannot create new account.");
|
||||
}
|
||||
|
@ -61,7 +61,6 @@ void FormBackupDatabaseSettings::performBackup() {
|
||||
tr("Backup was created successfully and stored in target directory."),
|
||||
tr("Backup was created successfully."));
|
||||
}
|
||||
|
||||
catch (const ApplicationException& ex) {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, ex.message(), tr("Backup failed."));
|
||||
}
|
||||
@ -86,7 +85,6 @@ void FormBackupDatabaseSettings::checkBackupNames(const QString& name) {
|
||||
if (name.simplified().isEmpty()) {
|
||||
m_ui->m_txtBackupName->setStatus(WidgetWithStatus::Error, tr("Backup name cannot be empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtBackupName->setStatus(WidgetWithStatus::Ok, tr("Backup name looks okay."));
|
||||
}
|
||||
|
@ -59,7 +59,6 @@ void FormDatabaseCleanup::closeEvent(QCloseEvent* event) {
|
||||
if (m_ui->m_progressBar->isEnabled()) {
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
else {
|
||||
QDialog::closeEvent(event);
|
||||
}
|
||||
@ -69,7 +68,6 @@ void FormDatabaseCleanup::keyPressEvent(QKeyEvent* event) {
|
||||
if (m_ui->m_progressBar->isEnabled()) {
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
else {
|
||||
QDialog::keyPressEvent(event);
|
||||
}
|
||||
@ -110,7 +108,6 @@ void FormDatabaseCleanup::onPurgeFinished(bool finished) {
|
||||
if (finished) {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, tr("Database cleanup is completed."), tr("Database cleanup is completed."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Database cleanup failed."), tr("Database cleanup failed."));
|
||||
}
|
||||
|
@ -65,31 +65,24 @@ FormMain::FormMain(QWidget* parent, Qt::WindowFlags f)
|
||||
: QMainWindow(parent, f), m_ui(new Ui::FormMain) {
|
||||
m_ui->setupUi(this);
|
||||
qApp->setMainForm(this);
|
||||
|
||||
#if defined (USE_WEBENGINE)
|
||||
m_ui->m_menuWebBrowserTabs->addAction(AdBlockManager::instance()->adBlockIcon());
|
||||
m_ui->m_menuWebBrowserTabs->addAction(qApp->web()->engineSettingsAction());
|
||||
#endif
|
||||
|
||||
// Add these actions to the list of actions of the main window.
|
||||
// This allows to use actions via shortcuts
|
||||
// even if main menu is not visible.
|
||||
addActions(qApp->userActions());
|
||||
|
||||
setStatusBar(m_statusBar = new StatusBar(this));
|
||||
|
||||
// Prepare main window and tabs.
|
||||
prepareMenus();
|
||||
|
||||
// Prepare tabs.
|
||||
tabWidget()->feedMessageViewer()->feedsToolBar()->loadSavedActions();
|
||||
tabWidget()->feedMessageViewer()->messagesToolBar()->loadSavedActions();
|
||||
|
||||
// Establish connections.
|
||||
createConnections();
|
||||
updateMessageButtonsAvailability();
|
||||
updateFeedButtonsAvailability();
|
||||
|
||||
// Setup some appearance of the window.
|
||||
setupIcons();
|
||||
loadSize();
|
||||
@ -121,7 +114,6 @@ void FormMain::showDbCleanupAssistant() {
|
||||
tabWidget()->feedMessageViewer()->messagesView()->reloadSelections();
|
||||
qApp->feedReader()->feedsModel()->reloadCountsOfWholeModel();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot cleanup database"),
|
||||
tr("Cannot cleanup database, because another critical action is running."),
|
||||
@ -224,12 +216,10 @@ void FormMain::switchFullscreenMode() {
|
||||
qApp->settings()->setValue(GROUP(GUI), GUI::IsMainWindowMaximizedBeforeFullscreen, isMaximized());
|
||||
showFullScreen();
|
||||
}
|
||||
|
||||
else {
|
||||
if (qApp->settings()->value(GROUP(GUI), SETTING(GUI::IsMainWindowMaximizedBeforeFullscreen)).toBool()) {
|
||||
setWindowState((windowState() & ~Qt::WindowFullScreen) | Qt::WindowMaximized);
|
||||
}
|
||||
|
||||
else {
|
||||
showNormal();
|
||||
}
|
||||
@ -279,7 +269,6 @@ void FormMain::updateAddItemMenu() {
|
||||
m_ui->m_menuAddItem->addAction(m_ui->m_actionAddCategoryIntoSelectedAccount);
|
||||
m_ui->m_menuAddItem->addAction(m_ui->m_actionAddFeedIntoSelectedAccount);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_menuAddItem->addAction(m_ui->m_actionNoActions);
|
||||
}
|
||||
@ -302,7 +291,6 @@ void FormMain::updateRecycleBinMenu() {
|
||||
no_action->setEnabled(false);
|
||||
root_menu->addAction(no_action);
|
||||
}
|
||||
|
||||
else if ((context_menu = bin->contextMenu()).isEmpty()) {
|
||||
QAction* no_action = new QAction(qApp->icons()->fromTheme(QSL("dialog-error")),
|
||||
tr("No actions possible"),
|
||||
@ -310,7 +298,6 @@ void FormMain::updateRecycleBinMenu() {
|
||||
no_action->setEnabled(false);
|
||||
root_menu->addAction(no_action);
|
||||
}
|
||||
|
||||
else {
|
||||
root_menu->addActions(context_menu);
|
||||
}
|
||||
@ -342,7 +329,6 @@ void FormMain::updateAccountsMenu() {
|
||||
no_action->setEnabled(false);
|
||||
root_menu->addAction(no_action);
|
||||
}
|
||||
|
||||
else {
|
||||
root_menu->addActions(root_actions);
|
||||
}
|
||||
@ -425,13 +411,11 @@ void FormMain::switchVisibility(bool force_hide) {
|
||||
if (SystemTrayIcon::isSystemTrayActivated()) {
|
||||
hide();
|
||||
}
|
||||
|
||||
else {
|
||||
// Window gets minimized in single-window mode.
|
||||
showMinimized();
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
display();
|
||||
}
|
||||
@ -582,28 +566,23 @@ void FormMain::createConnections() {
|
||||
connect(m_ui->m_menuAccounts, &QMenu::aboutToShow, this, &FormMain::updateAccountsMenu);
|
||||
connect(m_ui->m_actionServiceDelete, &QAction::triggered, m_ui->m_actionDeleteSelectedItem, &QAction::triggered);
|
||||
connect(m_ui->m_actionServiceEdit, &QAction::triggered, m_ui->m_actionEditSelectedItem, &QAction::triggered);
|
||||
|
||||
// Menu "File" connections.
|
||||
connect(m_ui->m_actionBackupDatabaseSettings, &QAction::triggered, this, &FormMain::backupDatabaseSettings);
|
||||
connect(m_ui->m_actionRestoreDatabaseSettings, &QAction::triggered, this, &FormMain::restoreDatabaseSettings);
|
||||
connect(m_ui->m_actionQuit, &QAction::triggered, qApp, &Application::quit);
|
||||
connect(m_ui->m_actionServiceAdd, &QAction::triggered, this, &FormMain::showAddAccountDialog);
|
||||
connect(m_ui->m_actionRestart, &QAction::triggered, qApp, &Application::restart);
|
||||
|
||||
// Menu "View" connections.
|
||||
connect(m_ui->m_actionFullscreen, &QAction::toggled, this, &FormMain::switchFullscreenMode);
|
||||
connect(m_ui->m_actionSwitchMainMenu, &QAction::toggled, m_ui->m_menuBar, &QMenuBar::setVisible);
|
||||
connect(m_ui->m_actionSwitchMainWindow, &QAction::triggered, this, &FormMain::switchVisibility);
|
||||
connect(m_ui->m_actionSwitchStatusBar, &QAction::toggled, statusBar(), &StatusBar::setVisible);
|
||||
|
||||
// Menu "Tools" connections.
|
||||
connect(m_ui->m_actionSettings, &QAction::triggered, [this]() {
|
||||
FormSettings(*this).exec();
|
||||
});
|
||||
|
||||
connect(m_ui->m_actionDownloadManager, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::showDownloadManager);
|
||||
connect(m_ui->m_actionCleanupDatabase, &QAction::triggered, this, &FormMain::showDbCleanupAssistant);
|
||||
|
||||
// Menu "Help" connections.
|
||||
connect(m_ui->m_actionAboutGuard, &QAction::triggered, [this]() {
|
||||
FormAbout(this).exec();
|
||||
@ -614,7 +593,6 @@ void FormMain::createConnections() {
|
||||
connect(m_ui->m_actionReportBug, &QAction::triggered, this, &FormMain::reportABug);
|
||||
connect(m_ui->m_actionDonate, &QAction::triggered, this, &FormMain::donate);
|
||||
connect(m_ui->m_actionDisplayWiki, &QAction::triggered, this, &FormMain::showWiki);
|
||||
|
||||
// Tab widget connections.
|
||||
connect(m_ui->m_actionTabsCloseAllExceptCurrent, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabsExceptCurrent);
|
||||
connect(m_ui->m_actionTabsCloseAll, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabs);
|
||||
@ -629,7 +607,6 @@ void FormMain::createConnections() {
|
||||
connect(qApp->feedReader(), &FeedReader::feedUpdatesStarted, this, &FormMain::onFeedUpdatesStarted);
|
||||
connect(qApp->feedReader(), &FeedReader::feedUpdatesProgress, this, &FormMain::onFeedUpdatesProgress);
|
||||
connect(qApp->feedReader(), &FeedReader::feedUpdatesFinished, this, &FormMain::onFeedUpdatesFinished);
|
||||
|
||||
// Toolbar forwardings.
|
||||
connect(m_ui->m_actionAddFeedIntoSelectedAccount, &QAction::triggered,
|
||||
tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::addFeedIntoSelectedAccount);
|
||||
|
@ -28,13 +28,10 @@
|
||||
FormRestoreDatabaseSettings::FormRestoreDatabaseSettings(QWidget& parent)
|
||||
: QDialog(&parent), m_shouldRestart(false) {
|
||||
m_ui.setupUi(this);
|
||||
|
||||
m_btnRestart = m_ui.m_buttonBox->addButton(tr("Restart"), QDialogButtonBox::ActionRole);
|
||||
m_ui.m_lblResult->setStatus(WidgetWithStatus::Warning, tr("No operation executed yet."), tr("No operation executed yet."));
|
||||
|
||||
setWindowIcon(qApp->icons()->fromTheme(QSL("document-import")));
|
||||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint);
|
||||
|
||||
connect(m_btnRestart, &QPushButton::clicked, this, [ = ]() {
|
||||
m_shouldRestart = true;
|
||||
close();
|
||||
@ -94,7 +91,6 @@ void FormRestoreDatabaseSettings::selectFolder(QString folder) {
|
||||
m_ui.m_lblSelectFolder->setStatus(WidgetWithStatus::Ok, QDir::toNativeSeparators(folder),
|
||||
tr("Good source directory is specified."));
|
||||
}
|
||||
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
@ -36,13 +36,11 @@
|
||||
FormSettings::FormSettings(QWidget& parent)
|
||||
: QDialog(&parent), m_panels(QList<SettingsPanel*>()), m_settings(*qApp->settings()) {
|
||||
m_ui.setupUi(this);
|
||||
|
||||
// Set flags and attributes.
|
||||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
|
||||
setWindowIcon(qApp->icons()->fromTheme(QSL("emblem-system")));
|
||||
m_btnApply = m_ui.m_buttonBox->button(QDialogButtonBox::Apply);
|
||||
m_btnApply->setEnabled(false);
|
||||
|
||||
// Establish needed connections.
|
||||
connect(m_ui.m_buttonBox, &QDialogButtonBox::accepted, this, &FormSettings::saveSettings);
|
||||
connect(m_ui.m_buttonBox, &QDialogButtonBox::rejected, this, &FormSettings::cancelSettings);
|
||||
@ -55,7 +53,6 @@ FormSettings::FormSettings(QWidget& parent)
|
||||
addSettingsPanel(new SettingsBrowserMail(&m_settings, this));
|
||||
addSettingsPanel(new SettingsDownloads(&m_settings, this));
|
||||
addSettingsPanel(new SettingsFeedsMessages(&m_settings, this));
|
||||
|
||||
m_ui.m_listSettings->setCurrentRow(0);
|
||||
}
|
||||
|
||||
@ -115,7 +112,6 @@ void FormSettings::cancelSettings() {
|
||||
if (changed_panels.isEmpty()) {
|
||||
reject();
|
||||
}
|
||||
|
||||
else {
|
||||
const QStringList changed_settings_description = changed_panels.replaceInStrings(QRegExp(QSL("^")), QString::fromUtf8(" • "));
|
||||
|
||||
@ -137,7 +133,6 @@ void FormSettings::addSettingsPanel(SettingsPanel* panel) {
|
||||
m_panels.append(panel);
|
||||
m_ui.m_stackedSettings->addWidget(panel);
|
||||
panel->loadSettings();
|
||||
|
||||
connect(panel, &SettingsPanel::settingsChanged, [this]() {
|
||||
m_btnApply->setEnabled(true);
|
||||
});
|
||||
|
@ -40,10 +40,8 @@ FormUpdate::FormUpdate(QWidget* parent)
|
||||
m_ui.m_lblCurrentRelease->setText(APP_VERSION);
|
||||
m_ui.m_tabInfo->removeTab(1);
|
||||
m_ui.m_buttonBox->setEnabled(false);
|
||||
|
||||
// Set flags and attributes.
|
||||
GuiUtilities::applyDialogProperties(*this, qApp->icons()->fromTheme(QSL("help-about")));
|
||||
|
||||
connect(&m_downloader, &Downloader::progress, this, &FormUpdate::updateProgress);
|
||||
connect(&m_downloader, &Downloader::completed, this, &FormUpdate::updateCompleted);
|
||||
|
||||
@ -111,7 +109,6 @@ void FormUpdate::checkForUpdates() {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
qApp->system()->checkForUpdates();
|
||||
}
|
||||
|
||||
@ -233,15 +230,12 @@ void FormUpdate::startUpdate() {
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
else if (update_for_this_system) {
|
||||
updateProgress(0, 100);
|
||||
|
||||
m_btnUpdate->setText(tr("Downloading update..."));
|
||||
m_btnUpdate->setEnabled(false);
|
||||
m_downloader.downloadFile(url_file);
|
||||
}
|
||||
|
||||
else {
|
||||
// Self-update and package are not available.
|
||||
if (!qApp->web()->openUrlInExternalBrowser(url_file)) {
|
||||
|
@ -67,7 +67,6 @@ void DiscoverFeedsButton::linkTriggered(QAction* action) {
|
||||
if (root->supportsFeedAdding()) {
|
||||
root->addNewFeed(url);
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Not supported"),
|
||||
tr("Given account does not support adding feeds."),
|
||||
|
@ -28,7 +28,6 @@ void EditTableView::keyPressEvent(QKeyEvent* event) {
|
||||
removeSelected();
|
||||
event->accept();
|
||||
}
|
||||
|
||||
else {
|
||||
QAbstractItemView::keyPressEvent(event);
|
||||
}
|
||||
|
@ -146,7 +146,6 @@ void FeedMessageViewer::switchMessageSplitterOrientation() {
|
||||
if (m_messageSplitter->orientation() == Qt::Vertical) {
|
||||
m_messageSplitter->setOrientation(Qt::Horizontal);
|
||||
}
|
||||
|
||||
else {
|
||||
m_messageSplitter->setOrientation(Qt::Vertical);
|
||||
}
|
||||
@ -170,7 +169,6 @@ void FeedMessageViewer::switchFeedComponentVisibility() {
|
||||
if (sen != nullptr) {
|
||||
m_feedsWidget->setVisible(sen->isChecked());
|
||||
}
|
||||
|
||||
else {
|
||||
m_feedsWidget->setVisible(!m_feedsWidget->isVisible());
|
||||
}
|
||||
@ -182,7 +180,6 @@ void FeedMessageViewer::toggleShowOnlyUnreadFeeds() {
|
||||
if (origin == nullptr) {
|
||||
m_feedsView->model()->invalidateReadFeedsFilter(true, false);
|
||||
}
|
||||
|
||||
else {
|
||||
m_feedsView->model()->invalidateReadFeedsFilter(true, origin->isChecked());
|
||||
}
|
||||
|
@ -59,14 +59,12 @@ QList<QAction*> FeedsToolBar::getSpecificActions(const QStringList& actions) {
|
||||
// Add existing standard action.
|
||||
spec_actions.append(matching_action);
|
||||
}
|
||||
|
||||
else if (action_name == SEPARATOR_ACTION_NAME) {
|
||||
// Add new separator.
|
||||
QAction* act = new QAction(this);
|
||||
act->setSeparator(true);
|
||||
spec_actions.append(act);
|
||||
}
|
||||
|
||||
else if (action_name == SPACER_ACTION_NAME) {
|
||||
// Add new spacer.
|
||||
QWidget* spacer = new QWidget(this);
|
||||
|
@ -78,7 +78,6 @@ QList<Feed*> FeedsView::selectedFeeds() const {
|
||||
if (current_index.isValid()) {
|
||||
return m_sourceModel->feedsForIndex(m_proxyModel->mapToSource(current_index));
|
||||
}
|
||||
|
||||
else {
|
||||
return QList<Feed*>();
|
||||
}
|
||||
@ -90,7 +89,6 @@ RootItem* FeedsView::selectedItem() const {
|
||||
if (selected_rows.isEmpty()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
else {
|
||||
RootItem* selected_item = m_sourceModel->itemForIndex(m_proxyModel->mapToSource(selected_rows.at(0)));
|
||||
return selected_item == m_sourceModel->rootItem() ? nullptr : selected_item;
|
||||
@ -143,7 +141,6 @@ void FeedsView::sortByColumn(int column, Qt::SortOrder order) {
|
||||
if (column == old_column && order == old_order) {
|
||||
m_proxyModel->sort(column, order);
|
||||
}
|
||||
|
||||
else {
|
||||
QTreeView::sortByColumn(column, order);
|
||||
}
|
||||
@ -158,7 +155,6 @@ void FeedsView::addFeedIntoSelectedAccount() {
|
||||
if (root->supportsFeedAdding()) {
|
||||
root->addNewFeed();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Not supported"),
|
||||
tr("Selected account does not support adding of new feeds."),
|
||||
@ -177,7 +173,6 @@ void FeedsView::addCategoryIntoSelectedAccount() {
|
||||
if (root->supportsCategoryAdding()) {
|
||||
root->addNewCategory();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Not supported"),
|
||||
tr("Selected account does not support adding of new categories."),
|
||||
@ -227,7 +222,6 @@ void FeedsView::editSelectedItem() {
|
||||
if (selectedItem()->canBeEdited()) {
|
||||
selectedItem()->editViaGui();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot edit item"),
|
||||
tr("Selected item cannot be edited, this is not (yet?) supported."),
|
||||
@ -283,7 +277,6 @@ void FeedsView::deleteSelectedItem() {
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot delete \"%1\"").arg(selected_item->title()),
|
||||
tr("This item cannot be deleted, because it does not support it\nor this functionality is not implemented yet."),
|
||||
@ -371,7 +364,6 @@ QMenu* FeedsView::initializeContextMenuCategories(RootItem* clicked_item) {
|
||||
if (m_contextMenuCategories == nullptr) {
|
||||
m_contextMenuCategories = new QMenu(tr("Context menu for categories"), this);
|
||||
}
|
||||
|
||||
else {
|
||||
m_contextMenuCategories->clear();
|
||||
}
|
||||
@ -397,7 +389,6 @@ QMenu* FeedsView::initializeContextMenuFeeds(RootItem* clicked_item) {
|
||||
if (m_contextMenuFeeds == nullptr) {
|
||||
m_contextMenuFeeds = new QMenu(tr("Context menu for categories"), this);
|
||||
}
|
||||
|
||||
else {
|
||||
m_contextMenuFeeds->clear();
|
||||
}
|
||||
@ -433,7 +424,6 @@ QMenu* FeedsView::initializeContextMenuOtherItem(RootItem* clicked_item) {
|
||||
if (m_contextMenuOtherItems == nullptr) {
|
||||
m_contextMenuOtherItems = new QMenu(tr("Context menu for other items"), this);
|
||||
}
|
||||
|
||||
else {
|
||||
m_contextMenuOtherItems->clear();
|
||||
}
|
||||
@ -444,7 +434,6 @@ QMenu* FeedsView::initializeContextMenuOtherItem(RootItem* clicked_item) {
|
||||
m_contextMenuOtherItems->addSeparator();
|
||||
m_contextMenuOtherItems->addActions(specific_actions);
|
||||
}
|
||||
|
||||
else {
|
||||
m_contextMenuOtherItems->addAction(qApp->mainForm()->m_ui->m_actionNoActions);
|
||||
}
|
||||
@ -502,17 +491,14 @@ void FeedsView::contextMenuEvent(QContextMenuEvent* event) {
|
||||
// Display context menu for categories.
|
||||
initializeContextMenuCategories(clicked_item)->exec(event->globalPos());
|
||||
}
|
||||
|
||||
else if (clicked_item->kind() == RootItemKind::Feed) {
|
||||
// Display context menu for feeds.
|
||||
initializeContextMenuFeeds(clicked_item)->exec(event->globalPos());
|
||||
}
|
||||
|
||||
else {
|
||||
initializeContextMenuOtherItem(clicked_item)->exec(event->globalPos());
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// Display menu for empty space.
|
||||
initializeContextMenuEmptySpace()->exec(event->globalPos());
|
||||
|
@ -26,7 +26,6 @@ void GuiUtilities::setLabelAsNotice(QLabel& label, bool is_warning) {
|
||||
if (is_warning) {
|
||||
label.setStyleSheet(QSL("font-weight: bold; font-style: italic; color: red"));
|
||||
}
|
||||
|
||||
else {
|
||||
label.setStyleSheet(QSL("font-style: italic;"));
|
||||
}
|
||||
|
@ -45,7 +45,6 @@ void LocationLineEdit::mousePressEvent(QMouseEvent* event) {
|
||||
// User clicked and all text was selected.
|
||||
m_mouseSelectsAllText = false;
|
||||
}
|
||||
|
||||
else {
|
||||
BaseLineEdit::mousePressEvent(event);
|
||||
}
|
||||
|
@ -100,7 +100,6 @@ QMessageBox::StandardButton MessageBox::show(QWidget* parent,
|
||||
if (msg_box.exec() == -1) {
|
||||
return QMessageBox::Cancel;
|
||||
}
|
||||
|
||||
else {
|
||||
return msg_box.standardButton(msg_box.clickedButton());
|
||||
}
|
||||
|
@ -38,7 +38,6 @@ void MessagePreviewer::createConnections() {
|
||||
if (open_externally_now) {
|
||||
qApp->web()->openUrlInExternalBrowser(url.toString());
|
||||
}
|
||||
|
||||
else {
|
||||
// User clicked some URL. Open it in external browser or download?
|
||||
MessageBox box(qApp->mainForm());
|
||||
@ -61,7 +60,6 @@ void MessagePreviewer::createConnections() {
|
||||
if (box.clickedButton() == btn_open) {
|
||||
qApp->web()->openUrlInExternalBrowser(url.toString());
|
||||
}
|
||||
|
||||
else if (box.clickedButton() == btn_download) {
|
||||
qApp->downloadManager()->download(url);
|
||||
}
|
||||
@ -71,7 +69,6 @@ void MessagePreviewer::createConnections() {
|
||||
btn_cancel->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
MessageBox::show(qApp->mainForm(), QMessageBox::Warning, tr("Incorrect link"),
|
||||
tr("Selected hyperlink is invalid."));
|
||||
|
@ -70,24 +70,20 @@ QList<QAction*> MessagesToolBar::getSpecificActions(const QStringList& actions)
|
||||
// Add existing standard action.
|
||||
spec_actions.append(matching_action);
|
||||
}
|
||||
|
||||
else if (action_name == SEPARATOR_ACTION_NAME) {
|
||||
// Add new separator.
|
||||
QAction* act = new QAction(this);
|
||||
act->setSeparator(true);
|
||||
spec_actions.append(act);
|
||||
}
|
||||
|
||||
else if (action_name == SEACRH_MESSAGES_ACTION_NAME) {
|
||||
// Add search box.
|
||||
spec_actions.append(m_actionSearchMessages);
|
||||
}
|
||||
|
||||
else if (action_name == HIGHLIGHTER_ACTION_NAME) {
|
||||
// Add filter button.
|
||||
spec_actions.append(m_actionMessageHighlighter);
|
||||
}
|
||||
|
||||
else if (action_name == SPACER_ACTION_NAME) {
|
||||
// Add new spacer.
|
||||
QWidget* spacer = new QWidget(this);
|
||||
|
@ -100,7 +100,6 @@ void MessagesView::reloadSelections() {
|
||||
if (m_proxyModel->rowCount() == 0) {
|
||||
current_index = QModelIndex();
|
||||
}
|
||||
|
||||
else {
|
||||
for (int i = 0; i < m_proxyModel->rowCount(); i++) {
|
||||
QModelIndex msg_idx = m_proxyModel->index(i, MSG_DB_TITLE_INDEX);
|
||||
@ -123,7 +122,6 @@ void MessagesView::reloadSelections() {
|
||||
setCurrentIndex(current_index);
|
||||
reselectIndexes(QModelIndexList() << current_index);
|
||||
}
|
||||
|
||||
else {
|
||||
// Messages were probably removed from the model, nothing can
|
||||
// be selected and no message can be displayed.
|
||||
@ -169,7 +167,6 @@ void MessagesView::contextMenuEvent(QContextMenuEvent* event) {
|
||||
TreeViewColumnsMenu menu(header());
|
||||
menu.exec(event->globalPos());
|
||||
}
|
||||
|
||||
else {
|
||||
// Context menu is not initialized, initialize.
|
||||
initializeContextMenu();
|
||||
@ -257,7 +254,6 @@ void MessagesView::selectionChanged(const QItemSelection& selected, const QItemS
|
||||
message.m_isRead = true;
|
||||
emit currentMessageChanged(message, m_sourceModel->loadedItem());
|
||||
}
|
||||
|
||||
else {
|
||||
emit currentMessageRemoved();
|
||||
}
|
||||
@ -348,7 +344,6 @@ void MessagesView::setSelectedMessagesReadStatus(RootItem::ReadStatus read) {
|
||||
if (current_index.isValid()) {
|
||||
emit currentMessageChanged(m_sourceModel->messageAt(m_proxyModel->mapToSource(current_index).row()), m_sourceModel->loadedItem());
|
||||
}
|
||||
|
||||
else {
|
||||
emit currentMessageRemoved();
|
||||
}
|
||||
@ -370,7 +365,6 @@ void MessagesView::deleteSelectedMessages() {
|
||||
setCurrentIndex(current_index);
|
||||
emit currentMessageChanged(m_sourceModel->messageAt(m_proxyModel->mapToSource(current_index).row()), m_sourceModel->loadedItem());
|
||||
}
|
||||
|
||||
else {
|
||||
emit currentMessageRemoved();
|
||||
}
|
||||
@ -391,7 +385,6 @@ void MessagesView::restoreSelectedMessages() {
|
||||
if (current_index.isValid()) {
|
||||
emit currentMessageChanged(m_sourceModel->messageAt(m_proxyModel->mapToSource(current_index).row()), m_sourceModel->loadedItem());
|
||||
}
|
||||
|
||||
else {
|
||||
emit currentMessageRemoved();
|
||||
}
|
||||
@ -412,7 +405,6 @@ void MessagesView::switchSelectedMessagesImportance() {
|
||||
if (current_index.isValid()) {
|
||||
emit currentMessageChanged(m_sourceModel->messageAt(m_proxyModel->mapToSource(current_index).row()), m_sourceModel->loadedItem());
|
||||
}
|
||||
|
||||
else {
|
||||
// Messages were probably removed from the model, nothing can
|
||||
// be selected and no message can be displayed.
|
||||
@ -460,7 +452,6 @@ void MessagesView::selectNextUnreadItem() {
|
||||
// Okay, something is selected, start from it.
|
||||
active_row = selected_rows.at(0).row();
|
||||
}
|
||||
|
||||
else {
|
||||
active_row = 0;
|
||||
}
|
||||
@ -481,7 +472,6 @@ void MessagesView::searchMessages(const QString& pattern) {
|
||||
if (selectionModel()->selectedRows().size() == 0) {
|
||||
emit currentMessageRemoved();
|
||||
}
|
||||
|
||||
else {
|
||||
// Scroll to selected message, it could become scrolled out due to filter change.
|
||||
scrollTo(selectionModel()->selectedRows().at(0));
|
||||
|
@ -54,7 +54,6 @@ void NewspaperPreviewer::showMoreMessages() {
|
||||
m_ui->m_btnShowMoreMessages->setEnabled(!m_messages.isEmpty());
|
||||
m_ui->scrollArea->verticalScrollBar()->setValue(current_scroll);
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot show more messages"),
|
||||
tr("Cannot show more messages because parent feed was removed."),
|
||||
|
@ -43,7 +43,6 @@ void PlainToolButton::paintEvent(QPaintEvent* e) {
|
||||
p.setOpacity(0.7);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
p.setOpacity(0.3);
|
||||
}
|
||||
|
@ -32,13 +32,11 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent)
|
||||
GuiUtilities::setLabelAsNotice(*m_ui->label, false);
|
||||
GuiUtilities::setLabelAsNotice(*m_ui->m_lblExternalEmailInfo, false);
|
||||
GuiUtilities::setLabelAsNotice(*m_ui->m_lblProxyInfo, false);
|
||||
|
||||
#if defined(USE_WEBENGINE)
|
||||
m_ui->m_checkOpenLinksInExternal->setVisible(false);
|
||||
#else
|
||||
connect(m_ui->m_checkOpenLinksInExternal, &QCheckBox::stateChanged, this, &SettingsBrowserMail::dirtifySettings);
|
||||
#endif
|
||||
|
||||
connect(m_ui->m_cmbProxyType, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
|
||||
&SettingsBrowserMail::dirtifySettings);
|
||||
connect(m_ui->m_txtProxyHost, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings);
|
||||
@ -92,7 +90,6 @@ void SettingsBrowserMail::displayProxyPassword(int state) {
|
||||
if (state == Qt::Checked) {
|
||||
m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::Normal);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::PasswordEchoOnEdit);
|
||||
}
|
||||
@ -137,12 +134,10 @@ void SettingsBrowserMail::selectEmailExecutable() {
|
||||
|
||||
void SettingsBrowserMail::loadSettings() {
|
||||
onBeginLoadSettings();
|
||||
|
||||
#if !defined(USE_WEBENGINE)
|
||||
m_ui->m_checkOpenLinksInExternal->setChecked(settings()->value(GROUP(Browser),
|
||||
SETTING(Browser::OpenLinksInExternalBrowserRightAway)).toBool());
|
||||
#endif
|
||||
|
||||
// Load settings of web browser GUI.
|
||||
m_ui->m_cmbExternalBrowserPreset->addItem(tr("Opera 12 or older"), QSL("-nosession %1"));
|
||||
m_ui->m_txtExternalBrowserExecutable->setText(settings()->value(GROUP(Browser),
|
||||
@ -150,7 +145,6 @@ void SettingsBrowserMail::loadSettings() {
|
||||
m_ui->m_txtExternalBrowserArguments->setText(settings()->value(GROUP(Browser),
|
||||
SETTING(Browser::CustomExternalBrowserArguments)).toString());
|
||||
m_ui->m_grpCustomExternalBrowser->setChecked(settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserEnabled)).toBool());
|
||||
|
||||
// Load settings of e-mail.
|
||||
m_ui->m_cmbExternalEmailPreset->addItem(tr("Mozilla Thunderbird"), QSL("-compose \"subject='%1',body='%2'\""));
|
||||
m_ui->m_txtExternalEmailExecutable->setText(settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailExecutable)).toString());
|
||||
@ -160,7 +154,6 @@ void SettingsBrowserMail::loadSettings() {
|
||||
m_ui->m_cmbProxyType->addItem(tr("System proxy"), QNetworkProxy::DefaultProxy);
|
||||
m_ui->m_cmbProxyType->addItem(tr("Socks5"), QNetworkProxy::Socks5Proxy);
|
||||
m_ui->m_cmbProxyType->addItem(tr("Http"), QNetworkProxy::HttpProxy);
|
||||
|
||||
// Load the settings.
|
||||
QNetworkProxy::ProxyType selected_proxy_type = static_cast<QNetworkProxy::ProxyType>(settings()->value(GROUP(Proxy),
|
||||
SETTING(Proxy::Type)).toInt());
|
||||
@ -174,16 +167,13 @@ void SettingsBrowserMail::loadSettings() {
|
||||
|
||||
void SettingsBrowserMail::saveSettings() {
|
||||
onBeginSaveSettings();
|
||||
|
||||
#if !defined(USE_WEBENGINE)
|
||||
settings()->setValue(GROUP(Browser), Browser::OpenLinksInExternalBrowserRightAway, m_ui->m_checkOpenLinksInExternal->isChecked());
|
||||
#endif
|
||||
|
||||
// Save settings of GUI of web browser.
|
||||
settings()->setValue(GROUP(Browser), Browser::CustomExternalBrowserEnabled, m_ui->m_grpCustomExternalBrowser->isChecked());
|
||||
settings()->setValue(GROUP(Browser), Browser::CustomExternalBrowserExecutable, m_ui->m_txtExternalBrowserExecutable->text());
|
||||
settings()->setValue(GROUP(Browser), Browser::CustomExternalBrowserArguments, m_ui->m_txtExternalBrowserArguments->text());
|
||||
|
||||
// Save settings of e-mail.
|
||||
settings()->setValue(GROUP(Browser), Browser::CustomExternalEmailExecutable, m_ui->m_txtExternalEmailExecutable->text());
|
||||
settings()->setValue(GROUP(Browser), Browser::CustomExternalEmailArguments, m_ui->m_txtExternalEmailArguments->text());
|
||||
@ -193,7 +183,6 @@ void SettingsBrowserMail::saveSettings() {
|
||||
settings()->setValue(GROUP(Proxy), Proxy::Username, m_ui->m_txtProxyUsername->text());
|
||||
settings()->setValue(GROUP(Proxy), Proxy::Password, TextFactory::encrypt(m_ui->m_txtProxyPassword->text()));
|
||||
settings()->setValue(GROUP(Proxy), Proxy::Port, m_ui->m_spinProxyPort->value());
|
||||
|
||||
// Reload settings for all network access managers.
|
||||
SilentNetworkAccessManager::instance()->loadSettings();
|
||||
onEndSaveSettings();
|
||||
|
@ -84,7 +84,6 @@ void SettingsDatabase::onMysqlHostnameChanged(const QString& new_hostname) {
|
||||
if (new_hostname.isEmpty()) {
|
||||
m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Warning, tr("Hostname is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Ok, tr("Hostname looks ok."));
|
||||
}
|
||||
@ -94,7 +93,6 @@ void SettingsDatabase::onMysqlUsernameChanged(const QString& new_username) {
|
||||
if (new_username.isEmpty()) {
|
||||
m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Warning, tr("Username is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Ok, tr("Username looks ok."));
|
||||
}
|
||||
@ -104,7 +102,6 @@ void SettingsDatabase::onMysqlPasswordChanged(const QString& new_password) {
|
||||
if (new_password.isEmpty()) {
|
||||
m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Warning, tr("Password is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Ok, tr("Password looks ok."));
|
||||
}
|
||||
@ -114,7 +111,6 @@ void SettingsDatabase::onMysqlDatabaseChanged(const QString& new_database) {
|
||||
if (new_database.isEmpty()) {
|
||||
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Warning, tr("Working database is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Ok, tr("Working database is ok."));
|
||||
}
|
||||
@ -126,11 +122,9 @@ void SettingsDatabase::selectSqlBackend(int index) {
|
||||
if (selected_db_driver == APP_DB_SQLITE_DRIVER) {
|
||||
m_ui->m_stackedDatabaseDriver->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
else if (selected_db_driver == APP_DB_MYSQL_DRIVER) {
|
||||
m_ui->m_stackedDatabaseDriver->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("GUI for given database driver '%s' is not available.", qPrintable(selected_db_driver));
|
||||
}
|
||||
|
@ -71,7 +71,6 @@ void SettingsGeneral::saveSettings() {
|
||||
if (m_ui->m_checkAutostart->isChecked()) {
|
||||
qApp->system()->setAutoStartStatus(SystemFactory::AutoStartStatus::Enabled);
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->system()->setAutoStartStatus(SystemFactory::AutoStartStatus::Disabled);
|
||||
}
|
||||
|
@ -98,7 +98,6 @@ void SettingsGui::loadSettings() {
|
||||
if (SystemTrayIcon::isSystemTrayAvailable()) {
|
||||
m_ui->m_grpTray->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::UseTrayIcon)).toBool());
|
||||
}
|
||||
|
||||
// Tray icon is not supported on this machine.
|
||||
else {
|
||||
m_ui->m_grpTray->setTitle(m_ui->m_grpTray->title() + QL1C(' ') + tr("(Tray icon is not available.)"));
|
||||
@ -118,7 +117,6 @@ void SettingsGui::loadSettings() {
|
||||
//: Label for disabling icon theme.
|
||||
m_ui->m_cmbIconTheme->addItem(tr("no icon theme/system icon theme"), APP_NO_THEME);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_cmbIconTheme->addItem(icon_theme_name, icon_theme_name);
|
||||
}
|
||||
@ -129,7 +127,6 @@ void SettingsGui::loadSettings() {
|
||||
// Because "no icon theme" lies at the index 0.
|
||||
m_ui->m_cmbIconTheme->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_cmbIconTheme->setCurrentText(current_theme);
|
||||
}
|
||||
@ -203,7 +200,6 @@ void SettingsGui::saveSettings() {
|
||||
if (m_ui->m_grpTray->isChecked()) {
|
||||
qApp->showTrayIcon();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->deleteTrayIcon();
|
||||
}
|
||||
|
@ -111,25 +111,21 @@ QList<QAction*> StatusBar::getSpecificActions(const QStringList& actions) {
|
||||
action_to_add = m_barProgressDownloadAction;
|
||||
widget_to_add->setVisible(false);
|
||||
}
|
||||
|
||||
else if (matching_action == m_barProgressFeedsAction) {
|
||||
widget_to_add = m_barProgressFeeds;
|
||||
action_to_add = m_barProgressFeedsAction;
|
||||
widget_to_add->setVisible(progress_visible);
|
||||
}
|
||||
|
||||
else if (matching_action == m_lblProgressDownloadAction) {
|
||||
widget_to_add = m_lblProgressDownload;
|
||||
action_to_add = m_lblProgressDownloadAction;
|
||||
widget_to_add->setVisible(false);
|
||||
}
|
||||
|
||||
else if (matching_action == m_lblProgressFeedsAction) {
|
||||
widget_to_add = m_lblProgressFeeds;
|
||||
action_to_add = m_lblProgressFeedsAction;
|
||||
widget_to_add->setVisible(progress_visible);
|
||||
}
|
||||
|
||||
else {
|
||||
if (action_name == SEPARATOR_ACTION_NAME) {
|
||||
QLabel* lbl = new QLabel(QString::fromUtf8("•"));
|
||||
@ -138,7 +134,6 @@ QList<QAction*> StatusBar::getSpecificActions(const QStringList& actions) {
|
||||
action_to_add->setSeparator(true);
|
||||
action_to_add->setProperty("should_remove_action", true);
|
||||
}
|
||||
|
||||
else if (action_name == SPACER_ACTION_NAME) {
|
||||
QLabel* lbl = new QLabel(QSL("\t\t"));
|
||||
widget_to_add = lbl;
|
||||
@ -148,7 +143,6 @@ QList<QAction*> StatusBar::getSpecificActions(const QStringList& actions) {
|
||||
action_to_add->setProperty("type", SPACER_ACTION_NAME);
|
||||
action_to_add->setProperty("name", tr("Toolbar spacer"));
|
||||
}
|
||||
|
||||
else if (matching_action != nullptr) {
|
||||
// Add originally toolbar action.
|
||||
PlainToolButton* tool_button = new PlainToolButton(this);
|
||||
@ -158,7 +152,6 @@ QList<QAction*> StatusBar::getSpecificActions(const QStringList& actions) {
|
||||
connect(tool_button, &PlainToolButton::clicked, matching_action, &QAction::trigger);
|
||||
connect(matching_action, &QAction::changed, tool_button, &PlainToolButton::reactOnSenderActionChange);
|
||||
}
|
||||
|
||||
else {
|
||||
action_to_add = nullptr;
|
||||
widget_to_add = nullptr;
|
||||
|
@ -49,14 +49,12 @@ bool TrayIconMenu::event(QEvent* event) {
|
||||
SystemTrayIcon::SystemTrayIcon(const QString& normal_icon, const QString& plain_icon, FormMain* parent)
|
||||
: QSystemTrayIcon(parent),
|
||||
m_normalIcon(normal_icon),
|
||||
m_plainPixmap(plain_icon) {
|
||||
m_plainPixmap(plain_icon) {
|
||||
qDebug("Creating SystemTrayIcon instance.");
|
||||
m_font.setBold(true);
|
||||
|
||||
// Initialize icon.
|
||||
setNumber();
|
||||
setContextMenu(parent->trayMenu());
|
||||
|
||||
// Create necessary connections.
|
||||
connect(this, &SystemTrayIcon::activated, this, &SystemTrayIcon::onActivated);
|
||||
}
|
||||
@ -96,11 +94,9 @@ void SystemTrayIcon::showPrivate() {
|
||||
// the settings window) gets closed. Behavior for main window
|
||||
// is handled explicitly by FormMain::closeEvent() method.
|
||||
qApp->setQuitOnLastWindowClosed(false);
|
||||
|
||||
// Display the tray icon.
|
||||
QSystemTrayIcon::show();
|
||||
emit shown();
|
||||
|
||||
qDebug("Tray icon displayed.");
|
||||
}
|
||||
|
||||
@ -125,7 +121,6 @@ void SystemTrayIcon::setNumber(int number, bool any_new_message) {
|
||||
setToolTip(tr("%1\nUnread news: %2").arg(QSL(APP_LONG_NAME), QString::number(number)));
|
||||
QPixmap background(m_plainPixmap);
|
||||
QPainter tray_painter;
|
||||
|
||||
// FIXME: Here draw different background instead of different color of number.
|
||||
tray_painter.begin(&background);
|
||||
tray_painter.setPen(any_new_message ? Qt::black : Qt::black);
|
||||
@ -163,14 +158,14 @@ void SystemTrayIcon::setNumber(int number, bool any_new_message) {
|
||||
|
||||
void SystemTrayIcon::showMessage(const QString& title, const QString& message, QSystemTrayIcon::MessageIcon icon,
|
||||
int milliseconds_timeout_hint, std::function<void()> functor) {
|
||||
if (m_connection) {
|
||||
if (m_connection) {
|
||||
// Disconnect previous bubble click signalling.
|
||||
disconnect(m_connection);
|
||||
disconnect(m_connection);
|
||||
}
|
||||
|
||||
if (functor) {
|
||||
if (functor) {
|
||||
// Establish new connection for bubble click.
|
||||
m_connection = connect(this, &SystemTrayIcon::messageClicked, functor);
|
||||
m_connection = connect(this, &SystemTrayIcon::messageClicked, functor);
|
||||
}
|
||||
|
||||
// NOTE: If connections do not work, then use QMetaObject::invokeMethod(...).
|
||||
|
@ -57,7 +57,7 @@ class SystemTrayIcon : public QSystemTrayIcon {
|
||||
void setNumber(int number = -1, bool any_new_message = false);
|
||||
|
||||
void showMessage(const QString& title, const QString& message, MessageIcon icon = Information,
|
||||
int milliseconds_timeout_hint = TRAY_ICON_BUBBLE_TIMEOUT, std::function<void()> functor = nullptr);
|
||||
int milliseconds_timeout_hint = TRAY_ICON_BUBBLE_TIMEOUT, std::function<void()> functor = nullptr);
|
||||
|
||||
// Returns true if tray icon CAN be constructed on this machine.
|
||||
static bool isSystemTrayAvailable();
|
||||
@ -82,9 +82,9 @@ class SystemTrayIcon : public QSystemTrayIcon {
|
||||
private:
|
||||
QIcon m_normalIcon;
|
||||
QPixmap m_plainPixmap;
|
||||
QFont m_font = QFont();
|
||||
QFont m_font = QFont();
|
||||
|
||||
QMetaObject::Connection m_connection;
|
||||
QMetaObject::Connection m_connection;
|
||||
};
|
||||
|
||||
#endif // SYSTEMTRAYICON_H
|
||||
|
@ -93,7 +93,6 @@ void TabBar::wheelEvent(QWheelEvent* event) {
|
||||
number_of_tabs - 1 :
|
||||
current_index - 1);
|
||||
}
|
||||
|
||||
else if (event->delta() < 0) {
|
||||
// Scroll to the RIGHT tab.
|
||||
setCurrentIndex(current_index == number_of_tabs - 1 ?
|
||||
@ -137,7 +136,6 @@ void TabBar::mouseDoubleClickEvent(QMouseEvent* event) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
emit emptySpaceDoubleClicked();
|
||||
}
|
||||
|
@ -103,7 +103,6 @@ void TabWidget::checkTabBarVisibility() {
|
||||
setCornerWidget(m_btnMainMenu, Qt::TopLeftCorner);
|
||||
m_btnMainMenu->setVisible(true);
|
||||
}
|
||||
|
||||
else {
|
||||
setCornerWidget(0, Qt::TopLeftCorner);
|
||||
setCornerWidget(0, Qt::TopRightCorner);
|
||||
@ -166,12 +165,10 @@ bool TabWidget::closeTab(int index) {
|
||||
removeTab(index, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (tabBar()->tabType(index) == TabBar::DownloadManager) {
|
||||
removeTab(index, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -239,7 +236,6 @@ int TabWidget::addBrowser(bool move_after_current, bool make_active, const QUrl&
|
||||
final_index = insertTab(currentIndex() + 1, browser, qApp->icons()->fromTheme(QSL("text-html")),
|
||||
browser_tab_name, TabBar::Closable);
|
||||
}
|
||||
|
||||
else {
|
||||
// Add new browser as the last tab.
|
||||
final_index = addTab(browser, qApp->icons()->fromTheme(QSL("text-html")),
|
||||
|
@ -37,7 +37,6 @@ double TimeSpinBox::valueFromText(const QString& text) const {
|
||||
if (ok) {
|
||||
return value;
|
||||
}
|
||||
|
||||
else {
|
||||
QRegExp rx("\\b[0-9]{1,}\\b");
|
||||
QStringList numbers;
|
||||
@ -56,7 +55,6 @@ double TimeSpinBox::valueFromText(const QString& text) const {
|
||||
if (numbers.size() == 2) {
|
||||
return (numbers.at(0).toDouble() * 60.0) + numbers.at(1).toDouble();
|
||||
}
|
||||
|
||||
else {
|
||||
return -1.0;
|
||||
}
|
||||
|
@ -90,13 +90,11 @@ void ToolBarEditor::loadEditor(const QList<QAction*> activated_actions, const QL
|
||||
action_item->setText(tr("Separator"));
|
||||
action_item->setToolTip(tr("Separator"));
|
||||
}
|
||||
|
||||
else if (action->property("type").isValid()) {
|
||||
action_item->setData(Qt::UserRole, action->property("type").toString());
|
||||
action_item->setText(action->property("name").toString());
|
||||
action_item->setToolTip(action_item->text());
|
||||
}
|
||||
|
||||
else {
|
||||
action_item->setData(Qt::UserRole, action->objectName());
|
||||
action_item->setToolTip(action->toolTip());
|
||||
@ -113,13 +111,11 @@ void ToolBarEditor::loadEditor(const QList<QAction*> activated_actions, const QL
|
||||
action_item->setToolTip(tr("Separator"));
|
||||
action_item->setIcon(qApp->icons()->fromTheme(QSL("insert-object")));
|
||||
}
|
||||
|
||||
else if (action->property("type").isValid()) {
|
||||
action_item->setData(Qt::UserRole, action->property("type").toString());
|
||||
action_item->setText(action->property("name").toString());
|
||||
action_item->setToolTip(action_item->text());
|
||||
}
|
||||
|
||||
else {
|
||||
action_item->setData(Qt::UserRole, action->objectName());
|
||||
action_item->setToolTip(action->toolTip());
|
||||
@ -141,12 +137,10 @@ bool ToolBarEditor::eventFilter(QObject* object, QEvent* event) {
|
||||
deleteSelectedAction();
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (key_event->key() == Qt::Key_Down && key_event->modifiers() & Qt::ControlModifier) {
|
||||
moveActionDown();
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (key_event->key() == Qt::Key_Up && key_event->modifiers() & Qt::ControlModifier) {
|
||||
moveActionUp();
|
||||
return true;
|
||||
@ -238,7 +232,6 @@ void ToolBarEditor::deleteSelectedAction() {
|
||||
m_ui->m_listActivatedActions->takeItem(m_ui->m_listActivatedActions->row(selected_item));
|
||||
updateActionsAvailability();
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_listAvailableActions->insertItem(
|
||||
m_ui->m_listAvailableActions->currentRow() + 1,
|
||||
|
@ -108,7 +108,6 @@ void TreeWidget::filterString(const QString& string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
item->setHidden(true);
|
||||
|
||||
@ -125,7 +124,6 @@ void TreeWidget::filterString(const QString& string) {
|
||||
if (stringIsEmpty) {
|
||||
parentItem->setExpanded(m_showMode == ItemsExpanded);
|
||||
}
|
||||
|
||||
else {
|
||||
parentItem->setExpanded(true);
|
||||
}
|
||||
|
@ -158,7 +158,6 @@ void WebBrowser::onTitleChanged(const QString& new_title) {
|
||||
//: Webbrowser tab title when no title is available.
|
||||
emit titleChanged(m_index, tr("No title"));
|
||||
}
|
||||
|
||||
else {
|
||||
emit titleChanged(m_index, new_title);
|
||||
}
|
||||
@ -223,7 +222,6 @@ void WebBrowser::onLoadingFinished(bool success) {
|
||||
this->m_btnDiscoverFeeds->setFeedAddresses(NetworkFactory::extractFeedLinksFromHtmlPage(m_webView->url(), result));
|
||||
});
|
||||
}
|
||||
|
||||
else {
|
||||
m_btnDiscoverFeeds->clearFeedAddresses();
|
||||
}
|
||||
|
@ -58,7 +58,6 @@ bool WebViewer::increaseWebPageZoom() {
|
||||
setZoomFactor(zoomFactor() + ZOOM_FACTOR_STEP);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -69,7 +68,6 @@ bool WebViewer::decreaseWebPageZoom() {
|
||||
setZoomFactor(zoomFactor() - ZOOM_FACTOR_STEP);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -82,7 +80,6 @@ bool WebViewer::resetWebPageZoom() {
|
||||
setZoomFactor(new_factor);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -145,11 +142,9 @@ void WebViewer::clear() {
|
||||
|
||||
void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
|
||||
event->accept();
|
||||
|
||||
QMenu* menu = page()->createStandardContextMenu();
|
||||
menu->addAction(AdBlockManager::instance()->adBlockIcon());
|
||||
menu->addAction(qApp->web()->engineSettingsAction());
|
||||
|
||||
const QPoint pos = event->globalPos();
|
||||
QPoint p(pos.x(), pos.y() + 1);
|
||||
menu->popup(p);
|
||||
@ -162,7 +157,6 @@ QWebEngineView* WebViewer::createWindow(QWebEnginePage::WebWindowType type) {
|
||||
if (index >= 0) {
|
||||
return qApp->mainForm()->tabWidget()->widget(index)->webBrowser()->viewer();
|
||||
}
|
||||
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
@ -175,7 +169,6 @@ void WebViewer::wheelEvent(QWheelEvent* event) {
|
||||
if (event->delta() > 0) {
|
||||
increaseWebPageZoom();
|
||||
}
|
||||
|
||||
else if (event->delta() < 0) {
|
||||
decreaseWebPageZoom();
|
||||
}
|
||||
|
31
src/main.cpp
31
src/main.cpp
@ -59,17 +59,13 @@ int main(int argc, char* argv[]) {
|
||||
//: Use ISO 639-1 code here combined with ISO 3166-1 (alpha-2) code.
|
||||
//: Examples: "cs", "en", "it", "cs_CZ", "en_GB", "en_US".
|
||||
QObject::tr("LANG_ABBREV");
|
||||
|
||||
//: Name of translator - optional.
|
||||
QObject::tr("LANG_AUTHOR");
|
||||
|
||||
// Ensure that ini format is used as application settings storage on Mac OS.
|
||||
QSettings::setDefaultFormat(QSettings::IniFormat);
|
||||
|
||||
// Setup debug output system.
|
||||
qInstallMessageHandler(Debugging::debugHandler);
|
||||
// Instantiate base application object.
|
||||
|
||||
Application application(APP_LOW_NAME, argc, argv);
|
||||
qDebug("Instantiated Application class.");
|
||||
|
||||
@ -88,36 +84,28 @@ int main(int argc, char* argv[]) {
|
||||
QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
|
||||
disableWindowTabbing();
|
||||
#endif
|
||||
|
||||
// Register needed metatypes.
|
||||
qRegisterMetaType<QList<Message>>("QList<Message>");
|
||||
qRegisterMetaType<QList<RootItem*>>("QList<RootItem*>");
|
||||
|
||||
// Add an extra path for non-system icon themes and set current icon theme
|
||||
// and skin.
|
||||
qApp->icons()->setupSearchPaths();
|
||||
qApp->icons()->loadCurrentIconTheme();
|
||||
qApp->skins()->loadCurrentSkin();
|
||||
|
||||
// These settings needs to be set before any QSettings object.
|
||||
Application::setApplicationName(APP_NAME);
|
||||
Application::setApplicationVersion(APP_VERSION);
|
||||
Application::setOrganizationDomain(APP_URL);
|
||||
Application::setWindowIcon(QIcon(APP_ICON_PATH));
|
||||
|
||||
// Load activated accounts.
|
||||
qApp->feedReader()->feedsModel()->loadActivatedServiceAccounts();
|
||||
|
||||
// Setup single-instance behavior.
|
||||
QObject::connect(&application, &Application::messageReceived, &application, &Application::processExecutionMessage);
|
||||
qDebug().nospace() << "Creating main application form in thread: \'" << QThread::currentThreadId() << "\'.";
|
||||
|
||||
// Instantiate main application window.
|
||||
FormMain main_window;
|
||||
|
||||
// Set correct information for main window.
|
||||
main_window.setWindowTitle(APP_LONG_NAME);
|
||||
|
||||
// Now is a good time to initialize dynamic keyboard shortcuts.
|
||||
DynamicShortcuts::load(qApp->userActions());
|
||||
|
||||
@ -126,7 +114,6 @@ int main(int argc, char* argv[]) {
|
||||
qDebug("Hiding the main window when the application is starting.");
|
||||
main_window.switchVisibility(true);
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("Showing the main window when the application is starting.");
|
||||
main_window.show();
|
||||
@ -139,12 +126,11 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
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"
|
||||
"version by clicking this popup notification.").arg(APP_LONG_NAME),
|
||||
QSystemTrayIcon::NoIcon, 0, false, [] {
|
||||
FormAbout(qApp->mainForm()).exec();
|
||||
});
|
||||
"version by clicking this popup notification.").arg(APP_LONG_NAME),
|
||||
QSystemTrayIcon::NoIcon, 0, false, [] {
|
||||
FormAbout(qApp->mainForm()).exec();
|
||||
});
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(QSL(APP_NAME), QObject::tr("Welcome to %1.").arg(APP_NAME), QSystemTrayIcon::NoIcon);
|
||||
}
|
||||
@ -157,17 +143,16 @@ int main(int argc, char* argv[]) {
|
||||
!SystemFactory::isVersionNewer(updates.first.at(0).m_availableVersion, APP_VERSION)) {
|
||||
qApp->showGuiMessage(QObject::tr("New version available"),
|
||||
QObject::tr("Click the bubble for more information."),
|
||||
QSystemTrayIcon::Information, qApp->mainForm(), false,
|
||||
[] {
|
||||
FormUpdate(qApp->mainForm()).exec();
|
||||
});
|
||||
QSystemTrayIcon::Information, qApp->mainForm(), false,
|
||||
[] {
|
||||
FormUpdate(qApp->mainForm()).exec();
|
||||
});
|
||||
}
|
||||
});
|
||||
qApp->system()->checkForUpdates();
|
||||
}
|
||||
|
||||
qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsView()->loadAllExpandStates();
|
||||
|
||||
// Enter global event loop.
|
||||
return Application::exec();
|
||||
}
|
||||
|
@ -65,15 +65,12 @@ Application::Application(const QString& id, int& argc, char** argv)
|
||||
connect(this, &Application::aboutToQuit, this, &Application::onAboutToQuit);
|
||||
connect(this, &Application::commitDataRequest, this, &Application::onCommitData);
|
||||
connect(this, &Application::saveStateRequest, this, &Application::onSaveState);
|
||||
|
||||
#if defined(USE_WEBENGINE)
|
||||
connect(QWebEngineProfile::defaultProfile(), &QWebEngineProfile::downloadRequested, this, &Application::downloadRequested);
|
||||
QWebEngineProfile::defaultProfile()->setRequestInterceptor(m_urlInterceptor);
|
||||
|
||||
// TODO: Call load settings when saving app settings from dialog.
|
||||
// Will need add that if I add more settings in the future.
|
||||
m_urlInterceptor->loadSettings();
|
||||
|
||||
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler(
|
||||
QByteArray(APP_LOW_NAME),
|
||||
new RssGuardSchemeHandler(QWebEngineProfile::defaultProfile()));
|
||||
@ -91,7 +88,6 @@ FeedReader* Application::feedReader() {
|
||||
QList<QAction*> Application::userActions() {
|
||||
if (m_mainForm != nullptr && m_userActions.isEmpty()) {
|
||||
m_userActions = m_mainForm->allActions();
|
||||
|
||||
#if defined(USE_WEBENGINE)
|
||||
m_userActions.append(AdBlockManager::instance()->adBlockIcon());
|
||||
#endif
|
||||
@ -109,7 +105,6 @@ bool Application::isFirstRun(const QString& version) {
|
||||
// Check this only if checked version is equal to actual version.
|
||||
return settings()->value(GROUP(General), QString(General::FirstRun) + QL1C('_') + version, true).toBool();
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -228,7 +223,6 @@ QString Application::userDataPath() {
|
||||
if (settings()->type() == SettingsProperties::Portable) {
|
||||
return getUserDataAppPath();
|
||||
}
|
||||
|
||||
else {
|
||||
return getUserDataHomePath();
|
||||
}
|
||||
@ -241,7 +235,6 @@ QString Application::getUserDataHomePath() {
|
||||
if (QDir().exists(home_folder)) {
|
||||
return home_folder;
|
||||
}
|
||||
|
||||
else {
|
||||
return getConfigHomePath() + QDir::separator() + QSL(APP_NAME);
|
||||
}
|
||||
@ -307,14 +300,12 @@ void Application::processExecutionMessage(const QString& message) {
|
||||
if (messages.contains(APP_QUIT_INSTANCE)) {
|
||||
quit();
|
||||
}
|
||||
|
||||
else {
|
||||
foreach (const QString& msg, messages) {
|
||||
if (msg == APP_IS_RUNNING) {
|
||||
showGuiMessage(APP_NAME, tr("Application is already running."), QSystemTrayIcon::Information);
|
||||
mainForm()->display();
|
||||
}
|
||||
|
||||
else if (msg.startsWith(QL1S(URI_SCHEME_FEED_SHORT))) {
|
||||
// Application was running, and someone wants to add new feed.
|
||||
StandardServiceRoot* root = qApp->feedReader()->feedsModel()->standardServiceRoot();
|
||||
@ -322,7 +313,6 @@ void Application::processExecutionMessage(const QString& message) {
|
||||
if (root != nullptr) {
|
||||
root->checkArgumentForFeedAdding(msg);
|
||||
}
|
||||
|
||||
else {
|
||||
showGuiMessage(tr("Cannot add feed"),
|
||||
tr("Feed cannot be added because standard RSS/ATOM account is not enabled."),
|
||||
|
@ -118,7 +118,7 @@ class Application : public QtSingleApplication {
|
||||
// or in message box if tray icon is disabled.
|
||||
void showGuiMessage(const QString& title, const QString& message, QSystemTrayIcon::MessageIcon message_type,
|
||||
QWidget* parent = nullptr, bool show_at_least_msgbox = false,
|
||||
std::function<void()> functor = nullptr);
|
||||
std::function<void()> functor = nullptr);
|
||||
|
||||
// Returns pointer to "GOD" application singleton.
|
||||
inline static Application* instance() {
|
||||
|
@ -47,7 +47,6 @@ void AutoSaver::changeOccurred() {
|
||||
if (m_firstChange.elapsed() > MAXWAIT) {
|
||||
saveIfNeccessary();
|
||||
}
|
||||
|
||||
else {
|
||||
m_timer.start(AUTOSAVE_IN, this);
|
||||
}
|
||||
@ -57,7 +56,6 @@ void AutoSaver::timerEvent(QTimerEvent* event) {
|
||||
if (event->timerId() == m_timer.timerId()) {
|
||||
saveIfNeccessary();
|
||||
}
|
||||
|
||||
else {
|
||||
QObject::timerEvent(event);
|
||||
}
|
||||
|
@ -44,7 +44,6 @@ qint64 DatabaseFactory::getDatabaseFileSize() const {
|
||||
if (m_activeDatabaseDriver == SQLITE || m_activeDatabaseDriver == SQLITE_MEMORY) {
|
||||
return QFileInfo(sqliteDatabaseFilePath()).size();
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -60,7 +59,6 @@ qint64 DatabaseFactory::getDatabaseDataSize() const {
|
||||
query.next();
|
||||
result *= query.value(0).value<qint64>();
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -69,14 +67,12 @@ qint64 DatabaseFactory::getDatabaseDataSize() const {
|
||||
query.next();
|
||||
result *= query.value(0).value<qint64>();
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
else if (m_activeDatabaseDriver == MYSQL) {
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
qint64 result = 1;
|
||||
@ -91,12 +87,10 @@ qint64 DatabaseFactory::getDatabaseDataSize() const {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -120,18 +114,15 @@ DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString&
|
||||
database.close();
|
||||
return MySQLOk;
|
||||
}
|
||||
|
||||
else {
|
||||
database.close();
|
||||
return MySQLUnknownError;
|
||||
}
|
||||
}
|
||||
|
||||
else if (database.lastError().isValid()) {
|
||||
// Connection failed, do cleanup and return specific error code.
|
||||
return static_cast<MySQLError>(database.lastError().number());
|
||||
}
|
||||
|
||||
else {
|
||||
return MySQLUnknownError;
|
||||
}
|
||||
@ -187,7 +178,6 @@ void DatabaseFactory::finishRestoration() {
|
||||
QFile::remove(backup_database_file);
|
||||
qDebug("Database file was restored successully.");
|
||||
}
|
||||
|
||||
else {
|
||||
qCritical("Database file was NOT restored due to error when copying the file.");
|
||||
}
|
||||
@ -205,7 +195,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() {
|
||||
if (!database.open()) {
|
||||
qFatal("In-memory SQLite database was NOT opened. Delivered error message: '%s'", qPrintable(database.lastError().text()));
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlQuery query_db(database);
|
||||
query_db.setForwardOnly(true);
|
||||
@ -244,7 +233,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() {
|
||||
database.commit();
|
||||
qDebug("In-memory SQLite database backend should be ready now.");
|
||||
}
|
||||
|
||||
else {
|
||||
query_db.next();
|
||||
qDebug("In-memory SQLite database connection seems to be established.");
|
||||
@ -264,7 +252,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() {
|
||||
tables.append(copy_contents.value(0).toString());
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
qFatal("Cannot obtain list of table names from file-base SQLite database.");
|
||||
}
|
||||
@ -311,7 +298,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString& c
|
||||
qFatal("File-based SQLite database was NOT opened. Delivered error message: '%s'",
|
||||
qPrintable(database.lastError().text()));
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlQuery query_db(database);
|
||||
query_db.setForwardOnly(true);
|
||||
@ -351,7 +337,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString& c
|
||||
query_db.finish();
|
||||
qDebug("File-based SQLite database backend should be ready now.");
|
||||
}
|
||||
|
||||
else {
|
||||
query_db.next();
|
||||
const QString installed_db_schema = query_db.value(0).toString();
|
||||
@ -363,7 +348,6 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString& c
|
||||
qPrintable(installed_db_schema),
|
||||
APP_DB_SCHEMA_VERSION);
|
||||
}
|
||||
|
||||
else {
|
||||
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
||||
qPrintable(installed_db_schema),
|
||||
@ -395,7 +379,6 @@ bool DatabaseFactory::sqliteUpdateDatabaseSchema(QSqlDatabase database, const QS
|
||||
if (IOFactory::copyFile(sqliteDatabaseFilePath(), sqliteDatabaseFilePath() + ".bak")) {
|
||||
qDebug("Creating backup of SQLite DB file.");
|
||||
}
|
||||
|
||||
else {
|
||||
qFatal("Creation of backup SQLite DB file failed.");
|
||||
}
|
||||
@ -500,11 +483,9 @@ QString DatabaseFactory::humanDriverName(const QString& driver_code) const {
|
||||
if (driver_code == APP_DB_SQLITE_DRIVER) {
|
||||
return humanDriverName(SQLITE);
|
||||
}
|
||||
|
||||
else if (driver_code == APP_DB_MYSQL_DRIVER) {
|
||||
return humanDriverName(MYSQL);
|
||||
}
|
||||
|
||||
else {
|
||||
return humanDriverName(SQLITE);
|
||||
}
|
||||
@ -519,7 +500,6 @@ QString DatabaseFactory::obtainBeginTransactionSql() const {
|
||||
if (m_activeDatabaseDriver == DatabaseFactory::SQLITE || m_activeDatabaseDriver == DatabaseFactory::SQLITE_MEMORY) {
|
||||
return QSL("BEGIN IMMEDIATE TRANSACTION;");
|
||||
}
|
||||
|
||||
else {
|
||||
return QSL("START TRANSACTION;");
|
||||
}
|
||||
@ -540,7 +520,6 @@ void DatabaseFactory::sqliteSaveMemoryDatabase() {
|
||||
tables.append(copy_contents.value(0).toString());
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
qFatal("Cannot obtain list of table names from file-base SQLite database.");
|
||||
}
|
||||
@ -563,7 +542,6 @@ void DatabaseFactory::determineDriver() {
|
||||
m_activeDatabaseDriver = MYSQL;
|
||||
qDebug("Working database source was as MySQL database.");
|
||||
}
|
||||
|
||||
else {
|
||||
// User wants to use SQLite, which is always available. Check if file-based
|
||||
// or in-memory database will be used.
|
||||
@ -572,7 +550,6 @@ void DatabaseFactory::determineDriver() {
|
||||
m_activeDatabaseDriver = SQLITE_MEMORY;
|
||||
qDebug("Working database source was determined as SQLite in-memory database.");
|
||||
}
|
||||
|
||||
else {
|
||||
// Use strictly file-base SQLite database.
|
||||
m_activeDatabaseDriver = SQLITE;
|
||||
@ -592,7 +569,6 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString& connection_name) {
|
||||
// Return initialized database.
|
||||
return mysqlInitializeDatabase(connection_name);
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlDatabase database;
|
||||
|
||||
@ -602,7 +578,6 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString& connection_name) {
|
||||
// setup its properties.
|
||||
database = QSqlDatabase::database(connection_name);
|
||||
}
|
||||
|
||||
else {
|
||||
// Database connection with this name does not exist
|
||||
// yet, add it and set it up.
|
||||
@ -618,7 +593,6 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString& connection_name) {
|
||||
qFatal("MySQL database was NOT opened. Delivered error message: '%s'.",
|
||||
qPrintable(database.lastError().text()));
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("MySQL database connection '%s' to file '%s' seems to be established.",
|
||||
qPrintable(connection_name),
|
||||
@ -649,7 +623,6 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString& connection_
|
||||
"and make adjustments in application settings.").arg(APP_NAME));
|
||||
return connection(objectName(), FromSettings);
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlQuery query_db(database);
|
||||
query_db.setForwardOnly(true);
|
||||
@ -683,7 +656,6 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString& connection_
|
||||
database.commit();
|
||||
qDebug("MySQL database backend should be ready now.");
|
||||
}
|
||||
|
||||
else {
|
||||
// Database was previously initialized. Now just check the schema version.
|
||||
query_db.next();
|
||||
@ -695,7 +667,6 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString& connection_
|
||||
qPrintable(installed_db_schema),
|
||||
APP_DB_SCHEMA_VERSION);
|
||||
}
|
||||
|
||||
else {
|
||||
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
||||
qPrintable(installed_db_schema),
|
||||
@ -727,7 +698,6 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString& connection_name, D
|
||||
// It is not initialized yet.
|
||||
return sqliteInitializeInMemoryDatabase();
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlDatabase database = QSqlDatabase::database();
|
||||
database.setDatabaseName(QSL(":memory:"));
|
||||
@ -736,7 +706,6 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString& connection_name, D
|
||||
qFatal("In-memory SQLite database was NOT opened. Delivered error message: '%s'.",
|
||||
qPrintable(database.lastError().text()));
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("In-memory SQLite database connection seems to be established.");
|
||||
}
|
||||
@ -744,14 +713,12 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString& connection_name, D
|
||||
return database;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// We request file-based database.
|
||||
if (!m_sqliteFileBasedDatabaseinitialized) {
|
||||
// File-based database is not yet initialised.
|
||||
return sqliteInitializeFileBasedDatabase(connection_name);
|
||||
}
|
||||
|
||||
else {
|
||||
QSqlDatabase database;
|
||||
|
||||
@ -761,7 +728,6 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString& connection_name, D
|
||||
// setup its properties.
|
||||
database = QSqlDatabase::database(connection_name);
|
||||
}
|
||||
|
||||
else {
|
||||
// Database connection with this name does not exist
|
||||
// yet, add it and set it up.
|
||||
@ -776,7 +742,6 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString& connection_name, D
|
||||
qFatal("File-based SQLite database was NOT opened. Delivered error message: '%s'.",
|
||||
qPrintable(database.lastError().text()));
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("File-based SQLite database connection '%s' to file '%s' seems to be established.",
|
||||
qPrintable(connection_name),
|
||||
@ -794,12 +759,10 @@ bool DatabaseFactory::sqliteVacuumDatabase() {
|
||||
if (m_activeDatabaseDriver == SQLITE) {
|
||||
database = sqliteConnection(objectName(), StrictlyFileBased);
|
||||
}
|
||||
|
||||
else if (m_activeDatabaseDriver == SQLITE_MEMORY) {
|
||||
sqliteSaveMemoryDatabase();
|
||||
database = sqliteConnection(objectName(), StrictlyFileBased);
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
@ -169,7 +169,6 @@ bool including_total_counts, bool* ok) {
|
||||
"WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id "
|
||||
"GROUP BY feed;");
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare("SELECT feed, sum((is_read + 1) % 2) FROM Messages "
|
||||
"WHERE feed IN (SELECT custom_id FROM Feeds WHERE category = :category AND account_id = :account_id) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id "
|
||||
@ -188,7 +187,6 @@ bool including_total_counts, bool* ok) {
|
||||
int total_count = q.value(2).toInt();
|
||||
counts.insert(feed_id, QPair<int, int>(unread_count, total_count));
|
||||
}
|
||||
|
||||
else {
|
||||
counts.insert(feed_id, QPair<int, int>(unread_count, 0));
|
||||
}
|
||||
@ -198,7 +196,6 @@ bool including_total_counts, bool* ok) {
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -219,7 +216,6 @@ bool including_total_counts, bool* ok) {
|
||||
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id "
|
||||
"GROUP BY feed;");
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare("SELECT feed, sum((is_read + 1) % 2) FROM Messages "
|
||||
"WHERE is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id "
|
||||
@ -237,7 +233,6 @@ bool including_total_counts, bool* ok) {
|
||||
int total_count = q.value(2).toInt();
|
||||
counts.insert(feed_id, QPair<int, int>(unread_count, total_count));
|
||||
}
|
||||
|
||||
else {
|
||||
counts.insert(feed_id, QPair<int, int>(unread_count, 0));
|
||||
}
|
||||
@ -247,7 +242,6 @@ bool including_total_counts, bool* ok) {
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -266,7 +260,6 @@ int DatabaseQueries::getMessageCountsForFeed(QSqlDatabase db, int feed_custom_id
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE feed = :feed AND is_deleted = 0 AND is_pdeleted = 0 AND is_read = 0 AND account_id = :account_id;");
|
||||
@ -282,7 +275,6 @@ int DatabaseQueries::getMessageCountsForFeed(QSqlDatabase db, int feed_custom_id
|
||||
|
||||
return q.value(0).toInt();
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -300,7 +292,6 @@ int DatabaseQueries::getMessageCountsForBin(QSqlDatabase db, int account_id, boo
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare("SELECT count(*) FROM Messages "
|
||||
"WHERE is_read = 0 AND is_deleted = 1 AND is_pdeleted = 0 AND account_id = :account_id;");
|
||||
@ -315,7 +306,6 @@ int DatabaseQueries::getMessageCountsForBin(QSqlDatabase db, int account_id, boo
|
||||
|
||||
return q.value(0).toInt();
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -349,7 +339,6 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForFeed(QSqlDatabase db, int
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -382,7 +371,6 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForBin(QSqlDatabase db, int
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -415,7 +403,6 @@ QList<Message> DatabaseQueries::getUndeletedMessagesForAccount(QSqlDatabase db,
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -482,7 +469,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
if (message.m_url.startsWith(QL1S("//"))) {
|
||||
message.m_url = QString(URI_SCHEME_HTTP) + message.m_url.mid(2);
|
||||
}
|
||||
|
||||
else if (message.m_url.startsWith(QL1S("/"))) {
|
||||
QString new_message_url = QUrl(url).toString(QUrl::RemoveUserInfo |
|
||||
QUrl::RemovePath |
|
||||
@ -515,14 +501,12 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
is_important_existing_message = query_select_with_url.value(3).toBool();
|
||||
contents_existing_message = query_select_with_url.value(4).toString();
|
||||
}
|
||||
|
||||
else if (query_select_with_url.lastError().isValid()) {
|
||||
qWarning("Failed to check for existing message in DB via URL: '%s'.", qPrintable(query_select_with_url.lastError().text()));
|
||||
}
|
||||
|
||||
query_select_with_url.finish();
|
||||
}
|
||||
|
||||
else {
|
||||
// We can recognize existing messages via their custom ID.
|
||||
// NOTE: This concerns messages from custom accounts, like TT-RSS or ownCloud News.
|
||||
@ -536,7 +520,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
is_important_existing_message = query_select_with_id.value(3).toBool();
|
||||
contents_existing_message = query_select_with_id.value(4).toString();
|
||||
}
|
||||
|
||||
else if (query_select_with_id.lastError().isValid()) {
|
||||
qDebug("Failed to check for existing message in DB via ID: '%s'.", qPrintable(query_select_with_id.lastError().text()));
|
||||
}
|
||||
@ -571,7 +554,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
if (query_update.exec() && !message.m_isRead) {
|
||||
updated_messages++;
|
||||
}
|
||||
|
||||
else if (query_update.lastError().isValid()) {
|
||||
qWarning("Failed to update message in DB: '%s'.", qPrintable(query_update.lastError().text()));
|
||||
}
|
||||
@ -580,7 +562,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
qDebug("Updating message '%s' in DB.", qPrintable(message.m_title));
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// Message with this URL is not fetched in this feed yet.
|
||||
query_insert.bindValue(QSL(":feed"), feed_custom_id);
|
||||
@ -600,7 +581,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
updated_messages++;
|
||||
qDebug("Added new message '%s' to DB.", qPrintable(message.m_title));
|
||||
}
|
||||
|
||||
else if (query_insert.lastError().isValid()) {
|
||||
qWarning("Failed to insert message to DB: '%s' - message title is '%s'.",
|
||||
qPrintable(query_insert.lastError().text()),
|
||||
@ -628,7 +608,6 @@ int DatabaseQueries::updateMessages(QSqlDatabase db,
|
||||
updated_messages = 0;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = true;
|
||||
@ -645,7 +624,6 @@ bool DatabaseQueries::purgeMessagesFromBin(QSqlDatabase db, bool clear_only_read
|
||||
if (clear_only_read) {
|
||||
q.prepare(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE is_read = 1 AND is_deleted = 1 AND account_id = :account_id;"));
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare(QSL("UPDATE Messages SET is_pdeleted = 1 WHERE is_deleted = 1 AND account_id = :account_id;"));
|
||||
}
|
||||
@ -671,7 +649,6 @@ bool DatabaseQueries::deleteAccount(QSqlDatabase db, int account_id) {
|
||||
qCritical("Removing of account from DB failed, this is critical: '%s'.", qPrintable(query.lastError().text()));
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
query.finish();
|
||||
}
|
||||
@ -709,7 +686,6 @@ bool DatabaseQueries::cleanFeeds(QSqlDatabase db, const QStringList& ids, bool c
|
||||
"WHERE feed IN (%1) AND is_deleted = 0 AND is_pdeleted = 0 AND is_read = 1 AND account_id = :account_id;")
|
||||
.arg(ids.join(QSL(", "))));
|
||||
}
|
||||
|
||||
else {
|
||||
q.prepare(QString("UPDATE Messages SET is_deleted = :deleted "
|
||||
"WHERE feed IN (%1) AND is_deleted = 0 AND is_pdeleted = 0 AND account_id = :account_id;")
|
||||
@ -723,7 +699,6 @@ bool DatabaseQueries::cleanFeeds(QSqlDatabase db, const QStringList& ids, bool c
|
||||
qDebug("Cleaning of feeds failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
@ -740,7 +715,6 @@ bool DatabaseQueries::purgeLeftoverMessages(QSqlDatabase db, int account_id) {
|
||||
qWarning("Removing of left over messages failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
@ -767,12 +741,10 @@ bool DatabaseQueries::storeAccountTree(QSqlDatabase db, RootItem* tree_root, int
|
||||
if (query_category.exec()) {
|
||||
child->setId(query_category.lastInsertId().toInt());
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
else if (child->kind() == RootItemKind::Feed) {
|
||||
Feed* feed = child->toFeed();
|
||||
query_feed.bindValue(QSL(":title"), feed->title());
|
||||
@ -787,7 +759,6 @@ bool DatabaseQueries::storeAccountTree(QSqlDatabase db, RootItem* tree_root, int
|
||||
if (query_feed.exec()) {
|
||||
feed->setId(query_feed.lastInsertId().toInt());
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -807,7 +778,6 @@ QStringList DatabaseQueries::customIdsOfMessagesFromAccount(QSqlDatabase db, int
|
||||
if (ok != nullptr) {
|
||||
*ok = q.exec();
|
||||
}
|
||||
|
||||
else {
|
||||
q.exec();
|
||||
}
|
||||
@ -829,7 +799,6 @@ QStringList DatabaseQueries::customIdsOfMessagesFromBin(QSqlDatabase db, int acc
|
||||
if (ok != nullptr) {
|
||||
*ok = q.exec();
|
||||
}
|
||||
|
||||
else {
|
||||
q.exec();
|
||||
}
|
||||
@ -852,7 +821,6 @@ QStringList DatabaseQueries::customIdsOfMessagesFromFeed(QSqlDatabase db, int fe
|
||||
if (ok != nullptr) {
|
||||
*ok = q.exec();
|
||||
}
|
||||
|
||||
else {
|
||||
q.exec();
|
||||
}
|
||||
@ -885,7 +853,6 @@ QList<ServiceRoot*> DatabaseQueries::getOwnCloudAccounts(QSqlDatabase db, bool*
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("OwnCloud: Getting list of activated accounts failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
|
||||
@ -921,7 +888,6 @@ QList<ServiceRoot*> DatabaseQueries::getTtRssAccounts(QSqlDatabase db, bool* ok)
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("TT-RSS: Getting list of activated accounts failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
|
||||
@ -956,7 +922,6 @@ bool DatabaseQueries::overwriteOwnCloudAccount(QSqlDatabase db, const QString& u
|
||||
if (query.exec()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("ownCloud: Updating account failed: '%s'.", qPrintable(query.lastError().text()));
|
||||
return false;
|
||||
@ -978,7 +943,6 @@ bool DatabaseQueries::createOwnCloudAccount(QSqlDatabase db, int id_to_assign, c
|
||||
if (q.exec()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("ownCloud: Inserting of new account failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
@ -1011,7 +975,6 @@ int DatabaseQueries::createAccount(QSqlDatabase db, const QString& code, bool* o
|
||||
|
||||
return id_to_assign;
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -1134,7 +1097,6 @@ int DatabaseQueries::addCategory(QSqlDatabase db, int parent_id, int account_id,
|
||||
// Query failed.
|
||||
return 0;
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = true;
|
||||
@ -1191,7 +1153,6 @@ int DatabaseQueries::addFeed(QSqlDatabase db, int parent_id, int account_id, con
|
||||
if (password.isEmpty()) {
|
||||
q.bindValue(QSL(":password"), password);
|
||||
}
|
||||
|
||||
else {
|
||||
q.bindValue(QSL(":password"), TextFactory::encrypt(password));
|
||||
}
|
||||
@ -1214,7 +1175,6 @@ int DatabaseQueries::addFeed(QSqlDatabase db, int parent_id, int account_id, con
|
||||
|
||||
return new_id;
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -1248,7 +1208,6 @@ bool DatabaseQueries::editFeed(QSqlDatabase db, int parent_id, int feed_id, cons
|
||||
if (password.isEmpty()) {
|
||||
q.bindValue(QSL(":password"), password);
|
||||
}
|
||||
|
||||
else {
|
||||
q.bindValue(QSL(":password"), TextFactory::encrypt(password));
|
||||
}
|
||||
@ -1291,7 +1250,6 @@ QList<ServiceRoot*> DatabaseQueries::getAccounts(QSqlDatabase db, bool* ok) {
|
||||
*ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = false;
|
||||
@ -1317,7 +1275,6 @@ Assignment DatabaseQueries::getCategories(QSqlDatabase db, int account_id, bool*
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = true;
|
||||
@ -1409,7 +1366,6 @@ bool DatabaseQueries::overwriteTtRssAccount(QSqlDatabase db, const QString& user
|
||||
if (q.exec()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("TT-RSS: Updating account failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
@ -1435,7 +1391,6 @@ bool DatabaseQueries::createTtRssAccount(QSqlDatabase db, int id_to_assign, cons
|
||||
if (q.exec()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("TT-RSS: Saving of new account failed: '%s'.", qPrintable(q.lastError().text()));
|
||||
return false;
|
||||
@ -1457,7 +1412,6 @@ Assignment DatabaseQueries::getTtRssCategories(QSqlDatabase db, int account_id,
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = true;
|
||||
@ -1489,7 +1443,6 @@ Assignment DatabaseQueries::getTtRssFeeds(QSqlDatabase db, int account_id, bool*
|
||||
*ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (ok != nullptr) {
|
||||
*ok = true;
|
||||
|
@ -40,7 +40,6 @@ void Debugging::performLog(const char* message, QtMsgType type, const char* file
|
||||
if (file == 0 || function == 0 || line < 0) {
|
||||
fprintf(stderr, "[%s] %s: %s (%s)\n", APP_LOW_NAME, type_string, message, mbstr);
|
||||
}
|
||||
|
||||
else {
|
||||
fprintf(stderr, "[%s] %s (%s)\n Type: %s\n File: %s (line %d)\n Function: %s\n\n",
|
||||
APP_LOW_NAME, message, mbstr, type_string, file, line, function);
|
||||
|
@ -114,7 +114,6 @@ void FeedReader::updateAutoUpdateStatus() {
|
||||
m_autoUpdateTimer->start();
|
||||
qDebug("Auto-update timer started with interval %d.", m_autoUpdateTimer->interval());
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("Auto-update timer is already running.");
|
||||
}
|
||||
@ -222,7 +221,6 @@ void FeedReader::checkServicesForAsyncOperations(bool wait_for_future) {
|
||||
qWarning("Waiting for previously started saving of cached service data.");
|
||||
m_cacheSaveFutureWatcher->future().waitForFinished();
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("Some cached service data are being saved now, so aborting this saving cycle.");
|
||||
// Some cache saving is now running.
|
||||
@ -241,7 +239,6 @@ void FeedReader::checkServicesForAsyncOperations(bool wait_for_future) {
|
||||
qDebug("Waiting for saving of cached service data to finish.");
|
||||
future.waitForFinished();
|
||||
}
|
||||
|
||||
else {
|
||||
m_cacheSaveFutureWatcher->setFuture(future);
|
||||
}
|
||||
|
@ -56,7 +56,6 @@ QPixmap IconFactory::pixmap(const QString& name) {
|
||||
if (QIcon::themeName() == APP_NO_THEME) {
|
||||
return QPixmap();
|
||||
}
|
||||
|
||||
else {
|
||||
return QIcon::fromTheme(name).pixmap(64, 64);
|
||||
}
|
||||
@ -106,7 +105,6 @@ void IconFactory::loadCurrentIconTheme() {
|
||||
qDebug("Loading icon theme '%s'.", qPrintable(theme_name_from_settings));
|
||||
QIcon::setThemeName(theme_name_from_settings);
|
||||
}
|
||||
|
||||
else {
|
||||
// Desired icon theme is not currently available.
|
||||
// Install "default" icon theme instead.
|
||||
|
@ -62,7 +62,6 @@ QString IOFactory::ensureUniqueFilename(const QString& name, const QString& appe
|
||||
if (index < 0) {
|
||||
tmp_filename.append(append_string);
|
||||
}
|
||||
|
||||
else {
|
||||
tmp_filename = tmp_filename.left(index) + append_string + tmp_filename.mid(index);
|
||||
}
|
||||
@ -94,7 +93,6 @@ QByteArray IOFactory::readTextFile(const QString& file_path) {
|
||||
input_file.close();
|
||||
return input_data;
|
||||
}
|
||||
|
||||
else {
|
||||
throw IOException(tr("Cannot open file '%1' for reading.").arg(QDir::toNativeSeparators(file_path)));
|
||||
}
|
||||
@ -111,7 +109,6 @@ void IOFactory::writeTextFile(const QString& file_path, const QByteArray& data,
|
||||
input_file.flush();
|
||||
input_file.close();
|
||||
}
|
||||
|
||||
else {
|
||||
throw IOException(tr("Cannot open file '%1' for writting.").arg(QDir::toNativeSeparators(file_path)));
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ void Localization::loadActiveLanguage() {
|
||||
qPrintable(real_loaded_locale));
|
||||
desired_localization = real_loaded_locale;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("Application localization '%s' was not loaded. Loading '%s' instead.",
|
||||
qPrintable(desired_localization),
|
||||
@ -62,7 +61,6 @@ void Localization::loadActiveLanguage() {
|
||||
Application::installTranslator(qt_translator);
|
||||
qDebug("Qt localization '%s' loaded successfully.", qPrintable(desired_localization));
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("Qt localization '%s' was not loaded.", qPrintable(desired_localization));
|
||||
}
|
||||
|
@ -324,7 +324,6 @@ void Settings::finishRestoration(const QString& desired_settings_file_path) {
|
||||
QFile::remove(backup_settings_file);
|
||||
qDebug("Settings file was restored successully.");
|
||||
}
|
||||
|
||||
else {
|
||||
qCritical("Settings file was NOT restored due to error when copying the file.");
|
||||
}
|
||||
@ -345,7 +344,6 @@ Settings* Settings::setupSettings(QObject* parent) {
|
||||
if (properties.m_type == SettingsProperties::Portable) {
|
||||
qDebug("Initializing settings in '%s' (portable way).", qPrintable(QDir::toNativeSeparators(properties.m_absoluteSettingsFileName)));
|
||||
}
|
||||
|
||||
else {
|
||||
qDebug("Initializing settings in '%s' (non-portable way).", qPrintable(QDir::toNativeSeparators(properties.m_absoluteSettingsFileName)));
|
||||
}
|
||||
@ -375,7 +373,6 @@ SettingsProperties Settings::determineProperties() {
|
||||
properties.m_type = SettingsProperties::Portable;
|
||||
properties.m_baseDirectory = app_path;
|
||||
}
|
||||
|
||||
else {
|
||||
properties.m_type = SettingsProperties::NonPortable;
|
||||
properties.m_baseDirectory = home_path;
|
||||
|
@ -91,7 +91,6 @@ QByteArray SimpleCrypt::encryptToByteArray(QByteArray plaintext) {
|
||||
ba = qCompress(ba, 9); //maximum compression
|
||||
flags |= CryptoFlagCompression;
|
||||
}
|
||||
|
||||
else if (m_compressionMode == CompressionAuto) {
|
||||
QByteArray compressed = qCompress(ba, 9);
|
||||
|
||||
@ -108,7 +107,6 @@ QByteArray SimpleCrypt::encryptToByteArray(QByteArray plaintext) {
|
||||
QDataStream s(&integrityProtection, QIODevice::WriteOnly);
|
||||
s << qChecksum(ba.constData(), ba.length());
|
||||
}
|
||||
|
||||
else if (m_protectionMode == ProtectionHash) {
|
||||
flags |= CryptoFlagHash;
|
||||
QCryptographicHash hash(QCryptographicHash::Sha1);
|
||||
@ -221,7 +219,6 @@ QByteArray SimpleCrypt::decryptToByteArray(QByteArray cypher) {
|
||||
quint16 checksum = qChecksum(ba.constData(), ba.length());
|
||||
integrityOk = (checksum == storedChecksum);
|
||||
}
|
||||
|
||||
else if (flags.testFlag(CryptoFlagHash)) {
|
||||
if (ba.length() < 20) {
|
||||
m_lastError = ErrorIntegrityFailed;
|
||||
|
@ -40,7 +40,6 @@ void SimpleRegExp::setMinimal(bool minimal) {
|
||||
if (minimal) {
|
||||
opt = patternOptions() | QRegularExpression::InvertedGreedinessOption;
|
||||
}
|
||||
|
||||
else {
|
||||
opt = patternOptions() & ~QRegularExpression::InvertedGreedinessOption;
|
||||
}
|
||||
@ -57,7 +56,6 @@ int SimpleRegExp::indexIn(const QString& str, int offset) const {
|
||||
that->m_capturedTexts.clear();
|
||||
return -1;
|
||||
}
|
||||
|
||||
else {
|
||||
that->m_matchedLength = m.capturedLength();
|
||||
that->m_capturedTexts = m.capturedTexts();
|
||||
@ -73,7 +71,6 @@ QString SimpleRegExp::cap(int nth) const {
|
||||
if (nth >= 0 && m_capturedTexts.size() > nth) {
|
||||
return m_capturedTexts.at(nth);
|
||||
}
|
||||
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ void SkinFactory::loadCurrentSkin() {
|
||||
qDebug("Skin '%s' loaded.", qPrintable(skin_name));
|
||||
return;
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("Failed to load skin '%s'.", qPrintable(skin_name));
|
||||
}
|
||||
@ -84,7 +83,6 @@ QString SkinFactory::adBlockedPage(const QString& subscription, const QString& r
|
||||
tr("Blocked by set: \"%1\"<br/>Blocked by filter: \"%2\"")
|
||||
.arg(subscription,
|
||||
rule));
|
||||
|
||||
return currentSkin().m_layoutMarkupWrapper.arg(tr("This page was blocked by AdBlock"), adblocked);
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,6 @@ SystemFactory::AutoStartStatus SystemFactory::autoStartStatus() const {
|
||||
if (autostart_enabled) {
|
||||
return AutoStartStatus::Enabled;
|
||||
}
|
||||
|
||||
else {
|
||||
return AutoStartStatus::Disabled;
|
||||
}
|
||||
@ -82,7 +81,6 @@ SystemFactory::AutoStartStatus SystemFactory::autoStartStatus() const {
|
||||
bool hidden_value = desktop_settings.value(QSL("Desktop Entry/Hidden"), false).toBool();
|
||||
return hidden_value ? SystemFactory::Disabled : SystemFactory::Enabled;
|
||||
}
|
||||
|
||||
else {
|
||||
return SystemFactory::Disabled;
|
||||
}
|
||||
@ -103,7 +101,6 @@ QString SystemFactory::autostartDesktopFileLocation() const {
|
||||
// in 'autostart' subdirectory.
|
||||
desktop_file_location = xdg_config_path + QSL("/autostart/") + APP_DESKTOP_ENTRY_FILE;
|
||||
}
|
||||
|
||||
else {
|
||||
// Desired variable is not set, look for the default 'autostart' subdirectory.
|
||||
const QString home_directory(qgetenv("HOME"));
|
||||
@ -186,7 +183,6 @@ bool SystemFactory::removeTrolltechJunkRegistryKeys() {
|
||||
registry_key.sync();
|
||||
return registry_key.status() == QSettings::NoError;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -209,7 +205,6 @@ QString SystemFactory::loggedInUser() const {
|
||||
|
||||
void SystemFactory::checkForUpdates() const {
|
||||
Downloader* downloader = new Downloader();
|
||||
|
||||
connect(downloader, &Downloader::completed, [this, downloader]() {
|
||||
QPair<QList<UpdateInfo>, QNetworkReply::NetworkError> result;
|
||||
result.second = downloader->lastOutputError();
|
||||
@ -220,10 +215,8 @@ void SystemFactory::checkForUpdates() const {
|
||||
}
|
||||
|
||||
emit updatesChecked(result);
|
||||
|
||||
downloader->deleteLater();
|
||||
});
|
||||
|
||||
downloader->downloadFile(RELEASES_LIST);
|
||||
}
|
||||
|
||||
@ -239,7 +232,6 @@ bool SystemFactory::isVersionNewer(const QString& new_version, const QString& ba
|
||||
// New version is indeed higher thatn current version.
|
||||
return true;
|
||||
}
|
||||
|
||||
else if (new_number < base_number) {
|
||||
return false;
|
||||
}
|
||||
@ -250,12 +242,10 @@ bool SystemFactory::isVersionNewer(const QString& new_version, const QString& ba
|
||||
// Versions are the same.
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
if (new_version_tkn.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return new_version_tkn.join(QString()).toInt() > 0;
|
||||
}
|
||||
|
@ -96,13 +96,11 @@ QDateTime TextFactory::parseDateTime(const QString& date_time) {
|
||||
// the original UTC.
|
||||
return dt.addSecs(- QTime(0, 0, 0, 0).secsTo(time_zone_offset));
|
||||
}
|
||||
|
||||
else {
|
||||
// Vice versa.
|
||||
return dt.addSecs(QTime(0, 0, 0, 0).secsTo(time_zone_offset));
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
return dt;
|
||||
}
|
||||
@ -129,7 +127,6 @@ QString TextFactory::shorten(const QString& input, int text_length_limit) {
|
||||
if (input.size() > text_length_limit) {
|
||||
return input.left(text_length_limit - ELLIPSIS_LENGTH) + QString(ELLIPSIS_LENGTH, QL1C('.'));
|
||||
}
|
||||
|
||||
else {
|
||||
return input;
|
||||
}
|
||||
@ -143,7 +140,6 @@ quint64 TextFactory::initializeSecretEncryptionKey() {
|
||||
try {
|
||||
s_encryptionKey = (quint64) QString(IOFactory::readTextFile(encryption_file_path)).toLongLong();
|
||||
}
|
||||
|
||||
catch (ApplicationException) {
|
||||
// Well, key does not exist or is invalid, generate and save one.
|
||||
s_encryptionKey = generateSecretEncryptionKey();
|
||||
|
@ -57,10 +57,8 @@ AdBlockAddSubscriptionDialog::AdBlockAddSubscriptionDialog(QWidget* parent)
|
||||
connect(m_ui->m_cmbPresets, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
|
||||
&AdBlockAddSubscriptionDialog::indexChanged);
|
||||
connect(m_ui->m_cbUsePredefined, &QCheckBox::toggled, this, &AdBlockAddSubscriptionDialog::presetsEnabledChanged);
|
||||
|
||||
m_ui->m_cbUsePredefined->setChecked(true);
|
||||
indexChanged(0);
|
||||
|
||||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint);
|
||||
setWindowIcon(qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE));
|
||||
}
|
||||
|
@ -39,37 +39,26 @@ AdBlockDialog::AdBlockDialog(QWidget* parent)
|
||||
m_loaded(false) {
|
||||
m_ui->setupUi(this);
|
||||
m_ui->m_cbEnable->setChecked(m_manager->isEnabled());
|
||||
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::Dialog | Qt::WindowSystemMenuHint);
|
||||
setWindowIcon(qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE));
|
||||
|
||||
QPushButton* btn_options = m_ui->m_buttonBox->addButton(QDialogButtonBox::FirstButton);
|
||||
btn_options->setText(tr("Options"));
|
||||
|
||||
QMenu* menu = new QMenu(btn_options);
|
||||
|
||||
m_actionAddRule = menu->addAction(tr("Add rule"), this, &AdBlockDialog::addRule);
|
||||
m_actionRemoveRule = menu->addAction(tr("Remove rule"), this, &AdBlockDialog::removeRule);
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
m_actionAddSubscription = menu->addAction(tr("Add subscription"), this, &AdBlockDialog::addSubscription);
|
||||
m_actionRemoveSubscription = menu->addAction(tr("Remove subscription"), this, &AdBlockDialog::removeSubscription);
|
||||
|
||||
menu->addAction(tr("Update subscriptions"), m_manager, &AdBlockManager::updateAllSubscriptions);
|
||||
menu->addSeparator();
|
||||
menu->addAction(tr("Learn about writing rules..."), this, &AdBlockDialog::learnAboutRules);
|
||||
btn_options->setMenu(menu);
|
||||
|
||||
|
||||
|
||||
connect(menu, &QMenu::aboutToShow, this, &AdBlockDialog::aboutToShowMenu);
|
||||
connect(m_ui->m_cbEnable, &QCheckBox::toggled, this, &AdBlockDialog::enableAdBlock);
|
||||
connect(m_ui->m_tabSubscriptions, &QTabWidget::currentChanged, this, &AdBlockDialog::currentChanged);
|
||||
connect(m_ui->m_buttonBox, &QDialogButtonBox::rejected, this, &AdBlockDialog::close);
|
||||
load();
|
||||
|
||||
m_ui->m_buttonBox->setFocus();
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,6 @@ AdBlockIcon::AdBlockIcon(AdBlockManager* parent)
|
||||
setText(QSL("AdBlock"));
|
||||
setMenu(new QMenu());
|
||||
setIcon(m_enabled ? qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE) : qApp->icons()->miscIcon(ADBLOCK_ICON_DISABLED));
|
||||
|
||||
connect(m_manager, SIGNAL(enabledChanged(bool)), this, SLOT(setEnabled(bool)));
|
||||
connect(menu(), SIGNAL(aboutToShow()), this, SLOT(createMenu()));
|
||||
connect(this, &QAction::triggered, m_manager, &AdBlockManager::showDialog);
|
||||
@ -136,7 +135,6 @@ void AdBlockIcon::toggleCustomFilter() {
|
||||
if (customList->containsFilter(filter)) {
|
||||
customList->removeFilter(filter);
|
||||
}
|
||||
|
||||
else {
|
||||
AdBlockRule* rule = new AdBlockRule(filter, customList);
|
||||
customList->addRule(rule);
|
||||
@ -154,7 +152,6 @@ void AdBlockIcon::animateIcon() {
|
||||
if (icon().isNull()) {
|
||||
setIcon(qApp->icons()->miscIcon(ADBLOCK_ICON_ACTIVE));
|
||||
}
|
||||
|
||||
else {
|
||||
setIcon(QIcon());
|
||||
}
|
||||
|
@ -43,10 +43,8 @@ Q_GLOBAL_STATIC(AdBlockManager, qz_adblock_manager)
|
||||
|
||||
AdBlockManager::AdBlockManager(QObject* parent)
|
||||
: QObject(parent), m_loaded(false), m_enabled(true), m_matcher(new AdBlockMatcher(this)), m_interceptor(new AdBlockUrlInterceptor(this)) {
|
||||
|
||||
m_adblockIcon = new AdBlockIcon(this);
|
||||
m_adblockIcon->setObjectName(QSL("m_adblockIconAction"));
|
||||
|
||||
load();
|
||||
}
|
||||
|
||||
@ -74,7 +72,6 @@ void AdBlockManager::setEnabled(bool enabled) {
|
||||
if (m_enabled) {
|
||||
m_matcher->update();
|
||||
}
|
||||
|
||||
else {
|
||||
m_matcher->clear();
|
||||
}
|
||||
@ -106,14 +103,11 @@ bool AdBlockManager::block(QWebEngineUrlRequestInfo& request) {
|
||||
if (request.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) {
|
||||
QUrlQuery query;
|
||||
QUrl url(QSL("rssguard:adblockedpage"));
|
||||
|
||||
query.addQueryItem(QSL("rule"), blockedRule->filter());
|
||||
query.addQueryItem(QSL("subscription"), blockedRule->subscription()->title());
|
||||
url.setQuery(query);
|
||||
|
||||
request.redirect(url);
|
||||
}
|
||||
|
||||
else {
|
||||
res = true;
|
||||
request.block(true);
|
||||
@ -146,7 +140,6 @@ bool AdBlockManager::addSubscriptionFromUrl(const QUrl& url) {
|
||||
if (pair.first == QL1S("location")) {
|
||||
subscriptionUrl = pair.second;
|
||||
}
|
||||
|
||||
else if (pair.first == QL1S("title")) {
|
||||
subscriptionTitle = pair.second;
|
||||
}
|
||||
@ -339,7 +332,6 @@ QString AdBlockManager::elementHidingRules(const QUrl& url) const {
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url)) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
else {
|
||||
return m_matcher->elementHidingRules();
|
||||
}
|
||||
@ -349,7 +341,6 @@ QString AdBlockManager::elementHidingRulesForDomain(const QUrl& url) const {
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url)) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
else {
|
||||
return m_matcher->elementHidingRulesForDomain(url.host());
|
||||
}
|
||||
|
@ -116,7 +116,6 @@ QString AdBlockMatcher::elementHidingRulesForDomain(const QString& domain) const
|
||||
rules.append(QSL("{display:none !important;}\n"));
|
||||
addedRulesCount = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
rules.append(rule->cssSelector() + QLatin1Char(','));
|
||||
addedRulesCount++;
|
||||
@ -153,26 +152,21 @@ void AdBlockMatcher::update() {
|
||||
if (rule->isException()) {
|
||||
exceptionCssRules.append(rule);
|
||||
}
|
||||
|
||||
else {
|
||||
cssRulesHash.insert(rule->cssSelector(), rule);
|
||||
}
|
||||
}
|
||||
|
||||
else if (rule->isDocument()) {
|
||||
m_documentRules.append(rule);
|
||||
}
|
||||
|
||||
else if (rule->isElemhide()) {
|
||||
m_elemhideRules.append(rule);
|
||||
}
|
||||
|
||||
else if (rule->isException()) {
|
||||
if (!m_networkExceptionTree.add(rule)) {
|
||||
m_networkExceptionRules.append(rule);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
if (!m_networkBlockTree.add(rule)) {
|
||||
m_networkBlockRules.append(rule);
|
||||
@ -209,13 +203,11 @@ void AdBlockMatcher::update() {
|
||||
if (rule->isDomainRestricted()) {
|
||||
m_domainRestrictedCssRules.append(rule);
|
||||
}
|
||||
|
||||
else if (Q_UNLIKELY(hidingRulesCount == 1000)) {
|
||||
m_elementHidingRules.append(rule->cssSelector());
|
||||
m_elementHidingRules.append(QL1S("{display:none !important;} "));
|
||||
hidingRulesCount = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
m_elementHidingRules.append(rule->cssSelector() + QLatin1Char(','));
|
||||
hidingRulesCount++;
|
||||
|
@ -178,7 +178,6 @@ bool AdBlockRule::urlMatch(const QUrl& url) const {
|
||||
if (!hasOption(DocumentOption) && !hasOption(ElementHideOption)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
const QString encodedUrl = url.toEncoded();
|
||||
const QString domain = url.host();
|
||||
@ -259,7 +258,6 @@ bool AdBlockRule::matchDomain(const QString& domain) const {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (m_allowedDomains.isEmpty()) {
|
||||
foreach (const QString& d, m_blockedDomains) {
|
||||
if (isMatchingDomain(domain, d)) {
|
||||
@ -269,7 +267,6 @@ bool AdBlockRule::matchDomain(const QString& domain) const {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
foreach (const QString& d, m_blockedDomains) {
|
||||
if (isMatchingDomain(domain, d)) {
|
||||
@ -378,70 +375,58 @@ void AdBlockRule::parseFilter() {
|
||||
parseDomains(option.mid(7), QL1C('|'));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option == QL1S("match-case")) {
|
||||
m_caseSensitivity = Qt::CaseSensitive;
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("third-party"))) {
|
||||
setOption(ThirdPartyOption);
|
||||
setException(ThirdPartyOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("object"))) {
|
||||
setOption(ObjectOption);
|
||||
setException(ObjectOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("subdocument"))) {
|
||||
setOption(SubdocumentOption);
|
||||
setException(SubdocumentOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("xmlhttprequest"))) {
|
||||
setOption(XMLHttpRequestOption);
|
||||
setException(XMLHttpRequestOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("image"))) {
|
||||
setOption(ImageOption);
|
||||
setException(ImageOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("script"))) {
|
||||
setOption(ScriptOption);
|
||||
setException(ScriptOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("stylesheet"))) {
|
||||
setOption(StyleSheetOption);
|
||||
setException(StyleSheetOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option.endsWith(QL1S("object-subrequest"))) {
|
||||
setOption(ObjectSubrequestOption);
|
||||
setException(ObjectSubrequestOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option == QL1S("document") && m_isException) {
|
||||
setOption(DocumentOption);
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option == QL1S("elemhide") && m_isException) {
|
||||
setOption(ElementHideOption);
|
||||
++handledOptions;
|
||||
}
|
||||
|
||||
else if (option == QL1S("collapse")) {
|
||||
// Hiding placeholders of blocked elements is enabled by default.
|
||||
++handledOptions;
|
||||
@ -521,7 +506,6 @@ void AdBlockRule::parseDomains(const QString& domains, const QChar& separator) {
|
||||
if (domain.startsWith(QL1C('~'))) {
|
||||
m_blockedDomains.append(domain.mid(1));
|
||||
}
|
||||
|
||||
else {
|
||||
m_allowedDomains.append(domain);
|
||||
}
|
||||
@ -603,14 +587,12 @@ QString AdBlockRule::createRegExpFromFilter(const QString& filter) const {
|
||||
parsed.append(QL1S("^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?"));
|
||||
i++;
|
||||
}
|
||||
|
||||
else {
|
||||
parsed.append('^');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
else if (i == filter.size() - 1) {
|
||||
parsed.append(QL1C('$'));
|
||||
break;
|
||||
@ -622,7 +604,6 @@ QString AdBlockRule::createRegExpFromFilter(const QString& filter) const {
|
||||
if (!wordCharacter(c)) {
|
||||
parsed.append(QL1C('\\') + c);
|
||||
}
|
||||
|
||||
else {
|
||||
parsed.append(c);
|
||||
}
|
||||
@ -649,20 +630,16 @@ bool AdBlockRule::stringMatch(const QString& domain, const QString& encodedUrl)
|
||||
if (m_type == StringContainsMatchRule) {
|
||||
return encodedUrl.contains(m_matchString, m_caseSensitivity);
|
||||
}
|
||||
|
||||
else if (m_type == DomainMatchRule) {
|
||||
return isMatchingDomain(domain, m_matchString);
|
||||
}
|
||||
|
||||
else if (m_type == StringEndsMatchRule) {
|
||||
return encodedUrl.endsWith(m_matchString, m_caseSensitivity);
|
||||
}
|
||||
|
||||
else if (m_type == RegExpMatchRule) {
|
||||
if (!isMatchingRegExpStrings(encodedUrl)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return (m_regExp->regExp.indexIn(encodedUrl) != -1);
|
||||
}
|
||||
|
@ -176,7 +176,6 @@ bool AdBlockSubscription::saveDownloadedData(const QByteArray& data) {
|
||||
qWarning("Unable to open AdBlock file '%s' for writing.", qPrintable(m_filePath));
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
// Write subscription header
|
||||
file.write(QString("Title: %1\nUrl: %2\n").arg(title(), url().toString()).toUtf8());
|
||||
@ -190,7 +189,6 @@ const AdBlockRule* AdBlockSubscription::rule(int offset) const {
|
||||
if (IS_IN_ARRAY(offset, m_rules)) {
|
||||
return m_rules[offset];
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -213,7 +211,6 @@ const AdBlockRule* AdBlockSubscription::enableRule(int offset) {
|
||||
|
||||
return rule;
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -282,7 +279,6 @@ void AdBlockCustomList::loadSubscription(const QStringList& disabledRules) {
|
||||
try {
|
||||
rules = QString::fromUtf8(IOFactory::readTextFile(filePath()));
|
||||
}
|
||||
|
||||
catch (ApplicationException&) {
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,6 @@ AdBlockTreeWidget::AdBlockTreeWidget(AdBlockSubscription* subscription, QWidget*
|
||||
setAlternatingRowColors(true);
|
||||
setLayoutDirection(Qt::LeftToRight);
|
||||
setIndentation(5);
|
||||
|
||||
connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequested(QPoint)));
|
||||
connect(this, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(itemChanged(QTreeWidgetItem*)));
|
||||
connect(m_subscription, SIGNAL(subscriptionUpdated()), this, SLOT(subscriptionUpdated()));
|
||||
@ -50,7 +49,6 @@ void AdBlockTreeWidget::showRule(const AdBlockRule* rule) {
|
||||
if (!m_topItem && rule) {
|
||||
m_ruleToBeSelected = rule->filter();
|
||||
}
|
||||
|
||||
else if (!m_ruleToBeSelected.isEmpty()) {
|
||||
QList<QTreeWidgetItem*> items = findItems(m_ruleToBeSelected, Qt::MatchRecursive);
|
||||
|
||||
@ -101,13 +99,11 @@ void AdBlockTreeWidget::itemChanged(QTreeWidgetItem* item) {
|
||||
const AdBlockRule* rule = m_subscription->disableRule(offset);
|
||||
adjustItemFeatures(item, rule);
|
||||
}
|
||||
|
||||
else if (item->checkState(0) == Qt::Checked && !oldRule->isEnabled()) {
|
||||
// Enable rule.
|
||||
const AdBlockRule* rule = m_subscription->enableRule(offset);
|
||||
adjustItemFeatures(item, rule);
|
||||
}
|
||||
|
||||
else if (m_subscription->canEditRules()) {
|
||||
// Custom rule has been changed.
|
||||
AdBlockRule* newRule = new AdBlockRule(item->text(0), m_subscription);
|
||||
@ -199,7 +195,6 @@ void AdBlockTreeWidget::adjustItemFeatures(QTreeWidgetItem* item, const AdBlockR
|
||||
item->setForeground(0, QColor(Qt::darkGreen));
|
||||
item->setFont(0, QFont());
|
||||
}
|
||||
|
||||
else if (rule->isCssRule()) {
|
||||
item->setForeground(0, QColor(Qt::darkBlue));
|
||||
item->setFont(0, QFont());
|
||||
|
@ -43,11 +43,9 @@ void BaseNetworkAccessManager::loadSettings() {
|
||||
// No extra setting is needed, set new proxy and exit this method.
|
||||
setProxy(QNetworkProxy::NoProxy);
|
||||
}
|
||||
|
||||
else if (selected_proxy_type == QNetworkProxy::DefaultProxy) {
|
||||
setProxy(QNetworkProxy::applicationProxy());
|
||||
}
|
||||
|
||||
else {
|
||||
const Settings* settings = qApp->settings();
|
||||
// Custom proxy is selected, set it up.
|
||||
|
@ -65,7 +65,6 @@ void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Opera
|
||||
qDebug("Replacing URI schemes for '%s'.", qPrintable(non_const_url));
|
||||
request.setUrl(non_const_url.replace(QRegExp(QString('^') + URI_SCHEME_FEED), QString(URI_SCHEME_HTTP)));
|
||||
}
|
||||
|
||||
else {
|
||||
request.setUrl(non_const_url);
|
||||
}
|
||||
@ -77,15 +76,12 @@ void Downloader::manipulateData(const QString& url, QNetworkAccessManager::Opera
|
||||
if (operation == QNetworkAccessManager::PostOperation) {
|
||||
runPostRequest(request, m_inputData);
|
||||
}
|
||||
|
||||
else if (operation == QNetworkAccessManager::GetOperation) {
|
||||
runGetRequest(request);
|
||||
}
|
||||
|
||||
else if (operation == QNetworkAccessManager::PutOperation) {
|
||||
runPutRequest(request, m_inputData);
|
||||
}
|
||||
|
||||
else if (operation == QNetworkAccessManager::DeleteOperation) {
|
||||
runDeleteRequest(request);
|
||||
}
|
||||
@ -106,7 +102,6 @@ void Downloader::finished() {
|
||||
if (redirection_url.host().isEmpty()) {
|
||||
request.setUrl(QUrl(reply->request().url().scheme() + QSL("://") + reply->request().url().host() + redirection_url.toString()));
|
||||
}
|
||||
|
||||
else {
|
||||
request.setUrl(redirection_url);
|
||||
}
|
||||
@ -117,20 +112,16 @@ void Downloader::finished() {
|
||||
if (reply_operation == QNetworkAccessManager::GetOperation) {
|
||||
runGetRequest(request);
|
||||
}
|
||||
|
||||
else if (reply_operation == QNetworkAccessManager::PostOperation) {
|
||||
runPostRequest(request, m_inputData);
|
||||
}
|
||||
|
||||
else if (reply_operation == QNetworkAccessManager::PutOperation) {
|
||||
runPutRequest(request, m_inputData);
|
||||
}
|
||||
|
||||
else if (reply_operation == QNetworkAccessManager::DeleteOperation) {
|
||||
runDeleteRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// No redirection is indicated. Final file is obtained in our "reply" object.
|
||||
// Read the data into output buffer.
|
||||
@ -187,7 +178,6 @@ void Downloader::runGetRequest(const QNetworkRequest& request) {
|
||||
m_activeReply->setProperty("protected", m_targetProtected);
|
||||
m_activeReply->setProperty("username", m_targetUsername);
|
||||
m_activeReply->setProperty("password", m_targetPassword);
|
||||
|
||||
connect(m_activeReply, &QNetworkReply::downloadProgress, this, &Downloader::progressInternal);
|
||||
connect(m_activeReply, &QNetworkReply::finished, this, &Downloader::finished);
|
||||
}
|
||||
|
@ -264,7 +264,6 @@ void DownloadItem::downloadReadyRead() {
|
||||
m_ui->m_lblInfoDownload->setText(tr("Error when saving file: %1").arg(m_output.errorString()));
|
||||
m_ui->m_btnStopDownload->click();
|
||||
}
|
||||
|
||||
else {
|
||||
m_startedSaving = true;
|
||||
|
||||
@ -344,7 +343,6 @@ double DownloadItem::currentSpeed() const {
|
||||
if (!downloading()) {
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
else {
|
||||
return m_bytesReceived * 1000.0 / m_downloadTime.elapsed();
|
||||
}
|
||||
@ -373,12 +371,10 @@ void DownloadItem::updateDownloadInfoLabel() {
|
||||
DownloadManager::dataString((int)speed),
|
||||
remaining);
|
||||
}
|
||||
|
||||
else {
|
||||
if (m_bytesReceived == bytes_total) {
|
||||
info = DownloadManager::dataString(m_output.size());
|
||||
}
|
||||
|
||||
else {
|
||||
info = tr("%1 of %2 - download completed").arg(DownloadManager::dataString(m_bytesReceived),
|
||||
DownloadManager::dataString(m_bytesReceived));
|
||||
@ -416,9 +412,9 @@ void DownloadItem::finished() {
|
||||
if (downloadedSuccessfully()) {
|
||||
qApp->showGuiMessage(tr("Download finished"),
|
||||
tr("File '%1' is downloaded.\nClick here to open parent directory.").arg(QDir::toNativeSeparators(m_output.fileName())),
|
||||
QSystemTrayIcon::Information, 0, false, [this] {
|
||||
openFolder();
|
||||
});
|
||||
QSystemTrayIcon::Information, 0, false, [this] {
|
||||
openFolder();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -474,7 +470,6 @@ int DownloadManager::downloadProgress() const {
|
||||
if (bytes_total <= 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
else {
|
||||
return (bytes_received * 100.0) / bytes_total;
|
||||
}
|
||||
@ -552,7 +547,6 @@ void DownloadManager::itemProgress() {
|
||||
if (progress < 0) {
|
||||
emit downloadFinished();
|
||||
}
|
||||
|
||||
else {
|
||||
emit downloadProgressed(progress, tr("Downloading %n file(s)...", "", activeDownloads()));
|
||||
}
|
||||
@ -688,7 +682,6 @@ QString DownloadManager::timeString(double time_remaining) {
|
||||
time_remaining = floor(time_remaining);
|
||||
remaining = tr("%n minutes remaining", "", (int) time_remaining);
|
||||
}
|
||||
|
||||
else {
|
||||
time_remaining = floor(time_remaining);
|
||||
remaining = tr("%n seconds remaining", "", (int) time_remaining);
|
||||
@ -705,17 +698,14 @@ QString DownloadManager::dataString(qint64 size) {
|
||||
new_size = size;
|
||||
unit = tr("bytes");
|
||||
}
|
||||
|
||||
else if (size < 1024 * 1024) {
|
||||
new_size = (double)size / (double)1024;
|
||||
unit = tr("kB");
|
||||
}
|
||||
|
||||
else if (size < 1024 * 1024 * 1024) {
|
||||
new_size = (double)size / (double)(1024 * 1024);
|
||||
unit = tr("MB");
|
||||
}
|
||||
|
||||
else {
|
||||
new_size = (double)size / (double)(1024 * 1024 * 1024);
|
||||
unit = tr("GB");
|
||||
|
@ -47,7 +47,6 @@ QStringList NetworkFactory::extractFeedLinksFromHtmlPage(const QUrl& url, const
|
||||
if (feed_link.startsWith(QL1S("//"))) {
|
||||
feed_link = QString(URI_SCHEME_HTTP) + feed_link.mid(2);
|
||||
}
|
||||
|
||||
else if (feed_link.startsWith(QL1C('/'))) {
|
||||
feed_link = url.toString(QUrl::RemovePath | QUrl::RemoveQuery | QUrl::StripTrailingSlash) + feed_link;
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ void RssGuardSchemeHandler::requestStarted(QWebEngineUrlRequestJob* job) {
|
||||
else {
|
||||
QBuffer* buf = new QBuffer(job);
|
||||
buf->setData(data);
|
||||
|
||||
job->reply(QByteArray("text/html"), buf);
|
||||
}
|
||||
}
|
||||
@ -53,10 +52,8 @@ QByteArray RssGuardSchemeHandler::targetData(const QUrl& url) {
|
||||
|
||||
if (url_string.contains(QSL(ADBLOCK_ADBLOCKED_PAGE))) {
|
||||
QUrlQuery query(url);
|
||||
|
||||
const QString& subscription = query.queryItemValue(QSL("subscription"));
|
||||
const QString& rule = query.queryItemValue(QSL("rule"));
|
||||
|
||||
return qApp->skins()->adBlockedPage(subscription, rule).toUtf8();
|
||||
}
|
||||
else {
|
||||
|
@ -47,7 +47,6 @@ void SilentNetworkAccessManager::onAuthenticationRequired(QNetworkReply* reply,
|
||||
reply->setProperty("authentication-given", true);
|
||||
qDebug("Item '%s' requested authentication and got it.", qPrintable(reply->url().toString()));
|
||||
}
|
||||
|
||||
else {
|
||||
reply->setProperty("authentication-given", false);
|
||||
// Authentication is required but this feed does not contain it.
|
||||
|
@ -54,7 +54,6 @@ bool WebFactory::sendMessageViaEmail(const Message& message) {
|
||||
return QProcess::startDetached(QString("\"") + browser + QSL("\" ") + arguments.arg(message.m_title,
|
||||
stripTags(message.m_contents)));
|
||||
}
|
||||
|
||||
else {
|
||||
// Send it via mailto protocol.
|
||||
// NOTE: http://en.wikipedia.org/wiki/Mailto
|
||||
@ -77,7 +76,6 @@ bool WebFactory::openUrlInExternalBrowser(const QString& url) {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
else {
|
||||
return QDesktopServices::openUrl(url);
|
||||
}
|
||||
@ -145,7 +143,6 @@ QAction* WebFactory::engineSettingsAction() {
|
||||
if (m_engineSettings == nullptr) {
|
||||
m_engineSettings = new QAction(qApp->icons()->fromTheme(QSL("applications-internet")), tr("Web engine settings"), this);
|
||||
m_engineSettings->setMenu(new QMenu());
|
||||
|
||||
createMenu(m_engineSettings->menu());
|
||||
connect(m_engineSettings->menu(), SIGNAL(aboutToShow()), this, SLOT(createMenu()));
|
||||
}
|
||||
@ -163,7 +160,6 @@ void WebFactory::createMenu(QMenu* menu) {
|
||||
}
|
||||
|
||||
menu->clear();
|
||||
|
||||
QList<QAction*> actions;
|
||||
actions << createEngineSettingsAction(tr("Auto-load images"), QWebEngineSettings::AutoLoadImages);
|
||||
actions << createEngineSettingsAction(tr("JS enabled"), QWebEngineSettings::JavascriptEnabled);
|
||||
@ -185,33 +181,26 @@ void WebFactory::createMenu(QMenu* menu) {
|
||||
actions << createEngineSettingsAction(tr("Accelerate 2D canvas"), QWebEngineSettings::Accelerated2dCanvasEnabled);
|
||||
actions << createEngineSettingsAction(tr("Print element backgrounds"), QWebEngineSettings::PrintElementBackgrounds);
|
||||
actions << createEngineSettingsAction(tr("Allow running insecure content"), QWebEngineSettings::AllowRunningInsecureContent);
|
||||
|
||||
#if !defined(Q_OS_LINUX)
|
||||
actions << createEngineSettingsAction(tr("Allow geolocation on insecure origins"), QWebEngineSettings::AllowGeolocationOnInsecureOrigins);
|
||||
#endif
|
||||
|
||||
menu->addActions(actions);
|
||||
}
|
||||
|
||||
void WebFactory::webEngineSettingChanged(bool enabled) {
|
||||
const QAction* const act = qobject_cast<QAction*>(sender());
|
||||
QWebEngineSettings::WebAttribute attribute = static_cast<QWebEngineSettings::WebAttribute>(act->data().toInt());
|
||||
|
||||
qApp->settings()->setValue(WebEngineAttributes::ID, QString::number(static_cast<int>(attribute)), enabled);
|
||||
QWebEngineProfile::defaultProfile()->settings()->setAttribute(attribute, act->isChecked());
|
||||
}
|
||||
|
||||
QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngineSettings::WebAttribute attribute) {
|
||||
QAction* act = new QAction(title, m_engineSettings->menu());
|
||||
|
||||
act->setData(attribute);
|
||||
act->setCheckable(true);
|
||||
|
||||
act->setChecked(qApp->settings()->value(WebEngineAttributes::ID, QString::number(static_cast<int>(attribute)), true).toBool());
|
||||
QWebEngineProfile::defaultProfile()->settings()->setAttribute(attribute, act->isChecked());
|
||||
|
||||
connect(act, &QAction::toggled, this, &WebFactory::webEngineSettingChanged);
|
||||
|
||||
return act;
|
||||
}
|
||||
#endif
|
||||
|
@ -42,24 +42,19 @@ void WebPage::javaScriptAlert(const QUrl& securityOrigin, const QString& msg) {
|
||||
if (action == QSL("read")) {
|
||||
emit messageStatusChangeRequested(message_id, MarkRead);
|
||||
}
|
||||
|
||||
else if (action == QSL("unread")) {
|
||||
emit messageStatusChangeRequested(message_id, MarkUnread);
|
||||
}
|
||||
|
||||
else if (action == QSL("starred")) {
|
||||
emit messageStatusChangeRequested(message_id, MarkStarred);
|
||||
}
|
||||
|
||||
else if (action == QSL("unstarred")) {
|
||||
emit messageStatusChangeRequested(message_id, MarkUnstarred);
|
||||
}
|
||||
|
||||
else {
|
||||
QWebEnginePage::javaScriptAlert(securityOrigin, msg);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
QWebEnginePage::javaScriptAlert(securityOrigin, msg);
|
||||
}
|
||||
|
@ -74,7 +74,6 @@ Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
QT_WA({ mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); },
|
||||
{ mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); });
|
||||
@ -159,7 +158,6 @@ bool QtLockedFile::lock(LockMode mode, bool block) {
|
||||
rmutex = 0;
|
||||
ok = false;
|
||||
}
|
||||
|
||||
else if (!rmutex) {
|
||||
rmutex = getMutexHandle(idx, true);
|
||||
|
||||
@ -179,7 +177,6 @@ bool QtLockedFile::lock(LockMode mode, bool block) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
Q_ASSERT(rmutexes.isEmpty());
|
||||
|
||||
@ -226,7 +223,6 @@ bool QtLockedFile::unlock() {
|
||||
CloseHandle(rmutex);
|
||||
rmutex = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
foreach (Qt::HANDLE mutex, rmutexes) {
|
||||
ReleaseMutex(mutex);
|
||||
|
@ -280,7 +280,6 @@ void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessag
|
||||
if (activateOnMessage) {
|
||||
connect(peer, &QtLocalPeer::messageReceived, this, &QtSingleApplication::activateWindow);
|
||||
}
|
||||
|
||||
else {
|
||||
disconnect(peer, &QtLocalPeer::messageReceived, this, &QtSingleApplication::activateWindow);
|
||||
}
|
||||
|
@ -33,7 +33,6 @@ RootItem* AccountCheckModel::itemForIndex(const QModelIndex& index) const {
|
||||
if (index.isValid() && index.model() == this) {
|
||||
return static_cast<RootItem*>(index.internalPointer());
|
||||
}
|
||||
|
||||
else {
|
||||
return m_rootItem;
|
||||
}
|
||||
@ -82,7 +81,6 @@ QModelIndex AccountCheckModel::index(int row, int column, const QModelIndex& par
|
||||
if (child_item) {
|
||||
return createIndex(row, column, child_item);
|
||||
}
|
||||
|
||||
else {
|
||||
return QModelIndex();
|
||||
}
|
||||
@ -112,7 +110,6 @@ QModelIndex AccountCheckModel::indexForItem(RootItem* item) const {
|
||||
// We found our item.
|
||||
return index(candidate_index, 0, active_index);
|
||||
}
|
||||
|
||||
else {
|
||||
// Item is not found, add all "categories" from active_item.
|
||||
for (int i = 0; i < row_count; i++) {
|
||||
@ -140,7 +137,6 @@ QModelIndex AccountCheckModel::parent(const QModelIndex& child) const {
|
||||
if (parent_item == m_rootItem) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
else {
|
||||
return createIndex(parent_item->row(), 0, parent_item);
|
||||
}
|
||||
@ -150,14 +146,12 @@ int AccountCheckModel::rowCount(const QModelIndex& parent) const {
|
||||
if (parent.column() > 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
else {
|
||||
RootItem* item = itemForIndex(parent);
|
||||
|
||||
if (item != nullptr) {
|
||||
return item->childCount();
|
||||
}
|
||||
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
@ -180,12 +174,10 @@ QVariant AccountCheckModel::data(const QModelIndex& index, int role) const {
|
||||
if (m_checkStates.contains(item)) {
|
||||
return m_checkStates.value(item);
|
||||
}
|
||||
|
||||
else {
|
||||
return static_cast<int>(Qt::Unchecked);
|
||||
}
|
||||
}
|
||||
|
||||
else if (role == Qt::DecorationRole) {
|
||||
switch (item->kind()) {
|
||||
case RootItemKind::Category:
|
||||
@ -197,7 +189,6 @@ QVariant AccountCheckModel::data(const QModelIndex& index, int role) const {
|
||||
return QVariant();
|
||||
}
|
||||
}
|
||||
|
||||
else if (role == Qt::DisplayRole) {
|
||||
switch (item->kind()) {
|
||||
case RootItemKind::Category:
|
||||
@ -210,7 +201,6 @@ QVariant AccountCheckModel::data(const QModelIndex& index, int role) const {
|
||||
return item->title();
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ void Category::updateCounts(bool including_total_count) {
|
||||
if (child->kind() == RootItemKind::Feed) {
|
||||
feeds.append(child->toFeed());
|
||||
}
|
||||
|
||||
else if (child->kind() != RootItemKind::Category && child->kind() != RootItemKind::ServiceRoot) {
|
||||
child->updateCounts(including_total_count);
|
||||
}
|
||||
|
@ -55,7 +55,6 @@ QVariant Feed::data(int column, int role) const {
|
||||
description().isEmpty() ? QString() : QString('\n') + description(),
|
||||
getAutoUpdateStatusDescription());
|
||||
}
|
||||
|
||||
else {
|
||||
return RootItem::data(column, role);
|
||||
}
|
||||
|
@ -77,7 +77,6 @@ int FormFeedDetails::addEditFeed(Feed* input_feed, RootItem* parent_to_select, c
|
||||
if (parent_to_select->kind() == RootItemKind::Category) {
|
||||
m_ui->m_cmbParentCategory->setCurrentIndex(m_ui->m_cmbParentCategory->findData(QVariant::fromValue((void*) parent_to_select)));
|
||||
}
|
||||
|
||||
else if (parent_to_select->kind() == RootItemKind::Feed) {
|
||||
int target_item = m_ui->m_cmbParentCategory->findData(QVariant::fromValue((void*) parent_to_select->parent()));
|
||||
|
||||
@ -90,12 +89,10 @@ int FormFeedDetails::addEditFeed(Feed* input_feed, RootItem* parent_to_select, c
|
||||
if (!url.isEmpty()) {
|
||||
m_ui->m_txtUrl->lineEdit()->setText(url);
|
||||
}
|
||||
|
||||
else if (Application::clipboard()->mimeData()->hasText()) {
|
||||
m_ui->m_txtUrl->lineEdit()->setText(Application::clipboard()->text());
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// User is editing existing category.
|
||||
setWindowTitle(tr("Edit feed '%1'").arg(input_feed->title()));
|
||||
@ -110,7 +107,6 @@ void FormFeedDetails::onTitleChanged(const QString& new_title) {
|
||||
if (new_title.simplified().size() >= MIN_CATEGORY_NAME_LENGTH) {
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Ok, tr("Feed name is ok."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtTitle->setStatus(LineEditWithStatus::Error, tr("Feed name is too short."));
|
||||
}
|
||||
@ -120,7 +116,6 @@ void FormFeedDetails::onDescriptionChanged(const QString& new_description) {
|
||||
if (new_description.simplified().isEmpty()) {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Warning, tr("Description is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Ok, tr("The description is ok."));
|
||||
}
|
||||
@ -131,13 +126,11 @@ void FormFeedDetails::onUrlChanged(const QString& new_url) {
|
||||
// New url is well-formed.
|
||||
m_ui->m_txtUrl->setStatus(LineEditWithStatus::Ok, tr("The URL is ok."));
|
||||
}
|
||||
|
||||
else if (!new_url.simplified().isEmpty()) {
|
||||
// New url is not well-formed but is not empty on the other hand.
|
||||
m_ui->m_txtUrl->setStatus(LineEditWithStatus::Warning,
|
||||
tr("The URL does not meet standard pattern. Does your URL start with \"http://\" or \"https://\" prefix."));
|
||||
}
|
||||
|
||||
else {
|
||||
// New url is empty.
|
||||
m_ui->m_txtUrl->setStatus(LineEditWithStatus::Error, tr("The URL is empty."));
|
||||
@ -230,7 +223,6 @@ void FormFeedDetails::guessFeed() {
|
||||
if (encoding_index >= 0) {
|
||||
m_ui->m_cmbEncoding->setCurrentIndex(encoding_index);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_cmbEncoding->setCurrentIndex(m_ui->m_cmbEncoding->findText(DEFAULT_FEED_ENCODING,
|
||||
Qt::MatchFixedString));
|
||||
@ -241,7 +233,6 @@ void FormFeedDetails::guessFeed() {
|
||||
tr("All metadata fetched successfully."),
|
||||
tr("Feed and icon metadata fetched."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Warning,
|
||||
tr("Result: %1.").arg(NetworkFactory::networkErrorText(result.second)),
|
||||
@ -251,7 +242,6 @@ void FormFeedDetails::guessFeed() {
|
||||
// Remove temporary feed object.
|
||||
delete result.first;
|
||||
}
|
||||
|
||||
else {
|
||||
// No feed guessed, even no icon available.
|
||||
m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Error,
|
||||
@ -274,7 +264,6 @@ void FormFeedDetails::guessIconOnly() {
|
||||
tr("Icon fetched successfully."),
|
||||
tr("Icon metadata fetched."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Warning,
|
||||
tr("Result: %1.").arg(NetworkFactory::networkErrorText(result.second)),
|
||||
@ -284,7 +273,6 @@ void FormFeedDetails::guessIconOnly() {
|
||||
// Remove temporary feed object.
|
||||
delete result.first;
|
||||
}
|
||||
|
||||
else {
|
||||
// No feed guessed, even no icon available.
|
||||
m_ui->m_lblFetchMetadata->setStatus(WidgetWithStatus::Error,
|
||||
|
@ -102,7 +102,6 @@ bool RecycleBin::markAsReadUnread(RootItem::ReadStatus status) {
|
||||
parent_root->requestReloadMessageList(status == RootItem::Read);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -118,7 +117,6 @@ bool RecycleBin::cleanMessages(bool clear_only_read) {
|
||||
parent_root->requestReloadMessageList(true);
|
||||
return true;;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -138,7 +136,6 @@ bool RecycleBin::restore() {
|
||||
parent_root->requestReloadMessageList(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
@ -121,7 +121,6 @@ int RootItem::row() const {
|
||||
if (m_parentItem) {
|
||||
return m_parentItem->m_childItems.indexOf(const_cast<RootItem*>(this));
|
||||
}
|
||||
|
||||
else {
|
||||
// This item has no parent. Therefore, its row index is 0.
|
||||
return 0;
|
||||
@ -137,12 +136,10 @@ QVariant RootItem::data(int column, int role) const {
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_title;
|
||||
}
|
||||
|
||||
else if (column == FDS_MODEL_COUNTS_INDEX) {
|
||||
//: Tooltip for "unread" column of feed list.
|
||||
return tr("%n unread message(s).", 0, countOfUnreadMessages());
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -151,11 +148,9 @@ QVariant RootItem::data(int column, int role) const {
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_title;
|
||||
}
|
||||
|
||||
else if (column == FDS_MODEL_COUNTS_INDEX) {
|
||||
return countOfUnreadMessages();
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -167,7 +162,6 @@ QVariant RootItem::data(int column, int role) const {
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return m_title;
|
||||
}
|
||||
|
||||
else if (column == FDS_MODEL_COUNTS_INDEX) {
|
||||
int count_all = countOfAllMessages();
|
||||
int count_unread = countOfUnreadMessages();
|
||||
@ -175,7 +169,6 @@ QVariant RootItem::data(int column, int role) const {
|
||||
.replace(PLACEHOLDER_UNREAD_COUNTS, count_unread < 0 ? QSL("-") : QString::number(count_unread))
|
||||
.replace(PLACEHOLDER_ALL_COUNTS, count_all < 0 ? QSL("-") : QString::number(count_all));
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -184,7 +177,6 @@ QVariant RootItem::data(int column, int role) const {
|
||||
if (column == FDS_MODEL_TITLE_INDEX) {
|
||||
return icon();
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -193,7 +185,6 @@ QVariant RootItem::data(int column, int role) const {
|
||||
if (column == FDS_MODEL_COUNTS_INDEX) {
|
||||
return Qt::AlignCenter;
|
||||
}
|
||||
|
||||
else {
|
||||
return QVariant();
|
||||
}
|
||||
@ -233,7 +224,6 @@ bool RootItem::isChildOf(const RootItem* root) const {
|
||||
if (root->childItems().contains(const_cast<RootItem* const>(this_item))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
this_item = this_item->parent();
|
||||
}
|
||||
@ -246,7 +236,6 @@ bool RootItem::isParentOf(const RootItem* child) const {
|
||||
if (child == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return child->isChildOf(this);
|
||||
}
|
||||
@ -369,7 +358,6 @@ ServiceRoot* RootItem::getParentServiceRoot() const {
|
||||
if (working_parent->kind() == RootItemKind::ServiceRoot) {
|
||||
return working_parent->toServiceRoot();
|
||||
}
|
||||
|
||||
else {
|
||||
working_parent = working_parent->parent();
|
||||
}
|
||||
@ -481,7 +469,6 @@ bool RootItem::removeChild(int index) {
|
||||
m_childItems.removeAt(index);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ bool ServiceRoot::deleteViaGui() {
|
||||
requestItemRemoval(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -58,7 +57,6 @@ bool ServiceRoot::markAsReadUnread(RootItem::ReadStatus status) {
|
||||
requestReloadMessageList(status == RootItem::Read);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -83,7 +81,6 @@ void ServiceRoot::updateCounts(bool including_total_count) {
|
||||
if (child->kind() == RootItemKind::Feed) {
|
||||
feeds.append(child->toFeed());
|
||||
}
|
||||
|
||||
else if (child->kind() != RootItemKind::Category && child->kind() != RootItemKind::ServiceRoot) {
|
||||
child->updateCounts(including_total_count);
|
||||
}
|
||||
@ -106,7 +103,6 @@ void ServiceRoot::updateCounts(bool including_total_count) {
|
||||
feed->setCountOfAllMessages(counts.value(feed->customId()).second);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
feed->setCountOfUnreadMessages(0);
|
||||
|
||||
@ -163,7 +159,6 @@ bool ServiceRoot::cleanFeeds(QList<Feed*> items, bool clean_read_only) {
|
||||
requestReloadMessageList(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -280,7 +275,6 @@ QStringList ServiceRoot::customIDSOfMessagesForItem(RootItem* item) {
|
||||
// Not item from this account.
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
else {
|
||||
QStringList list;
|
||||
|
||||
@ -335,7 +329,6 @@ bool ServiceRoot::markFeedsReadUnread(QList<Feed*> items, RootItem::ReadStatus r
|
||||
requestReloadMessageList(read == RootItem::Read);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -385,7 +378,6 @@ bool ServiceRoot::loadMessagesForItem(RootItem* item, MessagesModel* model) {
|
||||
model->setFilter(QString("Messages.is_deleted = 1 AND Messages.is_pdeleted = 0 AND Messages.account_id = %1").arg(QString::number(
|
||||
accountId())));
|
||||
}
|
||||
|
||||
else {
|
||||
QList<Feed*> children = item->getSubTreeFeeds();
|
||||
QString filter_clause = textualFeedIds(children).join(QSL(", "));
|
||||
@ -440,13 +432,11 @@ bool ServiceRoot::onAfterMessagesDelete(RootItem* selected_item, const QList<Mes
|
||||
if (selected_item->kind() == RootItemKind::Bin) {
|
||||
itemChanged(QList<RootItem*>() << bin);
|
||||
}
|
||||
|
||||
else {
|
||||
if (bin != nullptr) {
|
||||
bin->updateCounts(true);
|
||||
itemChanged(QList<RootItem*>() << selected_item << bin);
|
||||
}
|
||||
|
||||
else {
|
||||
itemChanged(QList<RootItem*>() << selected_item);
|
||||
}
|
||||
@ -477,12 +467,10 @@ void ServiceRoot::assembleFeeds(Assignment feeds) {
|
||||
// This is top-level feed, add it to the root item.
|
||||
appendChild(feed.second);
|
||||
}
|
||||
|
||||
else if (categories.contains(feed.first)) {
|
||||
// This feed belongs to this category.
|
||||
categories.value(feed.first)->appendChild(feed.second);
|
||||
}
|
||||
|
||||
else {
|
||||
qWarning("Feed '%s' is loose, skipping it.", qPrintable(feed.second->title()));
|
||||
}
|
||||
|
@ -101,7 +101,6 @@ void FormEditOwnCloudAccount::performTest() {
|
||||
MINIMAL_OC_VERSION),
|
||||
tr("Selected ownCloud News server is running unsupported version."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblTestResult->setStatus(WidgetWithStatus::Ok,
|
||||
tr("ownCloud News server is okay, running with version %1, while at least version %2 is required.").arg(result.version(),
|
||||
@ -109,13 +108,11 @@ void FormEditOwnCloudAccount::performTest() {
|
||||
tr("ownCloud News server is okay."));
|
||||
}
|
||||
}
|
||||
|
||||
else if (factory.lastError() != QNetworkReply::NoError) {
|
||||
m_ui->m_lblTestResult->setStatus(WidgetWithStatus::Error,
|
||||
tr("Network error: '%1'.").arg(NetworkFactory::networkErrorText(factory.lastError())),
|
||||
tr("Network error, have you entered correct ownCloud endpoint and password?"));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblTestResult->setStatus(WidgetWithStatus::Error,
|
||||
tr("Unspecified error, did you enter correct URL?"),
|
||||
@ -156,7 +153,6 @@ void FormEditOwnCloudAccount::onUsernameChanged() {
|
||||
if (username.isEmpty()) {
|
||||
m_ui->m_txtUsername->setStatus(WidgetWithStatus::Error, tr("Username cannot be empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtUsername->setStatus(WidgetWithStatus::Ok, tr("Username is okay."));
|
||||
}
|
||||
@ -168,7 +164,6 @@ void FormEditOwnCloudAccount::onPasswordChanged() {
|
||||
if (password.isEmpty()) {
|
||||
m_ui->m_txtPassword->setStatus(WidgetWithStatus::Error, tr("Password cannot be empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtPassword->setStatus(WidgetWithStatus::Ok, tr("Password is okay."));
|
||||
}
|
||||
@ -180,7 +175,6 @@ void FormEditOwnCloudAccount::onUrlChanged() {
|
||||
if (url.isEmpty()) {
|
||||
m_ui->m_txtUrl->setStatus(WidgetWithStatus::Error, tr("URL cannot be empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtUrl->setStatus(WidgetWithStatus::Ok, tr("URL is okay."));
|
||||
}
|
||||
|
@ -47,7 +47,6 @@ void FormOwnCloudFeedDetails::apply() {
|
||||
m_editableFeed->customId())) {
|
||||
qWarning("ownCloud: Došlo k problému při prejmenování kanálu s ownCloud ID '%d'.", m_editableFeed->customId());
|
||||
}
|
||||
|
||||
else {
|
||||
renamed = true;
|
||||
}
|
||||
@ -65,7 +64,6 @@ void FormOwnCloudFeedDetails::apply() {
|
||||
QTimer::singleShot(200, m_serviceRoot, SLOT(syncIn()));
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
const RootItem* parent = static_cast<RootItem*>(m_ui->m_cmbParentCategory->itemData(
|
||||
m_ui->m_cmbParentCategory->currentIndex()).value<void*>());
|
||||
@ -79,7 +77,6 @@ void FormOwnCloudFeedDetails::apply() {
|
||||
qApp->showGuiMessage(tr("Feed added"), tr("Feed was added, triggering sync in now."), QSystemTrayIcon::Information);
|
||||
QTimer::singleShot(100, m_serviceRoot, SLOT(syncIn()));
|
||||
}
|
||||
|
||||
else {
|
||||
reject();
|
||||
qApp->showGuiMessage(tr("Cannot add feed"),
|
||||
|
@ -52,7 +52,6 @@ void OwnCloudNetworkFactory::setUrl(const QString& url) {
|
||||
if (url.endsWith('/')) {
|
||||
m_fixedUrl = url;
|
||||
}
|
||||
|
||||
else {
|
||||
m_fixedUrl = url + '/';
|
||||
}
|
||||
@ -189,7 +188,6 @@ bool OwnCloudNetworkFactory::deleteFeed(int feed_id) {
|
||||
qWarning("ownCloud: Obtaining of categories failed with error %d.", network_reply.first);
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
@ -214,7 +212,6 @@ bool OwnCloudNetworkFactory::createFeed(const QString& url, int parent_id) {
|
||||
qWarning("ownCloud: Creating of category failed with error %d.", network_reply.first);
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
@ -239,7 +236,6 @@ bool OwnCloudNetworkFactory::renameFeed(const QString& new_name, int feed_id) {
|
||||
qWarning("ownCloud: Renaming of feed failed with error %d.", network_reply.first);
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
@ -279,7 +275,6 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::triggerFeedUpdate(int feed_i
|
||||
if (lastError() != QNetworkReply::NoError) {
|
||||
return lastError();
|
||||
}
|
||||
|
||||
else {
|
||||
// We have new user ID, set it up.
|
||||
setUserId(info.userId());
|
||||
@ -314,7 +309,6 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesRead(RootItem::R
|
||||
if (status == RootItem::Read) {
|
||||
final_url = m_fixedUrl + API_PATH + "items/read/multiple";
|
||||
}
|
||||
|
||||
else {
|
||||
final_url = m_fixedUrl + API_PATH + "items/unread/multiple";
|
||||
}
|
||||
@ -353,7 +347,6 @@ QNetworkReply::NetworkError OwnCloudNetworkFactory::markMessagesStarred(RootItem
|
||||
if (importance == RootItem::Important) {
|
||||
final_url = m_fixedUrl + API_PATH + "items/star/multiple";
|
||||
}
|
||||
|
||||
else {
|
||||
final_url = m_fixedUrl + API_PATH + "items/unstar/multiple";
|
||||
}
|
||||
@ -417,7 +410,6 @@ QString OwnCloudUserResponse::displayName() const {
|
||||
if (isLoaded()) {
|
||||
return m_rawContent["displayName"].toString();
|
||||
}
|
||||
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
@ -427,7 +419,6 @@ QString OwnCloudUserResponse::userId() const {
|
||||
if (isLoaded()) {
|
||||
return m_rawContent["userId"].toString();
|
||||
}
|
||||
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
@ -437,7 +428,6 @@ QDateTime OwnCloudUserResponse::lastLoginTime() const {
|
||||
if (isLoaded()) {
|
||||
return QDateTime::fromMSecsSinceEpoch(m_rawContent["lastLoginTimestamp"].toDouble());
|
||||
}
|
||||
|
||||
else {
|
||||
return QDateTime();
|
||||
}
|
||||
@ -468,7 +458,6 @@ QString OwnCloudStatusResponse::version() const {
|
||||
if (isLoaded()) {
|
||||
return m_rawContent["version"].toString();
|
||||
}
|
||||
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
@ -478,7 +467,6 @@ bool OwnCloudStatusResponse::misconfiguredCron() const {
|
||||
if (isLoaded()) {
|
||||
return m_rawContent["warnings"].toObject()["improperlyConfiguredCron"].toBool();
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
@ -62,7 +62,6 @@ bool OwnCloudFeed::deleteViaGui() {
|
||||
serviceRoot()->requestItemRemoval(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -76,7 +75,6 @@ bool OwnCloudFeed::editItself(OwnCloudFeed* new_feed_data) {
|
||||
// Persistent storage update failed, no way to continue now.
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
setAutoUpdateType(new_feed_data->autoUpdateType());
|
||||
setAutoUpdateInitialInterval(new_feed_data->autoUpdateInitialInterval());
|
||||
@ -111,7 +109,6 @@ QList<Message> OwnCloudFeed::obtainNewMessages(bool* error_during_obtaining) {
|
||||
serviceRoot()->itemChanged(QList<RootItem*>() << this);
|
||||
return QList<Message>();
|
||||
}
|
||||
|
||||
else {
|
||||
*error_during_obtaining = false;
|
||||
return messages.messages();
|
||||
|
@ -62,7 +62,6 @@ bool OwnCloudServiceRoot::deleteViaGui() {
|
||||
if (DatabaseQueries::deleteOwnCloudAccount(database, accountId())) {
|
||||
return ServiceRoot::deleteViaGui();
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -170,7 +169,6 @@ bool OwnCloudServiceRoot::onBeforeSwitchMessageImportance(RootItem* selected_ite
|
||||
if (pair.second == RootItem::Important) {
|
||||
mark_starred_msgs.append(pair.first);
|
||||
}
|
||||
|
||||
else {
|
||||
mark_unstarred_msgs.append(pair.first);
|
||||
}
|
||||
@ -208,7 +206,6 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() {
|
||||
itemChanged(QList<RootItem*>() << this);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
bool saved;
|
||||
int id_to_assign = DatabaseQueries::createAccount(database, code(), &saved);
|
||||
@ -280,7 +277,6 @@ RootItem* OwnCloudServiceRoot::obtainNewTreeForSyncIn() const {
|
||||
if (m_network->lastError() == QNetworkReply::NoError) {
|
||||
return feed_cats_response.feedsCategories(true);
|
||||
}
|
||||
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -90,11 +90,9 @@ Message AtomParser::extractMessage(const QDomElement& msg_element, QDateTime cur
|
||||
new_message.m_enclosures.append(Enclosure(link.attribute(QSL("href")), link.attribute(QSL("type"))));
|
||||
qDebug("Adding enclosure '%s' for the message.", qPrintable(new_message.m_enclosures.last().m_url));
|
||||
}
|
||||
|
||||
else if (attribute.isEmpty() || attribute == QSL("alternate")) {
|
||||
last_link_alternate = link.attribute(QSL("href"));
|
||||
}
|
||||
|
||||
else {
|
||||
last_link_other = link.attribute(QSL("href"));
|
||||
}
|
||||
@ -103,11 +101,9 @@ Message AtomParser::extractMessage(const QDomElement& msg_element, QDateTime cur
|
||||
if (!last_link_alternate.isEmpty()) {
|
||||
new_message.m_url = last_link_alternate;
|
||||
}
|
||||
|
||||
else if (!last_link_other.isEmpty()) {
|
||||
new_message.m_url = last_link_other;
|
||||
}
|
||||
|
||||
else if (!new_message.m_enclosures.isEmpty()) {
|
||||
new_message.m_url = new_message.m_enclosures.first().m_url;
|
||||
}
|
||||
|
@ -46,7 +46,6 @@ QList<Message> FeedParser::messages() {
|
||||
|
||||
messages.append(new_message);
|
||||
}
|
||||
|
||||
catch (const ApplicationException& ex) {
|
||||
qDebug(qPrintable(ex.message()));
|
||||
}
|
||||
|
@ -87,7 +87,6 @@ int FormStandardCategoryDetails::addEditCategory(StandardCategory* input_categor
|
||||
if (parent_to_select->kind() == RootItemKind::Category) {
|
||||
m_ui->m_cmbParentCategory->setCurrentIndex(m_ui->m_cmbParentCategory->findData(QVariant::fromValue((void*) parent_to_select)));
|
||||
}
|
||||
|
||||
else if (parent_to_select->kind() == RootItemKind::Feed) {
|
||||
int target_item = m_ui->m_cmbParentCategory->findData(QVariant::fromValue((void*) parent_to_select->parent()));
|
||||
|
||||
@ -97,7 +96,6 @@ int FormStandardCategoryDetails::addEditCategory(StandardCategory* input_categor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// User is editing existing category.
|
||||
setWindowTitle(tr("Edit existing category"));
|
||||
@ -122,7 +120,6 @@ void FormStandardCategoryDetails::apply() {
|
||||
m_serviceRoot->requestItemReassignment(new_category, parent);
|
||||
accept();
|
||||
}
|
||||
|
||||
else {
|
||||
delete new_category;
|
||||
qApp->showGuiMessage(tr("Cannot add category"),
|
||||
@ -131,7 +128,6 @@ void FormStandardCategoryDetails::apply() {
|
||||
qApp->mainFormWidget(), true);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
new_category->setParent(parent);
|
||||
bool edited = m_editableCategory->editItself(new_category);
|
||||
@ -140,7 +136,6 @@ void FormStandardCategoryDetails::apply() {
|
||||
m_serviceRoot->requestItemReassignment(m_editableCategory, new_category->parent());
|
||||
accept();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot edit category"),
|
||||
tr("Category was not edited due to error."),
|
||||
@ -156,7 +151,6 @@ void FormStandardCategoryDetails::onTitleChanged(const QString& new_title) {
|
||||
m_ui->m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
|
||||
m_ui->m_txtTitle->setStatus(WidgetWithStatus::Ok, tr("Category name is ok."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
m_ui->m_txtTitle->setStatus(WidgetWithStatus::Error, tr("Category name is too short."));
|
||||
@ -167,7 +161,6 @@ void FormStandardCategoryDetails::onDescriptionChanged(const QString& new_descri
|
||||
if (new_description.simplified().isEmpty()) {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Warning, tr("Description is empty."));
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_txtDescription->setStatus(LineEditWithStatus::Ok, tr("The description is ok."));
|
||||
}
|
||||
|
@ -51,7 +51,6 @@ void FormStandardFeedDetails::apply() {
|
||||
m_serviceRoot->requestItemReassignment(new_feed, parent);
|
||||
accept();
|
||||
}
|
||||
|
||||
else {
|
||||
delete new_feed;
|
||||
qApp->showGuiMessage(tr("Cannot add feed"),
|
||||
@ -59,7 +58,6 @@ void FormStandardFeedDetails::apply() {
|
||||
QSystemTrayIcon::Critical, this, true);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
new_feed->setParent(parent);
|
||||
// Edit the feed.
|
||||
@ -69,7 +67,6 @@ void FormStandardFeedDetails::apply() {
|
||||
m_serviceRoot->requestItemReassignment(m_editableFeed, new_feed->parent());
|
||||
accept();
|
||||
}
|
||||
|
||||
else {
|
||||
qApp->showGuiMessage(tr("Cannot edit feed"),
|
||||
tr("Feed was not edited due to error."),
|
||||
|
@ -129,7 +129,6 @@ void FormStandardImportExport::onParsingFinished(int count_failed, int count_suc
|
||||
m_ui->m_treeFeeds->setModel(m_model);
|
||||
m_ui->m_treeFeeds->expandAll();
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_groupFeeds->setEnabled(false);
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Error, file is not well-formed. Select another file."),
|
||||
@ -164,7 +163,6 @@ void FormStandardImportExport::selectExportFile() {
|
||||
selected_file += QL1S(".opml");
|
||||
}
|
||||
}
|
||||
|
||||
else if (selected_filter == filter_txt_url_per_line) {
|
||||
m_conversionType = TXTUrlPerLine;
|
||||
|
||||
@ -195,7 +193,6 @@ void FormStandardImportExport::selectImportFile() {
|
||||
if (selected_filter == filter_opml20) {
|
||||
m_conversionType = OPML20;
|
||||
}
|
||||
|
||||
else if (selected_filter == filter_txt_url_per_line) {
|
||||
m_conversionType = TXTUrlPerLine;
|
||||
}
|
||||
@ -218,7 +215,6 @@ void FormStandardImportExport::parseImportFile(const QString& file_name, bool fe
|
||||
input_data = input_file.readAll();
|
||||
input_file.close();
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Cannot open source file."), tr("Cannot open source file."));
|
||||
return;
|
||||
@ -275,12 +271,10 @@ void FormStandardImportExport::exportFeeds() {
|
||||
IOFactory::writeTextFile(m_ui->m_lblSelectFile->label()->text(), result_data);
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, tr("Feeds were exported successfully."), tr("Feeds were exported successfully."));
|
||||
}
|
||||
|
||||
catch (IOException& ex) {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Cannot write into destination file: '%1'."), ex.message());
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, tr("Critical error occurred."), tr("Critical error occurred."));
|
||||
}
|
||||
@ -294,7 +288,6 @@ void FormStandardImportExport::importFeeds() {
|
||||
m_serviceRoot->requestItemExpand(parent->getSubTree(), true);
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Ok, output_message, output_message);
|
||||
}
|
||||
|
||||
else {
|
||||
m_ui->m_lblResult->setStatus(WidgetWithStatus::Error, output_message, output_message);
|
||||
}
|
||||
|
@ -51,14 +51,12 @@ QList<Message> RdfParser::parseXmlData(const QString& data) {
|
||||
// BOTH title and description are empty, skip this message.
|
||||
continue;
|
||||
}
|
||||
|
||||
else {
|
||||
// Title is empty but description is not.
|
||||
new_message.m_title = qApp->web()->escapeHtml(qApp->web()->stripTags(elem_description.simplified()));
|
||||
new_message.m_contents = elem_description;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// Title is really not empty, description does not matter.
|
||||
new_message.m_title = qApp->web()->escapeHtml(qApp->web()->stripTags(elem_title));
|
||||
|
@ -38,7 +38,6 @@ QDomNodeList RssParser::messageElements() {
|
||||
if (channel_elem.isNull()) {
|
||||
return QDomNodeList();
|
||||
}
|
||||
|
||||
else {
|
||||
return channel_elem.toElement().elementsByTagName(QSL("item"));
|
||||
}
|
||||
@ -62,14 +61,12 @@ Message RssParser::extractMessage(const QDomElement& msg_element, QDateTime curr
|
||||
// BOTH title and description are empty, skip this message.
|
||||
throw new ApplicationException(QSL("Not enough data for the message."));
|
||||
}
|
||||
|
||||
else {
|
||||
// Title is empty but description is not.
|
||||
new_message.m_title = qApp->web()->stripTags(elem_description.simplified());
|
||||
new_message.m_contents = elem_description;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
// Title is really not empty, description does not matter.
|
||||
new_message.m_title = qApp->web()->stripTags(elem_title);
|
||||
|
@ -67,7 +67,6 @@ QVariant StandardCategory::data(int column, int role) const {
|
||||
tr("\nThis category does not contain any nested items.") :
|
||||
QString());
|
||||
}
|
||||
|
||||
else {
|
||||
return Category::data(column, role);
|
||||
}
|
||||
@ -91,7 +90,6 @@ bool StandardCategory::performDragDropChange(RootItem* target_item) {
|
||||
delete category_new;
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
delete category_new;
|
||||
return false;
|
||||
@ -109,7 +107,6 @@ bool StandardCategory::deleteViaGui() {
|
||||
serviceRoot()->requestItemRemoval(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -132,7 +129,6 @@ bool StandardCategory::removeItself() {
|
||||
if (child->kind() == RootItemKind::Category) {
|
||||
children_removed &= static_cast<StandardCategory*>(child)->removeItself();
|
||||
}
|
||||
|
||||
else if (child->kind() == RootItemKind::Feed) {
|
||||
children_removed &= static_cast<StandardFeed*>(child)->removeItself();
|
||||
}
|
||||
@ -143,7 +139,6 @@ bool StandardCategory::removeItself() {
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
return DatabaseQueries::deleteCategory(database, id());
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
@ -158,7 +153,6 @@ bool StandardCategory::addItself(RootItem* parent) {
|
||||
if (new_id <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
else {
|
||||
setId(new_id);
|
||||
setCustomId(new_id);
|
||||
@ -181,7 +175,6 @@ bool StandardCategory::editItself(StandardCategory* new_category_data) {
|
||||
// Editing is done.
|
||||
return true;
|
||||
}
|
||||
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user