diff options
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | HISTORY.DE | 2 | ||||
-rw-r--r-- | epgsearchcfg.h | 8 | ||||
-rw-r--r-- | epgsearchtools.c | 75 | ||||
-rw-r--r-- | epgsearchtools.h | 16 | ||||
-rw-r--r-- | menu_favorites.c | 2 | ||||
-rw-r--r-- | menu_searchresults.c | 29 | ||||
-rw-r--r-- | menu_whatson.c | 4 |
8 files changed, 64 insertions, 74 deletions
@@ -44,6 +44,8 @@ new: - new patch vdr.epgsearch-exttimeredit.diff: this patch against VDR integrates epgsearch's timer edit menu to VDR's timer menu, thanks S:oren@vdr-portal for providing it. +- some speed enhancements, thanks to Tobias Bratfisch for providing patches + fixes: - fixed a crash when pressing 'Ok' in an empty timers done menu - fixed a crash when using the progressbar and events with 0 duration exist, thanks @@ -49,6 +49,8 @@ neu: - neuer Patch vdr.epgsearch-exttimeredit.diff: Dieser VDR-Patch integriert epgsearch's Timer-Edit-Menü in VDR's Timer-Menü, Danke dafür an S:oren@vdr-portal. +- einige Geschwindigkeitsverbesserungen, Danke an Tobias Bratfisch für die Patches + fixes: - Absturz beim Drücken von 'Ok' in leerem Menü erledigter Timer behoben - Absturz bei Verwendung des Fortschrittsbalkens in Verbindung mit Sendungen diff --git a/epgsearchcfg.h b/epgsearchcfg.h index a466278..0b762ea 100644 --- a/epgsearchcfg.h +++ b/epgsearchcfg.h @@ -60,15 +60,15 @@ class cShowMode: public cListObject else sprintf(description, "%02d:%02d", iTime/100, iTime%100); } - char* GetDescription() { return description; } - int GetTime() { return itime; } - bool GetUsage() { return useIt; } + const char* GetDescription() { return description; } + int GetTime() const { return itime; } + bool GetUsage() const { return useIt; } void SetDescription(const char* szD) { if (szD) strcpy(description, szD); } void SetTime(int iT) { itime = iT; } void SetUsage(bool bU) { useIt = bU; } int Compare(const cListObject &ListObject) const; - showMode GetMode() { return mode; } + showMode GetMode() const { return mode; } }; diff --git a/epgsearchtools.c b/epgsearchtools.c index 8021c12..89f820c 100644 --- a/epgsearchtools.c +++ b/epgsearchtools.c @@ -537,45 +537,6 @@ char *strreplacei(char *s, const char *s1, const char *s2) return s; } -unsigned int strcharcount(char* source, char ch) -{ - unsigned int count; - - for (count = 0; *source; source++) - if (*source == ch) - count++; - return (count); -} - -char *strreplaceall(char* source, char ch, const char* replacement) -{ - int replen; - int srclen; - unsigned int chnum; - register char *sptr, *nptr; - char *newval; - - chnum = strcharcount(source, ch); - - if (chnum == 0) - return (NULL); - - srclen = strlen(source); - replen = strlen(replacement); - newval = (char*) malloc(srclen + (chnum * replen) + 1); - nptr = newval; - for (sptr = source; chnum > 0; sptr++) - if (*sptr == ch) { - memcpy(nptr, replacement, replen); - nptr += replen; - chnum--; - } - else - *nptr++ = *sptr; - memcpy(nptr, sptr, srclen - (sptr - source) + 1); - return (newval); -} - void sleepMSec(long ms) { cCondWait::SleepMs(ms); @@ -898,22 +859,26 @@ void DelTimer(int index) char* FixSeparators(char* buffer, char sep) { - char tmp[5]; - sprintf(tmp, "%c\t", sep); - buffer = strreplacei(buffer, tmp, "\t"); - sprintf(tmp, "%c \t", sep); - buffer = strreplacei(buffer, tmp, "\t"); - sprintf(tmp, "%c ", sep); - if (strstr(buffer, tmp) == buffer + strlen(buffer) - 2) buffer[strlen(buffer) - 2] = 0; - if (buffer[strlen(buffer)-1] == sep) buffer[strlen(buffer) - 1] = 0; - - sprintf(tmp, "\t%c", sep); - buffer = strreplacei(buffer, tmp, "\t"); - sprintf(tmp, "\t %c", sep); - buffer = strreplacei(buffer, tmp, "\t"); - sprintf(tmp, "\t %c", sep); - buffer = strreplacei(buffer, tmp, "\t"); - return buffer; + char tmp[5]; + tmp[0] = sep; tmp[1] = '\t'; tmp[2] = '\0'; + buffer = strreplacei(buffer, tmp, '\t'); + tmp[0] = sep; tmp[1] = ' '; tmp[2] = '\t'; tmp[3] = '\0'; + buffer = strreplacei(buffer, tmp, '\t'); + tmp[0] = sep; tmp[1] = ' '; tmp[2] = '\0'; + + unsigned int len = strlen(buffer); + if (strstr(buffer, tmp) == buffer + len - 2) + buffer[len-2] = '\0'; + if (buffer[len-1] == sep) + buffer[len-1] = '\0'; + + tmp[0] = '\t'; tmp[1] = sep; tmp[2] = '\0'; + buffer = strreplacei(buffer, tmp, '\t'); + tmp[0] = '\t'; tmp[1] = ' '; tmp[2] = sep; tmp[3] = '\0'; + buffer = strreplacei(buffer, tmp, '\t'); + tmp[0] = '\t'; tmp[1] = ' '; tmp[2] = ' '; tmp[3] = sep; tmp[4] = '\0'; + buffer = strreplacei(buffer, tmp, '\t'); + return buffer; } cString DateTime(time_t t) diff --git a/epgsearchtools.h b/epgsearchtools.h index b21b386..426156c 100644 --- a/epgsearchtools.h +++ b/epgsearchtools.h @@ -139,7 +139,21 @@ string UpdateAuxValue(string aux, string section, string value); string UpdateAuxValue(string aux, string section, long num); void ToLower(char* szText); char *strreplacei(char *s, const char *s1, const char *s2); -char *strreplaceall(char* source, char ch, const char* replacement); + +// replace s1 with s2 in s ignoring the case of s1 +inline char *strreplacei(char *s, const char *s1, const char s2) +{ + char *p = strcasestr(s, s1); + if (p) { + int offset = p - s; + int l = strlen(s); + int l1 = strlen(s1); + memmove(s + offset + 1, s + offset + l1, l - offset - l1 + 1); + s[offset] = s2; + } + return s; +} + void sleepMSec(long ms); void sleepSec(long s); bool SendViaSVDRP(cString SVDRPcmd); diff --git a/menu_favorites.c b/menu_favorites.c index b0a923f..c4561d9 100644 --- a/menu_favorites.c +++ b/menu_favorites.c @@ -175,7 +175,7 @@ void cMenuFavorites::SetHelpKeys(bool Force) { showMode nextShowMode = cMenuWhatsOnSearch::GetNextMode(); cShowMode* mode = cMenuWhatsOnSearch::GetShowMode(nextShowMode); - char* szButtonGreen = NULL; + const char* szButtonGreen = NULL; if (mode) szButtonGreen = mode->GetDescription(); diff --git a/menu_searchresults.c b/menu_searchresults.c index c1aaaf7..2dfb2e1 100644 --- a/menu_searchresults.c +++ b/menu_searchresults.c @@ -85,9 +85,13 @@ bool cMenuSearchResultsItem::Update(bool Force) { if (!isUTF8) { - sprintf(t, "%c", event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?ICON_REC:ICON_CLOCK) : ICON_CLOCK_HALF : ' '); - sprintf(v, "%c", event && event->Vps() && (event->Vps() - event->StartTime()) ? ICON_VPS : ' '); - sprintf(r, "%c", event && event->IsRunning() ? ICON_RUNNING : ' '); + t[0] = event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?ICON_REC:ICON_CLOCK) : ICON_CLOCK_HALF : ' '; + t[1] = '\0'; + v[0] = event && event->Vps() && (event->Vps() - event->StartTime()) ? ICON_VPS : ' '; + v[1] = '\0'; + r[0] = event && event->IsRunning() ? ICON_RUNNING : ' '; + r[1] = '\0'; + } else { @@ -101,19 +105,22 @@ bool cMenuSearchResultsItem::Update(bool Force) } else { - sprintf(t, "%c", event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?'R':'T') : 't' : ' '); - sprintf(v, "%c", event && event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' '); - sprintf(r, "%c", event && event->IsRunning() ? '*' : ' '); + t[0] = event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?'R':'T') : 't' : ' '; + t[1] = '\0'; + v[0] = event && event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' '; + v[1] = '\0'; + r[0] = event && event->IsRunning() ? '*' : ' '; + r[1] = '\0'; } if (t[0] != 'T' && previewTimer) t[0] = 'P'; - sprintf(szStatus, "%s%s%s", t,v,r); + strcpy(szStatus, t); + strcat(szStatus, v); + strcat(szStatus, r); char* buffer = strdup(menuTemplate->MenuTemplate()); - char* tmp = strreplaceall(buffer, '|', "\t"); - free(buffer); - buffer = tmp; + strreplace(buffer, '|', '\t'); if (!strcasestr(buffer, "%subtitle%") && cTemplFile::GetTemplateByName("MenuFavorites") != menuTemplate) // make sure, there is a subtitle @@ -123,7 +130,7 @@ bool cMenuSearchResultsItem::Update(bool Force) // parse the epxression and evaluate it cVarExpr varExpr(buffer); - tmp = strdup(varExpr.Evaluate(event).c_str()); + char* tmp = strdup(varExpr.Evaluate(event).c_str()); free(buffer); buffer = tmp; diff --git a/menu_whatson.c b/menu_whatson.c index 9becb4a..cecf205 100644 --- a/menu_whatson.c +++ b/menu_whatson.c @@ -210,7 +210,7 @@ bool cMenuMyScheduleItem::Update(bool Force) if (channel) { char szChannelNr[6] = ""; - sprintf(szChannelNr, "%d", channel->Number()); + snprintf(szChannelNr, 6, "%d", channel->Number()); buffer = strreplacei(buffer, "%chnr%", szChannelNr); buffer = strreplacei(buffer, "%chsh%", channel->ShortName(true)); buffer = strreplacei(buffer, "%chlng%", channel->Name()); @@ -659,7 +659,7 @@ void cMenuWhatsOnSearch::SetHelpKeys(bool Force) { showMode nextShowMode = GetNextMode(); cShowMode* mode = GetShowMode(nextShowMode); - char* szButtonGreen = NULL; + const char* szButtonGreen = NULL; if (mode) szButtonGreen = mode->GetDescription(); if (toggleKeys==0) |