yt: use cached tumbnail, if available

This commit is contained in:
martii
2013-06-14 18:26:39 +02:00
committed by [CST] Focus
parent 3ac6bcb6b5
commit 2b236ea1c8
3 changed files with 22 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -60,5 +60,6 @@ class cYTCache
std::vector<MI_MOVIE_INFO> 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

View File

@@ -34,12 +34,14 @@
#include "set_threadname.h"
#include "ytparser.h"
#include "ytcache.h"
#if LIBCURL_VERSION_NUM < 0x071507
#include <curl/types.h>
#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,7 +396,8 @@ bool cYTFeedParser::parseFeedXml(std::string &answer)
bool cYTFeedParser::supportedFormat(int fmt)
{
if((fmt == 37) || (fmt == 22) || (fmt == 18))
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)