void EntryMerger::slotStartNext() { QString statusMsg = i18n("Total merged/scanned entries: %1/%2", m_entriesToRemove.count(), m_origCount - m_entriesToCheck.count()); StatusBar::self()->setStatus(statusMsg); ProgressManager::self()->setProgress(this, m_origCount - m_entriesToCheck.count()); Data::EntryPtr baseEntry = m_entriesToCheck[0]; for(int i = 1; i < m_entriesToCheck.count(); ++i) { // skip checking against first Data::EntryPtr it = m_entriesToCheck[i]; bool match = cleanMerge(baseEntry, it); if(!match) { int score = baseEntry->collection()->sameEntry(baseEntry, it); match = score >= EntryComparison::ENTRY_GOOD_MATCH; } if(match) { bool merge_ok = Data::Document::mergeEntry(baseEntry, it, m_resolver); if(merge_ok) { m_entriesToRemove.append(it); m_entriesLeft.removeAll(it); } } } m_entriesToCheck.removeAll(baseEntry); if(m_cancelled || m_entriesToCheck.count() < 2) { QTimer::singleShot(0, this, SLOT(slotCleanup())); } else { QTimer::singleShot(0, this, SLOT(slotStartNext())); } }
QString FetchResult::makeDescription(Data::EntryPtr entry) { Q_ASSERT(entry); QString desc; switch(entry->collection()->type()) { case Data::Collection::Book: case Data::Collection::ComicBook: case Data::Collection::Bibtex: append(desc, entry, "author"); append(desc, entry, "publisher"); append(desc, entry, "cr_year") || append(desc, entry, "pub_year") || append(desc, entry, "year"); break; case Data::Collection::Video: append(desc, entry, "studio"); append(desc, entry, "director"); append(desc, entry, "year"); append(desc, entry, "medium"); break; case Data::Collection::Album: append(desc, entry, "artist"); append(desc, entry, "label"); append(desc, entry, "year"); break; case Data::Collection::Game: append(desc, entry, "platform"); append(desc, entry, "year"); break; case Data::Collection::BoardGame: append(desc, entry, "publisher"); append(desc, entry, "designer"); append(desc, entry, "year"); break; case Data::Collection::Wine: append(desc, entry, "appellation"); break; default: myDebug() << "no description for collection type =" << entry->collection()->type(); break; } return desc; }
Tellico::Data::EntryPtr Fetcher::fetchEntry(uint uid_) { QPointer<Fetcher> ptr(this); Data::EntryPtr entry = fetchEntryHook(uid_); // could be cancelled and killed after fetching entry, check ptr if(ptr && entry) { // iterate over list of possible optional fields // and if the field is not included in the user-configured list // remove the field from the entry QHashIterator<QString, QString> i(Manager::optionalFields(type())); while(i.hasNext()) { i.next(); if(!m_fields.contains(i.key())) { entry->collection()->removeField(i.key()); } } } return entry; }