diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index 9a8fe2c1e..9811a9f94 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -178,6 +178,8 @@ class CZapitChannel void Init(); friend class CChannelList; + pthread_t thrLogo; + static void* LogoThread(void* channel); public: typedef enum channel_flags { @@ -296,6 +298,7 @@ class CZapitChannel void setEPGid(t_channel_id pEPGid) { epg_id = pEPGid; } //remap epg_id std::string getAlternateLogo(void) const { return altlogo; } inline void setAlternateLogo(const std::string &pLogo) { altlogo = pLogo; } + void setThrAlternateLogo(const std::string &pLogo); }; struct CmpChannelBySat: public std::binary_function diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index e861c0d14..3c350ad6b 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -1037,7 +1037,7 @@ void CBouquetManager::loadWebchannels(int mode) CZapitChannel * channel = new CZapitChannel(title.c_str(), chid, url, desc.c_str(), chid, epg_script.c_str(), mode); CServiceManager::getInstance()->AddChannel(channel); if (!alogo.empty()) - channel->setAlternateLogo(dlTmpName(alogo)); + channel->setThrAlternateLogo(alogo); channel->flags = CZapitChannel::UPDATED; if (gbouquet) gbouquet->addService(channel); diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index 8fcfc64dd..3489ec6b5 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -21,6 +21,7 @@ */ #include +#include #include #include @@ -109,6 +110,7 @@ void CZapitChannel::Init() bLockCount = 0; bLocked = DEFAULT_CH_LOCKED; bUseCI = false; + thrLogo = NULL; altlogo = ""; } @@ -420,3 +422,31 @@ void CZapitChannel::dumpBouquetXml(FILE * fd, bool bUser) fprintf(fd, "/>\n"); } + +void CZapitChannel::setThrAlternateLogo(const std::string &pLogo) +{ + //printf("CZapitChannel::setAlternateLogo: [%s]\n", pLogo.c_str()); + + altlogo = pLogo; + + if(thrLogo != 0) + { + pthread_cancel(thrLogo); + pthread_join(thrLogo, NULL); + thrLogo = 0; + } + + pthread_create(&thrLogo, NULL, LogoThread, (void *)this); +} + +void* CZapitChannel::LogoThread(void* channel) +{ + CZapitChannel *cc = (CZapitChannel *)channel; + std::string lname = cc->getAlternateLogo(); + cc->setAlternateLogo(dlTmpName(lname)); + + pthread_exit(0); + + return NULL; + +}