bool DBUpdateThreadWorker::AddItem (const Item_ptr& item, const Channel_ptr& channel, const QVariantMap& channelDataMap, const Feed::FeedSettings& settings) { if (item->PubDate_.isValid ()) { if (item->PubDate_.daysTo (QDateTime::currentDateTime ()) >= settings.ItemAge_) return false; } else item->FixDate (); item->ChannelID_ = channel->ChannelID_; SB_->AddItem (item); RegexpMatcherManager::Instance ().HandleItem (item); QVariantList itemData; itemData << GetItemMapItemPart (item).unite (channelDataMap); emit hookGotNewItems (Util::DefaultHookProxy_ptr (new Util::DefaultHookProxy), itemData); if (settings.AutoDownloadEnclosures_) for (const auto& e : item->Enclosures_) { auto de = Util::MakeEntity (QUrl (e.URL_), XmlSettingsManager::Instance ()-> property ("EnclosuresDownloadPath").toString (), 0, e.Type_); de.Additional_ [" Tags"] = channel->Tags_; emit gotEntity (de); } return true; }
bool DBUpdateThreadWorker::AddItem (const Item_ptr& item, const Channel_ptr& channel, const Feed::FeedSettings& settings) { if (item->PubDate_.isValid ()) { if (item->PubDate_.daysTo (QDateTime::currentDateTime ()) >= settings.ItemAge_) return false; } else item->FixDate (); item->ChannelID_ = channel->ChannelID_; SB_->AddItem (item); emit hookGotNewItems (std::make_shared<Util::DefaultHookProxy> (), { item }); const auto iem = Proxy_->GetEntityManager (); if (settings.AutoDownloadEnclosures_) for (const auto& e : item->Enclosures_) { auto de = Util::MakeEntity (QUrl (e.URL_), XmlSettingsManager::Instance ()-> property ("EnclosuresDownloadPath").toString (), 0, e.Type_); de.Additional_ [" Tags"] = channel->Tags_; iem->HandleEntity (de); } return true; }
void ItemsListModel::ItemDataUpdated (Item_ptr item) { ItemShort is = item->ToShort (); items_shorts_t::iterator pos = CurrentItems_.end (); for (items_shorts_t::iterator i = CurrentItems_.begin (), end = CurrentItems_.end (); i != end; ++i) if (is.Title_ == i->Title_ && is.URL_ == i->URL_) { pos = i; break; } // Item is new if (pos == CurrentItems_.end ()) { items_shorts_t::iterator insertPos = std::find_if (CurrentItems_.begin (), CurrentItems_.end (), FindEarlierDate (item->PubDate_)); int shift = std::distance (CurrentItems_.begin (), insertPos); beginInsertRows (QModelIndex (), shift, shift); CurrentItems_.insert (insertPos, is); endInsertRows (); } // Item exists already else { *pos = is; int distance = std::distance (CurrentItems_.begin (), pos); emit dataChanged (index (distance, 0), index (distance, 1)); } }
void ItemsListModel::ItemDataUpdated (Item_ptr item) { ItemShort is = item->ToShort (); auto pos = CurrentItems_.end (); for (auto i = CurrentItems_.begin (), end = CurrentItems_.end (); i != end; ++i) if (is.Title_ == i->Title_ && is.URL_ == i->URL_) { pos = i; break; } // Item is new if (pos == CurrentItems_.end ()) { auto insertPos = std::find_if (CurrentItems_.begin (), CurrentItems_.end (), [item] (const ItemShort& is) { return item->PubDate_ > is.PubDate_; }); int shift = std::distance (CurrentItems_.begin (), insertPos); beginInsertRows (QModelIndex (), shift, shift); CurrentItems_.insert (insertPos, is); endInsertRows (); } // Item exists already else { *pos = is; int distance = std::distance (CurrentItems_.begin (), pos); emit dataChanged (index (distance, 0), index (distance, 1)); } }