예제 #1
0
	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;
	}
예제 #2
0
	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;
	}
예제 #3
0
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));
    }
}
예제 #4
0
	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));
		}
	}