diff options
author | anbr <vdr07@deltab.de> | 2010-12-23 14:31:34 +0100 |
---|---|---|
committer | anbr <vdr07@deltab.de> | 2010-12-23 14:31:34 +0100 |
commit | d63fbc75919d581938a765696468f3f97a8afbdd (patch) | |
tree | 25a03f3f95a97cc0d8cd16212552ad8c90211aec | |
parent | 48bdb045d9c79b49cb13c1efd8c84095fc4046b6 (diff) | |
download | vdr-plugin-imonlcd-d63fbc75919d581938a765696468f3f97a8afbdd.tar.gz vdr-plugin-imonlcd-d63fbc75919d581938a765696468f3f97a8afbdd.tar.bz2 |
Ignore empty subtitle on replay (Feature #484)
-rw-r--r-- | watch.c | 116 |
1 files changed, 60 insertions, 56 deletions
@@ -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")); |