mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 17:58:31 +02:00
169 lines
5.5 KiB
C
169 lines
5.5 KiB
C
#include "config.h"
|
|
#include "libcore/helpers.h"
|
|
#include "libcore/imageloader.h"
|
|
|
|
cDesignerConfig::cDesignerConfig() {
|
|
epgImagePathSet = false;
|
|
skinPathSet = false;
|
|
logoPathSet = false;
|
|
//Common
|
|
logoExtension = "png";
|
|
numLogosPerSizeInitial = 30;
|
|
limitLogoCache = 1;
|
|
numLogosMax = 200;
|
|
debugImageLoading = 0;
|
|
//default logo width and height
|
|
logoWidth = 268;
|
|
logoHeight = 200;
|
|
replaceDecPoint = false;
|
|
//settings for rerun display
|
|
rerunAmount = 10;
|
|
rerunDistance = 2;
|
|
rerunMaxChannel = 0;
|
|
//menu display style, display menu items
|
|
//one after each other or in one step
|
|
blockFlush = 1;
|
|
//remember current skin and theme
|
|
SetSkin();
|
|
//remember osd size
|
|
SetOSDSize();
|
|
}
|
|
|
|
cDesignerConfig::~cDesignerConfig() {
|
|
}
|
|
|
|
void cDesignerConfig::SetPathes(void) {
|
|
if (!skinPathSet)
|
|
skinPath = cString::sprintf("%s/skins/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
|
|
if (!logoPathSet)
|
|
logoPath = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
|
|
if (!epgImagePathSet)
|
|
epgImagePath = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N));
|
|
|
|
dsyslog("skindesigner: using Skin Directory %s", *skinPath);
|
|
dsyslog("skindesigner: using common ChannelLogo Directory %s", *logoPath);
|
|
dsyslog("skindesigner: using EPG Images Directory %s", *epgImagePath);
|
|
}
|
|
|
|
void cDesignerConfig::SetSkinPath(cString path) {
|
|
skinPath = CheckSlashAtEnd(*path);
|
|
skinPathSet = true;
|
|
}
|
|
|
|
void cDesignerConfig::SetLogoPath(cString path) {
|
|
logoPath = CheckSlashAtEnd(*path);
|
|
logoPathSet = true;
|
|
}
|
|
|
|
void cDesignerConfig::SetEpgImagePath(cString path) {
|
|
epgImagePath = CheckSlashAtEnd(*path);
|
|
epgImagePathSet = true;
|
|
}
|
|
|
|
void cDesignerConfig::ReadSkins(void) {
|
|
DIR *folder = NULL;
|
|
struct dirent *dirEntry;
|
|
folder = opendir(skinPath);
|
|
if (!folder) {
|
|
esyslog("skindesigner: no skins found in %s", *skinPath);
|
|
return;
|
|
}
|
|
while (dirEntry = readdir(folder)) {
|
|
string dirEntryName = dirEntry->d_name;
|
|
int dirEntryType = dirEntry->d_type;
|
|
if (!dirEntryName.compare(".") || !dirEntryName.compare("..") || dirEntryType != DT_DIR)
|
|
continue;
|
|
skins.push_back(dirEntryName);
|
|
}
|
|
dsyslog("skindesigner %d skins found in %s", skins.size(), *skinPath);
|
|
}
|
|
|
|
bool cDesignerConfig::GetSkin(string &skin) {
|
|
if (skinIterator == skins.end()) {
|
|
return false;
|
|
}
|
|
skin = *skinIterator;
|
|
skinIterator++;
|
|
return true;
|
|
}
|
|
|
|
|
|
void cDesignerConfig::SetChannelLogoSize(void) {
|
|
cImageLoader imgLoader;
|
|
imgLoader.DeterminateChannelLogoSize(logoWidth, logoHeight);
|
|
dsyslog("skindesigner: using %dx%d px as original channel logo size", logoWidth, logoHeight);
|
|
}
|
|
|
|
void cDesignerConfig::CheckDecimalPoint(void) {
|
|
struct lconv *pLocInfo;
|
|
pLocInfo = localeconv();
|
|
string decimalPoint = pLocInfo->decimal_point;
|
|
if (decimalPoint.compare(".")) {
|
|
dsyslog("skindesigner: using decimal point %s", decimalPoint.c_str());
|
|
replaceDecPoint = true;
|
|
decPoint = decimalPoint[0];
|
|
}
|
|
}
|
|
|
|
void cDesignerConfig::SetSkin(void) {
|
|
osdSkin = Setup.OSDSkin;
|
|
osdTheme = Setup.OSDTheme;
|
|
}
|
|
|
|
bool cDesignerConfig::SkinChanged(void) {
|
|
bool changed = false;
|
|
if (osdSkin.compare(Setup.OSDSkin) != 0) {
|
|
dsyslog("skindesigner: skin changed from %s to %s", osdSkin.c_str(), Setup.OSDSkin);
|
|
changed = true;
|
|
}
|
|
if (osdTheme.compare(Setup.OSDTheme) != 0) {
|
|
dsyslog("skindesigner: theme changed from %s to %s", osdTheme.c_str(), Setup.OSDTheme);
|
|
changed = true;
|
|
}
|
|
if (changed)
|
|
SetSkin();
|
|
return changed;
|
|
}
|
|
|
|
void cDesignerConfig::SetOSDSize(void) {
|
|
osdSize.SetWidth(cOsd::OsdWidth());
|
|
osdSize.SetHeight(cOsd::OsdHeight());
|
|
osdSize.SetX(cOsd::OsdLeft());
|
|
osdSize.SetY(cOsd::OsdTop());
|
|
}
|
|
|
|
bool cDesignerConfig::OsdSizeChanged(void) {
|
|
if ((osdSize.Width() != cOsd::OsdWidth()) ||
|
|
(osdSize.Height() != cOsd::OsdHeight()) ||
|
|
(osdSize.X() != cOsd::OsdLeft()) ||
|
|
(osdSize.Y() != cOsd::OsdTop())) {
|
|
dsyslog("skindesigner: osd size changed");
|
|
dsyslog("skindesigner: old osd size: top %d left %d size %d * %d", osdSize.X(), osdSize.Y(), osdSize.Width(), osdSize.Height());
|
|
SetOSDSize();
|
|
dsyslog("skindesigner: new osd size: top %d left %d size %d * %d", osdSize.X(), osdSize.Y(), osdSize.Width(), osdSize.Height());
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
cString cDesignerConfig::CheckSlashAtEnd(std::string path) {
|
|
try {
|
|
if (!(path.at(path.size()-1) == '/'))
|
|
return cString::sprintf("%s/", path.c_str());
|
|
} catch (...) {return path.c_str();}
|
|
return path.c_str();
|
|
}
|
|
|
|
bool cDesignerConfig::SetupParse(const char *Name, const char *Value) {
|
|
if (!strcasecmp(Name, "DebugImageLoading")) debugImageLoading = atoi(Value);
|
|
else if (!strcasecmp(Name, "LimitChannelLogoCache")) limitLogoCache = atoi(Value);
|
|
else if (!strcasecmp(Name, "NumberLogosInitially")) numLogosPerSizeInitial = atoi(Value);
|
|
else if (!strcasecmp(Name, "NumberLogosMax")) numLogosMax = atoi(Value);
|
|
else if (!strcasecmp(Name, "RerunAmount")) rerunAmount = atoi(Value);
|
|
else if (!strcasecmp(Name, "RerunDistance")) rerunDistance = atoi(Value);
|
|
else if (!strcasecmp(Name, "RerunMaxChannel")) rerunMaxChannel = atoi(Value);
|
|
else if (!strcasecmp(Name, "BlockFlush")) blockFlush = atoi(Value);
|
|
else return false;
|
|
return true;
|
|
}
|