diff --git a/src/driver/pictureviewer/pictureviewer.cpp b/src/driver/pictureviewer/pictureviewer.cpp index b55cc0f6c..fc414d806 100644 --- a/src/driver/pictureviewer/pictureviewer.cpp +++ b/src/driver/pictureviewer/pictureviewer.cpp @@ -664,7 +664,7 @@ bool CPictureViewer::GetLogoName(const uint64_t& channel_id, const std::string& { if (!cc->getAlternateLogo().empty()) { - std::string lname = downloadUrlToRandomFile(cc->getAlternateLogo(), LOGODIR_TMP); + std::string lname = downloadUrlToLogo(cc->getAlternateLogo(), LOGODIR_TMP, cc->getChannelID()); if (width && height) getSize(lname.c_str(), width, height); name = lname; diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index e3dfd40f2..5fb09a8ba 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -1557,6 +1557,28 @@ std::string downloadUrlToRandomFile(std::string url, std::string directory, unsi return url; } +std::string downloadUrlToLogo(std::string url, std::string directory, t_channel_id channel_id) +{ + + if (channel_id == 0) + return downloadUrlToRandomFile(url,directory); + + if (strstr(url.c_str(), "://")) + { + //get channel id as string + char strChnId[16]; + snprintf(strChnId, 16, "%llx", channel_id & 0xFFFFFFFFFFFFULL); + strChnId[15] = '\0'; + + std::string file = directory + "/" + strChnId + url.substr(url.find_last_of(".")); + if (file_exists(file)) + return file; + if (downloadUrl(url, file)) + return file; + } + return url; +} + // curl static void *myrealloc(void *ptr, size_t size) { diff --git a/src/system/helpers.h b/src/system/helpers.h index 55d841a4d..3a8cc477f 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -36,6 +36,8 @@ #include #include +typedef uint64_t t_channel_id; + int my_system(const char * cmd); int my_system(int argc, const char *arg, ...); /* argc is number of arguments including command */ @@ -162,6 +164,7 @@ bool utf8_check_is_valid(const std::string &str); std::string randomString(unsigned int length = 10); std::string randomFile(std::string suffix = "tmp", std::string directory = "/tmp", unsigned int length = 10); std::string downloadUrlToRandomFile(std::string url, std::string directory = "/tmp", unsigned int length = 10); +std::string downloadUrlToLogo(std::string url, std::string directory = "/tmp", t_channel_id channel_id = 0); // curl struct MemoryStruct { diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index 891fd0edb..5d8c59fbf 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -1153,7 +1153,7 @@ void* CBouquetManager::LogoThread(void* _logolist) { CZapitChannel *cc = (*it); if (cc) - cc->setAlternateLogo(downloadUrlToRandomFile(cc->getAlternateLogo(), LOGODIR_TMP)); + cc->setAlternateLogo(downloadUrlToLogo(cc->getAlternateLogo(), LOGODIR_TMP, cc->getChannelID())); } LogoList->clear(); pthread_mutex_unlock(&mutex);