diff --git a/src/system/ytcache.cpp b/src/system/ytcache.cpp index 8d041eb13..fdd4818d9 100644 --- a/src/system/ytcache.cpp +++ b/src/system/ytcache.cpp @@ -64,6 +64,17 @@ std::string cYTCache::getName(MI_MOVIE_INFO *mi, std::string ext) return g_settings.downloadcache_dir + "/" + mi->ytid + "-" + std::string(ytitag) + "." + ext; } +bool cYTCache::getNameIfExists(std::string &fname, const std::string &id, int itag, std::string ext) +{ + char ytitag[10]; + snprintf(ytitag, sizeof(ytitag), "%d", itag); + std::string f = g_settings.downloadcache_dir + "/" + id + "-" + std::string(ytitag) + "." + ext; + if (access(f.c_str(), R_OK)) + return false; + fname = f; + return true; +} + bool cYTCache::useCachedCopy(MI_MOVIE_INFO *mi) { std::string file = getName(mi); @@ -143,8 +154,7 @@ bool cYTCache::download(MI_MOVIE_INFO *mi) File.Name = xml; cMovieInfo.saveMovieInfo(*mi, &File); std::string thumbnail_dst = getName(mi, "jpg"); - std::string thumbnail_src = "/tmp/ytparser/" + mi->ytid + ".jpg"; - CFileHelpers::getInstance()->copyFile(thumbnail_src.c_str(), thumbnail_dst.c_str(), 0644); + CFileHelpers::getInstance()->copyFile(mi->tfile.c_str(), thumbnail_dst.c_str(), 0644); return true; } diff --git a/src/system/ytcache.h b/src/system/ytcache.h index 5d564b4e7..015e7e5e0 100644 --- a/src/system/ytcache.h +++ b/src/system/ytcache.h @@ -60,5 +60,6 @@ class cYTCache std::vector getPending(void); void clearCompleted(MI_MOVIE_INFO *mi = NULL); void clearFailed(MI_MOVIE_INFO *mi = NULL); + bool getNameIfExists(std::string &fname, const std::string &id, int itag, std::string ext = ".jpg"); }; #endif diff --git a/src/system/ytparser.cpp b/src/system/ytparser.cpp index 9363a5168..894fe8525 100644 --- a/src/system/ytparser.cpp +++ b/src/system/ytparser.cpp @@ -34,12 +34,14 @@ #include "set_threadname.h" #include "ytparser.h" +#include "ytcache.h" #if LIBCURL_VERSION_NUM < 0x071507 #include #endif #define URL_TIMEOUT 60 +static int itags[] = { 37 /* 1080p MP4 */, 22 /* 720p MP4 */, 18 /* 270p/360p MP4 */, 0 }; std::string cYTVideoUrl::GetUrl() { @@ -80,7 +82,6 @@ std::string cYTVideoInfo::GetUrl(int *fmt, bool mandatory) } } - int itags[] = { 37 /* 1080p MP4*/, 22 /* 720p MP4 */, 18 /* 270p/360p MP4 */, 0 }; for (int *fmtp = itags; *fmtp; fmtp++) if ((it = formats.find(*fmtp)) != formats.end()) { *fmt = *fmtp; @@ -395,8 +396,9 @@ bool cYTFeedParser::parseFeedXml(std::string &answer) bool cYTFeedParser::supportedFormat(int fmt) { - if((fmt == 37) || (fmt == 22) || (fmt == 18)) - return true; + for (int *fmtp = itags; *fmtp; fmtp++) + if (*fmtp == fmt) + return true; return false; } @@ -596,6 +598,10 @@ bool cYTFeedParser::DownloadThumbnail(cYTVideoInfo &vinfo, CURL *_curl_handle) if (!vinfo.thumbnail.empty()) { std::string fname = thumbnail_dir + "/" + vinfo.id + ".jpg"; found = !access(fname.c_str(), F_OK); + if (!found) { + for (int *fmtp = itags; *fmtp && !found; fmtp++) + found = cYTCache::getInstance()->getNameIfExists(fname, vinfo.id, *fmtp); + } if (!found) found = DownloadUrl(vinfo.thumbnail, fname, _curl_handle); if (found)