/* * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ #include "PictureInfoLoader.h" #include "FileItem.h" #include "PictureInfoTag.h" #include "ServiceBroker.h" #include "settings/Settings.h" #include "settings/SettingsComponent.h" CPictureInfoLoader::CPictureInfoLoader() { m_mapFileItems = new CFileItemList; m_tagReads = 0; } CPictureInfoLoader::~CPictureInfoLoader() { StopThread(); delete m_mapFileItems; } void CPictureInfoLoader::OnLoaderStart() { // Load previously cached items from HD m_mapFileItems->SetPath(m_pVecItems->GetPath()); m_mapFileItems->Load(); m_mapFileItems->SetFastLookup(true); m_tagReads = 0; m_loadTags = CServiceBroker::GetSettingsComponent()->GetSettings()->GetBool(CSettings::SETTING_PICTURES_USETAGS); if (m_pProgressCallback) m_pProgressCallback->SetProgressMax(m_pVecItems->GetFileCount()); } bool CPictureInfoLoader::LoadItem(CFileItem* pItem) { bool result = LoadItemCached(pItem); result |= LoadItemLookup(pItem); return result; } bool CPictureInfoLoader::LoadItemCached(CFileItem* pItem) { if (!pItem->IsPicture() || pItem->IsZIP() || pItem->IsRAR() || pItem->IsCBR() || pItem->IsCBZ() || pItem->IsInternetStream() || pItem->IsVideo()) return false; if (pItem->HasPictureInfoTag()) return true; // Check the cached item CFileItemPtr mapItem = (*m_mapFileItems)[pItem->GetPath()]; if (mapItem && mapItem->m_dateTime==pItem->m_dateTime && mapItem->HasPictureInfoTag()) { // Query map if we previously cached the file on HD *pItem->GetPictureInfoTag() = *mapItem->GetPictureInfoTag(); pItem->SetArt("thumb", mapItem->GetArt("thumb")); return true; } return true; } bool CPictureInfoLoader::LoadItemLookup(CFileItem* pItem) { if (m_pProgressCallback && !pItem->m_bIsFolder) m_pProgressCallback->SetProgressAdvance(); if (!pItem->IsPicture() || pItem->IsZIP() || pItem->IsRAR() || pItem->IsCBR() || pItem->IsCBZ() || pItem->IsInternetStream() || pItem->IsVideo()) return false; if (pItem->HasPictureInfoTag()) return false; if (m_loadTags) { // Nothing found, load tag from file pItem->GetPictureInfoTag()->Load(pItem->GetPath()); m_tagReads++; } return true; } void CPictureInfoLoader::OnLoaderFinish() { // cleanup cache loaded from HD m_mapFileItems->Clear(); // Save loaded items to HD if (!m_bStop && m_tagReads > 0) m_pVecItems->Save(); }