From 9f5c9259dee355e3f08f3c8704c38adfafe766e2 Mon Sep 17 00:00:00 2001 From: Jonathan Marshall Date: Thu, 10 Jan 2013 16:52:31 +1300 Subject: [PATCH] import art from a previously exported library --- xbmc/video/VideoDatabase.cpp | 66 +++++++++++++++++++---------------------- xbmc/video/VideoInfoScanner.cpp | 16 ++++++---- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index c783fe9..7549839 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -8783,28 +8783,30 @@ void CVideoDatabase::ImportFromXML(const CStdString &path) { info.Load(movie); CFileItem item(info); - map artwork; - if (ImportArtFromXML(movie->FirstChild("art"), artwork)) - item.SetArt(artwork); bool useFolders = info.m_basePath.IsEmpty() ? LookupByFolders(item.GetPath()) : false; + CStdString filename = info.m_strTitle; + if (info.m_iYear > 0) + filename.AppendFormat("_%i", info.m_iYear); + CFileItem artItem(item); + artItem.SetPath(GetSafeFile(moviesDir, filename) + ".avi"); + scanner.GetArtwork(&artItem, CONTENT_MOVIES, useFolders, true, actorsDir); + item.SetArt(artItem.GetArt()); scanner.AddVideo(&item, CONTENT_MOVIES, useFolders, true, NULL, true); - CStdString strFileName(info.m_strTitle); - if (iVersion >= 1 && info.m_iYear > 0) - strFileName.AppendFormat("_%i", info.m_iYear); current++; } else if (strnicmp(movie->Value(), "musicvideo", 10) == 0) { info.Load(movie); CFileItem item(info); - map artwork; - if (ImportArtFromXML(movie->FirstChild("art"), artwork)) - item.SetArt(artwork); bool useFolders = info.m_basePath.IsEmpty() ? LookupByFolders(item.GetPath()) : false; + CStdString filename = StringUtils::Join(info.m_artist, g_advancedSettings.m_videoItemSeparator) + "." + info.m_strTitle; + if (info.m_iYear > 0) + filename.AppendFormat("_%i", info.m_iYear); + CFileItem artItem(item); + artItem.SetPath(GetSafeFile(musicvideosDir, filename) + ".avi"); + scanner.GetArtwork(&artItem, CONTENT_MOVIES, useFolders, true, actorsDir); + item.SetArt(artItem.GetArt()); scanner.AddVideo(&item, CONTENT_MUSICVIDEOS, useFolders, true, NULL, true); - CStdString strFileName(StringUtils::Join(info.m_artist, g_advancedSettings.m_videoItemSeparator) + "." + info.m_strTitle); - if (iVersion >= 1 && info.m_iYear > 0) - strFileName.AppendFormat("_%i", info.m_iYear); current++; } else if (strnicmp(movie->Value(), "tvshow", 6) == 0) @@ -8815,30 +8817,21 @@ void CVideoDatabase::ImportFromXML(const CStdString &path) URIUtils::AddSlashAtEnd(info.m_strPath); DeleteTvShow(info.m_strPath); CFileItem showItem(info); - map artwork; - if (ImportArtFromXML(movie->FirstChild("art"), artwork)) - showItem.SetArt(artwork); bool useFolders = info.m_basePath.IsEmpty() ? LookupByFolders(showItem.GetPath(), true) : false; + CFileItem artItem(showItem); + CStdString artPath(GetSafeFile(tvshowsDir, info.m_strTitle)); + artItem.SetPath(artPath); + scanner.GetArtwork(&artItem, CONTENT_MOVIES, useFolders, true, actorsDir); + showItem.SetArt(artItem.GetArt()); int showID = scanner.AddVideo(&showItem, CONTENT_TVSHOWS, useFolders, true, NULL, true); // season artwork - TiXmlNode *art = movie->FirstChild("art"); - if (art) + map > seasonArt; + artItem.GetVideoInfoTag()->m_strPath = artPath; + scanner.GetSeasonThumbs(*artItem.GetVideoInfoTag(), seasonArt, CVideoThumbLoader::GetArtTypes("season"), true); + for (map >::iterator i = seasonArt.begin(); i != seasonArt.end(); ++i) { - TiXmlElement *season = art->FirstChildElement("season"); - while (season) - { - if (season->FirstChild()) - { - int seasonNum = -1; - season->Attribute("num", &seasonNum); - map artwork; - - int seasonID = AddSeason(showID, seasonNum); - if (ImportArtFromXML(season, artwork) && seasonID > -1) - SetArtForItem(seasonID, "season", artwork); - } - season = season->NextSiblingElement("season"); - } + int seasonID = AddSeason(showID, i->first); + SetArtForItem(seasonID, "season", i->second); } current++; // now load the episodes @@ -8849,9 +8842,12 @@ void CVideoDatabase::ImportFromXML(const CStdString &path) CVideoInfoTag info; info.Load(episode); CFileItem item(info); - map artwork; - if (ImportArtFromXML(episode->FirstChild("art"), artwork)) - item.SetArt(artwork); + CStdString filename; + filename.Format("s%02ie%02i.avi", info.m_iSeason, info.m_iEpisode); + CFileItem artItem(item); + artItem.SetPath(GetSafeFile(artPath, filename)); + scanner.GetArtwork(&artItem, CONTENT_MOVIES, useFolders, true, actorsDir); + item.SetArt(artItem.GetArt()); scanner.AddVideo(&item,CONTENT_TVSHOWS, false, false, showItem.GetVideoInfoTag(), true); episode = episode->NextSiblingElement("episodedetails"); } diff --git a/xbmc/video/VideoInfoScanner.cpp b/xbmc/video/VideoInfoScanner.cpp index a9b236a..fbca835 100644 --- a/xbmc/video/VideoInfoScanner.cpp +++ b/xbmc/video/VideoInfoScanner.cpp @@ -1048,7 +1048,9 @@ namespace VIDEO if (!m_database.Open()) return -1; - GetArtwork(pItem, content, videoFolder, useLocal, showInfo ? showInfo->m_strPath : ""); + if (!libraryImport) + GetArtwork(pItem, content, videoFolder, useLocal, showInfo ? showInfo->m_strPath : ""); + // ensure the art map isn't completely empty by specifying an empty thumb map art = pItem->GetArt(); if (art.empty()) @@ -1100,12 +1102,14 @@ namespace VIDEO { if (pItem->m_bIsFolder) { - // get and cache season thumbs map > seasonArt; - GetSeasonThumbs(movieDetails, seasonArt, CVideoThumbLoader::GetArtTypes("season"), useLocal); - for (map >::iterator i = seasonArt.begin(); i != seasonArt.end(); ++i) - for (map::iterator j = i->second.begin(); j != i->second.end(); ++j) - CTextureCache::Get().BackgroundCacheImage(j->second); + if (!libraryImport) + { // get and cache season thumbs + GetSeasonThumbs(movieDetails, seasonArt, CVideoThumbLoader::GetArtTypes("season"), useLocal); + for (map >::iterator i = seasonArt.begin(); i != seasonArt.end(); ++i) + for (map::iterator j = i->second.begin(); j != i->second.end(); ++j) + CTextureCache::Get().BackgroundCacheImage(j->second); + } lResult = m_database.SetDetailsForTvShow(pItem->GetPath(), movieDetails, art, seasonArt); movieDetails.m_iDbId = lResult; movieDetails.m_type = "tvshow"; -- 2.7.4