summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--watch.c116
1 files changed, 60 insertions, 56 deletions
diff --git a/watch.c b/watch.c
index f56c391..5806871 100644
--- a/watch.c
+++ b/watch.c
@@ -15,6 +15,7 @@
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
+#include <ctype.h>
#include "watch.h"
#include "setup.h"
@@ -573,7 +574,20 @@ bool ciMonWatch::Replay() {
return false;
}
-void ciMonWatch::Replaying(const cControl * Control, const char * Name, const char *FileName, bool On)
+char *striptitle(char *s)
+{
+ if (s && *s) {
+ for (char *p = s + strlen(s) - 1; p >= s; p--) {
+ if (isspace(*p) || *p == '~' || *p == '\\')
+ *p = 0;
+ else
+ break;
+ }
+ }
+ return s;
+}
+
+void ciMonWatch::Replaying(const cControl * Control, const char * szName, const char *FileName, bool On)
{
cMutexLooker m(mutex);
m_bUpdateScreen = true;
@@ -589,10 +603,12 @@ void ciMonWatch::Replaying(const cControl * Control, const char * Name, const ch
replayTitle = NULL;
}
m_eReplayMode = eReplayModeNormal;
- if (Name && !isempty(Name))
+ if (szName && !isempty(szName))
{
+ char* Title = NULL;
+ char* Name = strdup(skipspace(szName));
+ striptitle(Name); // remove space at end
int slen = strlen(Name);
- bool bFound = false;
///////////////////////////////////////////////////////////////////////
//Looking for mp3/muggle-plugin replay : [LS] (444/666) title
//
@@ -600,77 +616,64 @@ void ciMonWatch::Replaying(const cControl * Control, const char * Name, const ch
*(Name+0)=='[' &&
*(Name+3)==']' &&
*(Name+5)=='(') {
- unsigned int i;
+ int i;
for (i=6; *(Name + i) != '\0'; ++i) { //search for [xx] (xxxx) title
- if (*(Name+i)==' ' && *(Name+i-1)==')') {
- bFound = true;
+ if (*(Name+i)==' ' && *(Name+i-1)==')') { //found mp3/muggle-plugin
+ // get loopmode
+ if ((*(Name+1) != '.') && (*(Name+2) != '.')) {
+ m_eReplayMode = eReplayModeRepeatShuffle;
+ } else {
+ if (*(Name+1) != '.') m_eReplayMode = eReplayModeRepeat;
+ if (*(Name+2) != '.') m_eReplayMode = eReplayModeShuffle;
+ }
+ if (slen > i) { //if name isn't empty, then copy
+ Title = (Name + i);
+ }
+ m_eWatchMode = eReplayMusic;
+ m_eVideoMode = eVideoNone;
+ m_eAudioMode = eAudioMP3;
break;
}
}
- if (bFound) { //found mp3/muggle-plugin
- // get loopmode
- if ((*(Name+1) != '.') && (*(Name+2) != '.')) {
- m_eReplayMode = eReplayModeRepeatShuffle;
- } else {
- if (*(Name+1) != '.') m_eReplayMode = eReplayModeRepeat;
- if (*(Name+2) != '.') m_eReplayMode = eReplayModeShuffle;
- }
- if (strlen(Name+i) > 0) { //if name isn't empty, then copy
- replayTitle = new cString(skipspace(Name + i));
- }
- m_eWatchMode = eReplayMusic;
- m_eVideoMode = eVideoNone;
- m_eAudioMode = eAudioMP3;
- }
}
///////////////////////////////////////////////////////////////////////
//Looking for DVD-Plugin replay : 1/8 4/28, de 2/5 ac3, no 0/7, 16:9, VOLUMENAME
- // cDvdPlayerControl::GetDisplayHeaderLine
- // titleinfo, audiolang, spulang, aspect, title
- if (!bFound && slen>7)
+ // cDvdPlayerControl::GetDisplayHeaderLine : titleinfo, audiolang, spulang, aspect, title
+ if (!Title && slen>7)
{
- unsigned int i,n;
+ int i,n;
for (n=0,i=0;*(Name+i) != '\0';++i)
{ //search volumelabel after 4*", " => xxx, xxx, xxx, xxx, title
if (*(Name+i)==' ' && *(Name+i-1)==',') {
if (++n == 4) {
- bFound = true;
+ if (slen > i) {
+ // if name isn't empty, then copy
+ Title = (Name + i);
+ m_eWatchMode = eReplayDVD;
+ m_eVideoMode = eVideoMPG;
+ m_eAudioMode = eAudioMPG;
+ }
break;
}
}
}
- if (bFound) //found DVD replay
- {
- if (strlen(Name+i) > 0)
- { // if name isn't empty, then copy
- replayTitle = new cString(skipspace(Name + i));
- }
- m_eWatchMode = eReplayDVD;
- m_eVideoMode = eVideoMPG;
- m_eAudioMode = eAudioMPG;
- }
}
- if (!bFound) {
- int i;
- for (i=slen-1;i>0;--i)
+ if (!Title) {
+ // look for file extentsion like .xxx or .xxxx
+ bool bIsFile = (slen>5 && ((*(Name+slen-4) == '.') || (*(Name+slen-5) == '.'))) ? true : false;
+
+ for (int i=slen-1;i>0;--i)
{ //search reverse last Subtitle
// - filename contains '~' => subdirectory
// or filename contains '/' => subdirectory
switch (*(Name+i)) {
- case '/': {
- // look for file extentsion like .xxx or .xxxx
- if (slen>5 && ((*(Name+slen-4) == '.') || (*(Name+slen-5) == '.')))
- {
- m_eWatchMode = eReplayFile;
- }
- else
- {
+ case '/':
+ if (!bIsFile) {
break;
}
- }
+ m_eWatchMode = eReplayFile;
case '~': {
- replayTitle = new cString(Name + i + 1);
- bFound = true;
+ Title = (Name + i + 1);
i = 0;
}
default:
@@ -681,22 +684,23 @@ void ciMonWatch::Replaying(const cControl * Control, const char * Name, const ch
if (0 == strncmp(Name,"[image] ",8)) {
if (m_eWatchMode != eReplayFile) //if'nt already Name stripped-down as filename
- replayTitle = new cString(Name + 8);
+ Title = (Name + 8);
m_eWatchMode = eReplayImage;
m_eVideoMode = eVideoMPG;
m_eAudioMode = eAudioNone;
- bFound = true;
}
else if (0 == strncmp(Name,"[audiocd] ",10)) {
- replayTitle = new cString(Name + 10);
+ Title = (Name + 10);
m_eWatchMode = eReplayAudioCD;
m_eVideoMode = eVideoNone;
m_eAudioMode = eAudioWAV;
- bFound = true;
}
- if (!bFound) {
- replayTitle = new cString(Name);
+ if (Title) {
+ replayTitle = new cString(skipspace(Title));
+ } else {
+ replayTitle = new cString(skipspace(Name));
}
+ free(Name);
}
if (!replayTitle) {
replayTitle = new cString(tr("Unknown title"));