summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAntti Ajanki <antti.ajanki@iki.fi>2010-11-06 10:16:24 +0200
committerAntti Ajanki <antti.ajanki@iki.fi>2010-11-06 10:16:24 +0200
commit07c8a157c31ed5221b4fd325058eb1d3fa579c33 (patch)
tree70f8b4b7ad06c3109b18cd5339bb34c2404e5b0b /src
parent695fb343a927261f06d4f62ed029192b88f0b4da (diff)
downloadvdr-plugin-webvideo-07c8a157c31ed5221b4fd325058eb1d3fa579c33.tar.gz
vdr-plugin-webvideo-07c8a157c31ed5221b4fd325058eb1d3fa579c33.tar.bz2
update template paths on in timer files, remove old templates on upgrade
Diffstat (limited to 'src')
-rw-r--r--src/vdr-plugin/timer.c68
-rw-r--r--src/vdr-plugin/timer.h8
-rw-r--r--src/vdr-plugin/webvideo.c4
3 files changed, 70 insertions, 10 deletions
diff --git a/src/vdr-plugin/timer.c b/src/vdr-plugin/timer.c
index 15a398b..8158c29 100644
--- a/src/vdr-plugin/timer.c
+++ b/src/vdr-plugin/timer.c
@@ -200,7 +200,7 @@ void cWebviTimer::RequestFinished(const char *ref, const char *errmsg) {
// --- cWebviTimerManager ----------------------------------------
cWebviTimerManager::cWebviTimerManager()
- : nextID(1), modified(false), disableSaving(false)
+: nextID(1), modified(false), disableSaving(false), convertTemplatePaths(false)
{
}
@@ -222,12 +222,15 @@ void cWebviTimerManager::LoadTimers(FILE *f) {
int n, i;
ver = rl.Read(f);
- if (strcmp(ver, "# WVTIMER1") != 0) {
+ if (strcmp(ver, "# WVTIMER1") != 0 &&
+ strncmp(ver, "# WVTIMER1/", 11) != 0) {
error("Can't load timers. Unknown format: %s", ver);
disableSaving = true;
return;
}
+ convertTemplatePaths = (strcmp(ver, "# WVTIMER1") == 0);
+
i = 1;
while (true) {
n = fscanf(f, "%ld %d %d %ms", &lastRefresh, &interval, &success, &ref);
@@ -241,6 +244,14 @@ void cWebviTimerManager::LoadTimers(FILE *f) {
break;
}
+ if (convertTemplatePaths) {
+ char *newref = UpgradedTemplatePath(ref);
+ if (newref) {
+ free(ref);
+ ref = newref;
+ }
+ }
+
title = rl.Read(f);
title = title ? skipspace(title) : "???";
errmsg = success ? NULL : "";
@@ -266,11 +277,11 @@ void cWebviTimerManager::LoadHistory(FILE *f) {
debug("loaded history: len = %d", refHistory.Size());
}
-void cWebviTimerManager::SaveTimers(FILE *f) {
+void cWebviTimerManager::SaveTimers(FILE *f, const char *version) {
// Format: space separated field in this order:
// lastUpdate interval lastSucceeded reference title
- fprintf(f, "# WVTIMER1\n");
+ fprintf(f, "# WVTIMER1/%s\n", version);
cWebviTimer *t = timers.First();
while (t) {
@@ -303,6 +314,48 @@ void cWebviTimerManager::SaveHistory(FILE *f) {
}
}
+char *cWebviTimerManager::UpgradedTemplatePath(char *ref) {
+ // template names changed in 0.3.3
+ const char *templateNameMap[10][2] = \
+ {{"wvt:///youtube/", "wvt:///www.youtube.com/"},
+ {"wvt:///svtplay/", "wvt:///svtplay.se/"},
+ {"wvt:///moontv/", "wvt:///moontv.fi/"},
+ {"wvt:///metacafe/", "wvt:///www.metacafe.com/"},
+ {"wvt:///vimeo/", "wvt:///www.vimeo.com/"},
+ {"wvt:///katsomo/", "wvt:///www.katsomo.fi/"},
+ {"wvt:///subtv/", "wvt:///www.sub.fi/"},
+ {"wvt:///ruutufi/", "wvt:///www.ruutu.fi/"},
+ {"wvt:///google/", "wvt:///video.google.com/"},
+ {"wvt:///yleareena/", "wvt:///areena.yle.fi/"}};
+
+ for (int i=0; i<10; i++) {
+ int oldlen = strlen(templateNameMap[i][0]);
+ if (strncmp(ref, templateNameMap[i][0], oldlen) == 0) {
+ int newlen = strlen(templateNameMap[i][1]) + strlen(ref);
+ char *newref = (char *)malloc((newlen+1)*sizeof(char));
+ strcpy(newref, templateNameMap[i][1]);
+ strcat(newref, ref+oldlen);
+ return newref;
+ }
+ }
+
+ return NULL;
+}
+
+void cWebviTimerManager::ConvertTimerHistoryTemplates() {
+ for (int i=0; i<refHistory.Size(); i++) {
+ char *oldref = refHistory[i];
+ char *newref = UpgradedTemplatePath(oldref);
+ if (!newref)
+ continue;
+
+ refHistory[i] = newref;
+ free(oldref);
+ }
+
+ modified = true;
+}
+
bool cWebviTimerManager::Load(const char *path) {
FILE *f;
bool ok = true;
@@ -331,10 +384,13 @@ bool cWebviTimerManager::Load(const char *path) {
ok = false;
}
+ if (convertTemplatePaths)
+ ConvertTimerHistoryTemplates();
+
return ok;
}
-bool cWebviTimerManager::Save(const char *path) {
+bool cWebviTimerManager::Save(const char *path, const char *version) {
FILE *f;
bool ok = true;
@@ -349,7 +405,7 @@ bool cWebviTimerManager::Save(const char *path) {
f = fopen(timersname, "w");
if (f) {
debug("saving webvi timers to %s", (const char *)timersname);
- SaveTimers(f);
+ SaveTimers(f, version);
fclose(f);
} else {
LOG_ERROR_STR("Can't save webvi timers");
diff --git a/src/vdr-plugin/timer.h b/src/vdr-plugin/timer.h
index 048014a..369fbce 100644
--- a/src/vdr-plugin/timer.h
+++ b/src/vdr-plugin/timer.h
@@ -77,6 +77,7 @@ private:
cStringList refHistory;
bool modified;
bool disableSaving;
+ bool convertTemplatePaths;
cWebviTimerManager();
~cWebviTimerManager() {};
@@ -85,14 +86,17 @@ private:
void LoadTimers(FILE *f);
void LoadHistory(FILE *f);
- void SaveTimers(FILE *f);
+ void SaveTimers(FILE *f, const char *version);
void SaveHistory(FILE *f);
+ char *UpgradedTemplatePath(char *ref);
+ void ConvertTimerHistoryTemplates();
+
public:
static cWebviTimerManager &Instance();
bool Load(const char *path);
- bool Save(const char *path);
+ bool Save(const char *path, const char *version);
cWebviTimer *Create(const char *title, const char *reference,
bool getExisting=true);
diff --git a/src/vdr-plugin/webvideo.c b/src/vdr-plugin/webvideo.c
index cb19b4c..708569d 100644
--- a/src/vdr-plugin/webvideo.c
+++ b/src/vdr-plugin/webvideo.c
@@ -179,7 +179,7 @@ void cPluginWebvideo::Stop(void)
cWebviThread::Instance().Stop();
delete MimeTypes;
- cWebviTimerManager::Instance().Save(ConfigDirectory(Name()));
+ cWebviTimerManager::Instance().Save(ConfigDirectory(Name()), Version());
xmlCleanupParser();
}
@@ -188,7 +188,7 @@ void cPluginWebvideo::Housekeeping(void)
{
// Perform any cleanup or other regular tasks.
- cWebviTimerManager::Instance().Save(ConfigDirectory(Name()));
+ cWebviTimerManager::Instance().Save(ConfigDirectory(Name()), Version());
}
void cPluginWebvideo::MainThreadHook(void)