// MH in case anbody has a better position :-)
pthread_mutex_init(&threadClientMutex, NULL);
tcpServerPort = 0;
+ logoDir = NULL;
+ resourceDir = NULL;
+ imageDir = NULL;
+ cacheDir = NULL;
}
MVPServer::~MVPServer()
{
+ if (logoDir) delete[] logoDir;
+ if (resourceDir) delete[] resourceDir;
+ if (imageDir) delete[] imageDir;
+ if (cacheDir) delete[] cacheDir;
stop();
}
dsyslog("VOMP: Logging disabled");
}
+ const char *bigresdir = cPlugin::ResourceDirectory();
+ const char *bigcachedir = cPlugin::CacheDirectory();
+ // get logo directory
+ logoDir = config.getValueString("General", "Channel logo directory");
+
+ if (logoDir)
+ {
+ log.log("Main", Log::INFO, "LogoDir set %s", logoDir);
+ } else {
+ if (bigresdir) {
+ logoDir = new char[strlen(bigresdir)+1+7];
+ sprintf(logoDir,"%s/logos/",bigresdir);
+ log.log("Main", Log::INFO, "No LogoDir set, default %s",logoDir);
+ } else {
+ log.log("Main", Log::INFO, "No LogoDir set, no res dir");
+ }
+
+ }
+
+ // get epg Image directory
+ imageDir = config.getValueString("General", "Epg image directory");
+
+ if (imageDir)
+ {
+ log.log("Main", Log::INFO, "ImageDir set %s", imageDir);
+ } else {
+ if (bigcachedir) {
+ imageDir = new char[strlen(bigcachedir)+1+11+3];
+ sprintf(imageDir,"%s/../epgimages/",bigcachedir);
+ log.log("Main", Log::INFO, "No ImageDir set, default %s",imageDir);
+ } else {
+ log.log("Main", Log::INFO, "No ImageDir set, no cache dir");
+ }
+ }
+
+ if (bigresdir) {
+ resourceDir = new char[strlen(bigresdir)+1];
+ strcpy(resourceDir,bigresdir);
+ log.log("Main", Log::INFO, "Resource directory is %s",bigresdir);
+ } else {
+ log.log("Main", Log::INFO, "Resource directory is not set");
+ }
+
+ if (bigcachedir) {
+ cacheDir = new char[strlen(bigcachedir)+1];
+ strcpy(cacheDir,bigcachedir);
+ log.log("Main", Log::INFO, "Cache directory is %s",bigcachedir);
+ } else {
+ log.log("Main", Log::INFO, "Cache directory is not set");
+ }
// Get UDP port number for discovery service
int fail = 1;
while(1)
{
clientSocket = accept(listeningSocket,(struct sockaddr *)&address, &length);
- VompClient* m = new VompClient(&config, configDir, clientSocket);
+ VompClient* m = new VompClient(&config, configDir, logoDir, resourceDir, imageDir, cacheDir, clientSocket);
m->run();
}
}
MVPRelay mvprelay;
int listeningSocket;
char* configDir;
+ char* logoDir;
+ char* imageDir;
+ char* resourceDir;
+ char* cacheDir;
USHORT tcpServerPort;
};
#include <vdr/plugin.h>
#include <vdr/channels.h>
#include <sstream>
+#include <algorithm>
PictureReader::PictureReader(VompClient *client)
pthread_mutex_unlock(&pictureLock);
}
+bool PictureReader::epgImageExists(int event)
+{
+ if (x->imageDir) {
+ std::ostringstream file;
+ file<< std::string(x->imageDir)<< event << std::string(".jpg");
+ if (!access(file.str().c_str() ,F_OK))
+ {
+ return true;
+ }
+
+ std::ostringstream file2;
+ file2 << std::string(x->imageDir) << event << std::string("_0.jpg");
+ if (!access(file2.str().c_str() ,F_OK))
+ {
+ return true;
+ }
+ } else if (x->cacheDir) {
+
+ std::ostringstream file;
+ file<<std::string(x->cacheDir)<<std::string("/../epgimages/")
+ << event << std::string(".jpg");
+ if (!access(file.str().c_str() ,F_OK))
+ {
+ return true;
+ }
+ std::ostringstream file2;
+ file2<<std::string(x->cacheDir)<<std::string("/../epgimages/")<<
+ event <<std::string("_0.jpg");
+ if (!access(file2.str().c_str() ,F_OK))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
std::string PictureReader::getPictName(TVMediaRequest & req)
{
logger->log("PictRead",Log::DEBUG,
if (x->scraper && event) {
x->scraper->Service("GetPosterThumb",&getter);
- return getter.poster.path;
- } else {
- return std::string("");
+ if (getter.poster.width) return getter.poster.path;
}
+ if (x->imageDir) {
+ std::ostringstream file;
+ file<< std::string(x->imageDir)<< req.primary_id << std::string(".jpg");
+ if (!access(file.str().c_str() ,F_OK))
+ {
+ return file.str();
+ }
+
+ std::ostringstream file2;
+ file2 << std::string(x->imageDir) << req.primary_id << std::string("_0.jpg");
+ if (!access(file2.str().c_str() ,F_OK))
+ {
+ return file2.str();
+ }
+ } else if (x->cacheDir) {
+
+ std::ostringstream file;
+ file<<std::string(x->cacheDir)<<std::string("/../epgimages/")
+ <<req.primary_id << std::string(".jpg");
+ if (!access(file.str().c_str() ,F_OK))
+ {
+ return file.str();
+ }
+ std::ostringstream file2;
+ file2<<std::string(x->cacheDir)<<std::string("/../epgimages/")<<
+ req.primary_id<<std::string("_0.jpg");
+ if (!access(file2.str().c_str() ,F_OK))
+ {
+ return file2.str();
+ }
+ }
+ return std::string("");
}; break;
+ case 5: { // Channel logo
+ std::transform(req.primary_name.begin(),req.primary_name.end(),
+ req.primary_name.begin(),::tolower);
+ if (x->logoDir) {
+ std::string file=std::string(x->logoDir)+req.primary_name+std::string(".png");
+ if (!access(file.c_str() ,F_OK))
+ {
+ return file;
+ }
+ }
+ // if noopacity is there steal the logos
+ if (x->resourceDir) {
+ std::string file=std::string(x->resourceDir)
+ +std::string("/skinnopacity/logos/")+req.primary_name+std::string(".png");
+ if (!access(file.c_str() ,F_OK))
+ {
+ return file;
+ }
+ }
+ return std::string("");
+
+ }; break;
default:
return std::string("");
break;
};
-
+ return std::string("");
}
int init(TCP* tcp);
void detachMVPReceiver();
void addTVMediaRequest(TVMediaRequest&);
+ bool epgImageExists(int event);
private:
# MVPRelay enabled = yes
+# Change the following to the directory, where the channel logos reside,
+# all png and the channel name in lower case
+# if not set a logo directory below the plugin directory is used
+
+# Channel logo directory = /logodir
+
+# Change the following to the directory, where the EPG image reside,
+# if not set a image directory is try to be set automatically
+
+# Epg image directory = /EpgImage
time_t VompClient::lastScrapQuery = 0;
VompClient::VompClient(Config* cfgBase, char* tconfigDir, char* tlogoDir,
- char *tresourceDir, int tsocket)
+ char *tresourceDir, char * timageDir, char * tcacheDir, int tsocket)
: rrproc(*this), tcp(tsocket), i18n(tconfigDir)
{
#ifndef VOMPSTANDALONE
if (!scraper) scrapQuery();
logoDir = tlogoDir;
resourceDir = tresourceDir;
+ imageDir = timageDir;
+ cacheDir = tcacheDir;
#endif
log = Log::getInstance();
loggedIn = false;
public:
VompClient(Config* baseConfig, char* configDir, char* logoDir,
- char* resourceDir, int tsocket);
+ char* resourceDir, char* imageDir, char*cacheDir, int tsocket);
~VompClient();
int run();
static cPlugin* scrapQuery();
PictureReader * pict;
char *logoDir;
+ char *imageDir;
char *resourceDir;
+ char *cacheDir;
#endif
MediaPlayer *media;
resp->addLONG(call.seriesId);
resp->addLONG(call.episodeId);
}
+ if (x.pict->epgImageExists(eventid)) {
+ resp->addLONG(1);
+ } else {
+ resp->addLONG(0);
+ }
+
resp->finalise();
x.tcp.sendPacket(resp->getPtr(), resp->getLen());