summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY386
-rw-r--r--HISTORY.DE326
-rw-r--r--INSTALL6
-rw-r--r--INSTALL.DE2
-rw-r--r--Makefile12
-rw-r--r--README.Translators12
-rw-r--r--README.git10
-rw-r--r--afuzzy.c34
-rw-r--r--blacklist.c10
-rw-r--r--blacklist.h2
-rw-r--r--changrp.c84
-rw-r--r--conf/epgsearchconflmail.templ4
-rw-r--r--conf/epgsearchmenu.conf6
-rw-r--r--conf/epgsearchupdmail-html.templ10
-rw-r--r--conf/epgsearchupdmail.templ18
-rw-r--r--confdloader.c2
-rw-r--r--confdloader.h2
-rw-r--r--conflictcheck.c32
-rw-r--r--conflictcheck.h24
-rw-r--r--conflictcheck_thread.c26
-rw-r--r--conflictcheck_thread.h4
-rw-r--r--createcats.c56
-rw-r--r--distance.c10
-rw-r--r--distance.h2
-rw-r--r--doc-src/de/epgsearch.1.txt130
-rw-r--r--doc-src/de/epgsearch.conf.5.txt26
-rw-r--r--doc-src/de/epgsearchblacklists.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchcats.conf.5.txt26
-rw-r--r--doc-src/de/epgsearchchangrps.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchcmds.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchdirs.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchmenu.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchswitchtimers.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchtemplates.conf.5.txt22
-rw-r--r--doc-src/de/epgsearchuservars.conf.5.txt22
-rw-r--r--doc-src/de/noannounce.conf.5.txt4
-rw-r--r--doc-src/de/timersdone.conf.5.txt26
-rw-r--r--doc-src/en/createcats.1.txt6
-rw-r--r--doc-src/en/epgsearch.1.txt96
-rw-r--r--doc-src/en/epgsearch.4.txt108
-rw-r--r--doc-src/en/epgsearch.conf.5.txt24
-rw-r--r--doc-src/en/epgsearchblacklists.conf.5.txt4
-rw-r--r--doc-src/en/epgsearchcats.conf.5.txt14
-rw-r--r--doc-src/en/epgsearchchangrps.conf.5.txt2
-rw-r--r--doc-src/en/epgsearchdirs.conf.5.txt4
-rw-r--r--doc-src/en/epgsearchmenu.conf.5.txt12
-rw-r--r--doc-src/en/epgsearchswitchtimers.conf.5.txt2
-rw-r--r--doc-src/en/epgsearchtemplates.conf.5.txt2
-rw-r--r--doc-src/en/epgsearchuservars.conf.5.txt6
-rw-r--r--doc-src/en/noannounce.conf.5.txt2
-rw-r--r--epgsearch.c92
-rw-r--r--epgsearchcats.c16
-rw-r--r--epgsearchcats.h8
-rw-r--r--epgsearchcfg.c4
-rw-r--r--epgsearchcfg.h18
-rw-r--r--epgsearchext.c196
-rw-r--r--epgsearchext.h2
-rw-r--r--epgsearchservices.h4
-rw-r--r--epgsearchsetup.c64
-rw-r--r--epgsearchsetup.h14
-rw-r--r--epgsearchsvdrp.c326
-rw-r--r--epgsearchtools.c116
-rw-r--r--epgsearchtools.h16
-rw-r--r--log.h18
-rw-r--r--mail.c98
-rw-r--r--mail.h8
-rw-r--r--main.c4
-rw-r--r--mainmenushortcut.h6
-rw-r--r--menu_announcelist.c28
-rw-r--r--menu_blacklistedit.c76
-rw-r--r--menu_blacklists.c10
-rw-r--r--menu_commands.c56
-rw-r--r--menu_conflictcheck.c64
-rw-r--r--menu_conflictcheck.h8
-rw-r--r--menu_deftimercheckmethod.c26
-rw-r--r--menu_dirselect.c38
-rw-r--r--menu_event.c28
-rw-r--r--menu_event.h2
-rw-r--r--menu_favorites.c40
-rw-r--r--menu_main.c72
-rw-r--r--menu_myedittimer.c44
-rw-r--r--menu_myedittimer.h2
-rw-r--r--menu_quicksearch.c56
-rw-r--r--menu_quicksearch.h4
-rw-r--r--menu_recsdone.c14
-rw-r--r--menu_search.c14
-rw-r--r--menu_searchactions.c18
-rw-r--r--menu_searchedit.c128
-rw-r--r--menu_searchedit.h2
-rw-r--r--menu_searchresults.c154
-rw-r--r--menu_searchresults.h10
-rw-r--r--menu_searchtemplate.c14
-rw-r--r--menu_switchtimers.c24
-rw-r--r--menu_templateedit.c42
-rw-r--r--menu_templateedit.h2
-rw-r--r--menu_timersdone.c6
-rw-r--r--menu_whatson.c162
-rw-r--r--menu_whatson.h4
-rw-r--r--noannounce.c28
-rw-r--r--noannounce.h4
-rw-r--r--patches/MainMenuHooks-v1_0.patch2
-rw-r--r--patches/timercmd-0.1_1.6.0.diff4
-rw-r--r--patches/timercmd-0.1_1.7.17.diff4
-rw-r--r--pending_notifications.c12
-rw-r--r--pending_notifications.h10
-rw-r--r--po/ca_ES.po4
-rw-r--r--po/cs_CZ.po4
-rw-r--r--po/da_DK.po4
-rw-r--r--po/de_DE.po5
-rw-r--r--po/el_GR.po4
-rw-r--r--po/es_ES.po4
-rw-r--r--po/et_EE.po4
-rw-r--r--po/fi_FI.po4
-rw-r--r--po/fr_FR.po4
-rw-r--r--po/hr_HR.po4
-rw-r--r--po/hu_HU.po4
-rw-r--r--po/it_IT.po4
-rw-r--r--po/lt_LT.po4
-rw-r--r--po/nl_NL.po4
-rw-r--r--po/nn_NO.po4
-rw-r--r--po/pl_PL.po4
-rw-r--r--po/pt_PT.po4
-rw-r--r--po/ro_RO.po4
-rw-r--r--po/ru_RU.po4
-rw-r--r--po/sk_SK.po4
-rw-r--r--po/sl_SI.po4
-rw-r--r--po/sv_SE.po4
-rw-r--r--po/tr_TR.po4
-rw-r--r--rcfile.c10
-rw-r--r--rcfile.h2
-rw-r--r--recdone.c34
-rw-r--r--recdone.h4
-rw-r--r--recstatus.c40
-rw-r--r--recstatus.h2
-rwxr-xr-xscripts/autotimer2searchtimer.pl4
-rwxr-xr-xscripts/convert_epgsearchdone_data.pl2
-rwxr-xr-xscripts/convert_info_vdr.pl4
-rw-r--r--scripts/epgsearchcmds-french.conf2
-rwxr-xr-xscripts/mtdone2epgsearchdone.sh4
-rwxr-xr-xscripts/recordingdone.sh2
-rwxr-xr-xscripts/sendEmail.pl462
-rwxr-xr-xscripts/timerrep.sh4
-rwxr-xr-xscripts/undoneepgsearch.sh2
-rw-r--r--searchtimer_thread.c228
-rw-r--r--searchtimer_thread.h2
-rw-r--r--services.c62
-rw-r--r--services.h18
-rw-r--r--svdrpclient.h12
-rw-r--r--switchtimer.c24
-rw-r--r--switchtimer.h2
-rw-r--r--switchtimer_thread.c20
-rw-r--r--switchtimer_thread.h2
-rw-r--r--templatefile.c48
-rw-r--r--templatefile.h10
-rw-r--r--timer_thread.c10
-rw-r--r--timer_thread.h2
-rw-r--r--timerdone.c36
-rw-r--r--timerdone.h2
-rw-r--r--timerstatus.h6
-rw-r--r--uservars.c44
-rw-r--r--uservars.h234
-rw-r--r--varparser.c20
-rw-r--r--varparser.h4
163 files changed, 2722 insertions, 2707 deletions
diff --git a/HISTORY b/HISTORY
index 8f2a1b5..23f1500 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,29 +1,37 @@
VDR Plugin 'epgsearch' Revision History
---------------------------------------
+2011-xx-xx; Version 1.0.1
+new:
+- dropped old code for vdr < 1.6.0, thanks to Ville Skyttä for whole pile of patches
+
+fixes:
+- fixed a crash when editing blacklists
+
+
2011-09-11; Version 1.0.0
new:
- supports vdr-1.6.0 to vdr-1.7.21
-- avoid repeats with new 'compare date' entry: compare two events by their date to ignore
+- avoid repeats with new 'compare date' entry: compare two events by their date to ignore
repeats within the same day, week or month
-- global blacklists: blacklists for search timers can now be global to exclude
- generally unwanted events (like on my double SD/HD channels). Default mode for search
+- global blacklists: blacklists for search timers can now be global to exclude
+ generally unwanted events (like on my double SD/HD channels). Default mode for search
timers is now 'only global', but can be set to 'none' to ignore also global blacklists.
-- new setup variable epgsearch.ConflCheckCmd (no gui for this, so edit setup.conf!), that
+- new setup variable epgsearch.ConflCheckCmd (no gui for this, so edit setup.conf!), that
allows executing a command for each timer causing a conflict, see the MANUAL for details.
-- vdr-1.7.15 has changed the SVDRP default port to 6419, please update this in epgsearch's
+- vdr-1.7.15 has changed the SVDRP default port to 6419, please update this in epgsearch's
setup menu too!
-- there is now an official git repository for epgsearch, that contains the latest
- development.
- First usage:
- git clone git://projects.vdr-developer.org/vdr-plugin-epgsearch.git
+- there is now an official git repository for epgsearch, that contains the latest
+ development.
+ First usage:
+ git clone git://projects.vdr-developer.org/vdr-plugin-epgsearch.git
Keep up-to-date with:
git pull
Web-git:
http://projects.vdr-developer.org/git/?p=vdr-plugin-epgsearch.git
- many thanks to the maintainers of projects.vdr-developer.org, especially Tobias
+ many thanks to the maintainers of projects.vdr-developer.org, especially Tobias
Grimm
-- directory entries from VDR's folders.conf are now also read and offered in the
+- directory entries from VDR's folders.conf are now also read and offered in the
directory selection of the timer menu.
- Search timer support for content descriptors as introduced in vdr-1.7.11. This lets you
search for broadcasts by their type, like "Movie/Drama", "Documentation",...
@@ -31,56 +39,56 @@ new:
event via OSD right before it starts and lets you switch to its channel with 'Ok'.
Switch timers now have the same option.
- in addition to the announcements via OSD new events can now also be reported by mail.
- To do so, there's a new search timer action "Announce by mail". You also have to update
- your mail template file epgsearchupdmail.templ (s. the updated html sample in the conf
+ To do so, there's a new search timer action "Announce by mail". You also have to update
+ your mail template file epgsearchupdmail.templ (s. the updated html sample in the conf
directory and/or read the MANUAL '13. Email notification').
-- The time in hours between the search timer mails can now be configured in the
+- The time in hours between the search timer mails can now be configured in the
setup to avoid flooding your inbox. epgsearch buffers the contents of the pending mails
in the new file pendingnotifications.conf.
-- New setup option to check if there is EPG content for the next x hours. If not
- you get warned by OSD and/or mail (Setup -> Search and search timers), suggested by
+- New setup option to check if there is EPG content for the next x hours. If not
+ you get warned by OSD and/or mail (Setup -> Search and search timers), suggested by
Andreas Mair.
- new internal variables:
* %day%, %month% and %year% which return the numeric day, month and year
(with century) of an event
- * %chgrp% returns the VDR channel group name corresponding to an event
+ * %chgrp% returns the VDR channel group name corresponding to an event
* %liveeventid% returns the encoded event ID as used in the frontend 'live' to add
direct links e.g. in the search timer mails (see sample conf/epgsearchupdmail-html.templ).
* %timer.liveid% returns the encoded timer ID as used in the frontend 'live' to add
direct links e.g. in the search timer mails.
- * %date_iso% and %date_iso_now% return the (current) date in 'YYYY-MM-DD' format,
+ * %date_iso% and %date_iso_now% return the (current) date in 'YYYY-MM-DD' format,
suggested by Andreas Mair.
* %search.series% returns 1 or 0 depending on the flag "series recording" of a search and
can be used in the directory entry of a search or it's depending variables.
- new command 'connect' within internal variables: with this command you can connect to
- a TCP service, pass data and assign the result to a variable. See the MANUAL for
+ a TCP service, pass data and assign the result to a variable. See the MANUAL for
details.
- new command 'length' within internal variables: this returns the length of the given arguments
- in memory to pat: french translation update, thanks to Patrice Staudt
- italian translation update, thanks to Diego Pierotto
- finnish translation update, thanks to Rolf Ahrenberg and Ville Skyttä
-- new lithuanian translation, thanks to Valdemaras Pipiras
+- new lithuanian translation, thanks to Valdemaras Pipiras
- new slovak translation, thanks to Milan Hrala
-- new SVDRP command 'MENU [NOW|PRG|SUM]' to call one of the main OSD menus or
+- new SVDRP command 'MENU [NOW|PRG|SUM]' to call one of the main OSD menus or
the summary of the current event. If any epgsearch menu is open a subsequent
SVDRP call will close it again.
- changed the maximum number of days for a timer conflict check from 99 to 14
- patch by Jörg Wendel for new graphtft patch
-- Two events with both empty episode names are now handled different within the
- feature 'Avoid repeats'. This will result in more recordings, but ensures not to
+- Two events with both empty episode names are now handled different within the
+ feature 'Avoid repeats'. This will result in more recordings, but ensures not to
miss one only because of a buggy EPG.
-- searchtimers: if a timers filename results in an empty string or contains
+- searchtimers: if a timers filename results in an empty string or contains
"!^invalid^!" it will be skipped for programming now.
- Avoid repeats: The option 'Yes' for 'Compare subtitle' is now replaced with 'if present'.
- With this setting epgsearch will classify two events only as equal if
- their episode names match and are not empty.
-- epgsearch now uses the shutdown handler (introduced in vdr 1.5.1) to prevent a
+ With this setting epgsearch will classify two events only as equal if
+ their episode names match and are not empty.
+- epgsearch now uses the shutdown handler (introduced in vdr 1.5.1) to prevent a
search timer update to be interrupted.
-- the SVDRP command UPDS for triggering search timer updates has now a new option
+- the SVDRP command UPDS for triggering search timer updates has now a new option
'SCAN' that will execute an EPG scan before the search timer update actually starts.
-- when deleting a search timer now its list of created timers is also cleared,
+- when deleting a search timer now its list of created timers is also cleared,
suggested by Sundararaj Reel
-- moved 'file' and 'directory' to the top in the timer edit menu, since at least in
+- moved 'file' and 'directory' to the top in the timer edit menu, since at least in
my case its the most common entry to change, e.g. to select a folder for the recording.
- auto enable Wareagle icons if VDRSymbols font is used (can be overwritten with
WarEagleIcons=0 in epgsearchmenu.conf), suggested by Ronny Kornexl
@@ -88,38 +96,38 @@ new:
- epgsearch now autodetects an installed pin plugin or graphtft, also the optional libraries
libpcre und libtre (can be turned off by commenting AUTOCONFIG in the Makefile)
- new patch vdr.epgsearch-exttimeredit.diff:
- this patch against VDR integrates epgsearch's timer edit menu to VDR's timer menu, thanks
+ 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
-- if the VPS time differs from the start time of an event the VPS marker is now 'v'
+- if the VPS time differs from the start time of an event the VPS marker is now 'v'
instead of 'V'
- the first run of the background threads (searchtimer, switchtimer, conflict check) is now
triggered by the first call to cPlugin::MainThreadHook instead of waiting 20s after
VDRs startup.
-- The update check for manual timers does now ignore timers whose start or stop time was edited
- by the user.
+- The update check for manual timers does now ignore timers whose start or stop time was edited
+ by the user.
- default path to sendmail is now '/usr/sbin/sendmail' and can be configured in the Makefile,
thanks to Ville Skyttä for providing a patch.
-- externally triggered search timer updates (via service interface or SVDRP) will now
+- externally triggered search timer updates (via service interface or SVDRP) will now
automatically activate the setting "Use search timers" in the setup.
- epgsearch now also checks the recordings length among the correct start and stop time of a timer
- when testing for complete recordings. 98% and more are handled as complete.
+ when testing for complete recordings. 98% and more are handled as complete.
- switch timers are now also visible in all search results EPG menus
- Avoid repeats: in 'compare summary' one can now adjust the required match, default is 90%.
-- if there is no subtitle the filename now defaults to YYYY.MM.DD-HH.MM-Weekday to ease
+- if there is no subtitle the filename now defaults to YYYY.MM.DD-HH.MM-Weekday to ease
sorting in some frontends, thanks to Dominic Evans for providing a patch
- should now compile in FreeBSD, thanks to Juergen Lock for providing a patch
- new SVDRP command UPDT to reload the list of search timers in epgsearch.conf
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
+- fixed a crash when using the progressbar and events with 0 duration exist, thanks
to egal@vdrportal
-- when an incomplete recording triggers a search timer update for a search timer
+- when an incomplete recording triggers a search timer update for a search timer
with 'avoid repeats' now running events are ignored for the repeats.
- now using cCondWait::Wait instead of cCondWait:SleepMs to avoid shutdown problems,
thanks to e9hack@vdrportal for providing a patch
-- fixed line breaks in SVDRP command LSTT, thanks to Andreas Mair for providing a
+- fixed line breaks in SVDRP command LSTT, thanks to Andreas Mair for providing a
patch
- improved response time when canceling the search timer thread
- fixed a segfault occurring when navigating to a userdefined epg menu that has expired
@@ -135,22 +143,22 @@ fixes:
- some fixes regarding libtre includes, thanks to Ville Skyttä for providing a patch
- fix UTF8-character handling in timer file names, thanks to Rolf Ahrenberg for providing
a patch
-- fixed a crash when adding huge episode names to the timer's file name, thanks to Lari
+- fixed a crash when adding huge episode names to the timer's file name, thanks to Lari
Tuononen for reporting
-- make sure only one regular expression library is linked against epgsearch, thanks to
+- make sure only one regular expression library is linked against epgsearch, thanks to
Ville Skyttä for providing a patch.
-- some providers have strange EPG time changes only by some seconds. epgsearch now ignores
- changes less than 60s and does not touch the corresponding timer or report by mail,
+- some providers have strange EPG time changes only by some seconds. epgsearch now ignores
+ changes less than 60s and does not touch the corresponding timer or report by mail,
thanks to cmichel@mantis for reporting
- possible fix of the old problem with a crash in libpcre, thanks to Andreas Cz. for the
patch and to Stefan Bauer for pointing me to it.
-- fix a crash when toggling between with/without subtitle in timer info view for events
+- fix a crash when toggling between with/without subtitle in timer info view for events
that have (very) long "short" texts, thanks to Ville Skyttä for providing a patch.
-- fixed file descriptor handling when there are errors in SVDRP communication, thanks to
+- fixed file descriptor handling when there are errors in SVDRP communication, thanks to
Teemu Rantanen for providing a patch.
- fixed the service interface for switchtimers because of wrong parameter handling, thanks
to gnapheus@vdrportal for reporting.
-- fixed case insensitve searching when Utf-8 characters are involved, thanks to Ville
+- fixed case insensitve searching when Utf-8 characters are involved, thanks to Ville
Skyttä for reporting
- fixed check of complete VPS recordings, thanks to durchflieger@vdr-portal for providing
a patch.
@@ -164,58 +172,58 @@ new:
- support for VDRSymbols font (activate it with 'WarEagle=1' in epgsearchmenu.conf)
- the EPG command 'Search in recordings' now evaluates the info.vdr instead of the
recordings path name and also does fuzzy searching, suggested by Mase@vdrportal
-- search timers with action 'switch only' and switch timers now have an additional
- option 'unmute sound' which unmutes audio at the event, if it was off, suggested
+- search timers with action 'switch only' and switch timers now have an additional
+ option 'unmute sound' which unmutes audio at the event, if it was off, suggested
by Michael Brückner
-- the timer update notification mails supports now an additional variable
+- the timer update notification mails supports now an additional variable
%timer.modreason%, that holds the reason for a timer update in plain text (see
epgsearchupdmail(-html).templ for a sample)
- support for a conf.d mechanism (s. MANUAL -> 14. The conf.d subdirectory), suggested
by Mike Constabel.
-- new SVDRP command 'LSCC' that returns the results of a timer conflict
+- new SVDRP command 'LSCC' that returns the results of a timer conflict
check. See the MANUAL for details about the format of the result list.
-- new patch against VDR (vdr-1.5.17-progressbar-support-0.0.1.diff) that adds support
+- new patch against VDR (vdr-1.5.17-progressbar-support-0.0.1.diff) that adds support
for graphical progressbars in skins classic and st:tng, thanks to zulu@vdrportal
- '0' in the menu of done recordings now toggles the display of the episode name only
-- the favorites menu can now also be displayed after 'Overview - Now' via setup,
+- the favorites menu can now also be displayed after 'Overview - Now' via setup,
suggested by Bittor Corl
- menu of recordings done now sorts the date top down
- support for new info key behaviour in vdr-1.5.13
- changes for builtin graphtft-patch (when using VDR-extension-patch you need > v.37)
- updated the timercmd-patch for vdr-1.5.12 (patches/timercmd-0.1_1.5.12.diff)
- added patches/README.patches to describe the existing patches
-- update of 'undoneepgsearch.sh', a script to remove recordings from the done file via
+- update of 'undoneepgsearch.sh', a script to remove recordings from the done file via
reccmds.conf, thanks to Viking@vdrportal.
- update of finnish translation, thanks to Rolf Ahrenberg
- full spanish translation, many thanks to agusmir, dragondefuego, GenaroL, lopezm and
nachofr from todopvr.com, and especially to bittor
-- update of italian translation, thanks to Diego Pierotto
+- update of italian translation, thanks to Diego Pierotto
- update of dutch translation, thanks to carel@bugtracker
- the setup option "No announcements when replaying" is now ignored, if the search timer
update was triggered manually, suggested by Andreas Mair.
-fixes:
-- shifting the time display: the start time now only gets displayed in
- 'Overview - Now' instead of a progressbar, if there's not already a start time
- in the menu template ('%time%') as in the default template,
+fixes:
+- shifting the time display: the start time now only gets displayed in
+ 'Overview - Now' instead of a progressbar, if there's not already a start time
+ in the menu template ('%time%') as in the default template,
thanks to Getty@vdrportal for reporting
-- fixed some issues regarding GPL, thanks to Thomas Günther for reporting
+- fixed some issues regarding GPL, thanks to Thomas Günther for reporting
- fixed a crash when no EPG is present, thanks to Petri Helin for providing a patch
-- the default value for maximum duration is now '23:59' to avoid problems with
+- the default value for maximum duration is now '23:59' to avoid problems with
external tools, thanks to ralf-naujokat@bugtracker for reporting (bug-id #371)
- after an EPG change of less then 10 minutes epgsearch modified a timer instead of
creating a new one. This caused problems with events with less then 10 minutes. The
tolerance is therefore now min(<event duration>, 10 min). Thanks to Janne Liimatainen
for reporting.
- fixed some translations, thanks to ramirez@vdrportal for reporting
-- speed improvement when scrolling through EPG menus, thanks to ramirez@vdrportal for
+- speed improvement when scrolling through EPG menus, thanks to ramirez@vdrportal for
reporting
- fixed a crash, when SIGINT is signaled while background threads startup
-- channel group separators in 'Overview Now/Next/...' are now hidden if they are
+- channel group separators in 'Overview Now/Next/...' are now hidden if they are
empty like in ':@30', thanks to Ulf Kiener for providing a patch
- fixed a crash in the setup of the addon plugins when VDR is patched with the ext-patch
and active LIEMIKUUTIO
-- 'avoid repeats' combined with 'pause on ... recordings' created to less timers, thanks
+- 'avoid repeats' combined with 'pause on ... recordings' created to less timers, thanks
to spockele@vdrportal for reporting
- fixed some compiler warnings with g++ 4.3
- fine-tuning fuzzy matching of descriptions, thanks to Alf Fahland for providing a patch
@@ -226,39 +234,39 @@ fixes:
- fixed evaluation of compiler flags like WITHOUT_EPGSEARCHONLY,...
2007-09-02: Version 0.9.23
-new:
-- full support for new i18n system in vdr>=1.5.7, but keeps fully backwards
+new:
+- full support for new i18n system in vdr>=1.5.7, but keeps fully backwards
compatible
- when using extended EPG categories one can now also compare by value, e.g.
to search for events after some year.
- Therefore new searchmodes (10 which means '<', 11 which means '<=', ...)
+ Therefore new searchmodes (10 which means '<', 11 which means '<=', ...)
were introduced in the file epgsearchcats.conf. Example:
# 'until year'
3|Year|until year||11
# 'from year'
- 12|Year|from year||13
-
+ 12|Year|from year||13
+
One could use this also to search for a specific season of a series, if this
data is part of the EPG. See the section <epgsearchcats.conf> in the documentation
for a complete list of all search modes.
-- The edit menu for search timers has now a switch 'Ignore missing categories' for
- extended EPG categories. If set to 'Yes' this tells epgsearch that a missing EPG
- category should not exclude an event from the results. Caution: Using this without
+- The edit menu for search timers has now a switch 'Ignore missing categories' for
+ extended EPG categories. If set to 'Yes' this tells epgsearch that a missing EPG
+ category should not exclude an event from the results. Caution: Using this without
any other criterions could flood your timers.
- Search timers have now an 'auto delete' feature. The edit menu therefor provides:
* after x recordings, or
* after x days after first recording
Only complete recordings are counted. The deletion of the search timer is executed
directly after the end of the corresponding recording
-- new action "Create a copy" in menu Search/Actions to create and edit a copy of the
+- new action "Create a copy" in menu Search/Actions to create and edit a copy of the
current search, suggested by Michael Brückner.
-- the option "use as search timer" has now a third value 'user defined' besides 'yes'
- and 'no', that allows specifying a time margin where the search timer is active,
+- the option "use as search timer" has now a third value 'user defined' besides 'yes'
+ and 'no', that allows specifying a time margin where the search timer is active,
suggested by jo01@vdrportal
-- the progressbar now displays the start time instead of an empty bar, when
+- the progressbar now displays the start time instead of an empty bar, when
shifting to future events, thanks to zulu@vdrportal for providing a patch.
-- menu "show timers created" shows now summary for the timers done with 'Ok'.
+- menu "show timers created" shows now summary for the timers done with 'Ok'.
Also the shortcuts '1..9' for the EPG-commands are available.
- built-in pin-plugin patch (no more need to patch epgsearch). Activate
it by compiling with 'USE_PINPLUGIN' in VDR's Make.config (as already done in
@@ -273,7 +281,7 @@ fixes:
- fixed a bug in timer creation after navigating through the summary menu,
thanks to Rolf Ahrenberg for reporting
- Label "Record" or "Timer" in menu summary fixed with respect to existing timer.
-- fixed switch timers in the case when EPG has changed, thanks to Juergen Urban
+- fixed switch timers in the case when EPG has changed, thanks to Juergen Urban
for providing a patch
- fixed some compiler warnings in g++-4.2, thanks to Michael Brückner for reporting
- added "," to the allowed characters for a search timer, thanks to Mike Constabel for
@@ -281,15 +289,15 @@ fixes:
2007-05-27: Version 0.9.22
new:
-- new option in timer conflict check "When a recording starts":
- This performs a conflict check when any recording starts and informs
+- new option in timer conflict check "When a recording starts":
+ This performs a conflict check when any recording starts and informs
about it via OSD if the conflict is within the next 2h. So also timers not
created with epgsearch are checked, the same for instant recordings.
- new service interface "Epgsearch-services-v1.0": This allows other plugins
- to access and manage many components of epgsearch as searchtimers, setup
+ to access and manage many components of epgsearch as searchtimers, setup
values,... and execute tasks like searching for repeats (Have a look at
services.h for more information).
-- new project homepage: http://winni.vdr-developer.org/epgsearch, many thanks
+- new project homepage: http://winni.vdr-developer.org/epgsearch, many thanks
to Thomas Keil, sorry, only german at the moment ;)
- update for finnish translation, thanks to Rolf Ahrenberg
fixes:
@@ -299,67 +307,67 @@ fixes:
checks the alphanumeric portions of title and episode
- fixed another issue with quotes when calling commands for EPG events
- some license changes and additions for integration in Debian repositories
-- fixed a bug in displayed time, when using user defined times and shifting
+- fixed a bug in displayed time, when using user defined times and shifting
with FRew/FFwd, thanks to Torsten Weigelt for reporting
- the aux info about the channel was not added in 'one press timer creation'.
Thanks to Rolf Ahrenberg for providing a patch.
2007-04-29: Version 0.9.21
new:
-- support for the new MainMenuHooksPatch. This replaces the
- vdr-replace-schedulemenu patch. The new patch is used by other plugins too,
- so from now on only one patch is needed. The old patch is still supported,
+- support for the new MainMenuHooksPatch. This replaces the
+ vdr-replace-schedulemenu patch. The new patch is used by other plugins too,
+ so from now on only one patch is needed. The old patch is still supported,
but this will be removed in the next releases.
-- announcements of broadcasts via OSD have been completely redesigned. Instead
- of displaying them event by event, you get now
- "x new broadcast(s) found! Show them?". Pressing 'Ok' shows a menu of all
- events with the usual functions as in other EPG menus. With "Edit" you can
- modify the announce settings (like "announce again: yes/no" or announce again
+- announcements of broadcasts via OSD have been completely redesigned. Instead
+ of displaying them event by event, you get now
+ "x new broadcast(s) found! Show them?". Pressing 'Ok' shows a menu of all
+ events with the usual functions as in other EPG menus. With "Edit" you can
+ modify the announce settings (like "announce again: yes/no" or announce again
after day x).
-- timer conflict notifications via OSD can now be supressed while replaying.
+- timer conflict notifications via OSD can now be supressed while replaying.
Nevertheless, if a conflict comes up within the next 2 hours the message gets
still displayed.
- all addon plugins (epgsearchonly, quickepgsearch, conflictcheckonly) now
have a setup option to toggle the main menu entry on/off, thanks to Tobias
Grimm for providing a patch.
-- channel name in aux info of manual timers, thanks to Rolf Ahrenberg for
+- channel name in aux info of manual timers, thanks to Rolf Ahrenberg for
providing a patch.
-- new script undoneepgsearch.sh to undo a timer within the recordings menu,
+- new script undoneepgsearch.sh to undo a timer within the recordings menu,
more info at:
http://www.vdr-portal.de/board/thread.php?postid=574109#post574109
Thanks to the author Christian Jacobsen
- update for french translation, thanks to Patrice
- Staudt
-- update for finnish translation, thanks to Rolf Ahrenberg
-- menu 'timer conflicts details' now also shows the date of the conflict in
+ Staudt
+- update for finnish translation, thanks to Rolf Ahrenberg
+- menu 'timer conflicts details' now also shows the date of the conflict in
menu title, suggested by Rusk@vdrportal.
-- the password for mail authentication is now hidden in the OSD, i.e.
- represented with '***...'
+- the password for mail authentication is now hidden in the OSD, i.e.
+ represented with '***...'
- the setup for mail notifications now also has a "Send to" address, because
- some providers don't allow the same address for sender and recipient.
- If "Send to" is not set, epgsearch automatically uses the sender address as
+ some providers don't allow the same address for sender and recipient.
+ If "Send to" is not set, epgsearch automatically uses the sender address as
recipient.
-- when testing for repeats (with feature 'Avoid repeats') epgsearch now only
- compares the alphanumeric portions of title and episode and ignores the case
+- when testing for repeats (with feature 'Avoid repeats') epgsearch now only
+ compares the alphanumeric portions of title and episode and ignores the case
too. Suggested by chello@vdrportal.
-- thanks to Rolf Ahrenberg for finnish translation update
+- thanks to Rolf Ahrenberg for finnish translation update
- added '&' to the set of valid chars for search terms
fixes:
-- the tags stored in the aux info of the timers created with search timers
+- the tags stored in the aux info of the timers created with search timers
conform now to correct XML syntax (no capitals, no blanks). E.g. "Search timer"
- will be changed to "searchtimer". So don't wonder if the first search timer
+ will be changed to "searchtimer". So don't wonder if the first search timer
update will modify all existent timers created with search timers. Thanks to
Rolf Ahrenberg for reporting.
-- update of recordingdone.sh because of the previous changes, thanks to
- Mike Constabel for providing a patch
+- update of recordingdone.sh because of the previous changes, thanks to
+ Mike Constabel for providing a patch
- fixed a segfault in the case of misconfigured extended EPG categories.
-- scrolling text items now works again, if your skin supports this.
+- scrolling text items now works again, if your skin supports this.
Thanks to ufauser@vdrportal for reporting.
-- setup option "Use search timers" now always gets automatically enabled, if
+- setup option "Use search timers" now always gets automatically enabled, if
one toggles a search to 'active' or manually starts a search timer update.
-- fixed handling of double quotes in title/episode when passed to userdefined
+- fixed handling of double quotes in title/episode when passed to userdefined
EPG commands, thanks to Mike Constabel for reporting.
-- fixed menu handling in search timer templates menu, thanks to wombel@vdrportal
+- fixed menu handling in search timer templates menu, thanks to wombel@vdrportal
for reporting.
2007-01-30: Version 0.9.20
@@ -374,7 +382,7 @@ new:
Please refer to the README (1.4.4 Setup/Timer Programming/Default timer check
method) for further notes.
- the timespan used in the favorites menu can now be adjusted via
- setup. Default is 24h.
+ setup. Default is 24h.
- Event announcements: If the user presses one of the keys 'Ok', '0', ... '9'
while the announcement of an event is displayed, he will be asked if further
announcements of this event should be disabled for ever (user hit '0' or
@@ -388,10 +396,10 @@ new:
with the next search timer update. With the new menu 'Show timers created'
in Search/Actions one can edit this list. The whole feature can be disabled
in the search timers setup. Note: the done list is only populated with
- timers that were newly created with this release.
+ timers that were newly created with this release.
- new addon plugin 'quickepgsearch': it creates a main menu entry 'Quick
search' and can be used to search for any event in the EPG. Include it with
- '-Pquickepgsearch' , suggested by SurfaceCleanerZ@vdrportal.
+ '-Pquickepgsearch' , suggested by SurfaceCleanerZ@vdrportal.
- new setup option "Limit channels from 1 to" to speed up epgsearchs call. If
the current channel is above the limit, all channels will be
displayed. Suggested by Uwe@vdrportal.
@@ -419,14 +427,14 @@ new:
now used in the default menu template of the favorites menu, where the date
field was removed.
* '%length%' for the length of a broadcast in seconds.
-- thanks to Rolf Ahrenberg for finnish translation update
+- thanks to Rolf Ahrenberg for finnish translation update
fixes:
- manually created timers are now neither deleted nor modified by any search
- timers.
+ timers.
- the addon conflictcheckonly was compiled even if WITHOUT_CONFLICTCHECKONLY
was defined in the Makefile, thanks to Ronny Kornexl for reporting.
- search term and directory support now the characters '�' (only for language
- german) and '@'.
+ german) and '@'.
- 'avoid repeats' had a bug (in some special cases) that created a timer for any
later repeat instead of the first event.
- a search with "Use day of week" AND "Use time" where "Start before" is after
@@ -438,7 +446,7 @@ fixes:
- fixed a bug in evaluation of user variables, thanks to Mike Constabel for
reporting and remote debugging
- fixed a bug in conflict mail notification concerning timers without assigned
- events
+ events
2006-10-27: Version 0.9.19
new:
@@ -446,17 +454,17 @@ new:
initially created a corresponding timer may modify it.
- new variables:
* '%search.query%' to be used in the recording directory of a search
- timer. Will be substituted to the query of a search timer.
+ timer. Will be substituted to the query of a search timer.
* '%videodir%' VDR video directory (e.g. /video)
* '%plugconfdir%' VDR plugin config directory (e.g. /etc/vdr/plugins)
* '%epgsearchdir%' epgsearchs config directory
- (e.g. /etc/vdr/plugins/epgsearch)
+ (e.g. /etc/vdr/plugins/epgsearch)
- the syntax of the 'system' command within a user variable has changed to be
- more flexible. It's now:
- %uservar%=system(/path/to/script[, parameters])
+ more flexible. It's now:
+ %uservar%=system(/path/to/script[, parameters])
where the optional 'parameters' can now be any expression using other
variables except directly using conditional expressions or other system
- calls.
+ calls.
- update for french translation, thanks to Patrice Staudt
fixes:
- VPS timers created by search timers are now always updated to their VPS time,
@@ -479,19 +487,19 @@ new:
mv /etc/vdr/plugins/.epgsearch* /etc/vdr/plugins/epgsearch
This is only important if you don't already use epgsearchs '--config' or
- '-c' parameter.
+ '-c' parameter.
- new 'Favorites menu' besides 'Now' and 'Next': This menu can show a list of
all your favorite broadcasts for the next 24h. To enable it activate 'Show
favorites menu' in the setup. To let epgsearch know what your favorites are
create/edit some searches and enable 'Use in favorites menu'.
- new setup option for timer conflict check: 'After each timer
- programming'. This performs a conflict check after each manual timer
+ programming'. This performs a conflict check after each manual timer
programming and - if the new/modified timer is involved in a conflict - pops
up an OSD message about it.
- new email notifications about search timer updates or timer
conflicts with a customizable mail content. Please refer to the MANUAL
- section 'Email notification' for further details.
+ section 'Email notification' for further details.
- epgsearch has now a set of man pages. A very BIG thanks to Mike Constabel
(vejoun@vdrportal) who did the complete job of rewriting/correcting and
formatting the current docs. The man pages cover the README's, MANUAL and a
@@ -501,7 +509,7 @@ new:
directory, search timer recording directory or your own menu
templates. Since this is quite complex please refer to the MANUAL section
'User defined variables'. Just an example to see what is possible:
- # Weekday, Date, Time
+ # Weekday, Date, Time
%DateStr%=%time_w% %date% %time%
# Themes or Subtitle or Date
%ThemesSubtitleDate1%=%Subtitle% ? %Subtitle% : %DateStr%
@@ -524,7 +532,7 @@ new:
- the check for a complete recording now also accepts short breaks (< 2s,
e.g. a channel pid change)
- new SVDRP commands:
- * LSTC [channel group name]
+ * LSTC [channel group name]
list all channel groups or if given the one with name 'group name'
* NEWC <channel group settings>
create a new channel group, format as in epgsearchchangrps.conf
@@ -542,9 +550,9 @@ new:
* 'DELB <ID>' to delete the blacklist with ID
* 'EDIB <settings>' to modify an existing blacklist
* 'QRYS < ID(s) >' to get the results for a search with the given
- ID. Multiple IDs can also be passed and have to be separated with '|'.
+ ID. Multiple IDs can also be passed and have to be separated with '|'.
* 'QRYS <settings>' to get the results for a search with the given
- search settings.
+ search settings.
* 'QRYF [hours]' to get the results for the favorites menu. The optional
parameter specifies the number of hours to evaluate and defaults to 24h.
* 'LSTE [ID] to get the extended EPG categories defined in epgsearchcats.conf
@@ -555,14 +563,14 @@ new:
(english)
http://www.vdr-developer.org/mantisbt
http://www.vdr-developer.org/mailman/listinfo/epgsearch
- thanks to the providers of developer.org
+ thanks to the providers of developer.org
- new service interface "Epgsearch-switchtimer-v1.0" to access and manage
switch timers, thanks to Dirk Leber for his extension.
- update for french translation (including setup help!), thanks to Patrice
Staudt
-- thanks to Rolf Ahrenberg for finnish translation update
+- thanks to Rolf Ahrenberg for finnish translation update
- thanks to Mike Constabel for providing a HTML update mail template
- (conf/epgsearchupdmail-html.templ)
+ (conf/epgsearchupdmail-html.templ)
fixes:
- the first day of a repeating timer is now taken into consideration in the
timer conflict check, thanks to zimuland@vdrportal for reporting
@@ -573,20 +581,20 @@ fixes:
- changed some default search mode values in the epgsearchcats.conf samples for
multiple selection
- removed extra line feeds in SVDRP response of LSTS, thanks to Andreas Mair
- for reporting
+ for reporting
- channel criterion 'no pay tv' in search timers was ignored, thanks to
Andreas Mair for reporting
- fixed initial min/max values for search criterion 'duration', thanks to
- Mike Constabel for reporting
+ Mike Constabel for reporting
- fixed a bug when selecting the conflict check 'after each search timer
update' in setup, thanks to Ronny Kornexl for reporting
- some changes for thread safeness
-- added '--remove-destination' to the Makefile as introduced in vdr-1.4.2-3
+- added '--remove-destination' to the Makefile as introduced in vdr-1.4.2-3
2006-08-07: Version 0.9.17d (maintenance release)
fixes:
- fixed a wrong usage of 'cPlugin::ConfigDirectory' in search timer thread,
- thanks to Udo Richter and Petri Hintukainen for reporting
+ thanks to Udo Richter and Petri Hintukainen for reporting
2006-06-12: Version 0.9.17c
fixes:
@@ -613,26 +621,26 @@ fixes:
- dropped support for vdr < 1.3.46 :-(
- changed logic in jumping through menus with user-defined times: you can now
also access times on next day, if they are less then 20 hours in the
- future. Thanks to egal@vdrportal and CKone@vdrportal.
+ future. Thanks to egal@vdrportal and CKone@vdrportal.
- epgsearch has now its own timer conflict check which can be customized by
setup regarding relevant priorities, the time span to check or the relevant
conflict duration. There is also a conflict manager in Search/Actions that
can be used to resolve conflicts. Many thanks to Mike Constabel for heavy
testing ;-)
- if there is a timer conflicts notification via OSD, you can now press 'Ok' to
- go directly to the timer conflicts overview.
+ go directly to the timer conflicts overview.
- if you like to have a separate main menu entry for the timer conflict check
- use '-P conflictcheckonly' which comes as 'mini'-plugin with epgsearch and
+ use '-P conflictcheckonly' which comes as 'mini'-plugin with epgsearch and
simply calls epgsearch's conflict menu. conflictcheckonly has a setup option
to display an info about the last conflict check directly in its main menu
- entry.
+ entry.
- setup is now completely restructured and has now something like an 'online'
- help.
+ help.
- menu 'switch timers' now also displays the channel number
- input logic for extended EPG categories changed to allow multiple values.
- added script 'timercmds-auxinfo.sh' that displays the aux info (e.g. the
search timer responsible for the timer) in VDR's timer menu (requires the
- timercmd patch), thanks to the author Mike Constabel
+ timercmd patch), thanks to the author Mike Constabel
- user-defined EPG times with empty description get now their associated time
as description, suggested by Thiemo Gehrke
- new service interface "Epgsearch-conflictmenu-v1.0" to call epgsearch's
@@ -643,26 +651,26 @@ fixes:
only useful when testing the conf file. To activate the permanent
reload again, pass the new start parameter '-r' or '--reloadmenuconf' in
your runvdr
-- thanks to Rolf Ahrenberg for finnish translation update
+- thanks to Rolf Ahrenberg for finnish translation update
- added HISTORY.DE (german HISTORY)
fixes:
- loading epgsearchmenu.conf now falls back to menu defaults, if the conf file
- contains any errors.
+ contains any errors.
- fixed handling of '%' in LSTS in SVDRP for vdr > 1.3.44, thanks to Mike
- Constabel
+ Constabel
- fixed loading epgsearchmenu.conf for epgsearchonly and service interface
"Epgsearch-searchmenu-v1.0", thanks to Daniel Dorau for reporting.
- fixed display update in menu 'Search templates', thanks to Mike Constabel
- fixed a bug when deleting associated timers of a search timer when there
are no timers present, thanks to Patrick Koppen for reporting.
- hopefully fixed a bug when adding a search entry to templates, thanks to
- Patrick Koppen for reporting.
+ Patrick Koppen for reporting.
2006-04-18: Version 0.9.16 (maintenance release)
fixes:
-- the display of 'Overview - Now' was broken, when using progressbar and
+- the display of 'Overview - Now' was broken, when using progressbar and
channel numbers in default menu look. Thanks to Gerhard Steiner for
- reporting this one.
+ reporting this one.
- when using small OSD fonts, the progressbars where flickering because of 1
pixel line height. Thanks to holymoly and TomG@vdrportal.
- support for the APIVERSION define as introduced in vdr-1.3.47
@@ -674,10 +682,10 @@ new:
MenuWhatsOnNow=%chnr%:3|%progrt2s%:5| %time% %t_status%:8|%category%:6| %title% ~ %subtitle%:35
creates a menu line starting with the channel number, followed by a progress
bar in text2skin style, the start time, the timer status, the EPG category
- (like "movie") and finally the title and subtitle.
+ (like "movie") and finally the title and subtitle.
You can customize each menu ('What's on now, next, other times, schedule and
search results with a separate line). Please refer to the MANUAL for more
- information.
+ information.
- IMPORTANT change to search timers: epgsearch now removes timers, that are
not needed anymore (if vdr >= 1.3.44). These are:
* timers, that are no more valid because of EPG changes. This should avoid
@@ -706,7 +714,7 @@ new:
'Search'. Compilation of epgsearchonly is automatically done, but can be
switched off in the Makefile when uncommenting the line
#WITHOUT_EPGSEARCHONLY=1. To use it simply put '-P epgsearchonly' to your
- VDR start script. (requires >= vdr-1.3.30)
+ VDR start script. (requires >= vdr-1.3.30)
- new service interface "Epgsearch-searchmenu-v1.0" to call epgsearch's search
menu from other plugins.
- new action 'Delete created timers?' for search entries to delete all timers
@@ -720,7 +728,7 @@ new:
- Support for wareagle-icon-patch (activate it by adding the line
'WarEagleIcons=1' to epgsearchmenu.conf)
- Progressbar in Now/Next beautified when using setup option 'graphical',
- inspired by Nordlichts-EPG-Plugin
+ inspired by Nordlichts-EPG-Plugin
- new setup option to show/hide radio channels in the EPG menus, suggested by
Patrice Staudt.
- new service interface "Epgsearch-searchresults-v1.0", that returns a result
@@ -742,7 +750,7 @@ new:
create a timer for a result. Suggested by Lari Tuononen
fixes:
- thanks to Darren Salt for patches for g++ 4.1 and some things concerning
- thread safeness and code review
+ thread safeness and code review
- fixed some memory leaks
- fixed calling user defined EPG commands, thanks to rzndl@vdrportal
- fixed blacklist match for search timers, thanks to Christian Jacobsen
@@ -760,7 +768,7 @@ new:
- when disabling/enabling a search timer you can now decide if the associated
timers should also be disabled/enabled.
- new built-in EPG command 'Create blacklist' to create a blacklist from any
- EPG menu.
+ EPG menu.
- the summary of an entry in the menu 'recordings done' has now an additional
button 'Aux info', that displays the content of the aux field.
- update for the script recordingdone.sh to work also with vdr-1.3.44, thanks
@@ -773,9 +781,9 @@ new:
don't have to apply them, but when using them, all works fine. Thanks to
Mike Constable for providing them.
* new script convert_info_vdr.pl. This converts the info file of recordings
- made before vdr-1.3.44 and moves epgsearch aux data to the new aux field.
+ made before vdr-1.3.44 and moves epgsearch aux data to the new aux field.
* new script convert_epgsearchdone_data.pl. This converts the
- epgsearchdone.data file adding an 'aux' section to it.
+ epgsearchdone.data file adding an 'aux' section to it.
- update for script mtdone2epgsearchdone.sh, thanks to Christian Jacobsen
- update for french translation, thanks to Patrice Staudt
- update for finnish translation, thanks to Rolf Ahrenberg
@@ -801,8 +809,8 @@ new:
timer. Blacklists can be managed from setup or with the new search action
'Show blacklists' or directly when editing a search. Within a search you can
select one or more or all blacklists. If any search result is also contained
- in a black list result set it will be skipped.
-- the switchtimer background thread is now only active, while there are any
+ in a black list result set it will be skipped.
+- the switchtimer background thread is now only active, while there are any
active switch timers.
- when you unpack the tar file, the necessary link is now automatically
created (like text2skin)
@@ -860,7 +868,7 @@ new:
* 'UPDD' to reload the file epgsearchdone.data, e.g. after an
external tool has modified it.
* 'SETS <ON|OFF>' to activate or cancel the search timer background
- thread.
+ thread.
- since setup gets too big it has now the modes 'Standard' and
'Extended'(toggled with key 'red'), suggested by Rolf Ahrenberg
- update for finnish translation, thanks to Rolf Ahrenberg
@@ -870,13 +878,13 @@ new:
- using 127.0.0.1 instead of resolving 'localhost' for SVDRP,
suggested by Thiemo Gehrke
- added script recordingdone.sh for your reccmds.conf to add a
- recording to epgsearch's done file, thanks to Patrice Staudt,
- Christian Jacobsen and Mike Constabel
+ recording to epgsearch's done file, thanks to Patrice Staudt,
+ Christian Jacobsen and Mike Constabel
- added script mtdone2epgsearchdone.sh to move recordings from
mastertimer's done file to epgsearch's done file, thanks to
Christian Jacobsen.
- thanks to Mike Constabel and Andreas Brugger for testing and bug
- reports
+ reports
fixes:
- fixed a bug after using templates, thanks to Christian Jacobsen
@@ -893,9 +901,9 @@ new:
affects adding the subtitle to the timer file in manual timer
programming. The setting 'smart' skips the subtitle if the event has
more that 80 min.
-- search edit menu for search timers changed for future extensions:
+- search edit menu for search timers changed for future extensions:
'Action' now selects the job to do for the search results, currently
- 'record' (default) or 'announce only'
+ 'record' (default) or 'announce only'
- thanks to Rolf Ahrenberg for finnish translation update
fixes:
- in vdr-1.3.38 some translations were broken
@@ -973,25 +981,25 @@ ATTENTION: this version converts epgsearch.conf (the file that stores
of the previous/next event, suggested by Andreas Brugger
- the channel number is now also listed in menu 'search results', if
the setup option 'show channel numbers' is set, suggested by Gerhard
- Steiner.
+ Steiner.
- short keys (1,2,...) to EPG commands are now also availabe in the
EPG summary menu, suggested by Frank Kr�mmelbein
- if VDR version >= 1.3.31 then setup has now an option to choose
between epgsearch's timer edit menu and VDR's built-in menu (useful
when using a patched VDR timer edit menu, suggested by Frank
- Kr�mmelbein)
+ Kr�mmelbein)
- if a subtitle is present the menu for manual timer programming now
always adds the subtitle to the timer file as default, suggested by
- Gerhard Steiner
+ Gerhard Steiner
- optimized the splitting of the directory and file entry when
re-editing a timer in manual programming, thanks to Andreas Brugger
- the EPG menus now always display a subtitle in the form 'title ~
subtitle' if present
- new service 'Epgsearch-updatesearchtimers-v1.0' to trigger a search
- timer update
+ timer update
- if a search timer update is triggered from the actions menu then an
- osd message is displayed when it has finished (also when using the
- service 'Epgsearch-updatesearchtimers-v1.0' optional)
+ osd message is displayed when it has finished (also when using the
+ service 'Epgsearch-updatesearchtimers-v1.0' optional)
- the menu of search timers now displays the number of (active)
searchtimers in its title
- now checking if manual timer programming has failed and display an osd
@@ -1007,7 +1015,7 @@ fixes:
- fixed menu navigation with respect to empty schedules, thanks to
Darren Salt for his patch
- fixed misaligned search entries in searches menu, thanks to Andreas
- Brugger
+ Brugger
2005-09-04: Version 0.9.7
new:
@@ -1027,21 +1035,21 @@ new:
flexible way to select channels for the search procedure.
- epgsearch now exposes its extended timer edit menu and searching the
epg as services to other plugins (s. MANUAL or contact me, if you
- are interested)
+ are interested)
- if a timer is programmed for an event (searchtimer or manual
programming) then the summary is now also passed to the timer (allows
displaying the summary pressing 'ok' in timer menu), thanks to
TomG@vdrportal
- after toggling the color buttons with '0' in the schedule menu the
yellow/green button now move to the schedule of the
- previous/next channel
+ previous/next channel
- added a patch from Uwe/egal@vdrportal that replaces vdr's
standard schedule menu with the epgsearch plugin. Also big thanks to
Uwe for the changes in epgsearch. After patching VDR you have to
activate the patch in epgsearch's setup.
- after editing a new search, its entry now gets correctly sorted in
the list of all searches, thanks to Mike Constabel
-- added Gerhard Steiner's timercmd patch for vdr >= 1.3.25
+- added Gerhard Steiner's timercmd patch for vdr >= 1.3.25
- a 'back' in the start menu now always closes the osd (should solve
some trouble with the submenu patch)
- events without title are now ignored, regardless of the search
@@ -1050,7 +1058,7 @@ new:
and gets replaced with the channels name
- recording margins in search timers can now be negative (allows
intentional cutting the begin/end of recording), suggested by Mike
- Constabel
+ Constabel
- extended EPG categories are now compared case insensitive
- updated finnish translation, thanks to Rolf Ahrenberg
@@ -1075,11 +1083,11 @@ fixes:
be configured!):
* additional item 'directory' with selection of existing
directories with key 'blue' (also supports EPG
- variables like "%category%" when using ext. EPG info)
+ variables like "%category%" when using ext. EPG info)
* item 'file' can be extended with subtitle (if present) pressing
key 'blue'
* item 'file' and 'directory' can be reset to standard pressing key
- 'yellow'
+ 'yellow'
* when editing weekdays then item 'day' can be customized with a submenu
for arbitrary weekdays selection
- menu 'userdefined days of week' for search timers now starts with
@@ -1108,7 +1116,7 @@ fixes:
refer to the README 'Using extended EPG info').
- added a submenu to select an existing directory when editing a
search timer. This menu can also be extended with entries in the file
- epgsearchdirs.conf
+ epgsearchdirs.conf
- usage of variables like "%Genre%" or "%Category% in the directory
entry of a search timer. These are replaced with the current extended
EPG info when a timer is created.
@@ -1144,11 +1152,11 @@ fixes:
- added a setup option to set a default for handling pay tv channels
when searching (does not affect search timers)
- fixed day check in searchtimer scan with respect to changes in
- vdr-1.3.23
+ vdr-1.3.23
- changed detection of existing timers to reduce superfluous timer
- modifications.
+ modifications.
- added channel name and subtitle to parameters for custom commands
-- small change in input logic of 'from channel' when editing a search entry
+- small change in input logic of 'from channel' when editing a search entry
- updated screen shots on project homepage
2005-03-20: Version 0.9.2
@@ -1158,7 +1166,7 @@ fixes:
- french translation update, thanks to Patrice Staudt
- fixed a problem with priority and lifetime when modifying a
timer
-
+
2005-03-19: Version 0.9.0
- new search mode 'regular expressions' (POSIX(default) or Perl compatible by
compiler switch HAVE_PCREPOSIX in the Makefile, see README - Installation)
@@ -1191,7 +1199,7 @@ fixes:
yellow
- fixed width of start time, when displaying channel number, thanks to
Gerhard Steiner
-
+
2005-01-22: Version 0.0.7
- Start menu can now be setup between 'schedule' and 'now'
- runtime patch for progressbar (no need to patch vdr anymore, experimental)
@@ -1208,7 +1216,7 @@ fixes:
2005-01-11: Version 0.0.6
- now compiles also with vdr-1.3.18
- Search criterion 'channel' can now be a range of channels (thanks to
- gunnar@vdrportal)
+ gunnar@vdrportal)
- Setup option 'short channel names' for display in 'now',
'next',... (only available for >= vdr-1.3.15, thanks to dido@vdrportal)
- french translation, thanks to Patrice Staudt
@@ -1238,7 +1246,7 @@ fixes:
2004-11-30: Version 0.0.4
- New feature 'search timers' (like vdradmins 'auto timers', see the
- readme, thanks to Rolf Ahrenberg for idea and code review)
+ readme, thanks to Rolf Ahrenberg for idea and code review)
- Progressbar can now be set to graphical bars in setup (you have to
apply a vdr-patch for this, see README, thanks to Uwe/egal from vdrportal for
creating the needed fonts)
@@ -1246,7 +1254,7 @@ fixes:
- Added builtin command to commands menu to switch to channel of
selected entry
- Added builtin command to commands menu to search the current epg
- entry in recordings (thanks to Adreas Kool for his patch)
+ entry in recordings (thanks to Adreas Kool for his patch)
- Key "Blue" can now also be customized by setup (switch/search)
- Key '0' toggles key mapping of red and blue key (thanks to Roman
(Uatschitchun) from vdrportal for his idea)
@@ -1268,7 +1276,7 @@ fixes:
- Added duration to search criterions
- Added commands menu in 'search results' list
- Behaviour of red key is now the same in 'search results' as
- in main menu of the plugin.
+ in main menu of the plugin.
- Updated history and readme's
2004-09-11: Version 0.0.2
diff --git a/HISTORY.DE b/HISTORY.DE
index 2616d57..eef8948 100644
--- a/HISTORY.DE
+++ b/HISTORY.DE
@@ -1,24 +1,32 @@
VDR Plugin 'epgsearch' Revision History
---------------------------------------
-2011-09-11; Version 1.0.0
+2011-xx-xx: Version 1.0.1
+neu:
+- alten Code für vdr < 1.6.0 entfernt, Danke an Ville Skyttä für einen ganzen Haufen Patches
+
+fixes:
+- Crash beim Editieren von Ausschlusslisten korrigiert
+
+
+2011-09-11: Version 1.0.0
neu:
- unterstützt vdr-1.6.0 bis vdr-1.7.21
-- Vermeide Wiederholungen mit 'Vergleiche Zeitpunkt': dabei werden
- 2 Sendungen anhand des Zeitpunkts der Ausstrahlung verglichen, um z.B. Wiederholungen
+- Vermeide Wiederholungen mit 'Vergleiche Zeitpunkt': dabei werden
+ 2 Sendungen anhand des Zeitpunkts der Ausstrahlung verglichen, um z.B. Wiederholungen
innerhalb des gleichen Tages, der Woche oder des Monats zu ignorieren.
-- Globale Ausschlusslisten: Ausschlusslisten für Suchtimer können nun als global markiert
+- Globale Ausschlusslisten: Ausschlusslisten für Suchtimer können nun als global markiert
werden, um unerwünschte Sendungen generell auszuschliessen (wie z.B auf doppelten SD/HD-
- Kanälen). Vorbelegung für Suchtimer ist nun "nur globale", kann aber auch auf "keine"
+ Kanälen). Vorbelegung für Suchtimer ist nun "nur globale", kann aber auch auf "keine"
gesetzt werden, um auch globale Ausschlusslisten zu ignorieren.
-- neue Setup-Option epgsearch.ConflCheckCmd (keine GUI dazu, also nur per setup.conf zu
+- neue Setup-Option epgsearch.ConflCheckCmd (keine GUI dazu, also nur per setup.conf zu
setzen!), mit der man je Konflikt-Timer einen Befehl ausführen kann, mehr dazu im MANUAL.
-- vdr-1.7.15 benutzt einen anderen SVDRP Standard-Port (6419), bitte im Setupmenü von
+- vdr-1.7.15 benutzt einen anderen SVDRP Standard-Port (6419), bitte im Setupmenü von
epgsearch ebenfalls anpassen!
- Es gibt nun ein offizielles git repository für epgsearch, das die neueste Entwicklung
- enthält.
- Zuerst:
- git clone git://projects.vdr-developer.org/vdr-plugin-epgsearch.git
+ enthält.
+ Zuerst:
+ git clone git://projects.vdr-developer.org/vdr-plugin-epgsearch.git
Auf den aktuellen Stand kommt man einfach mit:
git pull
Web-git:
@@ -28,18 +36,18 @@ neu:
auswahl der Timerprogrammierung angeboten.
- Suchtimer unterstützen nun content descriptors, die in vdr-1.7.11 eingeführt wurden. Damit
können Sendungen nach ihrem Typ gesucht werden, z.B. "Film/Drama", "Dokumentation",...
-- Suchtimer haben nun eine neue Aktion "Ankündigen und Umschalten". Damit wird eine Sendung
+- Suchtimer haben nun eine neue Aktion "Ankündigen und Umschalten". Damit wird eine Sendung
via OSD kurz vor ihrem Start angekündigt. Mit 'Ok' kann zum entsprechenden Kanal
gewechselt werden. Umschalttimer haben die gleiche Option erhalten.
- Zusätzlich zur Ankündigung per OSD können neue Sendungen nun auch per Mail bekannt-
- gegeben werden. Dazu gibt es eine neue Suchtimeraktion "Per Mail ankündigen". Man muss
- ausserdem das Mail-Templatefile epgsearchupdmail.templ anpassen (s. aktualisiertes
+ gegeben werden. Dazu gibt es eine neue Suchtimeraktion "Per Mail ankündigen". Man muss
+ ausserdem das Mail-Templatefile epgsearchupdmail.templ anpassen (s. aktualisiertes
HTML-Beispiel im conf-Verzeichnis bzw. MANUAL '13. Email notification').
- Die Zeit in Stunden zwischen den Suchtimer-Emails kann nun im Setup eingestellt werden
um eine Ãœberflutung des Posteingangs zu vermeiden. epgsearch puffert den Inhalt ausstehender
Mails in der neuen Datei pendingnotifications.conf.
- Neue Setup-Option zur Prüfung, ob es EPG für die nächsten x Stunden gibt. Falls nicht, kann
- man per OSD und/oder Mail gewarnt werden. (Setup -> Suche und Suchtimer), vorgeschlagen von
+ man per OSD und/oder Mail gewarnt werden. (Setup -> Suche und Suchtimer), vorgeschlagen von
Andreas Mair.
- neue interne Variablen:
* %day%, %month% und %year% liefern den numerische Tag, das Monat und das
@@ -50,7 +58,7 @@ neu:
conf/epgsearchupdmail-html.templ)
* %timer.liveid% liefert die kodierte Timer-ID wie sie im Frontend 'live' benutzt wird.
Damit können nun z.B. in den Suchtimer-Mails direkte Links angegeben werden.
- * %date_iso% und %date_iso_now% ergeben das (aktuelle) Datum im Format 'YYYY-MM-DD',
+ * %date_iso% und %date_iso_now% ergeben das (aktuelle) Datum im Format 'YYYY-MM-DD',
vorgeschlagen von Andreas Mair.
* %search.series% liefert 1 oder 0 abhängig vom Flag "Serienaufnahme" der Suche und kann
im Verzeichniseintrag einer Suche oder in deren abhängigen Variablen benutzt werden.
@@ -61,12 +69,12 @@ neu:
- Im Gedenken an pat: Update der französischen Übersetzung, Danke an Patrice Staudt
- Update der italienischen Ãœbersetzung, Danke an Diego Pierotto
- Update der finnischen Übersetzung, Danke an Rolf Ahrenberg und Ville Skyttä
-- Neue litauische Ãœbersetzung, Danke an Valdemaras Pipiras
+- Neue litauische Ãœbersetzung, Danke an Valdemaras Pipiras
- Neue slowakische Ãœbersetzung, Danke an Milan Hrala
- neues SVDRP-Kommando 'MENU [NOW|PRG|SUM]' zum Aufruf eines der OSD-Hauptmenüs
- oder der Inhaltsangabe der aktuellen Sendung. Falls irgendein epgsearch-Menü
+ oder der Inhaltsangabe der aktuellen Sendung. Falls irgendein epgsearch-Menü
geöffnet ist, schließt ein weiteres SVDRP-Kommando dieses wieder.
-- Die maximale Anzahl von Tagen für eine Timerkonfliktprüfung ist nun von 99 auf
+- Die maximale Anzahl von Tagen für eine Timerkonfliktprüfung ist nun von 99 auf
14 geändert.
- Patch von Jörg Wendel für neuen graphtft-Patch
- Zwei Episoden mit leerem Untertitel innerhalb 'Vermeide Wiederholung' werden
@@ -74,27 +82,27 @@ neu:
wird verhindert, dass man eine Folge nur wegen eines fehlerhaften EPGs verpasst.
- Suchtimer: Falls der Datei-Eintrag eines Timers leer ist oder "!^invalid^!" enthält,
wird er für die Programmierung übersprungen.
-- Wiederholung vermeiden: Die Option 'ja' bei 'Vergleiche Untertitel' wurde durch 'falls
- vorhanden' ersetzt. Damit stuft epgsearch zwei Sendungen nur dann als
+- Wiederholung vermeiden: Die Option 'ja' bei 'Vergleiche Untertitel' wurde durch 'falls
+ vorhanden' ersetzt. Damit stuft epgsearch zwei Sendungen nur dann als
identisch ein, wenn die Episodennamen gleich sind und nicht leer.
- epgsearch verwendet nun den shutdown handler (eingeführt in vdr 1.5.1) um die Unter-
brechung eines Suchtimerupdates zu verhindern.
- das SVDRP-Kommando UPDS zum Auslösen von Suchtimer-Updates hat nun eine neue Option
'SCAN' mit der vor dem eigentlichen Update noch ein EPG-Scan ausgeführt wird.
-- beim Löschen eines Suchtimers wird nun auch dessen Liste erstellter Timer gelöscht,
+- beim Löschen eines Suchtimers wird nun auch dessen Liste erstellter Timer gelöscht,
vorgeschlagen von Sundararaj Reel
-- 'Datei' und 'Verzeichnis' an den Anfang des Timeredit-Menüs verlegt, da es zumindest bei
- mir das am meisten editierte Feld ist, z.B. bei wegen der Auswahl eines Ordners für die
+- 'Datei' und 'Verzeichnis' an den Anfang des Timeredit-Menüs verlegt, da es zumindest bei
+ mir das am meisten editierte Feld ist, z.B. bei wegen der Auswahl eines Ordners für die
Aufnahme.
- Wareagle Icons werden bei Verwendung des VDRSymbols-Font nun automatisch aktiv (kann aber
- mit WarEagleIcons=0 in epgsearchmenu.conf überschrieben werden), vorgeschlagen von
+ mit WarEagleIcons=0 in epgsearchmenu.conf überschrieben werden), vorgeschlagen von
Ronny Kornexl
- Das korrekte Encoding für Email-Benachrichtigungen wird nun automatisch erkannt.
- Es wird nun automatisch erkannt, ob Pin-Plugin oder Graphtft installiert sind, ebenso die
- optionalen Libs libpcre und libtre (läßt sich im Makefile mit Kommentieren von AUTOCONFIG
+ optionalen Libs libpcre und libtre (läßt sich im Makefile mit Kommentieren von AUTOCONFIG
abschalten)
- neuer Patch vdr.epgsearch-exttimeredit.diff:
- Dieser VDR-Patch integriert epgsearch's Timer-Edit-Menü in VDR's Timer-Menü, Danke dafür
+ 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
- falls die VPS-Zeit von der Startzeit einer Sendung abweicht, wird die VPS-Kennung nun mit
@@ -103,17 +111,17 @@ neu:
durch den ersten Aufruf von cPlugin::MainThreadHook ausgelöst, anstatt 20s nach dem VDR-Start.
- Die Ãœberwachung manueller Timer ignoriert nun Timer, deren Start- oder Stopzeit vom Anwender
geändert wurde.
-- Der Default-Pfad zu sendmail ist nun '/usr/sbin/sendmail' und kann per Makefile konfiguriert
+- Der Default-Pfad zu sendmail ist nun '/usr/sbin/sendmail' und kann per Makefile konfiguriert
werden, Danke an Ville Skyttä für den Patch.
- Externe Suchtimer-Updates (via service interface oder SVDRP) aktivieren nun automatisch die
Option "Suchtimer verw." im Setup.
-- epgsearch prüft nun neben korrekter Start- und Stopzeit des Timers auch die Aufnahmelänge
+- epgsearch prüft nun neben korrekter Start- und Stopzeit des Timers auch die Aufnahmelänge
bei der Prüfung auf vollständige Aufnahmen. 98% und mehr gelten als vollständig.
- Umschalttimer sind nun ebenfalls in alle EPG-Menüs mit Suchergebnissen sichtbar.
-- Vermeide Wiederholung: Bei 'Vergleiche Beschreibung' kann nun angegeben werden wie hoch
+- Vermeide Wiederholung: Bei 'Vergleiche Beschreibung' kann nun angegeben werden wie hoch
die Ãœbereinstimmung sein muss, Default ist 90%.
- falls kein Episodenname existiert, wird nun als Dateiname YYYY.MM.DD-HH.MM-Weekday
- verwendet, um die Sortierung in manchen Frontends zu erleichtern. Danke an Dominic
+ verwendet, um die Sortierung in manchen Frontends zu erleichtern. Danke an Dominic
Evans für einen Patch.
- sollte nun auch unter FreeBSD compilieren, Danke an Juergen Lock für einen Patch
- neuer SVDRP-Befehl UPDT zum Neuladen der Suchtimer aus der Datei epgsearch.conf
@@ -132,30 +140,30 @@ fixes:
- Absturz beim Navigieren zu benutzerdef. EPG-Menüs behoben, die zwischenzeitlich schon
in der Vergangenheit lagen, Danke an Mike Constabel für den Hinweis
- Im Timer-Edit-Menu war das Menu zur Tagesauswahl nicht mehr sichtbar
-- Wurde eine Sendung von mehreren Suchtimern mit "Nur ankündigen" gefunden, wurde sie auch
+- Wurde eine Sendung von mehreren Suchtimern mit "Nur ankündigen" gefunden, wurde sie auch
mehrfach gelistet, Danke an Andreas Mair für den Hinweis.
- Fehler bei "Nur ankündigen"-Suchtimer im Zusammenhang mit der Anzeige des zugehörigen Such-
timernamens korrigiert.
- Einige Speicherlecks korrigiert, Danke an Bittor Corl für einen Patch
-- Einige Korrekturen damit es mit gcc-4.4 compiliert, Danke an firefly@vdrportal für einen
+- Einige Korrekturen damit es mit gcc-4.4 compiliert, Danke an firefly@vdrportal für einen
Patch.
- Falsche Man-Sektion einiger Man-Pages korrigiert, Danke an Ville Skyttä für den Patch.
- Einige Korrekturen bzgl. libtre-Includes, Danke an Ville Skyttä für den Patch.
- Korrektur beim UTF8-Zeichensatz-Handling bei Timer-Filenamen, Danke an Rolf Ahrenberg für
den Patch.
-- Absturz beim Hinzufügen sehr langer Episodentexte zum Verzeichnis eines Timers behoben,
+- Absturz beim Hinzufügen sehr langer Episodentexte zum Verzeichnis eines Timers behoben,
Danke an Lari Tuononen für den Hinweis.
-- Sichergestellt, dass nur noch ein Library für reguläre Ausdrücke von epgsearch benutzt
+- Sichergestellt, dass nur noch ein Library für reguläre Ausdrücke von epgsearch benutzt
wird, Danke an Ville Skyttä für den Patch.
- Einige Provider haben seltsame Änderungen in den EPG-Zeiten von nur wenigen Sekunden.
- epgsearch ignoriert nun Änderungen von weniger als 60s und ändert den zugehörigen Timer
- nicht. Es erfolgt auch keine Emailbenachrichtigung. Danke an cmichel@mantis für den
+ epgsearch ignoriert nun Änderungen von weniger als 60s und ändert den zugehörigen Timer
+ nicht. Es erfolgt auch keine Emailbenachrichtigung. Danke an cmichel@mantis für den
Hinweis.
-- möglicher Fix für das alte Problem mit dem crash in libpcre, Danke an Andreas Cz. für
+- möglicher Fix für das alte Problem mit dem crash in libpcre, Danke an Andreas Cz. für
den Patch und an Stefan Bauer für den Hinweis darauf.
- Fix für einen Absturz beim Hin- und Herschalten von mit/ohne Untertitel bei Timern mit
mit sehr langen Episodennamen, Danke an Ville Skyttä für den Patch.
-- Korrektur beim file descriptor handling bei fehlerhafter SVDRP-Verbindung, Danke an
+- Korrektur beim file descriptor handling bei fehlerhafter SVDRP-Verbindung, Danke an
Teemu Rantanen für einen Patch.
- Service-Schnittstelle für Umschalttimer wegen falschem Parameterhandling korrigiert,
Danke an gnapheus@vdrportal für den Hinweis.
@@ -171,29 +179,29 @@ neu:
- Die Suche und damit das Suchtimer-Update sind nun etwa 25% schneller
- Schnellere EPG-Menüs, danke an die Patch-Authoren von http://www.open7x0.org
- Unterstützung des VDRSymbols-Font (aktivieren mit 'WarEagle=1' in epgsearchmenu.conf)
-- der EPG-Befehl 'Suche in Aufnahmen' wertet nun die info.vdr anstelle des
+- der EPG-Befehl 'Suche in Aufnahmen' wertet nun die info.vdr anstelle des
Aufnahmepfades aus und macht zusätzlich eine fuzzy-Suche, vorgeschlagen von
Mase@vdrportal
-- Suchtimer mit Aktion 'Nur umschalten' und Switchtimer haben jetzt eine weitere
- Option 'Ton anschalten', wodurch der Ton beim Umschalten aktiviert wird, falls
+- Suchtimer mit Aktion 'Nur umschalten' und Switchtimer haben jetzt eine weitere
+ Option 'Ton anschalten', wodurch der Ton beim Umschalten aktiviert wird, falls
er aus war, vorgeschlagen von Michael Brückner
-- Die Timer-Benachrichtigungsmail unterstützt nun eine weitere Variable
+- Die Timer-Benachrichtigungsmail unterstützt nun eine weitere Variable
%timer.modreason%, in der im Klartext der Grund einer Timeränderung steht (s.
epgsearchupdmail(-html).templ für ein Beispiel)
-- Unterstützung für einen conf.d-Mechanismus (s. MANUAL -> 14. The conf.d subdirectory),
+- Unterstützung für einen conf.d-Mechanismus (s. MANUAL -> 14. The conf.d subdirectory),
vorgeschlagen von Mike Constabel
-- neuer SVDRP-Befehl 'LSCC', der das Ergebnis einer Timerkonfliktprüfung
+- neuer SVDRP-Befehl 'LSCC', der das Ergebnis einer Timerkonfliktprüfung
zurückgibt. Zum Format der Ergebnisliste bitte ins MANUAL schauen.
- Neuer Patch für VDR (vdr-1.5.17-progressbar-support-0.0.1.diff), der die Unter-
stützung eines grafischen Fortschrittsbalkens in den Skins classic und st:tng
einbaut, Danke an zulu@vdrportal.
- '0' im Menü der erledigten Aufnahmen schaltet nun die Anzeige zwischen
'~Episode' und 'Titel~Episode' um.
-- Das Favoriten-Menü kann jetzt auch per Setup nach 'Übersicht - Jetzt' angezeigt
+- Das Favoriten-Menü kann jetzt auch per Setup nach 'Übersicht - Jetzt' angezeigt
werden, vorgeschlagen von Bittor Corl
- Im Menü "erledigte Aufnahmen" wird nun beim Datum absteigend sortiert.
- Unterstützung für das neue Info-Key-Verhalten in vdr-1.5.13
-- Änderungen für den eingebauten graphtft-patch (bei Verwendung von
+- Änderungen für den eingebauten graphtft-patch (bei Verwendung von
VDR-extension-patch ist > v.37 notwendig)
- Update des timercmd-patches für vdr-1.5.12 (patches/timercmd-0.1_1.5.12.diff)
- Neue Datei patches/README.patches für eine Beschreibung der vorhandenen Patches
@@ -208,23 +216,23 @@ neu:
Suchtimer-Update manuell gestartet wurde, vorgeschlagen von Andreas Mair.
fixes:
-- Shiften der Uhrzeit: die Startzeit wird jetzt nur noch dann anstelle des
+- Shiften der Uhrzeit: die Startzeit wird jetzt nur noch dann anstelle des
Fortschrittsbalken angezeigt, wenn in der Menüvorlage nicht bereits eine
Startzeit enthalten ist ("%time%"), so wie in der Standardvorlage. Danke
an Getty@vdrportal für den Hinweis.
- einige Punkte bzgl. GPL korrigiert, Danke an Thomas Günther für den Hinweis.
- Crash behoben bei nicht vorhandenem EPG, Danke an Petri Helin für einen Patch.
-- Der Standardwert für die maximale Dauer ist nun '23:59' um Probleme mit
- externen Tools zu vermeiden, Danke an ralf-naujokat@bugtracker für den
+- Der Standardwert für die maximale Dauer ist nun '23:59' um Probleme mit
+ externen Tools zu vermeiden, Danke an ralf-naujokat@bugtracker für den
Hinweis (bug-id #371)
- bei EPG-Änderungen mit weniger als 10 Minuten hat epgsearch bisher einen Timer
modifiziert anstatt einen neuen anzulegen. Das verursachte jedoch Probleme mit
- Sendungen unter 10 Minuten Länge. Die Toleranz ist deshalb nun
+ Sendungen unter 10 Minuten Länge. Die Toleranz ist deshalb nun
min(<Sendungsdauer>, 10 min). Danke an Janne Liimatainen für den Hinweis.
- einige Übersetzungen korrigiert, Danke an ramirez@vdrportal für den Hinweis.
-- Scrollgeschwindigkeit in den EPG-Menüs verbessert, Danke an ramirez@vdrportal
+- Scrollgeschwindigkeit in den EPG-Menüs verbessert, Danke an ramirez@vdrportal
für den Hinweis.
-- Absturz behoben, wenn SIGINT während des Startens der Background-Threads
+- Absturz behoben, wenn SIGINT während des Startens der Background-Threads
signalisiert wird.
- Kanalgruppen-Separatoren in 'Übersicht Jetzt/Nächste/...' werden nun ausgeblendet,
wenn sie leer sind, wie in ':@30', Danke an Ulf Kiener für einen entspr. Patch.
@@ -242,8 +250,8 @@ fixes:
- Auswertung von Compiler-Flags wie WITHOUT_EPGSEARCHONLY,... korrigiert.
2007-09-02: Version 0.9.23
-neu:
-- unterstützt das neue i18n-System in vdr>=1.5.7, ist aber weiterhin
+neu:
+- unterstützt das neue i18n-System in vdr>=1.5.7, ist aber weiterhin
abwärtskompatibel
- bei den erweiterten EPG-Kategorien kann nun auch wertmäßig verglichen werden,
z.B. um nach Sendungen nach einem bestimmten Jahr zu suchen. Dazu wurden neue
@@ -260,39 +268,39 @@ neu:
<epgsearchcats.conf> in der Dokumentation aufgeführt
- Neuer Schalter "Ignoriere fehlende Kategorien" im Edit-Menü eines Suchtimers
bei den erweiterten EPG-Kategorien: Wenn 'Ja' gewählt ist, verhindert das, dass
- eine Sendung aus dem Suchergebnis ausgeschlossen wird, falls die entsprechende
+ eine Sendung aus dem Suchergebnis ausgeschlossen wird, falls die entsprechende
Kategorie nicht im EPG vorhanden ist. Vorsicht: Ohne weitere Suchkriterien kann
das zu einer Flut von Timern führen.
- Suchtimer können jetzt automatisch gelöscht werden. Im Edit-Menü gibt es dafür:
* nach x Aufnahmen, oder
* nach x Tagen nach erster Aufnahme
gezählt werden nur erfolgreiche Aufnahmen. Das Löschen erfolgt direkt nach dem
- Ende der entsprechenden Aufnahme.
+ Ende der entsprechenden Aufnahme.
- Neue Aktion "Kopie anlegen" im Menü Suche/Aktionen zum Anlegen und Editieren einer
Kopie der aktuellen Suche, vorgeschlagen von Michael Brückner.
- Die Option "Verw. als Suchtimer" hat nun einen dritten Wert 'benutzerdef.' neben
'Ja' und 'Nein', mit dem man über die Taste 'Blau' ein Zeitfenster angeben kann,
in dem der Suchtimer aktiv sein soll. Vorgeschlagen von jo01@vdrportal.
- Der Fortschrittsbalken zeigt nun die Startzeit anstelle eines leeren Balkens
- an, wenn man zu einer noch nicht laufenden Sendung shiftet, Danke an
+ an, wenn man zu einer noch nicht laufenden Sendung shiftet, Danke an
zulu@vdrportal für den Patch.
-- Das Menü "Zeige erstellte Timer" zeigt nun mit 'Ok' die Inhaltsangabe der
+- Das Menü "Zeige erstellte Timer" zeigt nun mit 'Ok' die Inhaltsangabe der
erstellten Timer. Ebenfalls funktionieren die Kurztasten '1..9' für die EPG-
Befehle.
- eingebauter pin-plugin patch (epgsearch muss nicht mehr gepatcht werden)
- Zum Aktivieren bitte mit 'USE_PINPLUGIN' in VDR's Make.config kompilieren
+ Zum Aktivieren bitte mit 'USE_PINPLUGIN' in VDR's Make.config kompilieren
(ist mit VDR extension patch bereits automatisch der Fall)
- eingebauter graphtft-plugin patch (epgsearch muss nicht mehr gepatcht werden)
- Zum Aktivieren bitte mit 'USE_GRAPHTFT' in VDR's Make.config kompilieren
+ Zum Aktivieren bitte mit 'USE_GRAPHTFT' in VDR's Make.config kompilieren
(ist mit VDR extension patch bereits automatisch der Fall)
- Update der finnischen Ãœbersetzung, Danke an Rolf Ahrenberg
- Update der französischen Übersetzung, Danke an Patrice Staudt
fixes:
- Fehler beim Anlegen eines Timers korrigiert, nachdem man durch die Inhalts-
angabe navigiert hat, danke an Rolf Ahrenberg für den Hinweis.
-- Beschriftung "Aufnehmen" bzw. "Timer" im Menü Inhaltsangabe je nach vorhandenem
+- Beschriftung "Aufnehmen" bzw. "Timer" im Menü Inhaltsangabe je nach vorhandenem
Timer korrigiert.
-- Fehler bei Umschalttimern und geändertem EPG behoben, Danke an Juergen Urban
+- Fehler bei Umschalttimern und geändertem EPG behoben, Danke an Juergen Urban
für einen Patch
- einige Compiler-Warnungen in g++-4.2 gefixed, Danke an Michael Brückner für den
Hinweis.
@@ -302,12 +310,12 @@ fixes:
2007-05-27: Version 0.9.22
neu:
-- neue Option in der Timerkonflikt-Prüfung "Beim Beginn einer Aufnahme":
+- neue Option in der Timerkonflikt-Prüfung "Beim Beginn einer Aufnahme":
Dadurch wird beim Start einer Aufnahme eine Konfliktprüfung durchgeführt und
- per OSD über Konflikte informiert, wenn der Konflikt innerhalb der nächsten
- 2h auftritt. Somit werden also auch Timer überwacht, die nicht innerhalb
+ per OSD über Konflikte informiert, wenn der Konflikt innerhalb der nächsten
+ 2h auftritt. Somit werden also auch Timer überwacht, die nicht innerhalb
epgsearch programmiert wurden, ebenso Sofortaufnahmen.
-- Neues Service-Interface "Epgsearch-services-v1.0": Damit können andere
+- Neues Service-Interface "Epgsearch-services-v1.0": Damit können andere
Plugins auf viele Komponenten von epgsearch wie z.B. Suchtimer, Setup-Werte,
... zugreifen, diese verwalten und Aufgaben wie 'Nach Wiederholung suchen'
ausführen (Mehr dazu in services.h).
@@ -319,7 +327,7 @@ fixes:
gation, um Probleme mit Skins zu vermeiden und andere Bugs zu beheben.
- beim Test auf Wiederholungen wird nun auch im Vergleich mit dem Done-File
nur der alphanumerische Teil von Titel und Episode verwendet.
-- weiteres Problem mit Anführungszeichen beim Aufrunf von EPG-Befehlen
+- weiteres Problem mit Anführungszeichen beim Aufrunf von EPG-Befehlen
korrigiert.
- Lizenzänderungen und -ergänzungen für den Einzug ins Debian-Repository
- Fehler in der Zeitanzeige bei benutzerdef. Zeiten in Verbindung mit Zeit-
@@ -329,15 +337,15 @@ fixes:
2007-04-29: Version 0.9.21
neu:
-- Unterstützung für den MainMenuHooksPatch. Dieser löst den
- vdr-replace-schedulemenu-Patch ab. Der neue Patch wird auch von anderen
+- Unterstützung für den MainMenuHooksPatch. Dieser löst den
+ vdr-replace-schedulemenu-Patch ab. Der neue Patch wird auch von anderen
Plugins verwendet. Somit ist dafür nur noch ein Patch notwendig. Der alte
Patch wird vorübergehend ebenfalls noch unterstützt.
-- Die Sendungs-Ankündigungen per OSD wurden vollständig überarbeitet. Statt
+- Die Sendungs-Ankündigungen per OSD wurden vollständig überarbeitet. Statt
einer Anzeige jeder einzelnen Sendung erhält man nun
"x neue Sendungen gefunden! Anzeigen?". Mit 'Ok' wird ein Menü aller Sendungen
eingeblendet, das die üblichen Funktionen anderer EPG-Menüs hat. Mit "Editieren"
- kann man die Ankündigungs-Einstellungen verändern (z.B. "Erneut ankündigen:
+ kann man die Ankündigungs-Einstellungen verändern (z.B. "Erneut ankündigen:
ja/nein" oder erst wieder nach Tag x ankündigen).
- Timer-Konflikt-Benachrichtigungen per OSD können nun während einer Wieder-
gabe unterdrückt werden. Die Benachrichtigung erfolgt aber trotzdem, wenn
@@ -345,7 +353,7 @@ neu:
- alle sub-Plugins (epgsearchonly, quickepgsearch, conflictcheckonly) haben
nun eine Setupoption zum Ein-/Ausschalten des Hauptmenüeintrags. Danke an
Tobias Grimm für den Patch.
-- Kanalname in der Aux-Info von manuellen Timern, Danke an Rolf Ahrenberg
+- Kanalname in der Aux-Info von manuellen Timern, Danke an Rolf Ahrenberg
für den Patch.
- neues Skript undoneepgsearch.sh zum Rücksetzen eines Timers im Aufnahmemenü.
Mehr dazu unter:
@@ -353,11 +361,11 @@ neu:
Danke an den Author Christian Jacobsen
- Update der französischen Übersetzung, Danke an Patrice Staudt.
- Update der finnischen Ãœbersetzung, Danke an Rolf Ahrenberg.
-- Im Menü 'Timer-Konflikt-Details' wird im Titel nun auch das Datum des
+- Im Menü 'Timer-Konflikt-Details' wird im Titel nun auch das Datum des
Konflikts angezeigt, vorgeschlagen von Rusk@vdrportal.
-- Das Passwort für die Mail-Authentifizierung wird im OSD nun versteckt
+- Das Passwort für die Mail-Authentifizierung wird im OSD nun versteckt
angezeigt, d.h. mit '***...'
-- Das Setup für Mail-Benachrichtigungen hat nun auch ein "Senden an"-Feld,
+- Das Setup für Mail-Benachrichtigungen hat nun auch ein "Senden an"-Feld,
weil einige Provider keine Mails mit gleichem Sender/Empfänger akzeptieren.
Falls das Feld nicht besetzt ist, benutzt epgsearch automatisch den Sender
als Empfänger.
@@ -368,16 +376,16 @@ neu:
- '&' zu den erlaubten Zeichen eines Suchbegriffs hinzugefügt
fixes:
- Die Tags in der Aux-Info von Timern, die per Suchtimer erzeugt wurden, sind nun
- XML-konform (keine Großbuchstaben oder Leerzeichen). Z.B. wird aus "Search timer"
- nun "searchtimer". Also nicht wundern, wenn beim ersten Suchtimer-Update alle
+ XML-konform (keine Großbuchstaben oder Leerzeichen). Z.B. wird aus "Search timer"
+ nun "searchtimer". Also nicht wundern, wenn beim ersten Suchtimer-Update alle
Timer aktualisiert werden, die von Suchtimern angelegt wurden. Danke an Rolf
Ahrenberg für den Hinweis.
- Update von recordingdone.sh wegen der vorherigen Änderung, Danke an Mike Constabel
für einen entsprechenden Patch.
- segfault bei falsch konfigurierten erw. EPG-Kategorien behoben.
-- Scrollende Menütexte funktionieren nun wieder, wenn der gewählte Skin das
+- Scrollende Menütexte funktionieren nun wieder, wenn der gewählte Skin das
unterstützt. Danke an ufauser@vdrportal für den Hinweis.
-- Die Setup-Option "Verw. Suchtimer" wird nun automatisch aktiv, wenn ein
+- Die Setup-Option "Verw. Suchtimer" wird nun automatisch aktiv, wenn ein
Suchtimer aktiv gesetzt wird oder ein manuelles Suchtimer-Update gestartet
wird.
- Behandlung von Anführungszeichen in Titel/Untertitel bei Übergabe an benutzerdef.
@@ -397,7 +405,7 @@ neu:
* anhand Sendungskennung
* anhand Kanal/Uhrzeit
Mehr dazu in der README.DE
- (unter 1.4.4 Setup/Timer-Programmierung/Standard-Timer-Prüfmethode)
+ (unter 1.4.4 Setup/Timer-Programmierung/Standard-Timer-Prüfmethode)
- die im Favoritenmenü verwendete Zeitspanne kann jetzt über das Setup
angepaßt werden. Standard sind 24h.
- Sendungs-Ankündigungen: Wenn während der Ankündigung einer Sendung eine der
@@ -405,7 +413,7 @@ neu:
Ankündigungen vollständig (bei den Tasten '0' oder 'Ok') oder nur für die
nächsten x Tage (bei den Tasten '1' bis '9') unterdrückt werden
sollen. Bestätigt man diese Abfrage durch ein erneutes 'Ok', wird die
- Einstellung entsprechend übernommen.
+ Einstellung entsprechend übernommen.
- Mit der neuen Setup-Option "Keine Ankündigungen bei Wiedergabe" können
Ankündigungen von Sendungen während einer Wiedergabe nun abgeschaltet werden.
Vorgeschlagen von Andreas Mair.
@@ -419,7 +427,7 @@ neu:
- neues Zusatzplugin 'quickepgsearch': Dieses erstellt einen Hauptmenüeintrag
"Schnellsuche", der dazu dient einfach nach einem beliebigen Begriff im EPG
zu suchen. Mit '-Pquickepgsearch' einbinden. Vorgeschlagen von
- SurfaceCleanerZ@vdrportal.
+ SurfaceCleanerZ@vdrportal.
- neue Setup-Option "Kanäle begrenzen von 1 bis" zur Beschleunigung von
epgsearch's Aufruf. Ist der aktuelle Kanal über dem Limit werden alle Kanäle
angezeigt. Vorgeschlagen von Uwe@vdrportal.
@@ -448,15 +456,15 @@ neu:
- Danke an Rolf Ahrenberg für das Update der finnischen Übersetzung
fixes:
- manuell programmierte Timer werden durch Suchtimer nun weder gelöscht noch
- geändert.
+ geändert.
- das Zusatzplugin conflictcheckonly wurde kompiliert auch wenn
WITHOUT_CONFLICTCHECKONLY im Makefile gesetzt war, Danke an Ronny Kornexl
für den Hinweis.
- Für Suchbegriff und Verzeichnis gibt es nun auch die Zeichen 'ß' (nur bei
- Sprache Deutsch) und '@'.
+ Sprache Deutsch) und '@'.
- Bei Verwendung von 'Wiederholung verm.' war es in bestimmten Fällen möglich,
dass nicht die Erstausstrahlung, sondern eine Wiederholung programmiert
- wurde.
+ wurde.
- Eine Suche mit "Verw. Wochentag" UND "Verw. Uhrzeit", bei der "Start vor:"
nach Mitternacht liegt, findet nun auch Sendungen des nächsten Tages bis
"Start vor:", z.B. "Start nach 22:00" und "Start vor 03:00" am Montag findet
@@ -476,15 +484,15 @@ fixes:
ursprünglich angelegt hat.
- neue Variablen:
* '%search.query%' für die Verwendung im Aufnahmeverzeichnis eines
- Suchtimers. Diese wird mit dem Suchbegriff eines Suchtimers ersetzt.
+ Suchtimers. Diese wird mit dem Suchbegriff eines Suchtimers ersetzt.
* '%videodir%' VDR Videoverzeichnis (z.B. /video)
* '%plugconfdir%' VDR plugin Konfigurationsverzeichnis
- (z.B. /etc/vdr/plugins)
+ (z.B. /etc/vdr/plugins)
* '%epgsearchdir%' epgsearchs Konfigurationsverzeichnis
- (z.B. /etc/vdr/plugins/epgsearch)
+ (z.B. /etc/vdr/plugins/epgsearch)
- die Syntax des 'system'-Kommandos innerhalb einer Uservariable hat sich
geändert, um die Parameter flexibler übergeben zu können. Sie lautet nun:
- %uservar%=system(/path/to/script[, parameters])
+ %uservar%=system(/path/to/script[, parameters])
wobei das optionale 'parameters' ein beliebiger Ausdruck unter Verwendung
weiterer Uservariablen sein kann. Ausnahme: es dürfen nicht direkt weitere
system-Calls oder bedingte Ausdrücke verwendet werden.
@@ -495,7 +503,7 @@ fixes:
verändert hat.
- nach Änderungen im Setup wurden Menü-Templates aus epgsearchmenu.conf wieder
auf den Standard zurückgesetzt, Danke an s.krueger@vdrportal für den
- Hinweis.
+ Hinweis.
- vorhandene VDR-Wiederholungstimer werden durch das Suchtimer-Update nicht
mehr zu normalen Timern abgeändert.
@@ -518,7 +526,7 @@ neu:
der Lieblingssendungen der nächsten 24h zeigen. Dazu zunächst im Setup
'Zeige Favoriten-Menü' aktivieren. Um epgsearch zu sagen, was die
Lieblingssendungen sind, dann Suchen anlegen/editieren und dort 'In
- Favoritenmenü verw.' auswählen.
+ Favoritenmenü verw.' auswählen.
- neue Setup-Option für den Timer-Konflikt-Check: 'Nach jeder
Timer-Programmierung'. Das bewirkt eine Konfliktprüfung nach jeder manuellen
Timer-Programmierung und erzeugt sofort eine OSD-Nachricht, falls der
@@ -526,7 +534,7 @@ neu:
- neue Email-Benachrichtigungen über Suchtimer-Updates oder
Timer-Konflikte. Der Inhalt der Mails kann beliebig gestaltet werden. Bitte
im MANUAL-Abschnitt 'Email notification' für weitere Details nachlesen.
-- epgsearch hat jetzt einen Satz von man-Pages. Ein GROSSES Danke an Mike
+- epgsearch hat jetzt einen Satz von man-Pages. Ein GROSSES Danke an Mike
Constabel (vejoun@vdrportal), der die ganze Arbeit des Umschreibens,
Korrigierens und Formattieren gemacht hat. Die man-Pages enthalten die
README's, das MANUAL, sowie eine Beschreibung aller conf's, die epgsearch
@@ -534,10 +542,10 @@ neu:
epgsearch-src-Verzeichnis einrichten.
- man kann jetzt eigene Variablen definieren um diese im
Standard-Aufnahme-Verzeichnis, im Suchtimer-Aufnahme-Verzeichnis oder in den
- Menü-Templates zu verwenden. Nachdem das Ganze etwas komplex ist, bitte den
+ Menü-Templates zu verwenden. Nachdem das Ganze etwas komplex ist, bitte den
Abschnitt 'User defined variables' im MANUAL lesen. Hier nur ein Beispiel was
möglich ist:
- # Weekday, Date, Time
+ # Weekday, Date, Time
%DateStr%=%time_w% %date% %time%
# Themes or Subtitle or Date
%ThemesSubtitleDate1%=%Subtitle% ? %Subtitle% : %DateStr%
@@ -549,10 +557,10 @@ neu:
wird anstelle der Anzeige der Inhaltsanzeige. Vorschlag von malachay@vdrportal
- wenn ein Timer von einem Suchtimer erzeugt wurde, wird nun in epgsearch's
eigenem Timer-Edit-Menü der Name der Suche am Ende in einem nicht
- selektierbaren Feld angezeigt.
+ selektierbaren Feld angezeigt.
- wenn eine Sendung via Suchtimer angekündigt wird, kann man nun dafür einen
Timer erzeugen, wenn man während der Ankündigung die rote Taste drückt,
- vorgeschlagen von Andreas Mair.
+ vorgeschlagen von Andreas Mair.
- Wenn Suchtimer im Setup abgeschaltet sind, dann bewirkt ein Anlegen/Ändern
eines Suchtimers nun auch eine automatische Aktivierung im Setup,
vorgeschlagen von Andreas Mair.
@@ -561,7 +569,7 @@ neu:
- die Prüfung auf Vollständigkeit einer Aufnahme erlaubt nun auch kurze
Unterbrechungen (unter 2s, z.B. bei einem Kanal-PID-Wechsel).
- neue SVDRP-Befehle:
- * LSTC [channel group name]
+ * LSTC [channel group name]
zeigt alle Kanalgruppen an oder nur die optional angegebene
* NEWC <channel group settings>
erstellt eine neue Kanalgruppe, Format wie in epgsearchchangrps.conf
@@ -573,7 +581,7 @@ neu:
benennt eine Kanalgruppe um
* LSTB [ID] zeigt alle Ausschlusslisten an, oder nur diejenige mit der
angegebenen ID (Format ist dasgleiche wie in epgsearchblacklists.conf,
- s. MANUAL)
+ s. MANUAL)
* NEWB <settings> zum Anlegen einer neuen Blacklist
Anmerkung: der Wert ID wird ignoriert und von epgsearch automatisch vergeben.
* DELB <ID> zum Löschen einer Blacklist mit der angegebenen ID
@@ -585,20 +593,20 @@ neu:
Werten zurück.
* 'QRYF [hours]' liefert die Ergebnisse des Favoriten-Menüs (s. MANUAL). Der
optionale Parameter gibt die Anzahl der auszuwertenden Stunden
- an. Standardwert ist 24h.
+ an. Standardwert ist 24h.
* 'LSTE [ID] liefert die erweiterten EPG-Kategorien, wie sie in
epgsearchcats.conf definiert sind, oder nur diejenige mit der angegebenen
- ID.
+ ID.
* 'MODS ID ON|OFF' schaltet die Option 'als Suchtimer verw.' ein/aus.
* 'SETP option' liefert den aktuellen Wert einer Setup-Option (s. MANUAL).
- epgsearch hat jetzt ein Bug-Tracking-System (deutsch) und eine Mailinglist
- (englisch):
+ (englisch):
http://www.vdr-developer.org/mantisbt
http://www.vdr-developer.org/mailman/listinfo/epgsearch
- Danke an die Betreiber von developer.org
+ Danke an die Betreiber von developer.org
- neues Service-Interface "Epgsearch-switchtimer-v1.0" zum Zugriff und zur
Verwaltung der Umschaltlisten (switch timer). Danke an Dirk Leber für die
- Erweiterung.
+ Erweiterung.
- Update für die französische Übersetzung (mit Setup-Hilfe!), Danke an Patrice
Staudt
- Danke an Rolf Ahrenberg für das Update der finnischen Übersetzung
@@ -610,17 +618,17 @@ fixes:
- Behandlung des Zeichens '|' beim Wechsel des Suchmodus einer Suche
korrigiert, Danke an Chello@vdrportal für den Hinweis
- einige Suchmodi in den epgsearchcats.conf-Beispielen für die Mehrfachauswahl
- geändert.
+ geändert.
- zusätzliche Linefeeds in der SVDRP-Antwort von LSTS entfernt, Danke an
Andreas Mair für den Hinweis
- Kanal-Kriterium 'ohne Pay-TV' wurde ignoriert, Danke an Andreas Mair für den
- Hinweis
+ Hinweis
- Min/Max-Initial-Werte für Suchkriterium "Dauer" korrigiert, Danke an Mike
Constabel für den Hinweis
- einen Bug bei der Auswahl der Konfliktprüfung nach jedem Suchtimer-Update
behoben, Danke an Ronny Kornexl für den Hinweis
- '--remove-destination' ins Makefile integriert, wie in vdr-1.4.2-3
- eingeführt.
+ eingeführt.
2006-08-07: Version 0.9.17d (maintenance release)
fixes:
@@ -644,7 +652,7 @@ fixes:
2006-06-06: Version 0.9.17a (bug fix release)
- Menü 'Timer-Konlfikte' wurde automatisch geschlossen, wenn
Wiederholungstimer existierten, Danke an lostinspc@vdrportal
-- einige Compiler-Probleme mit gcc-2.95 und gcc-4.1.0 behoben, Danke an
+- einige Compiler-Probleme mit gcc-2.95 und gcc-4.1.0 behoben, Danke an
ferdi03@vdrportal, smudo81@vdrportal, toxic-tonic@vdrportal
2006-06-05: Version 0.9.17
@@ -652,7 +660,7 @@ fixes:
- Die Logik beim Springen durch die benutzerdef. EPG-Zeiten hat sich geändert:
Es können jetzt auch Zeiten des nächsten Tages erreicht werden, wenn diese
nicht mehr als 20 Stunden in der Zukunft liegen. Danke an egal@vdrportal und
- CKone@vdrportal.
+ CKone@vdrportal.
- epgsearch hat jetzt einen eigenen Timer-Konflikt-Check, der über das Setup
angepasst werden kann. Einstellbar sind relevante Prioritäten, die
Zeitspanne der Prüfung und die relevante Dauer eines Konflikts. Begleitet
@@ -660,7 +668,7 @@ fixes:
bei der Auflösung von Konflikten hilft. Vielen Dank an Mike Constabel für
seine ausführlichen Tests.
- Falls über einen Konflikt per OSD eine Nachricht erfolgt, kann nun mit 'Ok'
- direkt in die Konflikt-Ãœbersicht des Konflikt-Managers gewechselt werden.
+ direkt in die Konflikt-Ãœbersicht des Konflikt-Managers gewechselt werden.
- Falls jemand für die Konfliktprüfung einen eigenen Hauptmenü-Eintrag opfern
will, kann dazu das Mini-Plugin 'conflictcheckonly' verwenden, das
automatisch mitkompiliert wird. Wie üblich mit '-Pconflictcheckonly'
@@ -683,14 +691,14 @@ fixes:
- epgsearchmenu.conf wird nun nicht mehr bei jedem Plugin-Aufruf neu geladen,
weil das nur zum Testen eines conf-Files sinnvoll ist. Um das permanente
Neuladen trotzdem zu aktivieren, kann man als Plugin-Parameter '-r' oder
- '--reloadmenuconf' in der runvdr angeben.
+ '--reloadmenuconf' in der runvdr angeben.
- Danke an Rolf Ahrenberg für das Update der finnischen Übersetzung
- HISTORY.DE hinzugefügt
fixes:
- Beim Laden der epgsearchmenu.conf wird im Fehlerfall nun auf ein
- Default-Menü geschaltet.
+ Default-Menü geschaltet.
- Behandlung von '%' in LSTS für SVDRP bei vdr > 1.3.44 korrigiert, Danke an
- Mike Constabel
+ Mike Constabel
- Rechtzeitiges Laden der epgsearchmenu.conf für epgsearchonly und das
Service-Interface "Epgsearch-searchmenu-v1.0", Danke an Daniel Dorau für den
Hinweis.
@@ -715,10 +723,10 @@ neu:
MenuWhatsOnNow=%chnr%:3|%progrt2s%:5| %time% %t_status%:8|%category%:6| %title% ~ %subtitle%:35
- im Menü 'Übersicht Jetzt' Einträge die mit der Kanalnummer beginnen, gefolgt von einem Fortschrittsbalken
+ im Menü 'Übersicht Jetzt' Einträge die mit der Kanalnummer beginnen, gefolgt von einem Fortschrittsbalken
im text2skin-Stil, der Startzeit, dem Timerstatus, der EPG-Kategorie (z.B. 'Spielfilm') sowie schließlich Titel
und Untertitel.
- Jedes Menü ('Übersicht Jetzt', 'Nächste', benutzerdef. Zeiten, 'Programm' und 'Suchergebnisse' kann mit einer
+ Jedes Menü ('Übersicht Jetzt', 'Nächste', benutzerdef. Zeiten, 'Programm' und 'Suchergebnisse' kann mit einer
eigenen Zeile angepaßt werden. Weitere Infos dazu im MANUAL.
- WICHTIGE Änderung bei Suchtimern: epgsearch entfernt nun Timer, die nicht mehr notwendig sind (ab vdr >= 1.3.44).
@@ -728,9 +736,9 @@ neu:
* Timers, bei denen die Suchkriterien nicht mehr stimmen, z.B. nach Änderung im Suchtimer. Derartige Timer müssen
also nicht mehr manuell gelöscht werden.
Ausnahme: Timer, deren Start/Stop-Zeit manuell geändert wurde. Diese werden nicht gelöscht oder verändert.
-- Neuer Such-Modus 'unscharf': Damit wird eine 'Fuzzy'-Suche durchgeführt, die einen Algorithmus verwendet, wie er
+- Neuer Such-Modus 'unscharf': Damit wird eine 'Fuzzy'-Suche durchgeführt, die einen Algorithmus verwendet, wie er
auch bei agrep benutzt wird. Die Fehler-Toleranz kann im Feld 'Toleranz' eingestellt werden.
-- Neue Setup-Option "Timer mit 'Aufnehmen' sofort anlegen", wie in vdr-1.3.38 eingeführt. Bei Drücken von 'Aufnehmen'
+- Neue Setup-Option "Timer mit 'Aufnehmen' sofort anlegen", wie in vdr-1.3.38 eingeführt. Bei Drücken von 'Aufnehmen'
wird damit sofort ein Timer angelegt. Kleine Abweichung zur VDR-Logik: Wenn die Sendung bereits läuft oder innerhalb
der nächsten Vorlauf-Puffer-Minuten +2 beginnt, wird trotzdem das Timer-Edit-Menü angezeigt, damit man noch Änderungen
z.B. beim Verzeichnis vornehmen kann, was bei einer lfd. Aufnahme ja nicht mehr geht. Die ganze Logik kann per Setup
@@ -742,9 +750,9 @@ neu:
- Der Standard-Menü-Eintrag lautet jetzt nicht mehr 'Suche' sondern 'Programmführer'
- einige Leute wollten einen eigenen Hauptmenü-Eintrag für epgsearch's Suchen-Menü. Deshalb gibt's nun ein Mini-Plugin
names 'epgsearchonly' das einfach dieses Menü aufruft. Sein Hauptmenu-Eintrag lautet 'Suche'. Übersetzt wird es automatisch
- mit epgsearch. Man kann das aber auch im Makefile abschalten, indem man
+ mit epgsearch. Man kann das aber auch im Makefile abschalten, indem man
#WITHOUT_EPGSEARCHONLY=1 auskommentiert. Zur Verwendung einfach '-P epgsearchonly' ins VDR-Startskript eintragen
- (ab vdr-1.3.30)
+ (ab vdr-1.3.30)
- Neues Service-Interface "Epgsearch-searchmenu-v1.0" um epgsearch's Suchmenu aufzurufen (genau das macht epgsearchonly ;-) )
- Neue Aktion 'Erstellte Timer löschen?' um alle Timer eines Suchtimers zu entfernen. Betrifft nicht aufnehmende Timer.
- Beim Löschen einer Suche erfolgt nun eine Abfrage, ob alle zugehörigen Timer ebenfalls gelöscht werden sollen.
@@ -753,24 +761,24 @@ neu:
- Eine Sendung, die gerade aufgenommen wird, hat in den EPG-Menüs nun ein 'R' statt eines 'T'.
- Unterstützung des wareagle-icon-patch (kann in der epgsearchmenu.conf mit 'WarEagleIcons=1' aktiviert werden)
- Fortschrittsbalken in Jetzt/Nächste 'verschönert' (bei Verwendung der Setup-Option 'graphisch'),
- angelehnt an Nordlichts-EPG-Plugin
+ angelehnt an Nordlichts-EPG-Plugin
- Neue Setup-Option um Radio-Kanäle in den EPG-Menüs zu unterdrücken, vorgeschlagen von Patrice Staudt.
-- Neues Service-Interface "Epgsearch-searchresults-v1.0", das die Suchergebnisse einer übergebenen Suche zurückliefert,
+- Neues Service-Interface "Epgsearch-searchresults-v1.0", das die Suchergebnisse einer übergebenen Suche zurückliefert,
vorgeschlagen von Andreas Brugger
-- Damit das Setup nicht platzt, wurden einige Optionen entfernt, weil diese mit dem konfigurierbaren Menü nun genauso machbar
+- Damit das Setup nicht platzt, wurden einige Optionen entfernt, weil diese mit dem konfigurierbaren Menü nun genauso machbar
sind:
* "Zeige Fortschrittsbalen in 'Nächste', default ist 'nein'
* "Anzeigenbreite für Fortschrittsbalken", default ist 4
* "Zeige kurze Kanalnamen", default ist 'ja'
* "Zeige Untertitel in EPG-Menüs', default ist 'ja'
- Update der finnischen Ãœbesetzung, Danke an Rolf Ahrenberg
-- Das Aux-Feld eines Timers wird nun komplett im XML-Stil gefüllt (ab vdr-1.3.44). Deshalb gibt es auch ein Update für die
+- Das Aux-Feld eines Timers wird nun komplett im XML-Stil gefüllt (ab vdr-1.3.44). Deshalb gibt es auch ein Update für die
recordingdone.sh im 'scripts'-Unterverzeichnis. Danke an Mike Constabel für den Patch des Skripts.
- Das Suchtimer-Update läuft nun immer mit niedriger Priorität, vorgeschlagen von Christian Jacobsen
-- neues SVDRP-Kommando 'FIND'. Damit kann ein Sendung gesucht werden. Zurückgeliefert wird eine Ergebnisliste bestehend aus
+- neues SVDRP-Kommando 'FIND'. Damit kann ein Sendung gesucht werden. Zurückgeliefert wird eine Ergebnisliste bestehend aus
'NEWT'-Zeilen, die somit direkt zum Programmieren des Timers verwendet werden können. Vorgeschlagen ovn Lari Tuononen.
fixes:
-- Danke an Darren Salt für einige Patches im Zusammenhang mit g++ 4.1, Thread safeness und code review
+- Danke an Darren Salt für einige Patches im Zusammenhang mit g++ 4.1, Thread safeness und code review
- einige Speicherlecks geflickt.
- Korrektur für Aufruf von benutzerdef. EPG-Befehlen, Danke an rzndl@vdrportal
- Korrektur für blacklist-Suche bei Suchtimern, Danke an Christian Jacobsen
@@ -790,12 +798,12 @@ neu:
- Die Inhaltsangabe eines Eintrags im Menü 'Erledigte Aufnahmen' hat nun einen zusätzlichen Button
'Zusatzinfo', der den Inhalt des Aux-Feld (in vdr-1.3.44 eingeführt) anzeigt, falls verfügbar.
- Update für das Skript recordingdone.sh, funktioniert nun auch mit vdr-1.3.44, Danke an Mike Constabel
- für die Anpassungen.
-- Konvertierungsskripts für das Upgrade auf vdr-1.3.44: Aufgrund der geänderten Behandlung der
+ für die Anpassungen.
+- Konvertierungsskripts für das Upgrade auf vdr-1.3.44: Aufgrund der geänderten Behandlung der
Zusatzinfos in der Inhaltsangabe (summary -> aux) funktionieren einige Suchtimer-Features nicht mit
Aufnahmen die vor dem Umstieg auf vdr-1.3.44 gemacht wurden. Das betrifft das done-Feature und das
- automatische Löschen von Aufnahmen. Wer die Skripts nicht anwendet, hat einfach einige überflüssige
- Aufnahmen mehr ;-). Muss also nicht unbedingt gemacht werden, aber mit den Skripts läuft alles wie
+ automatische Löschen von Aufnahmen. Wer die Skripts nicht anwendet, hat einfach einige überflüssige
+ Aufnahmen mehr ;-). Muss also nicht unbedingt gemacht werden, aber mit den Skripts läuft alles wie
gewohnt. Danke an Mike Constabel, der die Skripts gebaut hat.
* neues Skript convert_info_vdr.pl. Dieses konvertiert das Info-File von Aufnahmen und verschiebt die
Zusatzinfo von epgsearch in das aux-Feld.
@@ -805,10 +813,10 @@ neu:
- Update der französischen Übersetzung, Danke an Patrice Staudt
- Update der finnischen Ãœbersetzung, Danke an Rolf Ahrenberg
fixes:
-- Das done-Feature funktioniert nun auch mit vdr-1.3.44, Danke an Mike Constabel
+- Das done-Feature funktioniert nun auch mit vdr-1.3.44, Danke an Mike Constabel
- fix für hohe CPU-Last durch Suchtimer-Thread im 30sek-Abstand, Danke an sledgehammer@vdrportal
- Das automatische Verlinken des Tarballs wurde wieder entfernt, gewünscht von Distri-Maintainern
-- einige Compiler-Warnings gefixed bei Verwendung von -Wformat=2, Danke an Darren Salt für den Hinweis und
+- einige Compiler-Warnings gefixed bei Verwendung von -Wformat=2, Danke an Darren Salt für den Hinweis und
einen Patch
2006-02-28: Version 0.9.13
@@ -822,11 +830,11 @@ neu:
und legt die Sendungen fest, die in einer Suche oder einem Suchtimer ignoriert werden sollen.
Ausschlusslisten können im Setup oder in der neuen Such-Aktion 'Ausschlusslisten anzeigen' sowie
direkt beim Editieren einer Suche verwaltet werden. In der Suche selbst können eine, mehrere oder
- alle Ausschlusslisten ausgewählt werden. Falls ein Suchergebnis auch in einer der gewählten
+ alle Ausschlusslisten ausgewählt werden. Falls ein Suchergebnis auch in einer der gewählten
Ausschlusslisten enthalten ist, wird es ignoriert.
- Der Hintergrund-Thread für die Umschalttimer läuft jetzt nur noch, wenn auch ein Umschalttimer aktiv ist.
- Beim entpacken des tar-Files wird der Link zu epgsearch-x.x.x nun automatisch erzeugt (wie bei text2skin)
-- Die Ergebnisliste bei "Wiederholungen anzeigen" zeigt nun nicht mehr auch die laufende Sendung an,
+- Die Ergebnisliste bei "Wiederholungen anzeigen" zeigt nun nicht mehr auch die laufende Sendung an,
Vorschlag von Ronny Kornexl
- Danke fürs Betatesten an Mike Constabel
- Danke fürs Update der finnischen Übersetzung an Rolf Ahrenberg
@@ -835,8 +843,8 @@ fixes:
2006-02-12: Version 0.9.12
neu:
-- Neues Feature 'Pause, wenn ... Aufnahmen exist." für Suchtimer. Sobald die
- angegebene Anzahl (>0) von Aufnahmen existiert, erzeugt epgsearch keine
+- Neues Feature 'Pause, wenn ... Aufnahmen exist." für Suchtimer. Sobald die
+ angegebene Anzahl (>0) von Aufnahmen existiert, erzeugt epgsearch keine
weiteren Timer mehr für diesen Suchtimer. Erst wenn eine oder mehrere Auf-
nahmen gelöscht wurden, werden erneut Timer angelegt.
fixes:
@@ -860,7 +868,7 @@ neu:
werden diese in die Umschaltliste aufgenommen. Es wird kein echter Timer erzeugt.
- Suchkriterium 'Verwende Kanal' hat nun einen weiteren Wert 'nur FTA', um die Suche
auf alle nicht verschlüsselten Programme einzuschränken.
-- Neue Setup-Option 'Zeige Tagesseparatoren', zur Anzeige von Trennlinien zwischen
+- Neue Setup-Option 'Zeige Tagesseparatoren', zur Anzeige von Trennlinien zwischen
den Tagen im Menu Programm
- epgsearch hat jetzt ein SVDRP-Interface mit folgenden Befehlen
(ab vdr > 1.3.30):
@@ -875,7 +883,7 @@ neu:
* 'UPDD' zum Nachladen der epgsearchdone.data in den Speicher, z.B. nach einer Änderung
durch ein externes Tool
* 'SETS <ON|OFF>' zum Ein-/Ausschalten der Suchtimersuche im Hintergrund
-- weil das Setup allmählich zu groß wird, gibt es dort jetzt die Modi "Standard" und
+- weil das Setup allmählich zu groß wird, gibt es dort jetzt die Modi "Standard" und
"Erweitert" (umschaltbar über Taste rot), vorgeschlagen von Rolf Ahrenberg
- Update der finnischen Ãœbersetzung, Danke an Rolf Ahrenberg
- Update der italienischen Ãœbersetzung, Danke an Reelbox User
@@ -885,8 +893,8 @@ neu:
vorgeschlagen von Thiemo Gehrke
- neues Skript recordingdone.sh für die reccmds.conf, um eine Aufnahme als erlegigt zu
kennzeichnen (für epgsearch's done-Feature), Danke an Patrice Staudt, Christian Jacobsen
- und Mike Constabel
-- neues Skript mtdone2epgsearchdone.sh zur Ãœbernahme von erledigten Aufnahmen von
+ und Mike Constabel
+- neues Skript mtdone2epgsearchdone.sh zur Ãœbernahme von erledigten Aufnahmen von
mastertimer in epgsearch's done-Datei, Danke an Christian Jacobsen.
- Danke an Mike Constabel und Andreas Brugger fürs Testen und die Bug Reports
fixes:
@@ -902,10 +910,10 @@ neu:
- Im Timer-Edit-Menu von epgsearch (Setup-Einstellung beachten!) wird nun bei
einer laufenden Aufnahme angezeigt, über welche Karte der Timer aufnimmt
- Neue Setup-Option: 'Untertitel in manuellen Timern'
- Betrifft das autom. Ergänzen des Untertitels bei einem manuell angelegten
- Timer. Die Einstellung 'intelligent' verwirft den Untertitel, falls die
+ Betrifft das autom. Ergänzen des Untertitels bei einem manuell angelegten
+ Timer. Die Einstellung 'intelligent' verwirft den Untertitel, falls die
Sendung länger als 80min ist. Ist noch nicht sooo intelligent ;-)
-- Das Menü zum Editieren der Suche wurde für zukünftige Erweiterungen
+- Das Menü zum Editieren der Suche wurde für zukünftige Erweiterungen
geändert: 'Aktion' bestimmt nun, was mit den Suchergebnissen gemacht werden
soll, im Moment gibts 'Aufnehmen' als Standard und 'Nur Ankündigen'
- Danke an Rolf Ahrenberg für das Update der finnischen Übersetzung
@@ -922,12 +930,12 @@ neu:
definiert werden, wodurch deren Einträge beim Anlegen einer Suche auto-
matisch übernommen werden.
- Setup um 'Suchvorlagen' erweitert (zur Verwaltung der Vorlagen)
-- Neue Aktion 'Als Vorlage verwenden', um eine Suche in die Vorlagen zu
+- Neue Aktion 'Als Vorlage verwenden', um eine Suche in die Vorlagen zu
kopieren
- Neue Setup-Option, um die Anzeige der Untertitel in der Ãœbersicht zu steuern,
danke an Darren Salt für den Patch
-- Erweiterung des Features 'Aufnahmen nach ... Tagen löschen' um 'Erhalte
- ... Aufnahmen'. Dadurch werden die letzten x Aufnahmen immer erhalten, auch
+- Erweiterung des Features 'Aufnahmen nach ... Tagen löschen' um 'Erhalte
+ ... Aufnahmen'. Dadurch werden die letzten x Aufnahmen immer erhalten, auch
wenn diese bereits das Zeitlimit überschritten haben.
fixes:
- Das Feature 'Aufnahmen nach ... Tagen löschen' hat auch editierte/ge-
@@ -937,21 +945,21 @@ fixes:
2005-11-27: Version 0.9.8
neu:
ACHTUNG!: diese Version konvertiert die epgsearch.conf (die Datei, in der
- die Sucheinträge gespeichert werden) in ein NEUES FORMAT. Es wird ein
+ die Sucheinträge gespeichert werden) in ein NEUES FORMAT. Es wird ein
Backup der alten Datei unter epgsearch.conf.bak angelegt.Geht man also auf
eine alte Version zurück, muss das Backup nach epgsearch.conf zurückkopiert
werden.
- Neues Feature 'Wiederholungen vermeiden' (aka done-Feature) für Suchtimer
(bitte die README.DE vor dem ersten Gebrauch lesen!). Ein besonderer Dank an
Mike Constable (vejoun@vdrportal) für viele viele Test-Stunden und Bug-
- Reports.
+ Reports.
* Vorschau von geplanten Timern
* Erkennung unvollständiger Aufnahmen
* Fuzzy-Vergleich von Sendungen
- Das Menü der Suchergebnisse hat bei Suchtimern mit 'Wiederh. vermeiden' nun
eine zusätzliche Belegung für die Taste 'Blau', um sich die geplanten Timer
anzeigen zu lassen, die mit dem nächsten Suchtimer-Update programmiert werden.
-- Neue Setup-Option zur Anzeige von Sendern ohne EPG in 'Was läuft jetzt?',
+- Neue Setup-Option zur Anzeige von Sendern ohne EPG in 'Was läuft jetzt?',
Idee von 'Nordlicht's EPG plugin' übernommen
- Neue Setup-Option 'Zeige Kanal-Separatoren' in 'Was läuft jetzt?'
Idee von 'Nordlicht's EPG plugin' übernommen
@@ -959,7 +967,7 @@ ACHTUNG!: diese Version konvertiert die epgsearch.conf (die Datei, in der
nahmen nach den eingestellen Tagen automatisch gelöscht. Praktisch z.B. für
Nachrichtensendungen wie Tagesschau, die nur für einige Tage interessieren.
- Die Inhaltsangabe von Timern (über ok im Timermenu), die epgsearch erzeugt hat,
- enthalten nun zusätzliche Infos: Titel und Untertitel (falls vorhanden) am
+ enthalten nun zusätzliche Infos: Titel und Untertitel (falls vorhanden) am
Anfang, sowie Name und ID des Suchtimers und den Sender am Ende
- Die Inhaltsangabe von manuell programmierten Timern enthält nun:
Titel und Untertitel (falls vorhanden) am Anfang, sowie Sender am Ende
@@ -968,7 +976,7 @@ ACHTUNG!: diese Version konvertiert die epgsearch.conf (die Datei, in der
* 'Als Suchtimer verwenden' an/aus
* Suchtimer-Update ausführen
* Erledigte Aufnahmen anzeigen
- Es können natürlich genauso die Tasten als Abkürzung verwendet werden, ohne
+ Es können natürlich genauso die Tasten als Abkürzung verwendet werden, ohne
das Menu aufzurufen. '0' ruft das Menü auf.
- Einführung eines Logfiles (Standard ist plugin-configdir/epgsearch.log, kann
aber über den Startparameter '-l /path/to/logfile' geändert werden. Der Para-
@@ -977,34 +985,34 @@ ACHTUNG!: diese Version konvertiert die epgsearch.conf (die Datei, in der
- Im Setup gibts nun ein Standard-Aufnahmeverzeichnis, das beim manuellen Pro-
grammieren von Timern vorgegeben wird. Unterstützt werden auch Einträge der
Form '%Category%~%Genre%'.
-- abhängig vom aufrufenden Menu sind nun die Tasten 'Grün/Geld' im Event-Menu
+- abhängig vom aufrufenden Menu sind nun die Tasten 'Grün/Geld' im Event-Menu
(also der Inhaltsangabe) nun mit dem vorh./nächsten Sender bzw. der vorh./
nächsten Startzeit beschriftet, danke an Andreas Brugger (brougs78@vdrportal)
-- Sendernummern werden nun auch im Menü Suchergebnisse gelistet, falls die
- Option im Setup geschaltet ist, danke an Gerhard Steiner (gestein@vdrportal).
+- Sendernummern werden nun auch im Menü Suchergebnisse gelistet, falls die
+ Option im Setup geschaltet ist, danke an Gerhard Steiner (gestein@vdrportal).
- Kurztasten (1,2,...) für EPG-Befehle sind nun auch im Menu der Inhaltsangabe
verfügbar, danke an Frank Krömmelbein (frank99@vdrportal)
- Ab VDR version >= 1.3.31 kann im Setup nun eingestellt werden, ob man für die
manuelle Timerprogrammierung das Timer-Editmenü von epgsearch oder von VDR ver-
wenden will.(evtl. sinnvoll, wenn man einen gepatchten VDR benutzt). Danke an
- Frank Krömmelbein (frank99@vdrportal)
+ Frank Krömmelbein (frank99@vdrportal)
- Falls ein Untertitel existiert wird er beim manuellen Timer-Programmieren nun
- automatisch ans Verzeichnis angehängt. Danke an Gerhard Steiner
+ automatisch ans Verzeichnis angehängt. Danke an Gerhard Steiner
(gestein@vdrportal)
- Aufteilung von Verzeichnis und File beim erneuten Bearbeiten von Timern opti-
miert, Danke Andreas Brugger (brougs78@vdrportal)
- In den Hauptmenus werden Untertitel nun immer angezeigt, in der Form 'Titel ~
- Untertitel', falls vorhanden
-- Neue service-Funktion 'Epgsearch-updatesearchtimers-v1.0' zum Aufruf eines
+ Untertitel', falls vorhanden
+- Neue service-Funktion 'Epgsearch-updatesearchtimers-v1.0' zum Aufruf eines
Suchtimer-Updates
- Falls ein Suchtimer-Update über das Aktionenmenu aufgerufen wird, gibt es nun
- im OSD eine Nachricht, sobald das Update fertig ist. (Ebenso bei Verwendung von
+ im OSD eine Nachricht, sobald das Update fertig ist. (Ebenso bei Verwendung von
des Services 'Epgsearch-updatesearchtimers-v1.0'
- Das Such-Menü zeigt nun die Anzahl der (aktiven) Suchen im Titel an
- Danke an Rolf Ahrenberg für die Aktualisierung der finnischen Übersetzung.
- Danke an Mike Constabel für die Überarbeitung der READMEs und des MANUALs.
fixes:
-- epgsearch springt nun zum Hauptmenu zurück, falls es nicht über eine Kurztaste
+- epgsearch springt nun zum Hauptmenu zurück, falls es nicht über eine Kurztaste
aufgerufen wurde. Danke an Andreas Brugger (brougs78@vdrportal)
- Eingabe von Suchbegriffen bei englischem OSD korrigiert
- Sortierung von Suchtimern nach dem Editieren einer Suche korrigiert, Danke an
@@ -1027,7 +1035,7 @@ fixes:
neu:
- Suchkriterium 'Verw. Kanal' um 'Kanalgruppen' erweitert. Diese Kanalgruppen können über ein eigenes Menu verwaltet werden (im Suchtimer oder im Setup) und erlauben eine flexiblere Kanalauswahl für Suchtimer als bisher. (s. Screenshot)
-- epgsearch stellt das erweiterte Timer-Editmenu und die Suche im EPG jetzt als 'Service' anderen Plugins zur Verfügung (ab 1.3.30 oder mit Udo Richters backport, s. MANUAL oder mail an mich, falls jemand Interesse hat)
+- epgsearch stellt das erweiterte Timer-Editmenu und die Suche im EPG jetzt als 'Service' anderen Plugins zur Verfügung (ab 1.3.30 oder mit Udo Richters backport, s. MANUAL oder mail an mich, falls jemand Interesse hat)
- Beim Programmieren eines Timers (manuell oder per Suchtimer) wird nun die Inhaltsangabe an den Timer übergeben (damit kann im VDR-Timermenu mit 'ok' die Inhaltsangabe angezeigt werden), Danke an TomG
- Nach dem Umschalten der Farbtasten mit '0' im Menu 'Programm' kann mit den Farbtasten Grün/Gelb zum Programm des vorherigen/nächsten Senders gewechselt werden (s. Farbtasten im Screenshot)
- patch von Uwe/egal hinzugefügt, der es erlaubt, das VDR-Programmmenu durch epgsearch zu ersetzen. Danke an Uwe auch für die Anpassungen in epgsearch (Nach dem Patchen von VDR muss der patch noch im epgsearch-Setup aktiviert werden!)
diff --git a/INSTALL b/INSTALL
index 7e7944e..b9bd242 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
Theres nothing special about it. Install it like any other standard
-plugin (unpack, soft link, make plugins).
+plugin (unpack, soft link, make plugins).
Optional libraries:
-------------------
@@ -7,7 +7,7 @@ Optional libraries:
libpcre
-------
For support of Perl compatible regular expressions in a search you have to use
-libpcre:
+libpcre:
simply edit the plugins Makefile and uncomment '#REGEXLIB = pcre' to
'REGEXLIB = pcre' or append 'REGEXLIB=pcre' to your 'make plugins'
call. (you will need pcreposix installed, comes with libpcre from
@@ -27,7 +27,7 @@ libtre
epgsearch has a fuzzy search algorithm. Unfortunately it's rescrited to
search patterns with a maximum of 31 characters. This results in empty results
if more than 31 characters are used. To avoid this limitation you can use the
-TRE package (http://laurikari.net/tre/). Install tre (on debian:
+TRE package (http://laurikari.net/tre/). Install tre (on debian:
apt-get install tre-agrep libtre4 libtre-dev) and activate epgsearch's support
for it in the Makefile by uncommenting '#REGEXLIB = pcre' to 'REGEXLIB = tre' or append
it to your 'make plugins' call. After recompiling epgsearch will now use an
diff --git a/INSTALL.DE b/INSTALL.DE
index 25e92c7..e51dada 100644
--- a/INSTALL.DE
+++ b/INSTALL.DE
@@ -12,7 +12,7 @@ folgendes kommt:
ERROR: /usr/lib/libpcreposix.so.0: undefined symbol: pcre_free).
-dann bitte libpcre von www.pcre.org updaten und das Plugin neu
+dann bitte libpcre von www.pcre.org updaten und das Plugin neu
kompilieren.
Scheinbar gibt es auf manchen Systemen Probleme mit PCRE, die sich in einem
diff --git a/Makefile b/Makefile
index 986bd49..b1aca84 100644
--- a/Makefile
+++ b/Makefile
@@ -6,11 +6,11 @@
### ------------
### CONFIG START
-###
+###
### to comment an option just place a '#' at the beginning of the line
### to uncomment an option please remove the leading '#'
-### uncomment one of these lines, if you don't want the addon epgsearchonly,
+### uncomment one of these lines, if you don't want the addon epgsearchonly,
### conflictcheckonly or quickepgsearch
#WITHOUT_EPGSEARCHONLY=1
@@ -20,7 +20,7 @@
### comment this if you don't want epgsearch to auto config itself
AUTOCONFIG=1
-### if AUTOCONFIG is not active (i.e. commented) you can manually enable the
+### if AUTOCONFIG is not active (i.e. commented) you can manually enable the
### optional modules or patches for other plugins
ifndef AUTOCONFIG
# if you want to use Perl compatible regular expressions (PCRE) or libtre for
@@ -133,7 +133,7 @@ DEFINES4 += $(EPGSEARCH_DEFINES) -DPLUGIN_NAME_I18N='"$(PLUGIN4)"'
### The object files (add further files here):
-OBJS = afuzzy.o blacklist.o changrp.o confdloader.o conflictcheck.o conflictcheck_thread.o distance.o $(PLUGIN).o epgsearchcats.o epgsearchcfg.o epgsearchext.o epgsearchsetup.o epgsearchsvdrp.o epgsearchtools.o mail.o md5.o menu_announcelist.o menu_blacklistedit.o menu_blacklists.o menu_commands.o menu_conflictcheck.o menu_deftimercheckmethod.o menu_dirselect.o menu_event.o menu_favorites.o menu_main.o menu_myedittimer.o menu_quicksearch.o menu_recsdone.o menu_search.o menu_searchactions.o menu_searchedit.o menu_searchresults.o menu_searchtemplate.o menu_switchtimers.o menu_templateedit.o menu_timersdone.o menu_whatson.o noannounce.o pending_notifications.o rcfile.o recdone.o recstatus.o searchtimer_thread.o services.o switchtimer.o switchtimer_thread.o templatefile.o timer_thread.o timerdone.o timerstatus.o uservars.o varparser.o
+OBJS = afuzzy.o blacklist.o changrp.o confdloader.o conflictcheck.o conflictcheck_thread.o distance.o $(PLUGIN).o epgsearchcats.o epgsearchcfg.o epgsearchext.o epgsearchsetup.o epgsearchsvdrp.o epgsearchtools.o mail.o md5.o menu_announcelist.o menu_blacklistedit.o menu_blacklists.o menu_commands.o menu_conflictcheck.o menu_deftimercheckmethod.o menu_dirselect.o menu_event.o menu_favorites.o menu_main.o menu_myedittimer.o menu_quicksearch.o menu_recsdone.o menu_search.o menu_searchactions.o menu_searchedit.o menu_searchresults.o menu_searchtemplate.o menu_switchtimers.o menu_templateedit.o menu_timersdone.o menu_whatson.o noannounce.o pending_notifications.o rcfile.o recdone.o recstatus.o searchtimer_thread.o services.o switchtimer.o switchtimer_thread.o templatefile.o timer_thread.o timerdone.o timerstatus.o uservars.o varparser.o
ifeq ($(REGEXLIB), pcre)
LIBS += $(shell pcre-config --libs-posix)
@@ -155,7 +155,7 @@ ifdef USE_GRAPHTFT
DEFINES += -DUSE_GRAPHTFT
endif
-ifdef CFLC
+ifdef CFLC
DEFINES += -DCFLC
endif
@@ -257,7 +257,7 @@ dist: docs clean
@ln -sf README.git README
@echo Distribution package created as $(PACKAGE).tgz
-distfull: docs clean
+distfull: docs clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
diff --git a/README.Translators b/README.Translators
index a0486eb..19c756d 100644
--- a/README.Translators
+++ b/README.Translators
@@ -2,9 +2,9 @@
Building and maintaining translations for EPGSearch
---------------------------------------------------
-If your language is not yet supported in EPGSearch or any
-updates are needed it would be great if you could give your
-support for this.
+If your language is not yet supported in EPGSearch or any
+updates are needed it would be great if you could give your
+support for this.
To do so please follow these steps:
@@ -14,9 +14,9 @@ To do so please follow these steps:
If not please use the latest known release.
-2. Copy the original po file for your language to any backup
- destination. Now edit the original po file for your language in
- the po subdirectory. All entries with 'msgstr ""' should be filled
+2. Copy the original po file for your language to any backup
+ destination. Now edit the original po file for your language in
+ the po subdirectory. All entries with 'msgstr ""' should be filled
with your translation.
3. To test your translations, simply recompile EPGSearch and check
diff --git a/README.git b/README.git
index 4d3ae36..4193128 100644
--- a/README.git
+++ b/README.git
@@ -1,11 +1,11 @@
Note:
-This is a dummy README needed by some maintainers that use the git
-repository to fetch epgsearch. In the official or beta tar balls it
-is replaced by a symbolic link to
+This is a dummy README needed by some maintainers that use the git
+repository to fetch epgsearch. In the official or beta tar balls it
+is replaced by a symbolic link to
-./doc/en/epgsearch.1.txt
+./doc/en/epgsearch.1.txt
-which is not part of the git repository since it is built from the
+which is not part of the git repository since it is built from the
sources (via 'make docs').
If its in the way, just remove it.
diff --git a/afuzzy.c b/afuzzy.c
index e78404e..7352d3e 100644
--- a/afuzzy.c
+++ b/afuzzy.c
@@ -30,21 +30,21 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
static int afuzzy_checkFLT(const char *t, AFUZZY *fuzzy);
/******************************************************************************
-FUNCTION afuzzy_init()
+FUNCTION afuzzy_init()
Initialization of the fuzzy search routine. This applies to the consequent
calls of the afuzzy_CheckRTR (whole string matching) and afuzzy_CheckSUB
(substring match) routines. afuzzy_init() should be called for each
new pattern or error length. The search is case sensitive
-ARGUMENTS:
+ARGUMENTS:
p Pattern
kerr Number of possible errors. Shouldn't exceed pattern length
UseFilter Use agrep filter algorithm that speeds up search.
fuzzy pointer to the structure that will be later passes to Check*
(the first 6 elements should be NULLs for the first call)
-
+
RETURN VALUE:
- none
+ none
ALGORITHM
see. the article on agrep algorithms.
@@ -141,14 +141,14 @@ void afuzzy_init(const char *p, int kerr, int UseFilter, AFUZZY *fuzzy)
}
/******************************************************************************
-FUNCTION afuzzy_free()
+FUNCTION afuzzy_free()
Cleaning up after previous afuzzy_init() call.
-ARGUMENTS:
+ARGUMENTS:
fuzzy pointer to the afuzzy parameters structure
-
+
RETURN VALUE:
- none
+ none
******************************************************************************/
void afuzzy_free(AFUZZY *fuzzy)
{
@@ -186,14 +186,14 @@ void afuzzy_free(AFUZZY *fuzzy)
/******************************************************************************
-FUNCTION afuzzy_CheckSUB()
- Perform a fuzzy pattern substring matching. afuzzy_init() should be
- called previously to initialize the pattern and error length.
- Positive result means that some part of the string given matches the
- pattern with no more than afuzzy->k errors (1 error = 1 letter
+FUNCTION afuzzy_CheckSUB()
+ Perform a fuzzy pattern substring matching. afuzzy_init() should be
+ called previously to initialize the pattern and error length.
+ Positive result means that some part of the string given matches the
+ pattern with no more than afuzzy->k errors (1 error = 1 letter
replacement or transposition)
-ARGUMENTS:
+ARGUMENTS:
t the string to test
fuzzy pointer to the afuzzy parameters structure
@@ -234,10 +234,10 @@ int afuzzy_checkSUB(const char *t, AFUZZY *fuzzy)
{
for (d = 0; d <= fuzzy->k; d++)
{
- fuzzy->R1[d] = (((fuzzy->R[d]<<1) | 1) &
+ fuzzy->R1[d] = (((fuzzy->R[d]<<1) | 1) &
fuzzy->S[fuzzy->Map[(unsigned char)c]]);
if (d > 0)
- fuzzy->R1[d] |= ((fuzzy->R[d-1] | fuzzy->R1[d-1])<<1) | 1 |
+ fuzzy->R1[d] |= ((fuzzy->R[d-1] | fuzzy->R1[d-1])<<1) | 1 |
fuzzy->R[d-1];
}
if (fuzzy->R1[fuzzy->k] & fuzzy->mask_ok)
@@ -258,7 +258,7 @@ static int afuzzy_checkFLT(const char *t, AFUZZY *fuzzy)
for (j = 0; t[j] != '\0'; j++)
{
- FilterR1 = ( ((FilterR<<(fuzzy->k+1)) | fuzzy->filter_shift) &
+ FilterR1 = ( ((FilterR<<(fuzzy->k+1)) | fuzzy->filter_shift) &
fuzzy->FilterS[fuzzy->FilterMap[(unsigned char)t[j]]]);
if (FilterR1 & fuzzy->filter_ok)
return 1;
diff --git a/blacklist.c b/blacklist.c
index c80c360..de2a37e 100644
--- a/blacklist.c
+++ b/blacklist.c
@@ -67,7 +67,7 @@ cBlacklist::cBlacklist(void)
catvalues = (char**) malloc(SearchExtCats.Count() * sizeof(char*));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
catvalues[index] = (char*)malloc(MaxFileName);
*catvalues[index] = 0;
@@ -88,7 +88,7 @@ cBlacklist::~cBlacklist(void)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
free(catvalues[index]);
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -107,7 +107,7 @@ cBlacklist& cBlacklist::operator= (const cBlacklist &Blacklist)
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
*catvalues[index] = 0;
strcpy(catvalues[index], Blacklist.catvalues[index]);
@@ -139,7 +139,7 @@ void cBlacklist::CopyFromTemplate(const cSearchExt* templ)
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
strcpy(catvalues[index], templ->catvalues[index]);
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -175,7 +175,7 @@ const char *cBlacklist::ToText(void)
free(buffer);
tmp_search = strdup(search);
while(strstr(tmp_search, "|"))
- tmp_search = strreplace(tmp_search, "|", "!^pipe^!"); // ugly: replace a pipe with something, that should not happen to be part of a regular expression
+ tmp_search = strreplace(tmp_search, "|", "!^pipe^!"); // ugly: replace a pipe with something, that should not happen to be part of a regular expression
strreplace(tmp_search, ':', '|');
diff --git a/blacklist.h b/blacklist.h
index dafd317..a3c378a 100644
--- a/blacklist.h
+++ b/blacklist.h
@@ -79,7 +79,7 @@ public:
bool ParseExtEPGValues(const char *s);
bool ParseExtEPGEntry(const char *s);
bool Save(FILE *f);
- cSearchResults* Run(cSearchResults* pSearchResults = NULL, int MarginStop = 0);
+ cSearchResults* Run(cSearchResults* pSearchResults = NULL, int MarginStop = 0);
void CopyFromTemplate(const cSearchExt* templ);
};
diff --git a/changrp.c b/changrp.c
index c484fde..b63bbde 100644
--- a/changrp.c
+++ b/changrp.c
@@ -61,9 +61,9 @@ bool cChannelGroup::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
{
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
valuelen = MAXVALUELEN;
}
strn0cpy(value, pos, valuelen);
@@ -98,7 +98,7 @@ bool cChannelGroup::Parse(const char *s)
}
if (*pos) pos++;
} //while
-
+
free(line);
return (parameter >= 1) ? true : false;
}
@@ -108,19 +108,19 @@ const char *cChannelGroup::ToText(void)
char* channelbuffer = NULL;
cChannelGroupItem* ChannelGroupItem = channels.First();
int index = 0;
- while (ChannelGroupItem)
+ while (ChannelGroupItem)
{
cChannel* channel = ChannelGroupItem->channel;
if (index++ == 0)
channelbuffer = strdup(CHANNELSTRING(channel));
else
{
- char* temp = channelbuffer;
+ char* temp = channelbuffer;
msprintf(&channelbuffer, "%s|%s", channelbuffer, CHANNELSTRING(channel));
free(temp);
}
ChannelGroupItem = channels.Next(ChannelGroupItem);
- }
+ }
char* buffer = NULL;
msprintf(&buffer, "%s|%s", name, channelbuffer);
free(channelbuffer);
@@ -132,7 +132,7 @@ int* cChannelGroup::CreateChannelSel()
int* channelSel = (int*) malloc(Channels.Count() * sizeof(int));
cChannel* channel = Channels.First();
int index = 0;
- while (channel)
+ while (channel)
{
if (channel->GroupSep())
{
@@ -141,18 +141,18 @@ int* cChannelGroup::CreateChannelSel()
}
channelSel[index] = 0;
cChannelGroupItem* channelInGroup = channels.First();
- while (channelInGroup)
- {
+ while (channelInGroup)
+ {
if (channel == channelInGroup->channel)
{
channelSel[index] = 1;
break;
}
channelInGroup = channels.Next(channelInGroup);
- }
+ }
index++;
channel = Channels.Next(channel);
- }
+ }
return channelSel;
}
@@ -161,7 +161,7 @@ void cChannelGroup::CreateChannelList(int* channelSel)
channels.Clear();
cChannel* channel = Channels.First();
int index = 0;
- while (channel)
+ while (channel)
{
if (!channel->GroupSep())
{
@@ -170,7 +170,7 @@ void cChannelGroup::CreateChannelList(int* channelSel)
index++;
}
channel = Channels.Next(channel);
- }
+ }
}
bool cChannelGroup::Save(FILE *f)
@@ -181,12 +181,12 @@ bool cChannelGroup::Save(FILE *f)
bool cChannelGroup::ChannelInGroup(cChannel* channel)
{
cChannelGroupItem* channelInGroup = channels.First();
- while (channelInGroup)
+ while (channelInGroup)
{
if (channel == channelInGroup->channel)
return true;
channelInGroup = channels.Next(channelInGroup);
- }
+ }
return false;
}
@@ -197,13 +197,13 @@ int cChannelGroups::GetIndex(char* channelGroup)
return -1;
cChannelGroup* ChannelGroup = First();
int index = 0;
- while (ChannelGroup)
+ while (ChannelGroup)
{
if (strcmp(channelGroup, ChannelGroup->name) == 0)
return index;
index++;
ChannelGroup = Next(ChannelGroup);
- }
+ }
return -1;
}
@@ -212,12 +212,12 @@ cChannelGroup* cChannelGroups::GetGroupByName(const char* channelGroup)
if (!channelGroup)
return NULL;
cChannelGroup* ChannelGroup = First();
- while (ChannelGroup)
+ while (ChannelGroup)
{
if (strcmp(channelGroup, ChannelGroup->name) == 0)
return ChannelGroup;
ChannelGroup = Next(ChannelGroup);
- }
+ }
return NULL;
}
@@ -231,7 +231,7 @@ cSearchExt* cChannelGroups::Used(cChannelGroup* group)
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt)
+ while (SearchExt)
{
if (SearchExt->useChannel == 2 && strcmp(SearchExt->channelGroup, group->name) == 0)
return SearchExt;
@@ -246,7 +246,7 @@ char** cChannelGroups::CreateMenuitemsList()
cChannelGroup* ChannelGroup = First();
menuitemsChGr[0] = strdup("");
int index = 1;
- while (ChannelGroup)
+ while (ChannelGroup)
{
menuitemsChGr[index++] = ChannelGroup->name;
ChannelGroup = Next(ChannelGroup);
@@ -265,9 +265,9 @@ void cMenuChannelGroupItem::Set(void)
{
cString channelbuffer;
- cChannelGroupItem* channelInGroup = group->channels.First();
+ cChannelGroupItem* channelInGroup = group->channels.First();
int channelNr, chIntBegin = -1, chIntEnd = -1, chLast = -1;
- while (channelInGroup)
+ while (channelInGroup)
{
channelNr = channelInGroup->channel->Number();
if (chIntBegin == -1)
@@ -308,17 +308,17 @@ cMenuChannelGroups::cMenuChannelGroups(char** GroupName)
groupSel = -1;
groupName = GroupName;
if (groupName && *groupName)
- groupSel = ChannelGroups.GetIndex(*groupName);
+ groupSel = ChannelGroups.GetIndex(*groupName);
cChannelGroup* ChannelGroup = ChannelGroups.First();
int index = 0;
- while (ChannelGroup)
+ while (ChannelGroup)
{
Add(new cMenuChannelGroupItem(ChannelGroup), (index == groupSel?true:false));
ChannelGroup = ChannelGroups.Next(ChannelGroup);
index++;
- }
-
+ }
+
if (groupName && *groupName)
SetHelp(trVDR("Button$Edit"), trVDR("Button$New"), trVDR("Button$Delete"), tr("Button$Select"));
else
@@ -364,13 +364,13 @@ eOSState cMenuChannelGroups::Delete(void)
eOSState cMenuChannelGroups::ProcessKey(eKeys Key)
{
int GroupNumber = HasSubMenu() ? Count() : -1;
-
+
eOSState state = cOsdMenu::ProcessKey(Key);
- if (state == osUnknown)
+ if (state == osUnknown)
{
if (HasSubMenu())
return osContinue;
- switch (Key)
+ switch (Key)
{
case kRed:
if (CurrentGroup())
@@ -392,14 +392,14 @@ eOSState cMenuChannelGroups::ProcessKey(eKeys Key)
default: break;
}
}
- if (GroupNumber >= 0 && !HasSubMenu() && ChannelGroups.Get(GroupNumber))
+ if (GroupNumber >= 0 && !HasSubMenu() && ChannelGroups.Get(GroupNumber))
{
// a newly created group was confirmed with Ok
cChannelGroup* group = ChannelGroups.Get(GroupNumber);
Add(new cMenuChannelGroupItem(group), true);
Display();
}
-
+
return state;
}
@@ -411,7 +411,7 @@ cMenuEditChannelGroup::cMenuEditChannelGroup(cChannelGroup *Group, bool New)
channelSel = group->CreateChannelSel();
strcpy(name, group->name);
addIfConfirmed = New;
- if (group)
+ if (group)
Set();
}
@@ -428,7 +428,7 @@ void cMenuEditChannelGroup::Set()
Add(new cMenuEditStrItem( tr("Group name"), name, sizeof(group->name), trVDR(FileNameChars)));
cChannel* channel = Channels.First();
int index = 0;
- while (channel)
+ while (channel)
{
if (channel->GroupSep())
{
@@ -437,8 +437,8 @@ void cMenuEditChannelGroup::Set()
}
Add(new cMenuEditBoolItem( CHANNELNAME(channel), &channelSel[index++], trVDR("no"), trVDR("yes")));
channel = Channels.Next(channel);
- }
-
+ }
+
SetCurrent(Get(current));
}
@@ -466,7 +466,7 @@ eOSState cMenuEditChannelGroup::ProcessKey(eKeys Key)
Skins.Message(mtError, tr("Group name already exists!"));
return osContinue;
}
-
+
{
bool saveSearchExts = false;
if (strcmp(group->name, name) != 0 && !addIfConfirmed) // if group name changed, update searches
@@ -474,8 +474,8 @@ eOSState cMenuEditChannelGroup::ProcessKey(eKeys Key)
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
while (SearchExt) {
- if (SearchExt->useChannel == 2 &&
- SearchExt->channelGroup &&
+ if (SearchExt->useChannel == 2 &&
+ SearchExt->channelGroup &&
strcmp(SearchExt->channelGroup, group->name) == 0)
{
free(SearchExt->channelGroup);
@@ -498,12 +498,12 @@ eOSState cMenuEditChannelGroup::ProcessKey(eKeys Key)
return osBack;
break;
case kRed:
- case kGreen:
+ case kGreen:
case kYellow:
{
cChannel* channel = Channels.First();
int index = 0;
- while (channel)
+ while (channel)
{
if (channel->GroupSep())
{
@@ -514,7 +514,7 @@ eOSState cMenuEditChannelGroup::ProcessKey(eKeys Key)
channelSel[index] = (Key == kGreen?1:(Key == kRed?1-channelSel[index]:0));
index++;
channel = Channels.Next(channel);
- }
+ }
Set();
Display();
return osContinue;
diff --git a/conf/epgsearchconflmail.templ b/conf/epgsearchconflmail.templ
index a34bd2e..046c763 100644
--- a/conf/epgsearchconflmail.templ
+++ b/conf/epgsearchconflmail.templ
@@ -1,9 +1,9 @@
#########################################################################
# This is a sample template for email notifications about timer conflicts.
-#
+#
# There are 4 sections to be defined:
# - "subject" to be used as mail subject
-# - "mailbody" the body of the mail (put %conflicts% in the place where the
+# - "mailbody" the body of the mail (put %conflicts% in the place where the
# list of conflicts should appear!)
# - "conflictsat" the description of one time where one or more conflicts
# exists (put %confltimers% in the place where the list of conflict
diff --git a/conf/epgsearchmenu.conf b/conf/epgsearchmenu.conf
index 3d3658d..d5b0f22 100644
--- a/conf/epgsearchmenu.conf
+++ b/conf/epgsearchmenu.conf
@@ -20,11 +20,11 @@
# epgsearchcats.conf, like %genre% or %category%
#
# for the 'Whats on...' menus there is also:
-#
+#
# %chnr% - channel number
# %chsh% - the short channel name
# %chlng% - the 'normal' channel name
-# %progr% - graphical progress bar
+# %progr% - graphical progress bar
# %progrT2S% - progress bar in text2skin style
#
#########################################################
@@ -34,4 +34,4 @@ MenuWhatsOnNext=%chnr%:4|%time% %t_status%:8|%category%:8| %title% ~ %subtitle%:
MenuWhatsOnElse=%chnr%:4|%time% %t_status%:8|%category%:8| %title% ~ %subtitle%:35
MenuSchedule=%time% %t_status%:8|%genre%:14| %title% ~ %subtitle%:35
MenuSearchResults=%chsh%:12|%datesh%:6|%time%:6|%t_status%:2|%title% ~ %subtitle%:35
-# WarEagleIcons=1 \ No newline at end of file
+# WarEagleIcons=1
diff --git a/conf/epgsearchupdmail-html.templ b/conf/epgsearchupdmail-html.templ
index beab4b8..4e4103c 100644
--- a/conf/epgsearchupdmail-html.templ
+++ b/conf/epgsearchupdmail-html.templ
@@ -7,11 +7,11 @@
# - "subject" to be used as mail subject
# - "mailbody" the body of the mail:
# put %update.newtimers% in the place where the list of new timers should
-# appear. The same for %update.modtimers%, %update.deltimers% and
+# appear. The same for %update.modtimers%, %update.deltimers% and
# %update.newevents& for the list of changed or deleted timers and event
# announcements.
# - "timer" the description of one timer and "event" with the description of
-# one event. This section is used to display one timer within a timer list,
+# one event. This section is used to display one timer within a timer list,
# e.g. in %update.newtimers%. The same for "event".
#
# All sections are optional, e.g. if you don't use event announcements you
@@ -163,7 +163,7 @@ a.rightspace {
</html></mailbody>
##############################################################################
-# here's the timer definition, which is used to display information about
+# here's the timer definition, which is used to display information about
# a timer within one of the timer lists. You can use any variables that refer
# to an event or timer. (Please note, that a timer may have no event assigned
# to it, resulting in an empty variable substitution!). You can also use 'user
@@ -188,9 +188,9 @@ a.rightspace {
</timer>
##############################################################################
-# here's the event definition, which is used to display information about
+# here's the event definition, which is used to display information about
# an event in the announcement list. You can use any variables that refer
-# to an event. You can also use 'user defined' variables from
+# to an event. You can also use 'user defined' variables from
# epgsearchuservars.conf.
##############################################################################
<event>
diff --git a/conf/epgsearchupdmail.templ b/conf/epgsearchupdmail.templ
index 5d547e9..ec01738 100644
--- a/conf/epgsearchupdmail.templ
+++ b/conf/epgsearchupdmail.templ
@@ -7,11 +7,11 @@
# - "subject" to be used as mail subject
# - "mailbody" the body of the mail:
# put %update.newtimers% in the place where the list of new timers should
-# appear. The same for %update.modtimers%, %update.deltimers% and
+# appear. The same for %update.modtimers%, %update.deltimers% and
# %update.newevents& for the list of changed or deleted timers and event
# announcements.
# - "timer" the description of one timer and "event" with the description of
-# one event. This section is used to display one timer within a timer list,
+# one event. This section is used to display one timer within a timer list,
# e.g. in %update.newtimers%. The same for "event".
#
# All sections are optional, e.g. if you don't use event announcements you
@@ -60,17 +60,17 @@ the following events where found:
Have fun!</mailbody>
##############################################################################
-# here's the timer definition, which is used to display information about
+# here's the timer definition, which is used to display information about
# a timer within one of the timer lists. You can use any variables that refer
# to an event or timer. (Please note, that a timer may have no event assigned
# to it, resulting in an empty variable substitution!). You can also use 'user
# defined' variables from epgsearchuservars.conf.
##############################################################################
<timer>
- Title: %title% ~ %subtitle%
+ Title: %title% ~ %subtitle%
Start/End: %time_w% %date% %time%-%timeend% (Timer: %timer.start%-%timer.stop%)
Channel: %timer.chlng% (%timer.chnr%)
- File: %timer.file%
+ File: %timer.file%
Modification: %timer.modreason%
Search: %timer.search% (%timer.searchid%)
@@ -81,13 +81,13 @@ Summary:
</timer>
##############################################################################
-# here's the event definition, which is used to display information about
-# an event within the list of event announcements. You can use any variables
-# that refer to an event. You can also use 'user defined' variables from
+# here's the event definition, which is used to display information about
+# an event within the list of event announcements. You can use any variables
+# that refer to an event. You can also use 'user defined' variables from
# epgsearchuservars.conf.
##############################################################################
<event>
- Title: %title% ~ %subtitle%
+ Title: %title% ~ %subtitle%
Start/End: %time_w% %date% %time%-%timeend%
Channel: %chlng% (%chnr%)
Search: %search% (%searchid%)
diff --git a/confdloader.c b/confdloader.c
index d740a71..bb195aa 100644
--- a/confdloader.c
+++ b/confdloader.c
@@ -136,7 +136,7 @@ bool cConfDLoader::LoadFile(const char *FileName)
fclose(f);
return true;
}
- else
+ else
{
LOG_ERROR_STR(FileName);
return false;
diff --git a/confdloader.h b/confdloader.h
index c543be5..0a2686d 100644
--- a/confdloader.h
+++ b/confdloader.h
@@ -24,7 +24,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#ifndef VDR_EPGSEARCH_CONFDLOADER_INC
#define VDR_EPGSEARCH_CONFDLOADER_INC
-class cConfDLoader {
+class cConfDLoader {
public:
cConfDLoader() {}
bool Load();
diff --git a/conflictcheck.c b/conflictcheck.c
index 671907c..cd3f3a9 100644
--- a/conflictcheck.c
+++ b/conflictcheck.c
@@ -242,7 +242,7 @@ cList<cConflictCheckTimerObj>* cConflictCheck::CreateCurrentTimerList()
// already recording?
int deviceNr = gl_recStatusMonitor->TimerRecDevice(ti)-1;
- // create a copy of this timer
+ // create a copy of this timer
cTimer* clone = new cTimer(*ti);
clone->SetEvent(ti->Event());
@@ -294,7 +294,7 @@ cList<cConflictCheckTimerObj>* cConflictCheck::CreateCurrentTimerList()
continue;
}
- // create a copy of this timer
+ // create a copy of this timer
cTimer* clone = new cTimer(*ti);
clone->SetEvent(ti->Event());
@@ -514,7 +514,7 @@ eModuleStatus cConflictCheck::CamSlotModuleStatus(cCamSlot *CamSlot)
{
if (!CamSlot) return msNone;
if ((int)camSlotStatusArray.size() != CamSlots.Count())
- for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot))
+ for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot))
camSlotStatusArray.push_back(CamSlot->ModuleStatus());
if (CamSlot->Index() < (int)camSlotStatusArray.size())
return camSlotStatusArray[CamSlot->Index()];
@@ -575,23 +575,23 @@ int cConflictCheck::GetDevice(cConflictCheckTimerObj* TimerObj, bool* NeedsDetac
// difference, because it results in the most significant bit of the result.
uint32_t imp = 0;
// prefer the primary device for live viewing if we don't need to detach existing receivers
- imp <<= 1; ;
+ imp <<= 1; ;
// use receiving devices if we don't need to detach existing receivers
- imp <<= 1; imp |= !devices[i].Receiving() || ndr;
- // avoid devices that are receiving
- imp <<= 1; imp |= devices[i].Receiving();
+ imp <<= 1; imp |= !devices[i].Receiving() || ndr;
+ // avoid devices that are receiving
+ imp <<= 1; imp |= devices[i].Receiving();
// use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
imp <<= 8; imp |= min(max(devices[i].Priority() + MAXPRIORITY, 0), 0xFF);
// use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
- imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF);
+ imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF);
// avoid devices if we need to detach existing receivers
- imp <<= 1; imp |= ndr;
- // avoid the primary device
+ imp <<= 1; imp |= ndr;
+ // avoid the primary device
imp <<= 1; imp |= devices[i].IsPrimaryDevice();
- // avoid cards with Common Interface for FTA channels
- imp <<= 1; imp |= NumUsableSlots ? 0 : devices[i].HasCi();
+ // avoid cards with Common Interface for FTA channels
+ imp <<= 1; imp |= NumUsableSlots ? 0 : devices[i].HasCi();
// avoid full featured cards
- imp <<= 1; imp |= devices[i].HasDecoder();
+ imp <<= 1; imp |= devices[i].HasDecoder();
// prefer CAMs that are known to decrypt this channel
imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0;
if (imp < Impact) {
@@ -674,18 +674,18 @@ void cConflictCheck::EvaluateConflCheckCmd()
{
if (ct->ignore) continue;
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
if ((*it) && !(*it)->ignore)
{
string result = EPGSearchConfig.conflCheckCmd;
- if (!(*it)->OrigTimer())
+ if (!(*it)->OrigTimer())
{
LogFile.Log(3,"timer has disappeared meanwhile");
continue;
}
else
LogFile.Log(3,"evaluating conflict check command for timer '%s' (%s, channel %s)", (*it)->timer->File(), DAYDATETIME((*it)->start), CHANNELNAME((*it)->timer->Channel()));
-
+
if ((*it)->Event())
{
cVarExpr varExprEvent(result);
diff --git a/conflictcheck.h b/conflictcheck.h
index 18e7eb5..c13ca2c 100644
--- a/conflictcheck.h
+++ b/conflictcheck.h
@@ -36,7 +36,7 @@ class cConflictCheckTime;
class TimerObjSort;
// --- cConflictCheckTimerObj --------------------------------------------------------
-class cConflictCheckTimerObj : public cTimerObj
+class cConflictCheckTimerObj : public cTimerObj
{
const cEvent* event;
public:
@@ -72,7 +72,7 @@ public:
// --- cConflictCheckTime --------------------------------------------------------
-class cConflictCheckTime : public cListObject
+class cConflictCheckTime : public cListObject
{
public:
time_t evaltime;
@@ -81,7 +81,7 @@ class cConflictCheckTime : public cListObject
std::set<cConflictCheckTimerObj*,TimerObjSort> failedTimers;
std::set<cConflictCheckTimerObj*,TimerObjSort> concurrentRecs;
bool ignore;
-
+
cConflictCheckTime(time_t EvalTime) : evaltime(EvalTime), ignore(false) {}
int Compare(const cListObject &ListObject) const
{
@@ -92,7 +92,7 @@ class cConflictCheckTime : public cListObject
// --- cConflictCheckDevice --------------------------------------------------------
// This class tries to emulate the behaviour of a DVB device
-// NOTE: The case device == NULL is only for debugging purposes
+// NOTE: The case device == NULL is only for debugging purposes
class cConflictCheckDevice
{
public:
@@ -100,7 +100,7 @@ class cConflictCheckDevice
cDevice* device;
int devicenr;
- cConflictCheckDevice() {}
+ cConflictCheckDevice() {}
int Priority() const
{
int prio = -1;
@@ -113,7 +113,7 @@ class cConflictCheckDevice
bool IsTunedTo (const cChannel* Channel) const
{
for(std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it = recTimers.begin(); it != recTimers.end(); it++)
- if ((*it)->timer->Channel()->Source() == Channel->Source() &&
+ if ((*it)->timer->Channel()->Source() == Channel->Source() &&
(*it)->timer->Channel()->Transponder() == Channel->Transponder())
return true;
return false;
@@ -121,15 +121,15 @@ class cConflictCheckDevice
bool HasDecoder() const { if (device) return device->HasDecoder(); else return (devicenr == 3); }
bool HasCi() const { if (device) return device->HasCi(); else return (devicenr == 3); }
bool IsPrimaryDevice() const { if (device) return device->IsPrimaryDevice(); else return (devicenr == 3); }
- bool ProvidesSource(int Source) const
- {
+ bool ProvidesSource(int Source) const
+ {
if (device) return device->ProvidesSource(Source);
- else
+ else
{
// int type = Source & cSource::st_Mask;
// if (devicenr == 0) return type == cSource::stCable;
// if (devicenr > 0) return type == cSource::stTerr;
-// return false;
+// return false;
return true;
}
}
@@ -181,7 +181,7 @@ class cConflictCheckDevice
};
// --- cConflictCheck --------------------------------------------------------
-class cConflictCheck
+class cConflictCheck
{
cList<cConflictCheckTimerObj>* timerList;
cList<cConflictCheckTime>* evaltimeList;
@@ -189,7 +189,7 @@ class cConflictCheck
std::set<cConflictCheckTimerObj*> pendingTimers;
cConflictCheckDevice *devices;
- int numDevices;
+ int numDevices;
time_t maxCheck;
std::vector<eModuleStatus> camSlotStatusArray;
public:
diff --git a/conflictcheck_thread.c b/conflictcheck_thread.c
index d5c9cdb..910a999 100644
--- a/conflictcheck_thread.c
+++ b/conflictcheck_thread.c
@@ -33,7 +33,7 @@ cConflictCheckThread *cConflictCheckThread::m_Instance = NULL;
time_t cConflictCheckThread::m_cacheNextConflict = 0;
int cConflictCheckThread::m_cacheRelevantConflicts = 0;
int cConflictCheckThread::m_cacheTotalConflicts = 0;
-bool cConflictCheckThread::m_runOnce = false;
+bool cConflictCheckThread::m_runOnce = false;
bool cConflictCheckThread::m_forceUpdate = false;
cConflictCheckThread::cConflictCheckThread(cPluginEpgsearch* thePlugin)
@@ -47,15 +47,15 @@ cConflictCheckThread::cConflictCheckThread(cPluginEpgsearch* thePlugin)
}
cConflictCheckThread::~cConflictCheckThread() {
- if (m_Active)
+ if (m_Active)
Stop();
}
-void cConflictCheckThread::Init(cPluginEpgsearch* thePlugin, bool runOnce)
+void cConflictCheckThread::Init(cPluginEpgsearch* thePlugin, bool runOnce)
{
if (EPGSearchConfig.checkTimerConflictsAfterUpdate || EPGSearchConfig.conflictCheckIntervall == 0)
{
- if (!runOnce) return;
+ if (!runOnce) return;
m_runOnce = true;
}
@@ -81,7 +81,7 @@ void cConflictCheckThread::Stop(void) {
Cancel(6);
}
-void cConflictCheckThread::Action(void)
+void cConflictCheckThread::Action(void)
{
SetPriority(CONFLICTCHECK_NICE);
@@ -96,7 +96,7 @@ void cConflictCheckThread::Action(void)
}
time_t nextUpdate = time(NULL);
- while (m_Active)
+ while (m_Active)
{
time_t now = time(NULL);
if (now >= nextUpdate || m_forceUpdate)
@@ -115,25 +115,25 @@ void cConflictCheckThread::Action(void)
time_t nextConflict = 0;
if (conflictCheck.relevantConflicts > 0)
{
- cString msgfmt = cString::sprintf(tr("%d timer conflict(s)! First at %s. Show them?"),
+ cString msgfmt = cString::sprintf(tr("%d timer conflict(s)! First at %s. Show them?"),
conflictCheck.relevantConflicts,
*DateTime(conflictCheck.nextRelevantConflictDate));
- bool doMessage = EPGSearchConfig.noConflMsgWhileReplay == 0 ||
- !cDevice::PrimaryDevice()->Replaying() ||
+ bool doMessage = EPGSearchConfig.noConflMsgWhileReplay == 0 ||
+ !cDevice::PrimaryDevice()->Replaying() ||
conflictCheck.nextRelevantConflictDate - now < 2*60*60;
- if (doMessage && SendMsg(msgfmt, true,7) == kOk)
+ if (doMessage && SendMsg(msgfmt, true,7) == kOk)
{
m_plugin->showConflicts = true;
- cRemote::CallPlugin("epgsearch");
+ cRemote::CallPlugin("epgsearch");
}
-
+
if (EPGSearchConfig.sendMailOnConflicts)
{
cMailConflictNotifier mailNotifier;
mailNotifier.SendConflictNotifications(conflictCheck);
}
conflictCheck.EvaluateConflCheckCmd();
- }
+ }
// store for external access
cConflictCheckThread::m_cacheNextConflict = conflictCheck.nextRelevantConflictDate;
cConflictCheckThread::m_cacheRelevantConflicts = conflictCheck.relevantConflicts;
diff --git a/conflictcheck_thread.h b/conflictcheck_thread.h
index 6edaa06..c340181 100644
--- a/conflictcheck_thread.h
+++ b/conflictcheck_thread.h
@@ -33,7 +33,7 @@ class cConflictCheckThread: public cThread {
bool m_Active;
time_t m_lastUpdate;
cPluginEpgsearch* m_plugin;
- static bool m_runOnce;
+ static bool m_runOnce;
static bool m_forceUpdate;
cCondWait Wait;
protected:
@@ -50,4 +50,4 @@ class cConflictCheckThread: public cThread {
static void Exit(void);
};
-#endif
+#endif
diff --git a/createcats.c b/createcats.c
index a17b5f0..dc97335 100644
--- a/createcats.c
+++ b/createcats.c
@@ -93,9 +93,9 @@ class cCat {
int appeared;
char name[MAXPARSEBUFFER];
int numvalues;
- char** values;
-
- cCat(char* n)
+ char** values;
+
+ cCat(char* n)
:appeared(0), numvalues(0), values(NULL)
{
strcpy(name, n);
@@ -137,9 +137,9 @@ class cCats {
cCat** cats;
public:
cCats():numcats(0), cats(NULL) {}
-
+
int num() {return numcats;}
-
+
cCat* add(char* name)
{
cCat* newCat = new cCat(name);
@@ -147,7 +147,7 @@ class cCats {
cats[numcats++] = newCat;
return newCat;
}
-
+
cCat* get(int i)
{
if (i>=0 && i<numcats)
@@ -155,7 +155,7 @@ class cCats {
else
return NULL;
}
-
+
cCat* exists(char* name)
{
for(int i=0; i<numcats; i++)
@@ -187,13 +187,13 @@ int main(int argc, char *argv[])
{ NULL, no_argument, NULL, 0 }
};
- int c;
- while ((c = getopt_long(argc, argv, "m:v:l:h", long_options, NULL)) != -1)
+ int c;
+ while ((c = getopt_long(argc, argv, "m:v:l:h", long_options, NULL)) != -1)
{
- switch (c)
+ switch (c)
{
case 'm':
- if (isnumber(optarg))
+ if (isnumber(optarg))
{
minappearance = atoi(optarg);
break;
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
return 2;
break;
case 'v':
- if (isnumber(optarg))
+ if (isnumber(optarg))
{
maxvalues = atoi(optarg);
break;
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
return 2;
break;
case 'l':
- if (isnumber(optarg))
+ if (isnumber(optarg))
{
maxlength = atoi(optarg);
break;
@@ -234,22 +234,22 @@ int main(int argc, char *argv[])
}
}
- if (argc < 2)
+ if (argc < 2)
{
fprintf(stderr, "ERROR: please pass your epg.data\nusage: createcats epg.data\n");
return 1;
}
-
+
f = fopen(argv[argc-1], "r");
if (f == NULL)
{
fprintf(stderr, "ERROR: could not open: %s\n", argv[1]);
return 1;
}
-
+
char *s;
cReadLine ReadLine;
- while ((s = ReadLine.Read(f)) != NULL)
+ while ((s = ReadLine.Read(f)) != NULL)
{
if (*s == 'D')
{
@@ -261,7 +261,7 @@ int main(int argc, char *argv[])
char *pstrSearch=strdup(s);
pstrSearchToken=strtok(pstrSearch, "|");
- while(pstrSearchToken)
+ while(pstrSearchToken)
{
// must have a ':'
char* szPos = NULL;
@@ -270,34 +270,34 @@ int main(int argc, char *argv[])
pstrSearchToken=strtok(NULL, "|");
continue;
}
-
+
char catname[MAXPARSEBUFFER] = "";
char catvalue[MAXPARSEBUFFER] = "";
-
+
strncpy(catname, pstrSearchToken, szPos - pstrSearchToken);
catname[szPos - pstrSearchToken] = 0;
strcpy(catvalue, skipspace(szPos+1));
-
+
cCat* cat = catlist.exists(catname);
if (!cat && strlen(catname) < maxlength) // accept only names up to 30 chars
cat = catlist.add(catname);
-
+
if (cat)
{
cat->appeared++;
if (strlen(catvalue) < maxlength) // accept only values up to 30 chars
cat->addvalue(catvalue);
}
-
+
pstrSearchToken=strtok(NULL, "|");
}
free(pstrSearch);
}
- }
+ }
fclose(f);
catlist.sort();
-
+
f = fopen("epgsearchcats.conf", "w");
if (f == NULL)
{
@@ -322,9 +322,9 @@ int main(int argc, char *argv[])
fprintf(f, "# - 'searchmode' is an optional parameter specifying the mode of search:\n");
fprintf(f, "# text comparison:\n");
fprintf(f, "# 0 - the whole term must appear as substring\n");
- fprintf(f, "# 1 - all single words (delimiters are ',', ';', '|' or '~')\n");
+ fprintf(f, "# 1 - all single words (delimiters are ',', ';', '|' or '~')\n");
fprintf(f, "# must exist as substrings. This is the default search mode.\n");
- fprintf(f, "# 2 - at least one word (delimiters are ',', ';', '|' or '~')\n");
+ fprintf(f, "# 2 - at least one word (delimiters are ',', ';', '|' or '~')\n");
fprintf(f, "# must exist as substring.\n");
fprintf(f, "# 3 - matches exactly\n");
fprintf(f, "# 4 - regular expression\n");
@@ -344,7 +344,7 @@ int main(int argc, char *argv[])
{
fprintf(f, "# '%s' found %d times with %d different values %s\n", cat->name, cat->appeared, cat->numvalues, cat->numvalues>=(int)maxvalues?"(values omitted, too much)":"");
fprintf(f, "%d|%s|%s|", id++, cat->name, cat->name);
- for(int j=0; cat->numvalues < (int)maxvalues && j<cat->numvalues; j++)
+ for(int j=0; cat->numvalues < (int)maxvalues && j<cat->numvalues; j++)
fprintf(f, "%s%s", cat->values[j], (j == cat->numvalues-1?"":","));
fprintf(f, "|1\n\n");
}
diff --git a/distance.c b/distance.c
index 688fbb1..4065200 100644
--- a/distance.c
+++ b/distance.c
@@ -61,7 +61,7 @@ int mi;
//**************************************************
// Get a pointer to the specified cell of the matrix
-//**************************************************
+//**************************************************
int *Distance::GetCellPointer (int *pOrigin, int col, int row, int nCols)
{
@@ -69,7 +69,7 @@ int *Distance::GetCellPointer (int *pOrigin, int col, int row, int nCols)
}
//*****************************************************
-// Get the contents of the specified cell in the matrix
+// Get the contents of the specified cell in the matrix
//*****************************************************
int Distance::GetAt (int *pOrigin, int col, int row, int nCols)
@@ -115,7 +115,7 @@ int left; // contents of cell immediately to left
int diag; // contents of cell immediately above and to left
int sz; // number of cells in matrix
- // Step 1
+ // Step 1
n = min((int)strlen(s), maxLength);
m = min((int)strlen(t), maxLength);
@@ -159,7 +159,7 @@ int sz; // number of cells in matrix
cost = 1;
}
- // Step 6
+ // Step 6
above = GetAt (d,i-1,j, n);
left = GetAt (d,i, j-1, n);
@@ -174,6 +174,6 @@ int sz; // number of cells in matrix
result = GetAt (d, n, m, n);
free (d);
return result;
-
+
}
diff --git a/distance.h b/distance.h
index e38ba3a..fe1fa85 100644
--- a/distance.h
+++ b/distance.h
@@ -42,6 +42,6 @@ class Distance
int *GetCellPointer (int *pOrigin, int col, int row, int nCols);
int GetAt (int *pOrigin, int col, int row, int nCols);
void PutAt (int *pOrigin, int col, int row, int nCols, int x);
-};
+};
#endif
diff --git a/doc-src/de/epgsearch.1.txt b/doc-src/de/epgsearch.1.txt
index 57eb01a..85da036 100644
--- a/doc-src/de/epgsearch.1.txt
+++ b/doc-src/de/epgsearch.1.txt
@@ -12,7 +12,7 @@ Ein weiterer Punkt sind die sog. Suchtimer die dafür
sorgen, dass Timer automatisch programmiert werden.
- Befehle für EPG-Einträge mit verschiedenen integrierten Befehlen wie
- z.B. 'Wiederholungen anzeigen', 'Suche anlegen'. Man kann eigene
+ z.B. 'Wiederholungen anzeigen', 'Suche anlegen'. Man kann eigene
Befehle hinzufügen, um z.B. einen VDRAdmin Autotimer anzulegen.
- Bis zu 4 weitere Zeitpunkte im Menü 'Was läuft jetzt?' neben 'Jetzt'
@@ -58,7 +58,7 @@ Teile der Quelltexte basieren auf dem repeating-epg-patch von Gerhard Steiner, d
=over 4
-=item -f file, --svdrpsendcmd=file
+=item -f file, --svdrpsendcmd=file
Pfad zu svdrpsend.pl für externe SVDRP-Kommunikation (Standard ist interne
Kommunikation, deshalb ist dieser Paramter normalerweise nicht notwendig)
@@ -73,12 +73,12 @@ epgsearch-Dateien, Standard ist '<Plugin-Konfig-Verzeichnis>/epgsearch'
zur Angabe eines abweichenden Dateipfades für epgsearch's Log-File (Standard
ist epgsearch.log in epgsearch's Konfig-Verzeichnis)
-=item -v n, --verbose=n
+=item -v n, --verbose=n
verbose level für das Log-File. Wert 0 bedeutet kein Logging. Weiter Werte sind
1 (allgemeine Meldungen), 2 (detaillierte Meldungen), 3 (für Debug-Zwecke)
-=item -r, --reloadmenuconf
+=item -r, --reloadmenuconf
bewirkt ein Neuladen der epgsearchmenu.conf bei jedem Plugin-Aufruf am
OSD. Kann für das Testen eines selbst angepaßten Menü-Layouts praktisch sein.
@@ -113,7 +113,7 @@ bei sendEmail.pl.
=head1 1. Beschreibung
Auf den ersten Blick sieht EPG-Search wie der Programm-Menü-Punkt des
-VDR aus.
+VDR aus.
Ein Tastendruck auf '0' schaltet die Farbtasten um, so dass weitere
Funktionen erreicht werden können (die vorgegebene Zuweisung kann per
Setup angepasst werden):
@@ -188,7 +188,7 @@ einem bestimmten Sender kommt.
Mit 'Blau' kann man auch eine Vorlage für eine Suche
übernehmen. Falls eine Vorlage als Standard definiert wurde, wird
bei einer neuen Suche automatisch der Inhalt der Standard-Vorlage
-verwendet.
+verwendet.
Hinweis: Die unscharfe Suche ist auf 32 Zeichen begrenzt!
@@ -212,7 +212,7 @@ Eine Beschreibung des Suchprozesses gibt es im MANUAL.
=item - B<Verw. Kennung für Inhalt>
-Einige Provider liefern Kennungen für den Inhalt einer Sendung, z.B.
+Einige Provider liefern Kennungen für den Inhalt einer Sendung, z.B.
"Film/Drama", "Dokumentation",...(erst ab vdr-1.7.11 verfügbar)
Hiermit können diesen Kennungen ausgewählt werden. Es ist auch eine
Mehrfachauswahl möglich, die dann in allen Kennungen übereinstimmen muss (UND-Verknüpfung).
@@ -224,16 +224,16 @@ erweiterter EPG Infos')
=item - B<Ignoriere fehlende Kategorien>
-Wenn 'Ja' gewählt ist, verhindert das, dass eine Sendung aus dem
-Suchergebnis ausgeschlossen wird, falls die entsprechende
-Kategorie nicht im EPG vorhanden ist. Vorsicht: Ohne weitere Suchkriterien
+Wenn 'Ja' gewählt ist, verhindert das, dass eine Sendung aus dem
+Suchergebnis ausgeschlossen wird, falls die entsprechende
+Kategorie nicht im EPG vorhanden ist. Vorsicht: Ohne weitere Suchkriterien
kann das zu einer Flut von Timern führen.
=item - B<Verw. Kanal:>
sucht nur im angegebenen Kanalbereich, der hinterlegten
Kanalgruppe, z.B. 'Öffentl. Rechtl.' oder 'Sportsender'... oder in
-FTA-Sendern.
+FTA-Sendern.
ACHTUNG: Nach einer Änderung der Kanal-Reihenfolge sollten unbedingt
diese Einstellungen der Suchtimer kontrolliert werden!
@@ -277,7 +277,7 @@ aktiv sein soll.
Standard ist 'Aufnehmen', also das Erzeugen eines Timers für das
Suchergebnis. Man kann aber auch wählen, dass nur eine Ankündigung
-der Sendung per OSD vorgenommen werden soll, sobald diese gefunden wird.
+der Sendung per OSD vorgenommen werden soll, sobald diese gefunden wird.
Eine weitere Möglichkeit ist 'nur umschalten'. Dadurch wird automatisch eine
Minute vor Beginn der Sendung auf deren Kanal gewechselt. Ebenso kann
mit 'Ankündigen und Umschalten' die Sendung vor ihrem Beginn angekündigt werden
@@ -303,7 +303,7 @@ Verzeichnis-Eintrag auch Variablen wie "%Genre%" oder "%Category%"
verwendet werden. Diese werden durch die aktuellen erw. EPG-Infos
ersetzt, sobald ein Timer erzeugt wird.
-Siehe MANUAL 'Using variables in the directory entry of a search timer')
+Siehe MANUAL 'Using variables in the directory entry of a search timer')
=item - B<Aufn. nach ... Tagen löschen>
@@ -323,7 +323,7 @@ Wenn man keine Wiederholungen aufnehmen will, versucht dieses
Feature festzustellen, ob eine Sendung bereits
aufgenommen/programmiert wurde und überspringt diese dann. Bitte vor
Verwendung den Abschnitt 'Wiederholungen vermeiden - Im Detail'
-weiter unten lesen.
+weiter unten lesen.
=item - B<erlaubte Wiederholungen>
@@ -344,16 +344,16 @@ Titel verglichen werden soll.
=item - B<Vergleiche Untertitel>
Einstellung, ob beim Test, ob eine Sendung identisch ist, auch der
-Untertitel verglichen werden soll. Bei 'falls vorhanden' stuft epgsearch zwei Sendungen nur dann als
-identisch ein, wenn die Episodennamen gleich sind und nicht leer.
+Untertitel verglichen werden soll. Bei 'falls vorhanden' stuft epgsearch zwei Sendungen nur dann als
+identisch ein, wenn die Episodennamen gleich sind und nicht leer.
=item - B<Vergleiche Beschreibung>
Einstellung, ob beim Test, ob eine Sendung identisch ist, auch die
Inhaltsbeschreibung verglichen werden soll. Dabei wird zunächst
alles aus dem Inhalt entfernt, das einer Kategorienangabe
-gleicht. Der verbleibende Text wird dann verglichen. Ist dieser zum
-Prozentsatz der folgenden Option ähnlich (im Sinne des Levinshtein-Distance-Algorithmus)
+gleicht. Der verbleibende Text wird dann verglichen. Ist dieser zum
+Prozentsatz der folgenden Option ähnlich (im Sinne des Levinshtein-Distance-Algorithmus)
wird er als gleich behandelt.
=item - C<Min. Übereinstimmung in %>
@@ -389,8 +389,8 @@ zum automatischen Löschen eines Suchttimers bei folgenden Bedingungen:
* nach x Aufnahmen, oder
* nach x Tagen nach erster Aufnahme
-Gezählt werden dabei nur erfolgreiche Aufnahmen. Das Löschen erfolgt
-direkt nach dem Ende der entsprechenden Aufnahme.
+Gezählt werden dabei nur erfolgreiche Aufnahmen. Das Löschen erfolgt
+direkt nach dem Ende der entsprechenden Aufnahme.
=back
@@ -456,7 +456,7 @@ Auswahl von 'Programm' oder 'Jetzt' als Startmenü.
Hier kann das Verhalten der 'Ok'-Taste bestimmt werden. Man kann damit
die Inhaltsangabe anzeigen oder zum entsprechenden Sender
wechseln. Hinweis: Die Funktion der Taste 'Blau' (Umschalten/Info/Suche)
-hängt von dieser Einstellung ab.
+hängt von dieser Einstellung ab.
=item - B<Taste Rot:>
@@ -502,7 +502,7 @@ wird das Limit ignoriert und wieder alle Kanäle angezeigt.
=item - B<Timer mit 'Aufnehmen' sofort anlegen:>
Falls 'Ja' wird ein Timer sofort erzeugt, sobald man 'Aufnehmen' drückt,
-sonst wird das Timer-Edit-Menü angezeigt.
+sonst wird das Timer-Edit-Menü angezeigt.
=item - B<Zeige Kanäle ohne EPG:>
@@ -519,7 +519,7 @@ falls 'Nein' erscheint das Timer-Edit-Menü.
In den Menüs 'Programm', 'Jetzt', 'Nächste', 'Benutzerdef. Zeit 1',
... kann die angezeigte Zeit durch drücken von FastRew, FastFwd
verschoben werden. Die Anzahl Minuten für den Sprung kann hier
-angepasst werden.
+angepasst werden.
=item - B<Grün/Gelb umschalten:>
@@ -583,7 +583,7 @@ verwendet. Man kann auch EPG-Variablen verwenden (z.B.. 'Meine
Filme~%Category%~%Genre%'). Wird das Timer-Edit-Menü aufgerufen
versucht epgsearch alle Variablen durch die Werte in der
Beschreibung der Sendung zu ersetzen. Konnten nicht alle ersetzt
-werden, bleibt der Verzeichniseintrag leer.
+werden, bleibt der Verzeichniseintrag leer.
=item - B<Untertitel in manuellen Timern:>
@@ -603,9 +603,9 @@ werden. Folgende Prüfmethoden existieren:
* ohne Überwachung
* anhand Sendungskennung: geprüft wird anhand einer Kennung, die durch den
Sender vergeben wird. (Achtung: nicht jeder Sender liefert vernünftige
- Kennungen!)
+ Kennungen!)
* anhand Sender/Uhrzeit: geprüft wird anhand der Sendung, die am besten zur
- Dauer der ursprünglichen Sendung passt.
+ Dauer der ursprünglichen Sendung passt.
Nicht alle Sender liefern eine vernünftige Sendungskennung. Deshalb kann hier
die Standardeinstellung für jeden Kanal einzeln gesetzt werden. Bei der
@@ -623,17 +623,17 @@ vorgegeben, falls das epgsearch-eigene Menü benutzt wird.
falls ja, untersucht das Plugin im Hintergrund die EPG-Daten und
erzeugt Timer, falls passende Einträge gefunden werden. Dies
betrifft nur Sucheinträge, die mit 'Als Suchtimer verwenden'
-markiert sind.
+markiert sind.
=item - B<Aktualisierungsintervall:>
Das Intervall in Minuten, in dem die Hintergrundsuche vorgenommen
-wird.
+wird.
=item - B<SVDRP Port:>
Falls nicht der Standard-SVDRP-Port 6419 (2001 vor vdr-1.7.15) verwendet wird, dann bitte
-hier anpassen, damit die Suchtimer funktionieren.
+hier anpassen, damit die Suchtimer funktionieren.
=item - B<Priorität, Lebensdauer und Zeitpuffer für Anfang und Ende:>
@@ -651,7 +651,7 @@ wurden. Zum Abschalten dieses Verhaltens bitte 'Ja' wählen.
=item - B<Prüfe ob EPG für ... [h] existiert:>
-Falls EPG von externen Anbietern bezogen wird, kann es vorkommenm, dass hier
+Falls EPG von externen Anbietern bezogen wird, kann es vorkommenm, dass hier
auch mal etwas schiefläuft und somit wegen fehlendem EPG Aufzeichnungen verlorengehen.
Hiermit kann geprüft werden, ob für die nächsten ... Stunden EPG bei den
gewünschten Sendern vorhanden ist. Mit '0' wird die Prüfung deaktiviert.
@@ -683,13 +683,13 @@ verwendet werden können.
=item - B<Ausschlusslisten:>
Hier können Ausschlusslisten verwalten werden. Diese können innerhalb einer
-Suche verwendet werden um unerwünschte Sendungen zu vermeiden.
-Eine Ausschlussliste kann auch als global gekennzeichnet werden. Da die
-Standardeinstellung beim Suchtimer für die Option 'Ausschlusslisten verw.'
-auf 'nur globale' steht, kann man somit einfach unerwünschte Sendungen von
-allen Suchtimern ausschließen. Ausnahme: Falls beim Suchtimer die Option
-'Ausschlusslisten verw.: keine' gewählt ist, hat eine globale Ausschlussliste
-keine Auswirkung. Ebenso werden globale Ausschlusslisten bei der Suche nach
+Suche verwendet werden um unerwünschte Sendungen zu vermeiden.
+Eine Ausschlussliste kann auch als global gekennzeichnet werden. Da die
+Standardeinstellung beim Suchtimer für die Option 'Ausschlusslisten verw.'
+auf 'nur globale' steht, kann man somit einfach unerwünschte Sendungen von
+allen Suchtimern ausschließen. Ausnahme: Falls beim Suchtimer die Option
+'Ausschlusslisten verw.: keine' gewählt ist, hat eine globale Ausschlussliste
+keine Auswirkung. Ebenso werden globale Ausschlusslisten bei der Suche nach
Wiederholungen über das OSD ignoriert.
=item - B<Kanalgruppen:>
@@ -728,7 +728,7 @@ wird als 'nicht relevant' in der Konflikt-Übersicht angezeigt.
Falls ein Konflikt nicht länger als die angegebene Anzahl Minuten dauert,
wird darauf nicht per OSD-Nachricht hingewiesen und der Konflikt wird als
-'nicht relevant' in der Konflikt-Übersicht angezeigt.
+'nicht relevant' in der Konflikt-Übersicht angezeigt.
=item - B<Prüfe nur die nächsten ... Tage:>
@@ -738,12 +738,12 @@ Hier kann der Zeitraum der Prüfung angegeben werden.
Das bewirkt eine Konfliktprüfung nach jeder manuellen Timer-Programmierung
und erzeugt eine OSD-Nachricht, falls der neue/geänderte Timer in einen
-Konflikt verwickelt ist.
+Konflikt verwickelt ist.
=item - B<Beim Beginn einer Aufnahme:>
-Hier auf 'Ja' setzen, wenn die Konfliktprüfung beim Beginn jeder Aufnahme erfolgen soll.
-Im Falle eines Konflikts wird dann sofort eine Nachricht angezeigt. Diese erscheint nur,
+Hier auf 'Ja' setzen, wenn die Konfliktprüfung beim Beginn jeder Aufnahme erfolgen soll.
+Im Falle eines Konflikts wird dann sofort eine Nachricht angezeigt. Diese erscheint nur,
wenn der Konflikt innerhalb der nächsten 2 Stunden auftritt.
=item - B<Nach jedem Suchtimer-Update:>
@@ -774,7 +774,7 @@ Prüfintervall eingestellt werden.
=item - B<Vermeide Nachricht bei Wiedergabe:>
Bitte auf 'Ja' setzen, wenn während einer Wiedergabe keine OSD-Benachrichtigungen
-über Timer-Konflikte gewünscht sind. Die Benachrichtigung erfolgt trotzdem,
+über Timer-Konflikte gewünscht sind. Die Benachrichtigung erfolgt trotzdem,
wenn der nächste Konflikt innerhalb der nächsten 2 Stunden auftritt.
=back
@@ -820,13 +820,13 @@ versandt, sobald sich etwas bei den Konflikten verändert.
=item - B<Email-Adresse:>
-Hier bitte die volle (!) Email-Adresse hinterlegen, an die die Nachrichten
-verschickt werden sollen. Hinweis: Einigen Provider (z.B. Arcor) erlauben nicht
+Hier bitte die volle (!) Email-Adresse hinterlegen, an die die Nachrichten
+verschickt werden sollen. Hinweis: Einigen Provider (z.B. Arcor) erlauben nicht
die gleiche Adresse für Sender und Empfänger.
=item - B<Mail-Methode:>
-Zur Auswahl stehen
+Zur Auswahl stehen
- sendEmail.pl: ein einfaches Skript, das auch auf Systemen ohne
konfigurierten Mailserver den Versand von Emails erlaubt. Das Skript wird
@@ -903,7 +903,7 @@ Hier soll erklärt werden wie die Option 'Wiederholungen vermeiden'
eines Suchtimers funktioniert.
Nicht immer lässt sich durch entsprechende Suchkriterien vermeiden,
-dass auch Timer für Wiederholungen erzeugt werden.
+dass auch Timer für Wiederholungen erzeugt werden.
Um das zu verhindern, versucht das Feature 'Wiederholungen vermeiden'
vor dem Programmieren einer Sendung zu prüfen, ob eine gleiche Sendung
@@ -917,7 +917,7 @@ Für den Test auf Gleichheit zwischen 2 Sendungen gibt es viele
Einstellmöglichkeiten beim Suchtimer. Man kann wählen, ob Titel,
Untertitel, Beschreibung und bestimmte Kategorien innerhalb der
Beschreibung einer Sendung mit den jeweiligen Angaben einer anderen
-Sendung verglichen werden sollen.
+Sendung verglichen werden sollen.
Der Vergleich der einzelnen Angaben selbst prüft immer auf
vollständige Identität. Die Beschreibung einer Sendung bildet hier
@@ -958,7 +958,7 @@ aufgenommen, die bezüglich der Timerangaben korrekt begonnen und auch
beendet wurden. D.h. dass teilweise unvollständige Aufnahmen nicht
registriert werden und somit beim nächsten Suchtimer-Update
automatisch ein neuer Timer für diese Sendung erzeugt wird, falls
-gefunden.
+gefunden.
B<Wie verwenden?>
@@ -969,7 +969,7 @@ richtige macht. Dazu gibt es für solche Timer im Suchergebnis-Menü auf
der Taste 'Blau' die zusätzliche Belegung 'Timer-Vorschau'. Sendungen,
die noch keinen Timer haben ('T'), aber für die einer aufgrund des
Features beim nächsten Suchtimer-Update programmiert würde, haben dort
-ein 'P' stehen.
+ein 'P' stehen.
Hinweis: Möchte man wegen Konflikten einen bereits programmierten
Timer nicht verwenden, dann sollte dieser im Timermenü deaktiviert
@@ -995,8 +995,8 @@ Einige EPG Provider liefern zusätzliche EPG Infos wie die Art der
Sendung, das Video und Audio Format, die Besetzung,... in der Beschreibung der
Sendung.
-Anmerkung: Dies hat nichts mit den content descriptors seit vdr-1.7.11 zu tun,
-die als zusätzliche Daten nach einem gemeinsamen Standard aufgeliefert werden.
+Anmerkung: Dies hat nichts mit den content descriptors seit vdr-1.7.11 zu tun,
+die als zusätzliche Daten nach einem gemeinsamen Standard aufgeliefert werden.
Leider liefern nicht alle Provider diese Daten oder setzen die Kennungen nicht korrekt.
Deshalb gibt es den Ansatz der "erweiterten EPG Infos", der versucht diese Information
aus der Inhaltsbeschreibung zu extrahieren.
@@ -1075,7 +1075,7 @@ Setup ausblenden. Um das Plugin trotzdem mit der Taste "Grün" aufrufen
zu können, könnte man z.B. mein launcher-Plugin verwenden und
die Zeile
- Green @launcher x
+ Green @launcher x
in die keymacros.conf schreiben, wobei x die Position von epgsearch
innerhalb des launcher listings ist.
@@ -1084,9 +1084,9 @@ Ein weiterer Ansatz ist ein Patch gegen VDR, der das Standardmenü
'Programm' gegen epgsearch austauscht.
Hierzu VDR mit dem Patch vdr-replace-schedulemenu.diff.gz aus dem
Patches-Verzeichnis patchen. Danke an den Autor Uwe/egal@vdrportal.
-Bei Anwendung dieses Patches sollte der Eintrag
+Bei Anwendung dieses Patches sollte der Eintrag
- Green Schedule
+ Green Schedule
heißen. Dieser Patch ist bereits in manchen Patchsammlungen,
z.B. Bigpatch, enthalten.
@@ -1200,24 +1200,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -1226,8 +1226,8 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearch.conf.5.txt b/doc-src/de/epgsearch.conf.5.txt
index aca4857..7cc379a 100644
--- a/doc-src/de/epgsearch.conf.5.txt
+++ b/doc-src/de/epgsearch.conf.5.txt
@@ -20,8 +20,8 @@ Folgende Felder sind möglich:
1 - Einmalige Suchtimer ID
2 - Suchstring
3 - Verwende Zeit? 0/1
- 4 - Startzeit in HHMM
- 5 - Stopzeit in HHMM
+ 4 - Startzeit in HHMM
+ 5 - Stopzeit in HHMM
6 - Verwende Kanal? 0 = nein, 1 = Intervall, 2 = Kanalgruppe, 3 = nur FTA
7 - Wenn 'verwende Kanal' = 1 dann ist Kanal ID[|Kanal ID] im VDR Format,
Einträge oder min/max Einträge getrennt durch |, wenn 'Verwende Kanal' = 2
@@ -111,24 +111,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -137,6 +137,6 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchblacklists.conf.5.txt b/doc-src/de/epgsearchblacklists.conf.5.txt
index 9dadadf..5069bd5 100644
--- a/doc-src/de/epgsearchblacklists.conf.5.txt
+++ b/doc-src/de/epgsearchblacklists.conf.5.txt
@@ -40,24 +40,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -66,7 +66,7 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchcats.conf.5.txt b/doc-src/de/epgsearchcats.conf.5.txt
index 3e886a7..51ea0ad 100644
--- a/doc-src/de/epgsearchcats.conf.5.txt
+++ b/doc-src/de/epgsearchcats.conf.5.txt
@@ -47,7 +47,7 @@ Auszug aus einer F<epgsearchcats.conf>:
0 - the whole term must appear as substring
1 - all single terms (delimiters are ',', ';', '|' or '~')
must exist as substrings. This is the default search mode.
- 2 - at least one term (delimiters are ',', ';', '|' or '~')
+ 2 - at least one term (delimiters are ',', ';', '|' or '~')
must exist as substring.
3 - matches exactly
4 - regular expression
@@ -57,7 +57,7 @@ Auszug aus einer F<epgsearchcats.conf>:
12 - greater
13 - greater or equal
14 - equal
- 15 - not equal
+ 15 - not equal
--------------------------------------------------------------------
@@ -109,24 +109,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -135,6 +135,6 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchchangrps.conf.5.txt b/doc-src/de/epgsearchchangrps.conf.5.txt
index 9e72011..9b37e92 100644
--- a/doc-src/de/epgsearchchangrps.conf.5.txt
+++ b/doc-src/de/epgsearchchangrps.conf.5.txt
@@ -41,24 +41,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -67,7 +67,7 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchcmds.conf.5.txt b/doc-src/de/epgsearchcmds.conf.5.txt
index 06c3fb9..a258c31 100644
--- a/doc-src/de/epgsearchcmds.conf.5.txt
+++ b/doc-src/de/epgsearchcmds.conf.5.txt
@@ -46,24 +46,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -72,7 +72,7 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchdirs.conf.5.txt b/doc-src/de/epgsearchdirs.conf.5.txt
index 181d7a0..cf714ea 100644
--- a/doc-src/de/epgsearchdirs.conf.5.txt
+++ b/doc-src/de/epgsearchdirs.conf.5.txt
@@ -66,24 +66,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -92,6 +92,6 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchmenu.conf.5.txt b/doc-src/de/epgsearchmenu.conf.5.txt
index 3926b1f..7ac9b7e 100644
--- a/doc-src/de/epgsearchmenu.conf.5.txt
+++ b/doc-src/de/epgsearchmenu.conf.5.txt
@@ -101,24 +101,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -127,7 +127,7 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchswitchtimers.conf.5.txt b/doc-src/de/epgsearchswitchtimers.conf.5.txt
index bd7e307..5156b67 100644
--- a/doc-src/de/epgsearchswitchtimers.conf.5.txt
+++ b/doc-src/de/epgsearchswitchtimers.conf.5.txt
@@ -42,24 +42,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -68,8 +68,8 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchtemplates.conf.5.txt b/doc-src/de/epgsearchtemplates.conf.5.txt
index fd05c7b..c791836 100644
--- a/doc-src/de/epgsearchtemplates.conf.5.txt
+++ b/doc-src/de/epgsearchtemplates.conf.5.txt
@@ -28,24 +28,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -54,7 +54,7 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/epgsearchuservars.conf.5.txt b/doc-src/de/epgsearchuservars.conf.5.txt
index 7115902..6b6644b 100644
--- a/doc-src/de/epgsearchuservars.conf.5.txt
+++ b/doc-src/de/epgsearchuservars.conf.5.txt
@@ -157,24 +157,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT and LIZENZ
Copyright © 2004-2010 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -183,6 +183,6 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/de/noannounce.conf.5.txt b/doc-src/de/noannounce.conf.5.txt
index 83a3ba6..eb3a9ea 100644
--- a/doc-src/de/noannounce.conf.5.txt
+++ b/doc-src/de/noannounce.conf.5.txt
@@ -42,7 +42,7 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT und LIZENZ
@@ -50,4 +50,4 @@ Copyright © 2005 - 2007 Christian Wieninger
Dieses Dokument wird unter den Bedingungen der Gnu Public License
(GPL) veröffentlicht. Alle Angaben sind nach bestem Wissen, aber
-natürlich ohne Gewähr (no warranty in any kind).
+natürlich ohne Gewähr (no warranty in any kind).
diff --git a/doc-src/de/timersdone.conf.5.txt b/doc-src/de/timersdone.conf.5.txt
index 19409a3..d3679e7 100644
--- a/doc-src/de/timersdone.conf.5.txt
+++ b/doc-src/de/timersdone.conf.5.txt
@@ -1,7 +1,7 @@
=head1 NAME
F<timersdone.conf> - Liste von anstehenden Timern, die von Suchtimern erzeugt
-wurden.
+wurden.
=head1 BESCHREIBUNG
@@ -10,7 +10,7 @@ erzeugt wurden. Wenn die Setup-Option 'Timer nach Löschen neuprogrammieren'
auf nein steht, benutzt epgsearch diese Liste, um zu prüfen, ob ein Timer
bereits angelegt wurde und erstellt den Timer in diesem Fall nicht nochmals.
Sobald die zugehörige Aufnahme stattgefunden hat, wird der Timer automatisch
-aus dieser Liste entfernt.
+aus dieser Liste entfernt.
=head1 FORMAT
@@ -41,24 +41,24 @@ L<http://www.vdr-developer.org/mantisbt/>
Mailinglist:
-L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
+L<http://www.vdr-developer.org/mailman/listinfo/epgsearch>
=head1 COPYRIGHT und LIZENZ
Copyright (c) 2005-2006 Christian Wieninger
Dieses Programm ist freie Software. Sie können es unter den Bedingungen
-der GNU General Public License, wie von der Free Software Foundation
+der GNU General Public License, wie von der Free Software Foundation
veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2
-der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+der Lizenz oder (nach Ihrer Option) jeder späteren Version.
-Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
-Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
-implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
-ZWECK. Details finden Sie in der GNU General Public License.
+Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es
+Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die
+implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN
+ZWECK. Details finden Sie in der GNU General Public License.
-Sie sollten ein Exemplar der GNU General Public License zusammen mit
-diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
+Sie sollten ein Exemplar der GNU General Public License zusammen mit
+diesem Programm erhalten haben. Falls nicht, schreiben Sie an die
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Oder rufen Sie in Ihrem Browser http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
auf.
@@ -67,5 +67,5 @@ Der Author kann über cwieninger@gmx.de erreicht werden.
Die Projektseite ist http://winni.vdr-developer.org/epgsearch
-Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
-von RSA Data Security, Inc..
+Der MD5-Code ist abgeleitet aus dem Message-Digest Algorithm
+von RSA Data Security, Inc..
diff --git a/doc-src/en/createcats.1.txt b/doc-src/en/createcats.1.txt
index dea416e..58497d5 100644
--- a/doc-src/en/createcats.1.txt
+++ b/doc-src/en/createcats.1.txt
@@ -46,7 +46,7 @@ Some notes:
=over 4
-=item -m N, --minappearance=N
+=item -m N, --minappearance=N
createcats counts how often a category is used in your current
epg.data. If this is less than N, then this category will not be part
@@ -63,13 +63,13 @@ from a list of values.
=item -l N, --maxlength=N
if the text length of a value is more than N, this value is not part
-of the value list.
+of the value list.
=back
B<Hint:> Results are best, if your current EPG is as big as possible. So
update it, if you are using an external EPG provider, before calling
-createcats.
+createcats.
Please edit this file now, since it will contain also things not suitable.
diff --git a/doc-src/en/epgsearch.1.txt b/doc-src/en/epgsearch.1.txt
index ff00f39..fbb716b 100644
--- a/doc-src/en/epgsearch.1.txt
+++ b/doc-src/en/epgsearch.1.txt
@@ -13,7 +13,7 @@ additional functions:
VDRAdmin auto-timer.
- Add up to 4 user-defined times to 'now' and 'next' and an optional
- favorites menu
+ favorites menu
- Searching the EPG: Create reusable queries, which can also be used
as 'search timers'.
@@ -56,7 +56,7 @@ Parts of the sources are based on the repeating-ECG patch from Gerhard Steiner,
=over 4
-=item -f file, --svdrpsendcmd=file
+=item -f file, --svdrpsendcmd=file
the path to svdrpsend.pl for external SVDRP communication (default is
internal communication, so this is usually not needed anymore)
@@ -71,13 +71,13 @@ is '<plugins configuration directory>/epgsearch'
to specify a specific log file for epgsearch (default log file is
epgsearch.log in the epgsearch config directory)
-=item -v n, --verbose=n
+=item -v n, --verbose=n
verbose level for log file. Value 0 means no logging. Other values
are 1 (general messages), 2 (detailed messages), 3 (planned for extra
detailed info for debugging purposes)
-=item -r, --reloadmenuconf
+=item -r, --reloadmenuconf
reload epgsearchmenu.conf with plugin call. This can be useful when testing
customized menu layouts.
@@ -138,7 +138,7 @@ item. There are 8 built-in commands:
This puts the selected event in the file epgsearchdone.data and instructs
epgsearch to avoid recording this event if an according search timer is set
to "avoid repeats". An already created timer will be automatically removed
- with the next search timer update.
+ with the next search timer update.
- Add/Remove to/from switch list?:
Controls the switch list. If there is an event in the switch list, epgsearch
@@ -159,12 +159,12 @@ reccmds.conf. When a command is executed the following parameters
are passed to it:
$1: the title of the EPG entry
- $2: the start time of the EPG entry as time_t value (like in the
+ $2: the start time of the EPG entry as time_t value (like in the
shutdown script)
$3: the end time
$4: the channel number of the EPG entry
$5: the long channel name of the EPG entry
- $6: the subtitle of the EPG entry, "" if not present
+ $6: the subtitle of the EPG entry, "" if not present
To execute a command from the main menu you can also press its
associated number without opening the commands menu.
@@ -173,7 +173,7 @@ associated number without opening the commands menu.
Here you can add, edit, delete and execute your own queries on the
EPG. The usage and behavior of this menu is similar to VDR's timer
-menu.
+menu.
=head3 1.2.1 Menu edit search
@@ -214,7 +214,7 @@ See also C<epgsearch(4)> 'Description of the search process'.
=item - B<Use content descriptor>
-Some providers deliver content descriptors in their EPG, like "Movie/Drama",
+Some providers deliver content descriptors in their EPG, like "Movie/Drama",
"Documentation",...(available with vdr-1.7.11)
Select here the descriptors to search for. Multiple choice is possible, that
must match with all given descriptors (AND operator).
@@ -225,8 +225,8 @@ Only available if configured, see below 'Using extended EPG info'.
=item - B<Ignore missing categories:>
-If set to 'Yes' this tells epgsearch that a missing EPG category
-should not exclude an event from the results. Caution: Using this without
+If set to 'Yes' this tells epgsearch that a missing EPG category
+should not exclude an event from the results. Caution: Using this without
any other criterions could flood your timers.
=item - B<Use channel:>
@@ -250,14 +250,14 @@ You'll find the user-defined selection in the list after Friday.
=item - B<Use blacklists:>
Blacklists are a way to exclude unwanted events. Select only global, one, more
-or all blacklists here. If any search result is also contained in one of
+or all blacklists here. If any search result is also contained in one of
the selected blacklists it will be skipped.
=item - B<Use in favorites menu:>
Only available if turned on in setup. With this option you can mark a search
to be used in the favorites menu. The search results of all these searches are
-listed in the favorites menu.
+listed in the favorites menu.
=item - B<Result menu layout:>
@@ -277,8 +277,8 @@ or not.
Default action is creating a timer for the search results. But you can
also choose to simply announce the found event via OSD as soon as it is found
-or to automatically switch to the event before it starts. It's also possible to
-get an announcement via OSD before the event starts and to switch to its channel
+or to automatically switch to the event before it starts. It's also possible to
+get an announcement via OSD before the event starts and to switch to its channel
with 'Ok'.
=item - B<Serial recording:>
@@ -313,13 +313,13 @@ after ... days.
If the given numbers of recordings currently exists, then epgsearch
will not create further timers. After deleting one or more
-recordings it will go on generating new timers.
+recordings it will go on generating new timers.
=item - B<Avoid repeats:>
If you don't want to record repeats, this feature tries to check if
an event was already recorded/programmed and skips it. Please refer
-to the section 'Avoid repeats - internals' below before using it.
+to the section 'Avoid repeats - internals' below before using it.
=item - B<Allowed repeats:>
@@ -339,27 +339,27 @@ compared.
=item - B<Compare subtitle:>
When comparing to events then specify here if the subtitle should be
-compared. With 'if present' epgsearch will classify two events only as equal if
-their episode names match and are not empty.
+compared. With 'if present' epgsearch will classify two events only as equal if
+their episode names match and are not empty.
=item - B<Compare description:>
When comparing to events then specify here if the description should
-be compared.
+be compared.
For comparison all parts of the description, that look like a
category value, are removed first. The remaining text will be
-compared. If this is similar at the value of the next option
+compared. If this is similar at the value of the next option
(regarding the Levinshtein-Distance algorithm) then it will be accepted as equal.
=item - C<Min. match in %:>
-The needed minimum match of descriptions in percent.
+The needed minimum match of descriptions in percent.
=item - B<Compare date:>
-Sometimes an event is repeated many times within some period (day, week, month,...), but one
-cannot distinguish the repeats based on the EPG contents. So the only information is its time.
+Sometimes an event is repeated many times within some period (day, week, month,...), but one
+cannot distinguish the repeats based on the EPG contents. So the only information is its time.
To use this for comparison select the appropriate period.
=item - B<Compare categories:>
@@ -522,7 +522,7 @@ A favorites menu can display a list of your favorite broadcasts. Enable this
if you want an additional menu besides 'Now' and 'Next'. You can choose
between displaying this menu before or after the menus with user-defined
times. Any search can be used as a favorite. You only have to set the option
-'Use in favorites menu' when editing a search.
+'Use in favorites menu' when editing a search.
=item - B<for the next ... hours:>
@@ -667,7 +667,7 @@ search.
Here you can manage blacklists which can be used to suppress unwanted events
within a search.
-A blacklist can also be marked as global. Since the default setting of a search timer
+A blacklist can also be marked as global. Since the default setting of a search timer
for 'use blacklists' is 'only global', this is a simple way to exclude unwanted events
form all search timers, except: If the search timer has the option 'use blacklists: none'
no blacklists are taken into account. Also the search for repeats within the OSD ignores
@@ -713,18 +713,18 @@ in the conflicts overview.
=item - B<Only check within next ... days:>
Here you can specify the day range that should be used for the conflict
-check.
+check.
=item - B<After each timer programming:>
This performs a conflict check after each manual timer programming and - if
the new/modified timer is involved in a conflict - pops up an OSD message
-about it.
+about it.
=item - B<"When a recording starts:>
-Set this to 'yes' if the conflict check should be performed when a recording starts.
-In the case of a conlfict you get immediately a message that informs you about it.
+Set this to 'yes' if the conflict check should be performed when a recording starts.
+In the case of a conlfict you get immediately a message that informs you about it.
The message is only displayed if the conflict is within the next 2 hours.
=item - B<After each search timer update:>
@@ -750,7 +750,7 @@ conflict appears within the given time, use this feature.
=item - B<Avoid notification when replaying:>
-Set this to 'yes' if the don't want to get OSD messages about conflicts if
+Set this to 'yes' if the don't want to get OSD messages about conflicts if
you currently replay something. Nevertheless messages will be displayed if
the first upcoming conflict is within the next 2 hours.
@@ -796,7 +796,7 @@ conflict check setup to be activated.)
=item - B<Send to:>
-The mail adress of the recipient. Note: Some providers (like Arcor) don't
+The mail adress of the recipient. Note: Some providers (like Arcor) don't
allow the same adresse for sender and recipient.
=item - B<Mail method:>
@@ -810,7 +810,7 @@ You can choose between:
=item - B<Email address:>
-Your full(!) email account address to be used for sending the mail.
+Your full(!) email account address to be used for sending the mail.
=item - B<SMTP server:>
@@ -848,7 +848,7 @@ it as search timer. Now the plugin scans EPG entries in certain update
intervals (->setup) in the background and creates timers if there
are matching entries. If you don't like to get a new timer, but only
want to be informed about the event set 'Announce only (no timer)' to
-yes.
+yes.
Since these search timers are quite useful for serials, you can set
the option 'serial recording' in a search, which creates timers
whose recordings are stored in a folder with the serials name and
@@ -865,8 +865,8 @@ touch /etc/vdr/plugins/epgsearch/.epgsearchupdate
This can also be part of your shutdown script. (Add here a sleep
afterwards to give the plugin the time to finish the scan.)
-For more info about searchtimers please refer to C<epgsearch(4)>,
-'Description of the search process' and 'How do Search Timers work?'
+For more info about searchtimers please refer to C<epgsearch(4)>,
+'Description of the search process' and 'How do Search Timers work?'
=head2 2.1 'Avoid repeats' - internals
@@ -887,14 +887,14 @@ extended EPG categories within the description of an event to be
compared with the elements of another event.
This comparison is always done case-sensitive and for the whole
-term. But the description of an event makes an exception of this.
+term. But the description of an event makes an exception of this.
First all text within the description will be truncated that looks
like an extended category entry, e.g. 'Rating: tip'. An extended
category entry is a line of text beginning with max. 40 signs,
followed by ':' and ending with max. 60 further signs.
The reason for this cutting is that some categories like the rating of
an event are not part of the description of the repeat of the same
-event.
+event.
The remaining text will now be compared by length. If the difference
is bigger then 90%, then we rate the description of the two events as
@@ -913,7 +913,7 @@ timer for the same event.
To remember past recordings epgsearch stores their info in the file
epgsearchdone.data. You can have a look at the contents of this file
-calling 'show recordings done' in the 'actions' of the searches menu.
+calling 'show recordings done' in the 'actions' of the searches menu.
This file only stores info about recordings that are complete,
i.e. that started and stopped just in time. So a broken recording will
not be stored in this file and epgsearch will automatically try to
@@ -926,7 +926,7 @@ After creating such a search timer, you should first check if it does
what is intended. Therefore the menu of search results has an
additional mode for the key 'blue' named 'Timer preview'. Here you can
see, what timers the next update would create. Existing timers are
-labeled with 'T', future timers with 'P'.
+labeled with 'T', future timers with 'P'.
Hint: If the programming results in a conflict simply disable the
conflicting timer in the timers menu. The next search timer update,
@@ -950,10 +950,10 @@ See C<epgsearch(4)>.
Some EPG providers deliver additional EPG information like the type of
event, the video and audio format, cast,... in the content summary.
-Note: This is different from the content descriptors introduced in vdr-1.7.11,
+Note: This is different from the content descriptors introduced in vdr-1.7.11,
that are delivered as extra data with a common standard. Unfortunately not
all providers deliver this data, or the set wrong descriptors. So you can
-use the approach of 'extended EPG info' here, which is a way to extract that
+use the approach of 'extended EPG info' here, which is a way to extract that
info from the content summary.
Using tvm2vdr or epg4vdr you can import this into vdr.
@@ -971,9 +971,9 @@ format of the file is as follows:
- 'search mode' specifies the search mode:
text comparison:
0 - the whole term must appear as substring
- 1 - all single terms (delimiters are ',', ';', '|' or '~')
+ 1 - all single terms (delimiters are ',', ';', '|' or '~')
must exist as substrings. This is the default search mode.
- 2 - at least one term (delimiters are ',', ';', '|' or '~')
+ 2 - at least one term (delimiters are ',', ';', '|' or '~')
must exist as substring.
3 - matches exactly
4 - regular expression
@@ -1006,16 +1006,16 @@ the category name as also the value.
=head1 5. Replacing the standard schedule menu
-To use this plugin as a replacement for the default green key, simply
+To use this plugin as a replacement for the default green key, simply
put the line
Green @epgsearch
in your keymacros.conf. If you don't like to get another plugin entry
in your main menu, first hide it by setup. Then you could use my
-launcher-plugin and put the line
+launcher-plugin and put the line
- Green @launcher x
+ Green @launcher x
in your keymacros.conf, where x is the position of the Epgsearch
plugin within launchers menu listing.
@@ -1028,7 +1028,7 @@ this patch the entry should look like
Green Schedule
This patch is already included in some patch collections, like the
-Bigpatch.
+Bigpatch.
=head1 6. Add-ons
diff --git a/doc-src/en/epgsearch.4.txt b/doc-src/en/epgsearch.4.txt
index 5fc60a5..d6fc4cf 100644
--- a/doc-src/en/epgsearch.4.txt
+++ b/doc-src/en/epgsearch.4.txt
@@ -31,8 +31,8 @@ If you are using extended EPG information, you can use variables as
part of a directory entry of a search timer. These variables always have
the form '%variable%'. The name of a variable corresponds with the
internal name of an extended EPG info, as specified in the file
-epgsearchcats.conf (samples can be found in subdirectory 'conf').
-Example:
+epgsearchcats.conf (samples can be found in subdirectory 'conf').
+Example:
1|Category|Kategorie|Information,Kinder,Musik,Serie,Show,Spielfilm,Sport|3
@@ -52,7 +52,7 @@ subtitle will be automatically appended. So the directory entry
%Category%~%Genre%~%Title%~%Subtitle%
-is the same as
+is the same as
%Category%~%Genre%
(with 'serial recording' set to 'yes').
@@ -81,18 +81,18 @@ is B<':'>:
1 - unique search timer id
2 - the search term
3 - use time? 0/1
- 4 - start time in HHMM
- 5 - stop time in HHMM
+ 4 - start time in HHMM
+ 5 - stop time in HHMM
6 - use channel? 0 = no, 1 = Interval, 2 = Channel group, 3 = FTA only
7 - if 'use channel' = 1 then channel id[|channel id] in vdr format,
one entry or min/max entry separated with |, if 'use channel' = 2
- then the channel group name
- 8 - match case? 0/1
+ then the channel group name
+ 8 - match case? 0/1
9 - search mode:
0 - the whole term must appear as substring
- 1 - all single terms (delimiters are blank,',', ';', '|' or '~')
+ 1 - all single terms (delimiters are blank,',', ';', '|' or '~')
must exist as substrings.
- 2 - at least one term (delimiters are blank, ',', ';', '|' or '~')
+ 2 - at least one term (delimiters are blank, ',', ';', '|' or '~')
must exist as substring.
3 - matches exactly
4 - regular expression
@@ -104,10 +104,10 @@ is B<':'>:
13 - use duration? 0/1
14 - min duration in minutes
15 - max duration in minutes
- 16 - use as search timer? 0/1/2 (with 2 one can specify time margins in
+ 16 - use as search timer? 0/1/2 (with 2 one can specify time margins in
parameter 48/49 where the search timer is active)
17 - use day of week? 0/1
- 18 - day of week (0 = Sunday, 1 = Monday...;
+ 18 - day of week (0 = Sunday, 1 = Monday...;
-1 Sunday, -2 Monday, -4 Tuesday, ...; -7 Sun, Mon, Tue)
19 - use series recording? 0/1
20 - directory for recording
@@ -129,9 +129,9 @@ is B<':'>:
(a ':' will be translated to "!^colon^!", e.g. in "16:9")
29 - avoid repeats? 0/1
30 - allowed repeats
- 31 - compare title when testing for a repeat? 0/1
- 32 - compare subtitle when testing for a repeat? 0=no/1=yes/2=yes-if present
- 33 - compare description when testing for a repeat? 0/1
+ 31 - compare title when testing for a repeat? 0/1
+ 32 - compare subtitle when testing for a repeat? 0=no/1=yes/2=yes-if present
+ 33 - compare description when testing for a repeat? 0/1
34 - compare extended EPG info when testing for a repeat?
This entry is a bit field of the category IDs.
35 - accepts repeats only within x days
@@ -166,7 +166,7 @@ See also C<epgsearch.conf(5)>.
First, for each broadcasting a search text divided by '~' is created,
depending on the settings of 'Use title', 'Use subtitle' and 'Use
-description':
+description':
title~subtitle~description
@@ -184,7 +184,7 @@ if the search term is found anywhere in the search text.
=item - 'at least one word', 'all words'
first the search term will be split in single words. Delimiters are a
-blank and the characters ',' ';' '|' '~'.
+blank and the characters ',' ';' '|' '~'.
Then we check if at least one or all words appear in the search text.
@@ -217,10 +217,10 @@ but replaces this one later if the subtitle is present.
Start and end times of a broadcasting often vary a little bit. To avoid
getting many different timers for the same event, the plugin
checks before adding a new timer, if there is one, that has start and
-end times which only differ by a maximum of 10 minutes (or the events
-duration if this is less then 10 minutes). If so, the present timer is
-modified, else a new timer is created. If the timer was set to inactive
-there will be no update. Also manually corrected priority or lifetime
+end times which only differ by a maximum of 10 minutes (or the events
+duration if this is less then 10 minutes). If so, the present timer is
+modified, else a new timer is created. If the timer was set to inactive
+there will be no update. Also manually corrected priority or lifetime
will not be changed when updating.
If you have set 'Announce only (no timer)' to yes, no timer is
@@ -268,7 +268,7 @@ OSD when the update has finished
This menu displays directories, that can be used for search timers or
ordinary timers. The items displayed are read from the following
-sources:
+sources:
* current recording directories
* current timer directories
@@ -389,13 +389,13 @@ the following commands are available:
* 'UPDD' to reload the file epgsearchdone.data, e.g. after an
external tool has modified it.
* 'SETS <ON|OFF>' to temporarily activate or cancel the search timer background
- thread.
+ thread.
* 'FIND <settings>' for searching the EPG
input is the same as with 'NEWS'. output is a list of found events formatted
as 'NEWT' lines. So they can be immediately used to create a new timer for
an event.
* 'QRYS < ID(s) >' to get the results for a search with the given
- ID. Multiple IDs can also be passed and have to be separated with '|'.
+ ID. Multiple IDs can also be passed and have to be separated with '|'.
The results are formatted like this:
search ID : // the ID of the corresponding search timer
@@ -410,10 +410,10 @@ the following commands are available:
timer file : // timer file (only valid if timer flag is > 0)
timer flag : // 0 = no timer needed, 1 = has timer, 2 timer planned for next update)
* 'QRYS <settings>' to get the results for a search with the given search
- settings.
+ settings.
* 'QRYF [hours]' to get the results for the favorites menu, see QRYS for
result format. The optional parameter specifies the number of hours to
- evaluate and defaults to 24h.
+ evaluate and defaults to 24h.
* 'MENU [PRG|NOW|SUM]' calls one of the main menus of epgsearch or the summary
of the current event.
* 'UPDT' reloads the search timers from epgsearch.conf
@@ -469,12 +469,12 @@ the following commands are available:
=head2 timer conflicts:
* 'LSCC [REL]' returns the current timer conflicts. With the option 'REL' only
- relevant conflicts are listed. The result list looks like this for example
+ relevant conflicts are listed. The result list looks like this for example
when we have 2 timer conflicts at one time:
1190232780:152|30|50#152#45:45|10|50#152#45
- '1190232780' is the time of the conflict in seconds since 1970-01-01. It's
+ '1190232780' is the time of the conflict in seconds since 1970-01-01. It's
followed by list of timers that have a conflict at this time:
'152|30|50#152#45' is the description of the first conflicting timer. Here:
@@ -491,7 +491,7 @@ the following commands are available:
The file F<epgsearchmenu.conf> in your epgsearch config directory is used to store
the entries for customizing the EPG menus. You specify the look of each menu
(What's on now, What's on next, What's on at ..., Schedule, Search results,
-Favorites) with a separate line. Here's a sample:
+Favorites) with a separate line. Here's a sample:
MenuWhatsOnNow=%chnr%:3|%progrt2s%:5| %time% %t_status%:8|%category%:6| %title% ~ %subtitle%:35
MenuWhatsOnNext=%chnr%:3|%time% %t_status%:8|%category%:8| %title% ~ %subtitle%:35
@@ -509,7 +509,7 @@ and finally the title and subtitle.
The values for MenuWhatsOnNext, MenuWhatsOnElse, MenuSchedule,
MenuSearchResults, MenuFavorites specify the menu 'What's on next', 'What's on
at ...', 'Schedule', 'Search results' and 'Favorites' respectively. If you do
-not specify one entry, epgsearch uses it's default menu look.
+not specify one entry, epgsearch uses it's default menu look.
'MenuSearchResults' has something special: If you want to have different
layouts for your search results depending on the search, you can use more then
@@ -539,7 +539,7 @@ The following variables exist:
%time_d% - start day in format TT
%time_lng% - start time in seconds since 1970-01-01 00:00
%timespan% - timespan from now to the beginning of an event, e.g. 'in 15m'
- or the time an event is already running, e.g. '10m'.
+ or the time an event is already running, e.g. '10m'.
%length% - length in seconds
%title% - title
%subtitle% - subtitle
@@ -562,7 +562,7 @@ for the 'Whats on...' and 'Search results' menu there are also:
%chsh% - the short channel name
%chlng% - the 'normal' channel name
%chdata% - VDR's internal channel representation (e.g. 'S19.2E-1-1101-28106')
- %progr% - graphical progress bar (not for menu 'Search results'),
+ %progr% - graphical progress bar (not for menu 'Search results'),
requires VDRSymbols font
%progrT2S% - progress bar in text2skin style (not for menu 'Search results')
@@ -624,7 +624,7 @@ title always displays the number of relevant conflicts and the total number.
The list displays first the time when a conflict appears and then all timers
that will fail here. A timer entry consists of the channel number and its name
followed by the timer priority and the percentage value that shows how much of
-the timer will be recorded. Finally the timer's file entry is displayed.
+the timer will be recorded. Finally the timer's file entry is displayed.
When you select a timer entry and press 'Ok' or 'Details' you get a new menu
which displays all concurrent timers. This menu allows you to resolve the
@@ -640,16 +640,16 @@ An entry of this menu consists of the sign '>' to indicate an active timer,
the channel number, the start and stop time, the priority, the number of the
device that will do the recording (or 'C' for conflict) and the timer's file
entry. Pressing 'Ok' on a timer entry will show you its event description if
-present.
+present.
If one returns from this menu to the conflict overview menu there will be an
automatic update to see if a conflict was really resolved. Some changes to a
timer (like modifying start/stop or deleting a timer) in the conflict details
menu also cause an immediate return to the overview menu and produce an
-update.
+update.
Note:
-There's a 'hidden' setup option epgsearch.ConflCheckCmd, that allows executing a
+There's a 'hidden' setup option epgsearch.ConflCheckCmd, that allows executing a
command for each timer causing a conflict. You have to set this directly in VDRs
setup.conf like this:
@@ -733,16 +733,16 @@ Other possible checks:
You can call external commands. The returned string will be assigned
to a variable
- %uservar%=system(scriptname[, parameters])
+ %uservar%=system(scriptname[, parameters])
Calls the script "scriptname" with the parameters defined in the optional list
of 'parameters'. This can be an arbitrary expression containing other user
variables, but not again a system call or a conditional expression.
-Sample:
+Sample:
+
+ %myVar%=system(/usr/local/bin/myscript.sh, -t %title% -s %subtitle% -u %myOtherVar%)
- %myVar%=system(/usr/local/bin/myscript.sh, -t %title% -s %subtitle% -u %myOtherVar%)
-
The script must return a string B<without> line break!
If the script returns nothing, an empty string will be assigned to the
@@ -752,18 +752,18 @@ Variable %Result%.
You can call a TCP service with the following syntax:
- %uservar%=connect(<addr>, <port>, [<data>])
+ %uservar%=connect(<addr>, <port>, [<data>])
This will connect to <addr> through the given port and pass the optional given
-data. <addr> can be an IP address or the domain name of the TCP service. The result
-returned by the service must be terminated with a line feed.
+data. <addr> can be an IP address or the domain name of the TCP service. The result
+returned by the service must be terminated with a line feed.
=head2 Get the length of an argument
-When passing any values to the connect or system command it can be helpful to have
+When passing any values to the connect or system command it can be helpful to have
the length of an argument for simple parsing. This can be done with
- %uservar%=length(<any arguments>)
+ %uservar%=length(<any arguments>)
Sample:
@@ -778,7 +778,7 @@ See C<epgsearchcats.conf(5)>.
=head2 EXAMPLES
- # Weekday, Date, Time
+ # Weekday, Date, Time
%DateStr%=%time_w% %date% %time%
# Themes or Subtitle or Date
@@ -814,11 +814,11 @@ mail you have to define the following sections:
- "subject" to be used as mail subject
- "mailbody" the body of the mail:
put %update.newtimers% in the place where the list of new timers should
- appear. The same for %update.modtimers%, %update.deltimers% and
+ appear. The same for %update.modtimers%, %update.deltimers% and
%update.newevents% for the list of changed or deleted timers and event
announcements.
- "timer" the description of one timer and "event" with the description of
- one event. This section is used to display one timer within a timer list,
+ one event. This section is used to display one timer within a timer list,
e.g. in %update.newtimers%. The same for "event".
All sections are optional, e.g. if you don't use event announcements you
@@ -833,7 +833,7 @@ The following variables can be used in the section <mailbody>:
displayed as defined in the section '<timer>'
- %update.countnewtimers% - the number of new timers
- %update.modtimers% - same as %update.newtimers% but for modified
- timers.
+ timers.
- %update.countmodtimers% - the number of modified timers
- %update.deltimers% - same as %update.newtimers% but for deleted
timers. (Note: a deleted timer has eventually
@@ -841,7 +841,7 @@ The following variables can be used in the section <mailbody>:
within the timer section will be substituted to
an empty string.)
- %update.countdeltimers% - the number of deleted timers
- - %update.newevents% - will be replaced with the list of events to
+ - %update.newevents% - will be replaced with the list of events to
announce. These events are the search result of
search timers with the action "announce by mail".
The events are displayed as defined in the section
@@ -858,7 +858,7 @@ The following variables can be used in the section <timer>:
- %timer.start% - start time of the timer
- %timer.stop% - stop time of the timer
- %timer.file% - recording directory of the timer
- - %timer.chnr% - channel number
+ - %timer.chnr% - channel number
- %timer.chsh% - short channel name
- %timer.chlng% - channel name
- %timer.search% - name of the search timer, that created the timer
@@ -913,7 +913,7 @@ epgsearch supports a configuration mechanism well-known in linux. The settings o
- epgsearchmenu.conf
- epgsearchcats.conf
-can also be given in a file with arbitrary name in the subdirectory conf.d in
+can also be given in a file with arbitrary name in the subdirectory conf.d in
<plugin-configuration-directory>/epgsearch. This allows one to quickly test different setups only
by exchanging files instead of editing them. The format of these files is
@@ -934,8 +934,8 @@ where <section_name> is one of the following:
The <settings> format follows the one in the corresponding configuration file.
Comments beginning with # are allowed, also blank lines.
-At startup epgsearch first reads its 'regular' configuration files and then the conf.d subdirectory.
-It's allowed to overwrite variables already defined in other files (although this is signaled with a warning in
+At startup epgsearch first reads its 'regular' configuration files and then the conf.d subdirectory.
+It's allowed to overwrite variables already defined in other files (although this is signaled with a warning in
epgsearch's log file.).
@@ -949,7 +949,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearch.conf.5.txt b/doc-src/en/epgsearch.conf.5.txt
index 71dac43..7099860 100644
--- a/doc-src/en/epgsearch.conf.5.txt
+++ b/doc-src/en/epgsearch.conf.5.txt
@@ -20,7 +20,7 @@ is B<':'>:
4 - start time in HHMM
5 - stop time in HHMM
6 - use channel? 0 = no, 1 = Interval, 2 = Channel group, 3 = FTA only
- 7 - if 'use channel' = 1 then channel id[|channel id] in VDR format,
+ 7 - if 'use channel' = 1 then channel id[|channel id] in VDR format,
one entry or min/max entry separated with |, if 'use channel' = 2
then the channel group name
8 - match case? 0/1
@@ -30,17 +30,17 @@ is B<':'>:
must exist as substrings.
2 - at least one term (delimiters are blank, ',', ';', '|' or '~')
must exist as substring.
- 3 - matches exactly
+ 3 - matches exactly
4 - regular expression
- 10 - use title? 0/1
- 11 - use subtitle? 0/1
+ 10 - use title? 0/1
+ 11 - use subtitle? 0/1
12 - use description? 0/1
13 - use duration? 0/1
- 14 - min duration in hhmm
- 15 - max duration in hhmm
+ 14 - min duration in hhmm
+ 15 - max duration in hhmm
16 - use as search timer? 0/1
17 - use day of week? 0/1
- 18 - day of week (0 = Sunday, 1 = Monday...;
+ 18 - day of week (0 = Sunday, 1 = Monday...;
-1 Sunday, -2 Monday, -4 Tuesday, ...; -7 Sun, Mon, Tue)
19 - use series recording? 0/1
20 - directory for recording
@@ -64,12 +64,12 @@ is B<':'>:
(a ':' will be translated to "!^colon^!", e.g. in "16:9")
29 - avoid repeats? 0/1
30 - allowed repeats
- 31 - compare title when testing for a repeat? 0/1
+ 31 - compare title when testing for a repeat? 0/1
32 - compare subtitle when testing for a repeat? 0/1/2
0 - no
1 - yes
- 2 - yes, if present
- 33 - compare description when testing for a repeat? 0/1
+ 2 - yes, if present
+ 33 - compare description when testing for a repeat? 0/1
34 - compare extended EPG info when testing for a repeat?
This entry is a bit field of the category IDs.
35 - accepts repeats only within x days
@@ -94,7 +94,7 @@ is B<':'>:
52 - percentage of match when comparing the summary of two events (with 'avoid repeats')
53 - HEX representation of the content descriptors, each descriptor ID is represented with 2 chars
54 - compare date when testing for a repeat? (0=no, 1=same day, 2=same week, 3=same month)
-
+
A ':' in the search term or the directory entry will be translated in a
'|'. If a '|' exists in the search term, e.g. when using regular
expressions, it will be translated to "!^pipe^!" (I know it's ugly ;-))
@@ -118,7 +118,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchblacklists.conf.5.txt b/doc-src/en/epgsearchblacklists.conf.5.txt
index 859918b..9127378 100644
--- a/doc-src/en/epgsearchblacklists.conf.5.txt
+++ b/doc-src/en/epgsearchblacklists.conf.5.txt
@@ -24,7 +24,7 @@ against "Damme". If so, the result will be dismissed.
=head1 SYNTAX
-This file uses the same syntax as F<epgsearch.conf> except that theres no <use as searchtimer> field.
+This file uses the same syntax as F<epgsearch.conf> except that theres no <use as searchtimer> field.
So there's a shift by one field from this position. Because that, see C<epgsearch.conf(5)>.
=head1 SEE ALSO
@@ -37,7 +37,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchcats.conf.5.txt b/doc-src/en/epgsearchcats.conf.5.txt
index 3877e12..5b4f2f5 100644
--- a/doc-src/en/epgsearchcats.conf.5.txt
+++ b/doc-src/en/epgsearchcats.conf.5.txt
@@ -19,14 +19,14 @@ filename epgsearchcats.conf and then have a look to the search timers
edit menu (after a restart of VDR).
Since setting up a new F<epgsearchcats.conf> is a lot of work, I've added
-a small tool 'createcats', that makes the biggest part of the job. It
-should have been compiled with the plugin and exists in the sources
+a small tool 'createcats', that makes the biggest part of the job. It
+should have been compiled with the plugin and exists in the sources
directory.
See C<createcats(1)> for information about how to use it.
B<Internals:> epgsearch scans the summary of an event for the category
-name followed by ': ' for all categories that have a corresponding
+name followed by ': ' for all categories that have a corresponding
value set in the search timer. The search is case sensitive regarding
the category name as also the value.
@@ -38,13 +38,13 @@ the category name as also the value.
(changing the id later on will force you to re-edit your search timers!)
- 'category name' is the name as delivered by the EPG provider, e.g. 'Genre'
- 'name in menu' is the name displayed in epgsearch.
- - 'values' is an optional list of possible values
+ - 'values' is an optional list of possible values
- 'searchmode' specifies the search mode:
text comparison:
0 - the whole term must appear as substring
1 - all single terms (delimiters are ',', ';', '|' or '~')
must exist as substrings. This is the default search mode.
- 2 - at least one term (delimiters are ',', ';', '|' or '~')
+ 2 - at least one term (delimiters are ',', ';', '|' or '~')
must exist as substring.
3 - matches exactly
4 - regular expression
@@ -54,7 +54,7 @@ the category name as also the value.
12 - greater
13 - greater or equal
14 - equal
- 15 - not equal
+ 15 - not equal
=head1 EXAMPLE
@@ -98,7 +98,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchchangrps.conf.5.txt b/doc-src/en/epgsearchchangrps.conf.5.txt
index cf3ae25..b314dee 100644
--- a/doc-src/en/epgsearchchangrps.conf.5.txt
+++ b/doc-src/en/epgsearchchangrps.conf.5.txt
@@ -31,7 +31,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchdirs.conf.5.txt b/doc-src/en/epgsearchdirs.conf.5.txt
index 6cf79af..5ce296d 100644
--- a/doc-src/en/epgsearchdirs.conf.5.txt
+++ b/doc-src/en/epgsearchdirs.conf.5.txt
@@ -23,7 +23,7 @@ like '%genre%', these entries are always shown before any other
directories. They are also not level dependent, but are always shown
with their full directory.
-If this menu is called from the timer edit menu and an item is
+If this menu is called from the timer edit menu and an item is
selected that contains the variables "%title%" or "%subtitle" then the
'file' item of the timer gets cleared, since title or subtitle already
exist in the 'directory' item.
@@ -69,7 +69,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchmenu.conf.5.txt b/doc-src/en/epgsearchmenu.conf.5.txt
index f200c6a..fb0170c 100644
--- a/doc-src/en/epgsearchmenu.conf.5.txt
+++ b/doc-src/en/epgsearchmenu.conf.5.txt
@@ -20,7 +20,7 @@ Favorites) with a separate line.
=head1 SYNTAX
-E.g. the entry 'MenuWhatsOnNow' tells epgsearch how you would like to build a
+E.g. the entry 'MenuWhatsOnNow' tells epgsearch how you would like to build a
line for the menu 'What's on now'. This would create a menu line starting with
the channel number, followed by a progress bar in text2skin style, a space of
one char, the start time, the timer status, the EPG category (like "movie")
@@ -46,13 +46,13 @@ default one.
The following variables exist:
- %time% - start time in format HH:MM
+ %time% - start time in format HH:MM
%date% - start date in format TT.MM.YY
%datesh% - start date in format TT.MM.
%time_w% - weekday name
%time_d% - start day in format TT
%time_lng% - start time in seconds since 1970-01-01 00:00
- %title% - title
+ %title% - title
%subtitle% - subtitle
%t_status% - timer status ('T', 't', 'R')
%v_status% - VPS status
@@ -77,8 +77,8 @@ the variables are not case sensitive.
An entry consists of up to 6 tables separated with '|'. The last entry of
each table should declare the table width in chars, separated with ':'.
-If you use a separator like '~', '-' or '#' to separate items like title or
-subtitle, e.g. %title% ~ %subtitle%, and the subtitle is empty, then epgsearch
+If you use a separator like '~', '-' or '#' to separate items like title or
+subtitle, e.g. %title% ~ %subtitle%, and the subtitle is empty, then epgsearch
will try to fix this automatically to avoid a trailing separator.
You should vary the tab width values to fit your needs, since the look often
@@ -110,7 +110,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchswitchtimers.conf.5.txt b/doc-src/en/epgsearchswitchtimers.conf.5.txt
index bf85de4..8dbe038 100644
--- a/doc-src/en/epgsearchswitchtimers.conf.5.txt
+++ b/doc-src/en/epgsearchswitchtimers.conf.5.txt
@@ -38,7 +38,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchtemplates.conf.5.txt b/doc-src/en/epgsearchtemplates.conf.5.txt
index b796abc..189e3b2 100644
--- a/doc-src/en/epgsearchtemplates.conf.5.txt
+++ b/doc-src/en/epgsearchtemplates.conf.5.txt
@@ -25,7 +25,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/epgsearchuservars.conf.5.txt b/doc-src/en/epgsearchuservars.conf.5.txt
index ce0827d..4ab65eb 100644
--- a/doc-src/en/epgsearchuservars.conf.5.txt
+++ b/doc-src/en/epgsearchuservars.conf.5.txt
@@ -95,7 +95,7 @@ The following variables exist:
%time% - start time in format HH:MM
%timeend% - end time in format HH:MM
%date% - start date in format TT.MM.YY
- %datesh% - start date in format TT.MM.
+ %datesh% - start date in format TT.MM.
%time_w% - weekday name
%time_d% - start day in format TT
%time_lng% - start time in seconds since 1970-01-01 00:00
@@ -126,7 +126,7 @@ See also C<epgsearchcats.conf(5)>.
=head1 EXAMPLES
- # Weekday, Date, Time
+ # Weekday, Date, Time
%DateStr%=%time_w% %date% %time%
# Themes or Subtitle or Date
@@ -147,7 +147,7 @@ Mike Constabel <epgsearch (at) constabel (dot) net>
=head1 REPORT BUGS
-Bug reports (german):
+Bug reports (german):
L<http://www.vdr-developer.org/mantisbt/>
diff --git a/doc-src/en/noannounce.conf.5.txt b/doc-src/en/noannounce.conf.5.txt
index 2df5341..02ace85 100644
--- a/doc-src/en/noannounce.conf.5.txt
+++ b/doc-src/en/noannounce.conf.5.txt
@@ -12,7 +12,7 @@ If the user presses one of the keys 'Ok', '0', ... '9' while the announcement
of an event is displayed, he will be asked if further announcements of this
event should be disabled for ever (user hit '0' or 'Ok') or for the next 'x'
days (user hit '1' to '9'). After pressing 'Ok' again, this setting will be
-stored.
+stored.
=head1 FORMAT
diff --git a/epgsearch.c b/epgsearch.c
index 8e809b2..e28bdb6 100644
--- a/epgsearch.c
+++ b/epgsearch.c
@@ -69,7 +69,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "confdloader.h"
#include "pending_notifications.h"
-static const char VERSION[] = "1.0.0";
+static const char VERSION[] = "1.0.1";
static const char DESCRIPTION[] = trNOOP("search the EPG for repeats and more");
// globals
@@ -105,14 +105,14 @@ cPluginEpgsearch::~cPluginEpgsearch()
if (ConfigDir) free(ConfigDir);
}
-const char* cPluginEpgsearch::Version(void)
-{
- return VERSION;
+const char* cPluginEpgsearch::Version(void)
+{
+ return VERSION;
}
-const char* cPluginEpgsearch::Description(void)
-{
- return tr(DESCRIPTION);
+const char* cPluginEpgsearch::Description(void)
+{
+ return tr(DESCRIPTION);
}
const char *cPluginEpgsearch::CommandLineHelp(void)
@@ -136,7 +136,7 @@ const char *cPluginEpgsearch::MainMenuEntry(void)
if (isempty(EPGSearchConfig.mainmenuentry))
return tr("Program guide");
else
- return EPGSearchConfig.mainmenuentry;
+ return EPGSearchConfig.mainmenuentry;
}
bool cPluginEpgsearch::ProcessArgs(int argc, char *argv[])
@@ -183,23 +183,23 @@ bool cPluginEpgsearch::ProcessArgs(int argc, char *argv[])
while ((c = getopt_long(argc, argv, "f:c:l:v:m:r", long_options, &i)) != -1) {
switch (c) {
- case 'f':
+ case 'f':
cSVDRPClient::SVDRPSendCmd = optarg;
EPGSearchConfig.useExternalSVDRP = 1;
break;
- case 'c':
+ case 'c':
ConfigDir = strdup(optarg);
break;
- case 'l':
+ case 'l':
cLogFile::LogFileName = optarg;
break;
- case 'v':
+ case 'v':
cLogFile::loglevellimit = atoi(optarg);
break;
- case 'r':
+ case 'r':
reloadMenuConf = true;
break;
- case 'm':
+ case 'm':
cMailNotifier::MailCmd = optarg;
break;
default: return false;
@@ -217,7 +217,7 @@ bool cPluginEpgsearch::ProcessArgs(int argc, char *argv[])
bool cPluginEpgsearch::Service(const char *Id, void *Data)
{
- if (strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0 && EPGSearchConfig.ReplaceOrgSchedule!=0)
+ if (strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0 && EPGSearchConfig.ReplaceOrgSchedule!=0)
{
if (Data == NULL)
return true;
@@ -226,12 +226,12 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
*menu = (cOsdMenu*) MainMenuAction();
return true;
}
-
+
if (strcmp(Id, "Epgsearch-search-v1.0") == 0) {
if (Data == NULL)
return true;
cSearchExt* SearchExt = new cSearchExt;
-
+
Epgsearch_search_v1_0* searchData = (Epgsearch_search_v1_0*) Data;
searchData->pResultMenu = NULL;
strcpy(SearchExt->search,searchData->query);
@@ -252,7 +252,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (strcmp(Id, "Epgsearch-exttimeredit-v1.0") == 0 && !EPGSearchConfig.useVDRTimerEditMenu) {
if (Data == NULL)
return true;
-
+
Epgsearch_exttimeredit_v1_0* serviceData = (Epgsearch_exttimeredit_v1_0*) Data;
serviceData->pTimerMenu = new cMenuMyEditTimer(serviceData->timer, serviceData->bNew, serviceData->event);
@@ -283,7 +283,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (strcmp(Id, "Epgsearch-searchmenu-v1.0") == 0) {
if (Data == NULL)
return true;
-
+
EpgSearchMenu_v1_0* serviceData = (EpgSearchMenu_v1_0*) Data;
serviceData->Menu = new cMenuEPGSearchExt();
@@ -292,7 +292,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (strcmp(Id, "Epgsearch-conflictmenu-v1.0") == 0) {
if (Data == NULL)
return true;
-
+
EpgSearchMenu_v1_0* serviceData = (EpgSearchMenu_v1_0*) Data;
serviceData->Menu = new cMenuConflictCheck();
@@ -301,7 +301,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (strcmp(Id, "Epgsearch-lastconflictinfo-v1.0") == 0) {
if (Data == NULL)
return true;
-
+
Epgsearch_lastconflictinfo_v1_0* serviceData = (Epgsearch_lastconflictinfo_v1_0*) Data;
serviceData->nextConflict = cConflictCheckThread::m_cacheNextConflict;
serviceData->relevantConflicts = cConflictCheckThread::m_cacheRelevantConflicts;
@@ -313,7 +313,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (Data == NULL)
return true;
cSearchExt* SearchExt = new cSearchExt;
-
+
Epgsearch_searchresults_v1_0* searchData = (Epgsearch_searchresults_v1_0*) Data;
searchData->pResultList = NULL;
strcpy(SearchExt->search,searchData->query);
@@ -335,7 +335,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
results->SortBy(CompareEventTime);
searchData->pResultList = new cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>;
cSearchResult *result = results->First();
- while (result)
+ while (result)
{
searchData->pResultList->Add(new Epgsearch_searchresults_v1_0::cServiceSearchResult(result->event));
result = results->Next(result);
@@ -367,9 +367,9 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
lTimer->switchMinsBefore = serviceData->switchMinsBefore;
lTimer->mode = serviceData->announceOnly;
} else {
- cMutexLock SwitchTimersLock(&SwitchTimers);
- SwitchTimers.Add(new cSwitchTimer(serviceData->event,serviceData->switchMinsBefore,serviceData->announceOnly));
- SwitchTimers.Save();
+ cMutexLock SwitchTimersLock(&SwitchTimers);
+ SwitchTimers.Add(new cSwitchTimer(serviceData->event,serviceData->switchMinsBefore,serviceData->announceOnly));
+ SwitchTimers.Save();
cSwitchTimerThread::Init();
} // if
serviceData->success=true;
@@ -378,14 +378,14 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
case 2: {// delete
cSwitchTimer *lTimer = SwitchTimers.InSwitchList(serviceData->event);
serviceData->success=lTimer!=NULL;
- if (lTimer) {
- cMutexLock SwitchTimersLock(&SwitchTimers);
+ if (lTimer) {
+ cMutexLock SwitchTimersLock(&SwitchTimers);
SwitchTimers.Del(lTimer);
- SwitchTimers.Save();
+ SwitchTimers.Save();
} // if
break;
} // 2
- default:
+ default:
serviceData->success=false;
break;
} // switch
@@ -395,7 +395,7 @@ bool cPluginEpgsearch::Service(const char *Id, void *Data)
if (strcmp(Id, "Epgsearch-quicksearch-v1.0") == 0) {
if (Data == NULL)
return true;
-
+
EpgSearchMenu_v1_0* serviceData = (EpgSearchMenu_v1_0*) Data;
serviceData->Menu = new cMenuQuickSearch(new cSearchExt);
@@ -457,9 +457,9 @@ bool cPluginEpgsearch::Start(void)
TimersDone.Load(AddDirectory(CONFIGDIR, "timersdone.conf"));
PendingNotifications.Load(AddDirectory(CONFIGDIR, "pendingnotifications.conf"));
- cSearchTimerThread::Init(this);
- cSwitchTimerThread::Init();
- cConflictCheckThread::Init(this);
+ cSearchTimerThread::Init(this);
+ cSwitchTimerThread::Init();
+ cConflictCheckThread::Init(this);
CheckUTF8();
@@ -511,7 +511,7 @@ cOsdObject *cPluginEpgsearch::DoInitialSearch(char* rcFilename)
}
else
LogFile.eSysLog("could not load '%s'", rcFilename);
-
+
return NULL;
}
@@ -539,7 +539,7 @@ cOsdObject *cPluginEpgsearch::MainMenuAction(void)
pMenu = DoInitialSearch(rcFilename);
else
pMenu = new cMenuSearchMain();
-
+
free(rcFilename);
return pMenu;
}
@@ -608,7 +608,7 @@ bool cPluginEpgsearch::SetupParse(const char *Name, const char *Value)
if (!strcasecmp(Name, "OnePressTimerCreation")) EPGSearchConfig.onePressTimerCreation = atoi(Value);
if (!strcasecmp(Name, "ShowFavoritesMenu")) EPGSearchConfig.showFavoritesMenu = atoi(Value);
if (!strcasecmp(Name, "FavoritesMenuTimespan")) EPGSearchConfig.FavoritesMenuTimespan = atoi(Value);
-
+
if (!strcasecmp(Name, "UserMode1Description")) EPGSearchConfig.ShowModes[showUserMode1].SetDescription(Value);
if (!strcasecmp(Name, "UserMode1Time")) EPGSearchConfig.ShowModes[showUserMode1].SetTime(atoi(Value));
if (!strcasecmp(Name, "UserMode1UseIt")) EPGSearchConfig.ShowModes[showUserMode1].SetUsage(atoi(Value));
@@ -660,20 +660,20 @@ bool cPluginEpgsearch::SetupParse(const char *Name, const char *Value)
if (!strcasecmp(Name, "DefRecordingDir")) strcpy(EPGSearchConfig.defrecdir, Value);
if (!strcasecmp(Name, "UseVDRTimerEditMenu")) EPGSearchConfig.useVDRTimerEditMenu = atoi(Value);
- if (!strcasecmp(Name, "ShowChannelGroups")) EPGSearchConfig.showChannelGroups = atoi(Value);
- if (!strcasecmp(Name, "ShowDaySeparators")) EPGSearchConfig.showDaySeparators = atoi(Value);
+ if (!strcasecmp(Name, "ShowChannelGroups")) EPGSearchConfig.showChannelGroups = atoi(Value);
+ if (!strcasecmp(Name, "ShowDaySeparators")) EPGSearchConfig.showDaySeparators = atoi(Value);
+
+ if (!strcasecmp(Name, "ShowEmptyChannels")) EPGSearchConfig.showEmptyChannels = atoi(Value);
- if (!strcasecmp(Name, "ShowEmptyChannels")) EPGSearchConfig.showEmptyChannels = atoi(Value);
+ if (!strcasecmp(Name, "DefSearchTemplateID")) EPGSearchConfig.DefSearchTemplateID = atoi(Value);
- if (!strcasecmp(Name, "DefSearchTemplateID")) EPGSearchConfig.DefSearchTemplateID = atoi(Value);
+ if (!strcasecmp(Name, "AddSubtitleToTimerMode")) EPGSearchConfig.addSubtitleToTimer = (addSubtitleToTimerMode) atoi(Value);
- if (!strcasecmp(Name, "AddSubtitleToTimerMode")) EPGSearchConfig.addSubtitleToTimer = (addSubtitleToTimerMode) atoi(Value);
-
- if (!strcasecmp(Name, "MailViaScript")) EPGSearchConfig.mailViaScript = atoi(Value);
- if (!strcasecmp(Name, "MailNotificationSearchtimers")) EPGSearchConfig.sendMailOnSearchtimers = atoi(Value);
+ if (!strcasecmp(Name, "MailViaScript")) EPGSearchConfig.mailViaScript = atoi(Value);
+ if (!strcasecmp(Name, "MailNotificationSearchtimers")) EPGSearchConfig.sendMailOnSearchtimers = atoi(Value);
if (!strcasecmp(Name, "MailNotificationSearchtimersHours")) EPGSearchConfig.sendMailOnSearchtimerHours = atoi(Value);
if (!strcasecmp(Name, "MailNotificationSearchtimersLastAt")) EPGSearchConfig.lastMailOnSearchtimerAt = atol(Value);
- if (!strcasecmp(Name, "MailNotificationConflicts")) EPGSearchConfig.sendMailOnConflicts = atoi(Value);
+ if (!strcasecmp(Name, "MailNotificationConflicts")) EPGSearchConfig.sendMailOnConflicts = atoi(Value);
if (!strcasecmp(Name, "MailAddress")) strcpy(EPGSearchConfig.MailAddress, Value);
if (!strcasecmp(Name, "MailAddressTo")) strcpy(EPGSearchConfig.MailAddressTo, Value);
diff --git a/epgsearchcats.c b/epgsearchcats.c
index 83a472e..73f6ab6 100644
--- a/epgsearchcats.c
+++ b/epgsearchcats.c
@@ -72,9 +72,9 @@ bool cSearchExtCat::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
{
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
valuelen = MAXVALUELEN;
}
strn0cpy(value, pos, valuelen);
@@ -86,12 +86,12 @@ bool cSearchExtCat::Parse(const char *s)
break;
case 3: menuname = strdup(value);
break;
- case 4:
+ case 4:
{
char* szBuffer = strdup(value);
char* pptr;
char* pstrToken=strtok_r(szBuffer, ",", &pptr);
- while(pstrToken)
+ while(pstrToken)
{
nvalues++;
values = (char**) realloc(values, nvalues * sizeof(char*));
@@ -101,7 +101,7 @@ bool cSearchExtCat::Parse(const char *s)
free(szBuffer);
break;
}
- case 5:
+ case 5:
searchmode = atoi(value);
break;
default:
@@ -123,8 +123,8 @@ const char *cSearchExtCat::ToText(void)
string sValues = "";
for(int i=0; i<nvalues; i++)
sValues += string(values[i]) + ((i<nvalues-1)?", ":"");
-
- msprintf(&buffer, "%d|%s|%s|%s|%d",
+
+ msprintf(&buffer, "%d|%s|%s|%s|%d",
id, name, menuname, sValues.c_str(), searchmode);
return buffer;
}
@@ -134,7 +134,7 @@ int cSearchExtCats::GetIndexFromID(int id)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->id == id)
break;
diff --git a/epgsearchcats.h b/epgsearchcats.h
index f50c01c..70f6be0 100644
--- a/epgsearchcats.h
+++ b/epgsearchcats.h
@@ -35,10 +35,10 @@ public:
char* name;
char* menuname;
int searchmode; // text comarison:
- // 0 - substring,
- // 1 - substring-and,
- // 2 - substring or,
- // 3 - equal,
+ // 0 - substring,
+ // 1 - substring-and,
+ // 2 - substring or,
+ // 3 - equal,
// 4 - regular expression,
// 5 - fuzzy (not available for categories)
// numerical comparison:
diff --git a/epgsearchcfg.c b/epgsearchcfg.c
index ff45aaa..aaeb7ad 100644
--- a/epgsearchcfg.c
+++ b/epgsearchcfg.c
@@ -35,7 +35,7 @@ cEPGSearchConfig::cEPGSearchConfig(void)
showChannelNr = 0;
useSearchTimers = 0;
UpdateIntervall = 30;
-#if APIVERSNUM >= 10715
+#if APIVERSNUM >= 10715
SVDRPPort = 6419;
#else
SVDRPPort = 2001;
@@ -133,4 +133,4 @@ int cShowMode::Compare(const cListObject &ListObject) const
return seekTime - p->seekTime;
else
return mode - p->mode;
-}
+}
diff --git a/epgsearchcfg.h b/epgsearchcfg.h
index 42f7b26..499f4b9 100644
--- a/epgsearchcfg.h
+++ b/epgsearchcfg.h
@@ -46,17 +46,17 @@ class cShowMode: public cListObject
{
showMode mode;
time_t seekTime;
- public:
+ public:
char description[30];
int useIt;
int itime;
cShowMode() : mode(showNow), seekTime(0), useIt(0), itime(0) { description[0]=0;}
- cShowMode(showMode Mode, const char* Description, int UseIt=1, int iTime=0, time_t SeekTime=0)
- : mode(Mode), seekTime(SeekTime), useIt(UseIt), itime(iTime)
- {
+ cShowMode(showMode Mode, const char* Description, int UseIt=1, int iTime=0, time_t SeekTime=0)
+ : mode(Mode), seekTime(SeekTime), useIt(UseIt), itime(iTime)
+ {
if (strlen(Description) > 0)
- SetDescription(Description);
+ SetDescription(Description);
else
sprintf(description, "%02d:%02d", iTime/100, iTime%100);
}
@@ -130,11 +130,11 @@ cEPGSearchConfig(void);
int sendMailOnConflicts;
char MailAddressTo[MaxFileName];
char MailAddress[MaxFileName];
- char MailServer[MaxFileName];
+ char MailServer[MaxFileName];
int MailUseAuth;
char MailAuthUser[MaxFileName];
- char MailAuthPass[MaxFileName];
- char LastMailConflicts[MaxFileName];
+ char MailAuthPass[MaxFileName];
+ char LastMailConflicts[MaxFileName];
int mailViaScript;
int manualTimerCheckDefault;
int noAnnounceWhileReplay;
@@ -147,7 +147,7 @@ cEPGSearchConfig(void);
int checkEPGWarnByMail;
int checkEPGchannelGroupNr;
time_t lastMailOnSearchtimerAt;
- char conflCheckCmd[MaxFileName*10];
+ char conflCheckCmd[MaxFileName*10];
};
extern cEPGSearchConfig EPGSearchConfig;
diff --git a/epgsearchext.c b/epgsearchext.c
index 80fa558..7d497e4 100644
--- a/epgsearchext.c
+++ b/epgsearchext.c
@@ -28,11 +28,11 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "epgsearchtools.h"
#include <vdr/tools.h>
#include "menu_searchresults.h"
-#include "menu_dirselect.h"
+#include "menu_dirselect.h"
#include "changrp.h"
-#include "menu_search.h"
-#include "menu_searchedit.h"
-#include "menu_recsdone.h"
+#include "menu_search.h"
+#include "menu_searchedit.h"
+#include "menu_recsdone.h"
#include "searchtimer_thread.h"
#include "timer_thread.h"
#include "uservars.h"
@@ -58,7 +58,7 @@ cSearchExt::cSearchExt(void)
useChannel = false;
channelMin = Channels.GetByNumber(cDevice::CurrentChannel());
channelMax = Channels.GetByNumber(cDevice::CurrentChannel());
- channelGroup = NULL;
+ channelGroup = NULL;
useCase = false;
mode = 0;
useTitle = true;
@@ -84,7 +84,7 @@ cSearchExt::cSearchExt(void)
catvalues = (char**) malloc(SearchExtCats.Count() * sizeof(char*));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
catvalues[index] = (char*)malloc(MaxFileName);
*catvalues[index] = 0;
@@ -130,7 +130,7 @@ cSearchExt::~cSearchExt(void)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
free(catvalues[index]);
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -149,7 +149,7 @@ cSearchExt& cSearchExt::operator= (const cSearchExt &SearchExt)
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
*catvalues[index] = 0;
strcpy(catvalues[index], SearchExt.catvalues[index]);
@@ -194,13 +194,13 @@ cSearchExt& cSearchExt::operator= (const cSearchExt &SearchExt)
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
strcpy(catvalues[index], templ->catvalues[index]);
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
}
-
+
if (!ignoreChannelSettings)
{
channelMin = templ->channelMin;
@@ -254,7 +254,7 @@ char* replaceSpecialChars(const char* in)
{
char* tmp_in = strdup(in);
while(strstr(tmp_in, "|"))
- tmp_in = strreplace(tmp_in, "|", "!^pipe^!"); // ugly: replace a pipe with something,
+ tmp_in = strreplace(tmp_in, "|", "!^pipe^!"); // ugly: replace a pipe with something,
strreplace(tmp_in, ':', '|');
return tmp_in;
}
@@ -308,46 +308,46 @@ const char *cSearchExt::ToText()
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
char* catvalue = NULL;
msprintf(&catvalue, "%s", catvalues[index]);
while(strstr(catvalue, ":"))
catvalue = strreplace(catvalue, ":", "!^colon^!"); // ugly: replace with something, that should not happen to be part ofa category value
while(strstr(catvalue, "|"))
- catvalue = strreplace(catvalue, "|", "!^pipe^!"); // ugly: replace with something, that should not happen to be part of a regular expression
+ catvalue = strreplace(catvalue, "|", "!^pipe^!"); // ugly: replace with something, that should not happen to be part of a regular expression
if (index == 0)
msprintf(&tmp_catvalues, "%d#%s", SearchExtCat->id, catvalue);
else
{
- char* temp = tmp_catvalues;
+ char* temp = tmp_catvalues;
msprintf(&tmp_catvalues, "%s|%d#%s", tmp_catvalues, SearchExtCat->id, catvalue);
free(temp);
}
- SearchExtCat = SearchExtCats.Next(SearchExtCat);
+ SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
free(catvalue);
- }
+ }
}
if (blacklistMode == blacklistsSelection && blacklists.Count() > 0)
{
cBlacklistObject *blacklistObj = blacklists.First();
int index = 0;
- while (blacklistObj)
+ while (blacklistObj)
{
if (index == 0)
msprintf(&tmp_blacklists, "%d", blacklistObj->blacklist->ID);
else
{
- char* temp = tmp_blacklists;
+ char* temp = tmp_blacklists;
msprintf(&tmp_blacklists, "%s|%d", tmp_blacklists, blacklistObj->blacklist->ID);
free(temp);
}
- blacklistObj = blacklists.Next(blacklistObj);
+ blacklistObj = blacklists.Next(blacklistObj);
index++;
- }
+ }
}
msprintf(&buffer, "%d:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d:%d:%d:%s:%s:%d:%d:%d:%d:%s:%d:%d:%d:%d:%d:%d:%d:%s:%d:%d:%d:%d:%d:%ld:%d:%d:%d:%d:%d:%d:%s:%d:%d:%d:%d:%d:%d:%ld:%ld:%d:%d:%d:%s:%d",
@@ -400,7 +400,7 @@ const char *cSearchExt::ToText()
delAfterDaysOfFirstRec,
useAsSearchTimerFrom,
useAsSearchTimerTil,
- ignoreMissingEPGCats,
+ ignoreMissingEPGCats,
unmuteSoundOnSwitch,
compareSummaryMatchInPercent,
contentsFilter.c_str(),
@@ -421,10 +421,10 @@ bool cSearchExt::Parse(const char *s)
char *pos;
char *pos_next;
int parameter = 1;
- int valuelen;
+ int valuelen;
char value[MaxFileName];
bool disableSearchtimer = false;
-
+
*directory = 0;
*search = 0;
@@ -443,7 +443,7 @@ bool cSearchExt::Parse(const char *s)
strn0cpy(value, pos, valuelen);
pos = pos_next;
switch (parameter) {
- case 1:
+ case 1:
if (!isnumber(value)) return false;
ID = atoi(value);
break;
@@ -457,7 +457,7 @@ bool cSearchExt::Parse(const char *s)
break;
case 6: useChannel = atoi(value);
break;
- case 7:
+ case 7:
if (useChannel == 0)
{
channelMin = NULL;
@@ -479,7 +479,7 @@ bool cSearchExt::Parse(const char *s)
int channels = sscanf(value, "%a[^|]|%a[^|]", &channelMinbuffer, &channelMaxbuffer);
#endif
channelMin = Channels.GetByChannelID(tChannelID::FromString(channelMinbuffer), true, true);
- if (!channelMin)
+ if (!channelMin)
{
LogFile.eSysLog("ERROR: channel '%s' not defined", channelMinbuffer);
channelMin = channelMax = NULL;
@@ -491,7 +491,7 @@ bool cSearchExt::Parse(const char *s)
else
{
channelMax = Channels.GetByChannelID(tChannelID::FromString(channelMaxbuffer), true, true);
- if (!channelMax)
+ if (!channelMax)
{
LogFile.eSysLog("ERROR: channel '%s' not defined", channelMaxbuffer);
channelMin = channelMax = NULL;
@@ -546,7 +546,7 @@ bool cSearchExt::Parse(const char *s)
break;
case 27: useExtEPGInfo = atoi(value);
break;
- case 28:
+ case 28:
if (!ParseExtEPGValues(value))
{
LogFile.eSysLog("ERROR reading ext. EPG values - 1");
@@ -578,14 +578,14 @@ bool cSearchExt::Parse(const char *s)
break;
case 40: blacklistMode = atoi(value);
break;
- case 41:
+ case 41:
if (blacklistMode == blacklistsSelection && !ParseBlacklistIDs(value))
{
LogFile.eSysLog("ERROR parsing blacklist IDs");
free(line);
return false;
}
- break;
+ break;
case 42: fuzzyTolerance = atoi(value);
break;
case 43: useInFavorites = atoi(value);
@@ -651,20 +651,20 @@ bool cSearchExt::Parse(const char *s)
char* cSearchExt::BuildFile(const cEvent* pEvent) const
{
char* file = NULL;
-
+
if (!pEvent)
return file;
-
+
const char *Subtitle = pEvent ? pEvent->ShortText() : NULL;
char SubtitleBuffer[Utf8BufSize(MAX_SUBTITLE_LENGTH)];
if (isempty(Subtitle))
{
time_t Start = pEvent->StartTime();
struct tm tm_r;
- strftime(SubtitleBuffer, sizeof(SubtitleBuffer), "%Y.%m.%d-%R-%a", localtime_r(&Start, &tm_r));
+ strftime(SubtitleBuffer, sizeof(SubtitleBuffer), "%Y.%m.%d-%R-%a", localtime_r(&Start, &tm_r));
Subtitle = SubtitleBuffer;
}
- else if (Utf8StrLen(Subtitle) > MAX_SUBTITLE_LENGTH)
+ else if (Utf8StrLen(Subtitle) > MAX_SUBTITLE_LENGTH)
{
Utf8Strn0Cpy(SubtitleBuffer, Subtitle, sizeof(SubtitleBuffer));
SubtitleBuffer[Utf8SymChars(SubtitleBuffer, MAX_SUBTITLE_LENGTH)] = 0;
@@ -703,7 +703,7 @@ char* cSearchExt::BuildFile(const cEvent* pEvent) const
if (file) free(file);
file = strdup(pFile);
free(pFile);
- }
+ }
// replace some special chars
if (file)
{
@@ -720,7 +720,7 @@ bool cSearchExt::ParseBlacklistIDs(const char *s)
char *line;
char *pos;
char *pos_next;
- int valuelen;
+ int valuelen;
char value[MaxFileName];
cMutexLock BlacklistLock(&Blacklists);
@@ -759,7 +759,7 @@ bool cSearchExt::ParseExtEPGValues(const char *s)
char *line;
char *pos;
char *pos_next;
- int valuelen;
+ int valuelen;
char value[MaxFileName];
pos = line = strdup(s);
@@ -797,7 +797,7 @@ bool cSearchExt::ParseExtEPGEntry(const char *s)
char *pos;
char *pos_next;
int parameter = 1;
- int valuelen;
+ int valuelen;
char value[MaxFileName];
int currentid = -1;
@@ -816,7 +816,7 @@ bool cSearchExt::ParseExtEPGEntry(const char *s)
strn0cpy(value, pos, valuelen);
pos = pos_next;
switch (parameter) {
- case 1:
+ case 1:
{
currentid = atoi(value);
int index = SearchExtCats.GetIndexFromID(currentid);
@@ -824,7 +824,7 @@ bool cSearchExt::ParseExtEPGEntry(const char *s)
strcpy(catvalues[index], "");
}
break;
- case 2:
+ case 2:
if (currentid > -1)
{
int index = SearchExtCats.GetIndexFromID(currentid);
@@ -856,7 +856,7 @@ bool cSearchExt::Save(FILE *f)
return fprintf(f, "%s\n", ToText()) > 0;
}
-cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEvent *Start, bool inspectTimerMargin)
+cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEvent *Start, bool inspectTimerMargin)
{
if (!schedules) return NULL;
@@ -893,7 +893,7 @@ cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEven
for (cEvent *p = p1; p; p = Events->Next(p))
{
- if(!p)
+ if(!p)
{
break;
}
@@ -904,21 +904,21 @@ cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEven
// ignore events without title
if (!p->Title() || !*p->Title())
continue;
-
- if (tNow < p->EndTime() + (inspectTimerMargin?(MarginStop * 60):0))
- {
+
+ if (tNow < p->EndTime() + (inspectTimerMargin?(MarginStop * 60):0))
+ {
if (useTime)
{
time_t tEvent = p->StartTime();
struct tm tmEvent;
localtime_r(&tEvent, &tmEvent);
-
- int eventStart = tmEvent.tm_hour*100 + tmEvent.tm_min;
- int eventStart2 = eventStart + 2400;
+
+ int eventStart = tmEvent.tm_hour*100 + tmEvent.tm_min;
+ int eventStart2 = eventStart + 2400;
if ((eventStart < searchStart || eventStart > searchStop) &&
(eventStart2 < searchStart || eventStart2 > searchStop))
continue;
-
+
if (useDayOfWeek)
{
if (DayOfWeek >= 0)
@@ -959,7 +959,7 @@ cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEven
if (DayOfWeek >= 0 && DayOfWeek != tmEvent.tm_wday)
continue;
if (DayOfWeek < 0)
- {
+ {
int iFound = 0;
for(int i=0; i<7; i++)
if (abs(DayOfWeek) & (int)pow(2,i) && i == tmEvent.tm_wday)
@@ -975,11 +975,11 @@ cEvent * cSearchExt::GetEventBySearchExt(const cSchedule *schedules, const cEven
char* szTest = NULL;
msprintf(&szTest, "%s%s%s%s%s", (useTitle?(p->Title()?p->Title():""):""), (useSubtitle||useDescription)?"~":"",
(useSubtitle?(p->ShortText()?p->ShortText():""):""),useDescription?"~":"",
- (useDescription?(p->Description()?p->Description():""):""));
-
+ (useDescription?(p->Description()?p->Description():""):""));
+
if (!useCase)
ToLower(szTest);
-
+
if (szTest && *szTest)
{
if (!MatchesSearchMode(szTest, searchText, mode," ,;|~", fuzzyTolerance))
@@ -1027,7 +1027,7 @@ cSearchResults* cSearchExt::Run(int PayTVMode, bool inspectTimerMargin, int eval
const cSchedule *Schedule = schedules->First();
cSearchResults* pSearchResults = pPrevResults;
cSearchResults* pBlacklistResults = GetBlacklistEvents(inspectTimerMargin?MarginStop:0);
-
+
int counter = 0;
while (Schedule) {
cChannel* channel = Channels.GetByChannelID(Schedule->ChannelID(),true,true);
@@ -1036,7 +1036,7 @@ cSearchResults* cSearchExt::Run(int PayTVMode, bool inspectTimerMargin, int eval
Schedule = (const cSchedule *)schedules->Next(Schedule);
continue;
}
-
+
if (useChannel == 1 && channelMin && channelMax)
{
if (channelMin->Number() > channel->Number() || channelMax->Number() < channel->Number())
@@ -1054,7 +1054,7 @@ cSearchResults* cSearchExt::Run(int PayTVMode, bool inspectTimerMargin, int eval
continue;
}
}
-
+
if (useChannel == 3 && noPayTV)
{
if (channel->Ca() >= CA_ENCRYPTED_MIN)
@@ -1071,7 +1071,7 @@ cSearchResults* cSearchExt::Run(int PayTVMode, bool inspectTimerMargin, int eval
Schedule = (const cSchedule *)schedules->Next(Schedule);
continue;
}
- }
+ }
const cEvent *pPrevEvent = NULL;
do {
@@ -1085,7 +1085,7 @@ cSearchResults* cSearchExt::Run(int PayTVMode, bool inspectTimerMargin, int eval
if (event && Channels.GetByChannelID(event->ChannelID(),true,true))
{
if (pBlacklistResults && pBlacklistResults->Lookup(event))
- {
+ {
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d): matches blacklist", event->Title()?event->Title():"no title", event->ShortText()?event->ShortText():"no subtitle", GETDATESTRING(event), GETTIMESTRING(event), ChannelNrFromEvent(event));
continue;
}
@@ -1115,7 +1115,7 @@ cSearchResults* cSearchExt::GetBlacklistEvents(int MarginStop)
if (blacklistMode == blacklistsNone) return NULL;
cMutexLock BlacklistLock(&Blacklists);
- cSearchResults* blacklistEvents = NULL;
+ cSearchResults* blacklistEvents = NULL;
if (blacklistMode == blacklistsOnlyGlobal)
{
cBlacklist* tmpblacklist = Blacklists.First();
@@ -1145,7 +1145,7 @@ cSearchResults* cSearchExt::GetBlacklistEvents(int MarginStop)
}
}
return blacklistEvents;
-
+
}
void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
@@ -1161,31 +1161,31 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
LogFile.Log(3,"search timer not set to 'record', so skip all");
return;
}
-
+
cSearchResult* pResultObj = NULL;
for (pResultObj = pResults->First(); pResultObj; pResultObj = pResults->Next(pResultObj))
{
if (action != searchTimerActionRecord) // only announce if there is no timer for the event
{
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
-
+
const cEvent* pEvent = pResultObj->event;
// check if this event was already recorded
int records = 0;
cRecDone* firstRec = NULL;
LogFile.Log(3,"get count recordings with %d%% match", compareSummaryMatchInPercent);
records = RecsDone.GetCountRecordings(pEvent, this, &firstRec, compareSummaryMatchInPercent);
- LogFile.Log(3,"recordings: %d", records);
-
+ LogFile.Log(3,"recordings: %d", records);
+
if (records > allowedRepeats) // already recorded
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d): already recorded %d equal event(s)", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), records);
pResultObj->needsTimer = false; // first asume we need no timer
continue;
}
-
+
int plannedTimers = 0;
LogFile.Log(3,"get planned recordings");
cSearchResult* pFirstResultMatching = NULL;
@@ -1193,12 +1193,12 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
for (cSearchResult* pResultObjP = pResults->First(); pResultObjP; pResultObjP = pResults->Next(pResultObjP))
{
if (pResultObj == pResultObjP) break;
-
+
const cEvent* pEventP = pResultObjP->event;
if (!pEventP) continue;
-
+
if (!pResultObjP->needsTimer) continue;
-
+
if (EventsMatch(pEvent, pEventP, compareTitle, compareSubtitle, compareSummary, compareDate, catvaluesAvoidRepeat))
{
if (!pFirstResultMatching) pFirstResultMatching = pResultObjP;
@@ -1206,11 +1206,11 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
}
}
LogFile.Log(3,"planned: %d", plannedTimers);
-
+
if (plannedTimers + records > allowedRepeats)
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d): events planned(%d), recorded(%d), allowed(%d)", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), plannedTimers, records, allowedRepeats);
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
else if (allowedRepeats > 0 && repeatsWithinDays > 0) // if we only allow repeats with in a given range
@@ -1220,14 +1220,14 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
if (firstRec->startTime > pEvent->StartTime() - pEvent->Duration()) // no repeat
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d); no repeat for event already recorded at %s, channel %d", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), DAYDATETIME(firstRec->startTime), firstRec->ChannelNr());
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
int daysFromFirstRec = int(double((pEvent->StartTime() - firstRec->startTime)) / (60*60*24) + 0.5);
if (daysFromFirstRec > repeatsWithinDays)
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d); first recording at %s is %d days before, limit is %d days", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), DAYDATETIME(firstRec->startTime),daysFromFirstRec, repeatsWithinDays);
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
}
@@ -1237,15 +1237,15 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
if (pFirst->StartTime() > pEvent->StartTime() - pEvent->Duration()) // no repeat
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d); no repeat for event already recorded at %s - %s, channel %d", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), GETDATESTRING(pFirst), GETTIMESTRING(pFirst), ChannelNrFromEvent(pFirst));
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
-
+
int daysBetween = int(double((pEvent->StartTime() - pFirst->StartTime())) / (60*60*24) + 0.5);
if (daysBetween > repeatsWithinDays)
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d); first event '%s~%s' (%s - %s) is %d days before, limit is %d days", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), GETDATESTRING(pFirst), GETTIMESTRING(pFirst),daysBetween, repeatsWithinDays);
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
}
@@ -1255,7 +1255,7 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
if (timer && !timer->HasFlags(tfActive))
{
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d), existing timer disabled", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
- pResultObj->needsTimer = false;
+ pResultObj->needsTimer = false;
continue;
}
else
@@ -1264,7 +1264,7 @@ void cSearchExt::CheckRepeatTimers(cSearchResults* pResults)
int needsTimer = 0;
for (pResultObj = pResults->First(); pResultObj; pResultObj = pResults->Next(pResultObj))
if (pResultObj->needsTimer) needsTimer++;
-
+
LogFile.Log(2,"%d/%d events need a timer for search timer '%s'", needsTimer, pResults->Count(), search);
}
@@ -1277,18 +1277,18 @@ void cSearchExt::CheckExistingRecordings(cSearchResults* pResults)
// how many recordings do we already have?
int num = GetCountRecordings();
-
+
cSearchResult* pResultObj = NULL;
int remain = pauseOnNrRecordings - num;
for (pResultObj = pResults->First(); pResultObj; pResultObj = pResults->Next(pResultObj), remain--)
{
- if (!pResultObj->needsTimer)
+ if (!pResultObj->needsTimer)
{
remain++;
continue; // maybe already disabled because of done feature
}
- pResultObj->needsTimer = (remain > 0);
- if (remain <= 0)
+ pResultObj->needsTimer = (remain > 0);
+ if (remain <= 0)
{
const cEvent* pEvent = pResultObj->event;
LogFile.Log(3,"skip '%s~%s' (%s - %s, channel %d): only %d recordings are allowed", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent), pauseOnNrRecordings);
@@ -1301,7 +1301,7 @@ bool cSearchExt::MatchesExtEPGInfo(const cEvent* e)
if (!e || !e->Description())
return false;
cSearchExtCat* SearchExtCat = SearchExtCats.First();
- while (SearchExtCat)
+ while (SearchExtCat)
{
char* value = NULL;
int index = SearchExtCats.GetIndexFromID(SearchExtCat->id);
@@ -1335,7 +1335,7 @@ bool cSearchExt::MatchesExtEPGInfo(const cEvent* e)
void cSearchExt::OnOffTimers(bool bOn)
{
- for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
+ for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
{
if (((!bOn && ti->HasFlags(tfActive)) || (bOn && !ti->HasFlags(tfActive))) && TriggeredFromSearchTimerID(ti) == ID)
ti->OnOff();
@@ -1356,7 +1356,7 @@ void cSearchExt::DeleteAllTimers()
Timers.Del(ti);
Timers.SetModified();
ti = tiNext;
- }
+ }
else
ti = Timers.Next(ti);
};
@@ -1366,14 +1366,14 @@ cTimerObjList* cSearchExt::GetTimerList(cTimerObjList* timerList)
{
if (!timerList)
timerList = new cTimerObjList;
-
- for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
+
+ for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
{
if (TriggeredFromSearchTimerID(ti) == ID)
{
// check if already in list
bool found = false;
- for (cTimerObj *tObj = timerList->First(); tObj; tObj = timerList->Next(tObj))
+ for (cTimerObj *tObj = timerList->First(); tObj; tObj = timerList->Next(tObj))
{
if (tObj->timer == ti)
{
@@ -1393,7 +1393,7 @@ int cSearchExt::GetCountRecordings()
{
int countRecs = 0;
- for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
+ for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
{
if (recording->IsEdited()) continue; // ignore recordings edited
if (!recording->Info()) continue;
@@ -1415,7 +1415,7 @@ bool cSearchExt::IsActiveAt(time_t t)
{
if (useAsSearchTimerFrom > 0 && t < useAsSearchTimerFrom) return false;
if (useAsSearchTimerTil > 0 && t > useAsSearchTimerTil) return false;
- }
+ }
return true;
}
@@ -1451,7 +1451,7 @@ void cSearchExt::SetContentFilter(int* contentStringsFlags)
bool cSearchExt::MatchesContentsFilter(const cEvent* e)
{
-#if APIVERSNUM < 10711
+#if APIVERSNUM < 10711
return true;
#else
if (!e) return false;
@@ -1466,7 +1466,7 @@ bool cSearchExt::MatchesContentsFilter(const cEvent* e)
int c=0, eventContentID=0;
bool found = false;
while((eventContentID=e->Contents(c++)) > 0)
- if (eventContentID == searchContentID)
+ if (eventContentID == searchContentID)
{
found = true;
break;
@@ -1592,7 +1592,7 @@ void cSearchExts::RemoveBlacklistID(int ID)
bool changed = false;
cMutexLock SearchExtsLock(this);
cSearchExt *l = (cSearchExt *)First();
- while (l)
+ while (l)
{
cBlacklistObject* blacklistObj = l->blacklists.First();
while(blacklistObj)
@@ -1606,7 +1606,7 @@ void cSearchExts::RemoveBlacklistID(int ID)
blacklistObj = blacklistObjNext;
}
l = (cSearchExt *)l->Next();
- }
+ }
if (changed)
Save();
}
@@ -1615,7 +1615,7 @@ bool cSearchExts::Exists(const cSearchExt* SearchExt)
{
cMutexLock SearchExtsLock(this);
cSearchExt *l = (cSearchExt *)First();
- while (l)
+ while (l)
{
if (l == SearchExt)
return true;
@@ -1630,7 +1630,7 @@ cSearchExts* cSearchExts::Clone()
cMutexLock SearchExtsLock(this);
cSearchExt *l = (cSearchExt *)First();
- while (l)
+ while (l)
{
cSearchExt* clone = new cSearchExt();
*clone = *l;
@@ -1643,7 +1643,7 @@ cSearchExts* cSearchExts::Clone()
bool cSearchExts::CheckForAutoDelete(cSearchExt* SearchExt)
{
if (!SearchExt || SearchExt->delMode == 0) return false;
-
+
cRecDone* firstRec = NULL;
bool delSearch = false;
int recs = RecsDone.GetTotalCountRecordings(SearchExt, &firstRec);
@@ -1663,7 +1663,7 @@ bool cSearchExts::CheckForAutoDelete(cSearchExt* SearchExt)
return delSearch;
}
-cSearchResult::cSearchResult(const cEvent* Event, int searchID) : event(Event), blacklist(NULL), needsTimer(true)
+cSearchResult::cSearchResult(const cEvent* Event, int searchID) : event(Event), blacklist(NULL), needsTimer(true)
{
search = SearchExts.GetSearchFromID(searchID);
}
diff --git a/epgsearchext.h b/epgsearchext.h
index 16a4c49..6c695e0 100644
--- a/epgsearchext.h
+++ b/epgsearchext.h
@@ -194,7 +194,7 @@ public:
bool ParseBlacklistIDs(const char *s);
bool Save(FILE *f);
char* BuildFile(const cEvent* pEvent) const;
- cSearchResults* Run(int PayTVMode = -1, bool inspectTimerMargin = false, int evalLimitMins = 0, cSearchResults* pPrevResults = NULL, bool suppressRepeatCheck = false);
+ cSearchResults* Run(int PayTVMode = -1, bool inspectTimerMargin = false, int evalLimitMins = 0, cSearchResults* pPrevResults = NULL, bool suppressRepeatCheck = false);
void CheckRepeatTimers(cSearchResults* pResults);
void CheckExistingRecordings(cSearchResults* pResults);
void CopyFromTemplate(const cSearchExt* templ, bool ignoreChannelSettings = false);
diff --git a/epgsearchservices.h b/epgsearchservices.h
index 38f5e7c..1afcaee 100644
--- a/epgsearchservices.h
+++ b/epgsearchservices.h
@@ -44,8 +44,8 @@ class cEpgsearchServiceHandler: public cServiceHandler_v1_2
virtual std::set<std::string> DirectoryList();
virtual std::string ReadSetupValue(const std::string& entry);
virtual bool WriteSetupValue(const std::string& entry, const std::string& value);
- virtual std::list<std::string> TimerConflictList(bool relOnly=false);
- virtual bool IsConflictCheckAdvised();
+ virtual std::list<std::string> TimerConflictList(bool relOnly=false);
+ virtual bool IsConflictCheckAdvised();
virtual std::set<std::string> ShortDirectoryList();
virtual std::string Evaluate(const std::string& expr, const cEvent* event);
};
diff --git a/epgsearchsetup.c b/epgsearchsetup.c
index 8eacd17..2c62ff1 100644
--- a/epgsearchsetup.c
+++ b/epgsearchsetup.c
@@ -28,7 +28,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "searchtimer_thread.h"
#include "epgsearchtools.h"
#include "changrp.h"
-#include "menu_dirselect.h"
+#include "menu_dirselect.h"
#include "menu_searchtemplate.h"
#include "menu_blacklists.h"
#include "templatefile.h"
@@ -54,7 +54,7 @@ const char *cMenuSetupMailNotification::MailBoxChars = " abcdefghijklmnopqrs
cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cEPGSearchConfig* Data)
: cOsdMenu(Title, 33)
{
- data = Data;
+ data = Data;
}
eOSState cMenuSetupSubMenu::ProcessKey(eKeys Key)
@@ -104,7 +104,7 @@ cMenuEPGSearchSetup::cMenuEPGSearchSetup(void)
RedKeyMode[0] = tr("Standard");
RedKeyMode[1] = tr("Button$Commands");
-
+
BlueKeyMode[0] = tr("Standard");
BlueKeyMode[1] = tr("Button$Search");
@@ -131,7 +131,7 @@ void cMenuEPGSearchSetup::Setup(void)
data = EPGSearchConfig;
if (isempty(EPGSearchConfig.mainmenuentry))
strcpy(data.mainmenuentry,tr("Program guide"));
-
+
Set();
SetHelp(NULL, NULL, NULL, trVDR("Button$Open"));
}
@@ -140,7 +140,7 @@ void cMenuEPGSearchSetup::Set()
{
int current = Current();
Clear();
-
+
Add(new cOsdItem(tr("General")));
Add(new cOsdItem(tr("EPG menus")));
Add(new cOsdItem(tr("User-defined EPG times")));
@@ -171,9 +171,9 @@ void cMenuEPGSearchSetup::Store(void)
}
EPGSearchConfig = data;
- if (strcmp(EPGSearchConfig.mainmenuentry, tr("Program guide")) == 0)
+ if (strcmp(EPGSearchConfig.mainmenuentry, tr("Program guide")) == 0)
strcpy(EPGSearchConfig.mainmenuentry,"");
-
+
if (isempty(EPGSearchConfig.MailAddressTo))
strcpy(EPGSearchConfig.MailAddressTo, EPGSearchConfig.MailAddress);
@@ -194,15 +194,15 @@ void cMenuEPGSearchSetup::Store(void)
SetupStore("UserMode1UseIt", EPGSearchConfig.ShowModes[showUserMode1].GetUsage());
SetupStore("UserMode1Description", EPGSearchConfig.ShowModes[showUserMode1].GetDescription());
SetupStore("UserMode1Time", EPGSearchConfig.ShowModes[showUserMode1].GetTime());
-
+
SetupStore("UserMode2UseIt", EPGSearchConfig.ShowModes[showUserMode2].GetUsage());
SetupStore("UserMode2Description", EPGSearchConfig.ShowModes[showUserMode2].GetDescription());
SetupStore("UserMode2Time", EPGSearchConfig.ShowModes[showUserMode2].GetTime());
-
+
SetupStore("UserMode3UseIt", EPGSearchConfig.ShowModes[showUserMode3].GetUsage());
SetupStore("UserMode3Description", EPGSearchConfig.ShowModes[showUserMode3].GetDescription());
SetupStore("UserMode3Time", EPGSearchConfig.ShowModes[showUserMode3].GetTime());
-
+
SetupStore("UserMode4UseIt", EPGSearchConfig.ShowModes[showUserMode4].GetUsage());
SetupStore("UserMode4Description", EPGSearchConfig.ShowModes[showUserMode4].GetDescription());
SetupStore("UserMode4Time", EPGSearchConfig.ShowModes[showUserMode4].GetTime());
@@ -293,7 +293,7 @@ eOSState cMenuEPGSearchSetup::ProcessKey(eKeys Key)
int iOnEmailNotification = 0;
if (!HasSubMenu())
- {
+ {
if (strstr(ItemText, tr("General")) == ItemText)
iOnGeneral = 1;
else if (strstr(ItemText, tr("EPG menus")) == ItemText)
@@ -310,7 +310,7 @@ eOSState cMenuEPGSearchSetup::ProcessKey(eKeys Key)
iOnEmailNotification = 1;
}
- if (!HasSubMenu() && (state == osUnknown || Key == kOk))
+ if (!HasSubMenu() && (state == osUnknown || Key == kOk))
{
if ((Key == kOk && !hadSubMenu) || Key == kBlue)
{
@@ -405,7 +405,7 @@ void cMenuSetupEPGMenus::Set()
int current = Current();
Clear();
helpTexts.clear();
-
+
Add(new cMenuEditStraItem( tr("Ok key"), &data->useOkForSwitch, 2, OkKeyMode));
AddHelp(tr("Help$Choose here the behaviour of key 'Ok'. You can use it to display the summary or to switch to the corresponding channel.\nNote: the functionality of key 'blue' (Switch/Info/Search) depends on this setting."));
@@ -476,7 +476,7 @@ void cMenuSetupUserdefTimes::Set()
AddHelp(tr("Help$This is the description for your user-defined time as it will appear as label on the green button."));
Add(new cMenuEditTimeItem(IndentMenuItem(tr("Time")), &data->ShowModes[showUserMode1].itime));
AddHelp(tr("Help$Specify the user-defined time here in 'HH:MM'."));
- }
+ }
szUseUserTime = cString::sprintf("%s %d", tr("Use user-defined time"), 2);
Add(new cMenuEditBoolItem( szUseUserTime, &data->ShowModes[showUserMode2].useIt, trVDR("no"), trVDR("yes")));
@@ -487,7 +487,7 @@ void cMenuSetupUserdefTimes::Set()
AddHelp(tr("Help$This is the description for your user-defined time as it will appear as label on the green button."));
Add(new cMenuEditTimeItem(IndentMenuItem(tr("Time")), &data->ShowModes[showUserMode2].itime));
AddHelp(tr("Help$Specify the user-defined time here in 'HH:MM'."));
- }
+ }
szUseUserTime = cString::sprintf("%s %d", tr("Use user-defined time"), 3);
Add(new cMenuEditBoolItem(szUseUserTime, &data->ShowModes[showUserMode3].useIt, trVDR("no"), trVDR("yes")));
@@ -498,7 +498,7 @@ void cMenuSetupUserdefTimes::Set()
AddHelp(tr("Help$This is the description for your user-defined time as it will appear as label on the green button."));
Add(new cMenuEditTimeItem(IndentMenuItem(tr("Time")), &data->ShowModes[showUserMode3].itime));
AddHelp(tr("Help$Specify the user-defined time here in 'HH:MM'."));
- }
+ }
szUseUserTime = cString::sprintf("%s %d", tr("Use user-defined time"), 4);
Add(new cMenuEditBoolItem(szUseUserTime, &data->ShowModes[showUserMode4].useIt, trVDR("no"), trVDR("yes")));
@@ -509,7 +509,7 @@ void cMenuSetupUserdefTimes::Set()
AddHelp(tr("Help$This is the description for your user-defined time as it will appear as label on the green button."));
Add(new cMenuEditTimeItem(IndentMenuItem(tr("Time")), &data->ShowModes[showUserMode4].itime));
AddHelp(tr("Help$Specify the user-defined time here in 'HH:MM'."));
- }
+ }
SetCurrent(Get(current));
Display();
@@ -599,7 +599,7 @@ eOSState cMenuSetupTimers::ProcessKey(eKeys Key)
int iOnDefRecDir = 0;
int iOnDefTimerCheck = 0;
if (!HasSubMenu())
- {
+ {
if (strstr(ItemText, tr("Default recording dir")) == ItemText)
iOnDefRecDir = 1;
if (strstr(ItemText, tr("Default timer check method")) == ItemText)
@@ -685,7 +685,7 @@ void cMenuSetupSearchtimers::Set()
}
}
- Add(new cMenuEditBoolItem( tr("Ignore PayTV channels"), &data->ignorePayTV, trVDR("no"), trVDR("yes")));
+ Add(new cMenuEditBoolItem( tr("Ignore PayTV channels"), &data->ignorePayTV, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$Set this to 'yes' if don't want to see events on PayTV channels when searching for repeats."));
Add(new cOsdItem(tr("Search templates")));
AddHelp(tr("Help$Here you can setup templates for your searches."));
@@ -735,7 +735,7 @@ eOSState cMenuSetupSearchtimers::ProcessKey(eKeys Key)
const char* ItemText = Get(Current())->Text();
if (!HasSubMenu())
- {
+ {
if (strstr(ItemText, tr("Search templates")) == ItemText)
iOnSearchTemplates = 1;
else if (strstr(ItemText, tr("Blacklists")) == ItemText)
@@ -866,8 +866,8 @@ void cMenuSetupMailNotification::Set()
if (data->sendMailOnSearchtimers)
{
- Add(new cMenuEditIntItem(IndentMenuItem(tr("Time between mails [h]")), &data->sendMailOnSearchtimerHours, 0, 999999, ""));
- AddHelp(tr("Help$Specifiy how much time in [h] you would\nlike to have atleast between two mails.\nWith '0' you get a new mail after each\nsearch timer update with new results."));
+ Add(new cMenuEditIntItem(IndentMenuItem(tr("Time between mails [h]")), &data->sendMailOnSearchtimerHours, 0, 999999, ""));
+ AddHelp(tr("Help$Specifiy how much time in [h] you would\nlike to have atleast between two mails.\nWith '0' you get a new mail after each\nsearch timer update with new results."));
}
Add(new cMenuEditBoolItem(tr("Timer conflict notification"), &data->sendMailOnConflicts, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$Set this to 'yes' if you want to get an email notification about the timer conflicts."));
@@ -884,15 +884,15 @@ void cMenuSetupMailNotification::Set()
sep->SetSelectable(false);
Add(sep);
AddHelp(" dummy");
-
+
Add(new cMenuEditStrItem(tr("Email adress"), data->MailAddress, sizeof(data->MailAddress), MailBoxChars));
AddHelp(tr("Help$Specify the email adress where notifications should be sent from."));
-
+
Add(new cMenuEditStrItem(tr("SMTP server"), data->MailServer, sizeof(data->MailServer), HostNameChars));
AddHelp(tr("Help$Specify the SMTP server that should deliver the notifications. If it's using a port different from the default(25) append the port with \":port\"."));
Add(new cMenuEditBoolItem(tr("Use SMTP authentication"), &data->MailUseAuth, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$Set this to 'yes' if your account needs authentication to send mails."));
-
+
if (data->MailUseAuth)
{
Add(new cMenuEditStrItem(IndentMenuItem(tr("Auth user")), data->MailAuthUser, sizeof(data->MailAuthUser), UserNameChars));
@@ -901,7 +901,7 @@ void cMenuSetupMailNotification::Set()
AddHelp(tr("Help$Specify the auth password, if this account needs authentication for SMTP."));
}
}
-
+
SetCurrent(Get(current));
Display();
@@ -959,14 +959,14 @@ eOSState cMenuSetupMailNotification::ProcessKey(eKeys Key)
int iTemp_MailUseAuth = data->MailUseAuth;
int iTemp_sendMailOnSearchtimers = data->sendMailOnSearchtimers;
int iTemp_mailViaScript = data->mailViaScript;
-
+
const char* ItemText = Get(Current())->Text();
bool bAuthPassWasInEditMode = false;
if (ItemText && strlen(ItemText) > 0 && strstr(ItemText, IndentMenuItem(tr("Auth password"))) == ItemText)
bAuthPassWasInEditMode = InEditMode(ItemText, IndentMenuItem(tr("Auth password")), tmpMailAuthPass);
-
+
eOSState state = cMenuSetupSubMenu::ProcessKey(Key);
-
+
ItemText = Get(Current())->Text();
bool bAuthPassIsInEditMode = false;
if (ItemText && strlen(ItemText) > 0 && strstr(ItemText, IndentMenuItem(tr("Auth password"))) == ItemText)
@@ -995,9 +995,9 @@ eOSState cMenuSetupMailNotification::ProcessKey(eKeys Key)
Set();
Display();
}
-
+
SetHelpKeys();
-
+
if (state == osUnknown) {
switch (Key) {
case kOk:
@@ -1010,7 +1010,7 @@ eOSState cMenuSetupMailNotification::ProcessKey(eKeys Key)
default: break;
}
}
-
+
return state;
}
diff --git a/epgsearchsetup.h b/epgsearchsetup.h
index a9ec150..9ef3466 100644
--- a/epgsearchsetup.h
+++ b/epgsearchsetup.h
@@ -43,7 +43,7 @@ class cMenuSetupSubMenu : public cOsdMenu {
};
-class cMenuSetupGeneral : public cMenuSetupSubMenu
+class cMenuSetupGeneral : public cMenuSetupSubMenu
{
protected:
virtual eOSState ProcessKey(eKeys Key);
@@ -52,7 +52,7 @@ class cMenuSetupGeneral : public cMenuSetupSubMenu
cMenuSetupGeneral(cEPGSearchConfig* Data);
};
-class cMenuSetupEPGMenus : public cMenuSetupSubMenu
+class cMenuSetupEPGMenus : public cMenuSetupSubMenu
{
protected:
void Set(void);
@@ -80,7 +80,7 @@ class cMenuSetupTimers : public cMenuSetupSubMenu
cMenuSetupTimers(cEPGSearchConfig* Data);
};
-class cMenuSetupSearchtimers : public cMenuSetupSubMenu
+class cMenuSetupSearchtimers : public cMenuSetupSubMenu
{
char** menuitemsChGr;
protected:
@@ -92,7 +92,7 @@ class cMenuSetupSearchtimers : public cMenuSetupSubMenu
~cMenuSetupSearchtimers();
};
-class cMenuSetupTimerConflicts : public cMenuSetupSubMenu
+class cMenuSetupTimerConflicts : public cMenuSetupSubMenu
{
protected:
virtual eOSState ProcessKey(eKeys Key);
@@ -101,9 +101,9 @@ class cMenuSetupTimerConflicts : public cMenuSetupSubMenu
cMenuSetupTimerConflicts(cEPGSearchConfig* Data);
};
-class cMenuSetupMailNotification : public cMenuSetupSubMenu
+class cMenuSetupMailNotification : public cMenuSetupSubMenu
{
- char tmpMailAuthPass[MaxFileName];
+ char tmpMailAuthPass[MaxFileName];
void SetHelpKeys();
protected:
virtual eOSState ProcessKey(eKeys Key);
@@ -111,7 +111,7 @@ class cMenuSetupMailNotification : public cMenuSetupSubMenu
public:
cMenuSetupMailNotification(cEPGSearchConfig* Data);
eOSState TestMailAccount();
-
+
static const char *HostNameChars;
static const char *UserNameChars;
static const char *PasswordChars;
diff --git a/epgsearchsvdrp.c b/epgsearchsvdrp.c
index c3deeb7..1b847e7 100644
--- a/epgsearchsvdrp.c
+++ b/epgsearchsvdrp.c
@@ -54,7 +54,7 @@ const char **cPluginEpgsearch::SVDRPHelpPages(void)
"LSTS [ ID ]\n"
" List searches.\n"
" If the optional numeric argument ID is passed,\n"
- " only the search with the according ID is listed",
+ " only the search with the according ID is listed",
"NEWS <settings>\n"
" Add a new search\n",
"DELS <ID>\n"
@@ -101,7 +101,7 @@ const char **cPluginEpgsearch::SVDRPHelpPages(void)
"LSTB [ ID ]\n"
" List blacklists.\n"
" If the optional numeric argument ID is passed,\n"
- " only the blacklist with the according ID is listed",
+ " only the blacklist with the according ID is listed",
"NEWB <settings>\n"
" Add a new blacklist",
"DELB <ID>\n"
@@ -117,7 +117,7 @@ const char **cPluginEpgsearch::SVDRPHelpPages(void)
" List search templates.\n"
" If the optional numeric argument ID is passed,\n"
" only the search template with the according ID\n"
- " is listed",
+ " is listed",
"NEWT <settings>\n"
" Add a new search template\n",
"DELT <ID>\n"
@@ -142,7 +142,7 @@ const char **cPluginEpgsearch::SVDRPHelpPages(void)
cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
{
- if (strcasecmp(Command, "UPDS") == 0)
+ if (strcasecmp(Command, "UPDS") == 0)
{
if (!EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
@@ -151,8 +151,8 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
char *pstrOptionToken, *pptr;
char *pstrOptions=strdup(Option);
- pstrOptionToken=strtok_r(pstrOptions, " ", &pptr);
- while(pstrOptionToken)
+ pstrOptionToken=strtok_r(pstrOptions, " ", &pptr);
+ while(pstrOptionToken)
{
if (strcasecmp(Option, "OSD")==0)
updateForced |= UPDS_WITH_OSD;
@@ -164,18 +164,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
}
return cString("update triggered");
}
- else if (strcasecmp(Command, "UPDD") == 0)
+ else if (strcasecmp(Command, "UPDD") == 0)
{
if (RecsDone.Load(AddDirectory(CONFIGDIR, "epgsearchdone.data")))
- return cString("reload successful");
+ return cString("reload successful");
else
- return cString("reload failed");
+ return cString("reload failed");
}
// -----------------------
// search timer management
- else if (strcasecmp(Command, "LSTS") == 0)
+ else if (strcasecmp(Command, "LSTS") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -191,14 +191,14 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in search ID \"%s\"", Option);
+ return cString::sprintf("Error in search ID \"%s\"", Option);
}
}
- else if (SearchExts.Count()>0)
+ else if (SearchExts.Count()>0)
{
string sBuffer;
cMutexLock SearchExtsLock(&SearchExts);
- for (int i = 0; i < SearchExts.Count(); i++)
+ for (int i = 0; i < SearchExts.Count(); i++)
{
cSearchExt* search = SearchExts.Get(i);
if (search)
@@ -209,12 +209,12 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no searches defined");
+ return cString("no searches defined");
}
}
- else if (strcasecmp(Command, "DELS") == 0)
+ else if (strcasecmp(Command, "DELS") == 0)
{
- if (*Option)
+ if (*Option)
{
string sOption = Option;
bool delTimers = false;
@@ -248,18 +248,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in search ID \"%s\"", Option);
+ return cString::sprintf("Error in search ID \"%s\"", Option);
}
}
else
{
ReplyCode = 901;
- return cString("missing search ID");
+ return cString("missing search ID");
}
}
- else if (strcasecmp(Command, "NEWS") == 0)
+ else if (strcasecmp(Command, "NEWS") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt* search = new cSearchExt;
if (search->Parse(Option))
@@ -277,18 +277,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete search;
- return cString("Error in search settings");
+ return cString("Error in search settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing search settings");
+ return cString("missing search settings");
}
}
- else if (strcasecmp(Command, "EDIS") == 0)
+ else if (strcasecmp(Command, "EDIS") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt* search = new cSearchExt;
if (search->Parse(Option))
@@ -316,18 +316,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete search;
- return cString("Error in search settings");
+ return cString("Error in search settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing search settings");
+ return cString("missing search settings");
}
}
- else if (strcasecmp(Command, "MODS") == 0)
+ else if (strcasecmp(Command, "MODS") == 0)
{
- if (*Option)
+ if (*Option)
{
char *tail;
int ID = strtol(Option, &tail, 10);
@@ -346,7 +346,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
if (searchTemp->useAsSearchTimer && !EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
-
+
return cString::sprintf("search '%s' with ID %d modified", searchTemp->search, searchTemp->ID);
}
else
@@ -358,25 +358,25 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("missing search ID");
+ return cString("missing search ID");
}
}
- else if (strcasecmp(Command, "SETS") == 0)
+ else if (strcasecmp(Command, "SETS") == 0)
{
- if (*Option)
+ if (*Option)
{
if (strcasecmp(Option, "ON") == 0)
{
if (cSearchTimerThread::m_Instance)
{
ReplyCode = 901;
- return cString("search timer thread already active!");
+ return cString("search timer thread already active!");
}
else
{
LogFile.Log(1,"search timer thread started via SVDRP");
cSearchTimerThread::Init(this);
- return cString("search timer activated.");
+ return cString("search timer activated.");
}
}
else if (strcasecmp(Option, "OFF") == 0)
@@ -384,30 +384,30 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
if (!cSearchTimerThread::m_Instance)
{
ReplyCode = 901;
- return cString("search timer thread already inactive!");
+ return cString("search timer thread already inactive!");
}
else
{
LogFile.Log(1,"search timer thread canceled via SVDRP");
cSearchTimerThread::Exit();
- return cString("search timer thread canceled.");
+ return cString("search timer thread canceled.");
}
}
else
{
ReplyCode = 901;
- return cString::sprintf("unknown option '%s'", Option);
+ return cString::sprintf("unknown option '%s'", Option);
}
}
else
{
ReplyCode = 901;
- return cString("missing option <on|off>");
+ return cString("missing option <on|off>");
}
}
- else if (strcasecmp(Command, "FIND") == 0)
+ else if (strcasecmp(Command, "FIND") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt* search = new cSearchExt;
if (search->Parse(Option))
@@ -419,7 +419,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
results->SortBy(CompareEventTime);
cSearchResult *result = results->First();
- while (result)
+ while (result)
{
const cEvent* pEvent = result->event;
cTimer* Timer = new cTimer(pEvent);
@@ -443,56 +443,56 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
strftime(bufStart, sizeof(bufStart), "%H%M", localtime_r(&start, &tm_r));
strftime(bufEnd, sizeof(bufEnd), "%H%M", localtime_r(&stop, &tm_r));
- cString cmdbuf = cString::sprintf("NEWT %d:%d:%s:%s:%s:%d:%d:%s:%s",
+ cString cmdbuf = cString::sprintf("NEWT %d:%d:%s:%s:%s:%d:%d:%s:%s",
Flags,
Timer->Channel()->Number(),
*Timer->PrintDay(start, Timer->WeekDays(), true),
bufStart,
bufEnd,
- search->Priority,
- search->Lifetime,
+ search->Priority,
+ search->Lifetime,
Timer->File(),
"");
-
-
+
+
sBuffer += string(cmdbuf) + string(results->Next(result)?"\n":"");
delete(Timer);
result = results->Next(result);
}
- return sBuffer.c_str();
+ return sBuffer.c_str();
}
else
{
ReplyCode = 901;
delete search;
- return cString("no results");
+ return cString("no results");
}
}
else
{
ReplyCode = 901;
delete search;
- return cString("Error in search settings");
+ return cString("Error in search settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing search settings");
+ return cString("missing search settings");
}
}
- else if (strcasecmp(Command, "QRYS") == 0 || strcasecmp(Command, "QRYF") == 0)
+ else if (strcasecmp(Command, "QRYS") == 0 || strcasecmp(Command, "QRYF") == 0)
{
cSearchExt *temp_SearchExt = NULL;
cSearchResults* pCompleteSearchResults = NULL;
if (strcasecmp(Command, "QRYS") == 0) // query one or more searches
{
- if (*Option)
+ if (*Option)
{
if (strchr(Option, ':'))
{
cSearchExt* temp_SearchExt = new cSearchExt;
- if (temp_SearchExt->Parse(Option))
+ if (temp_SearchExt->Parse(Option))
pCompleteSearchResults = temp_SearchExt->Run();
}
else
@@ -500,8 +500,8 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
char *pstrSearchToken, *pptr;
char *pstrSearch=strdup(Option);
pstrSearchToken=strtok_r(pstrSearch, "|", &pptr);
-
- while(pstrSearchToken)
+
+ while(pstrSearchToken)
{
cSearchExt* search = SearchExts.GetSearchFromID(atoi(pstrSearchToken));
if (search)
@@ -514,39 +514,39 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("missing search IDs");
+ return cString("missing search IDs");
}
}
else // query the favorites
{
int hours = EPGSearchConfig.FavoritesMenuTimespan;
- if (*Option)
+ if (*Option)
hours = atoi(Option);
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt)
+ while (SearchExt)
{
if (SearchExt->useInFavorites)
pCompleteSearchResults = SearchExt->Run(-1, false, 60*hours, pCompleteSearchResults);
SearchExt = SearchExts.Next(SearchExt);
}
}
-
+
if (pCompleteSearchResults)
{
// transfer to result list
string sBuffer;
pCompleteSearchResults->SortBy(CompareEventTime);
cSearchResult *result = pCompleteSearchResults->First();
- while (result && result->search)
+ while (result && result->search)
{
const cEvent* pEvent = result->event;
cTimer* Timer = new cTimer(pEvent);
-
+
static char bufStart[25];
static char bufEnd[25];
-
+
struct tm tm_r; time_t eStart = pEvent->StartTime();
time_t eStop = pEvent->EndTime();
time_t start = eStart - (result->search->MarginStart * 60);
@@ -556,18 +556,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
start = pEvent->Vps();
stop = start + pEvent->Duration();
}
-
+
strftime(bufStart, sizeof(bufStart), "%H%M", localtime_r(&start, &tm_r));
strftime(bufEnd, sizeof(bufEnd), "%H%M", localtime_r(&stop, &tm_r));
-
+
int timerMatch;
bool hasTimer = false;
- if (Timers.GetMatch(pEvent, &timerMatch))
+ if (Timers.GetMatch(pEvent, &timerMatch))
hasTimer = (timerMatch == tmFull);
-
+
if (!result->search->useAsSearchTimer)
result->needsTimer = false;
-
+
cChannel *channel = Channels.GetByChannelID(pEvent->ChannelID(), true,true);
int timerMode = hasTimer?1:(result->needsTimer?2:0);
@@ -576,7 +576,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
string shorttext = pEvent->ShortText()?ReplaceAll(pEvent->ShortText(), "|", "!^pipe!^"):"";
shorttext = ReplaceAll(shorttext, ":", "|");
- cString cmdbuf = cString::sprintf("%d:%u:%s:%s:%ld:%ld:%s:%ld:%ld:%s:%d",
+ cString cmdbuf = cString::sprintf("%d:%u:%s:%s:%ld:%ld:%s:%ld:%ld:%s:%d",
result->search->ID,
pEvent->EventID(),
title.c_str(),
@@ -587,21 +587,21 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
timerMode>0?start:-1,
timerMode>0?stop:-1,
timerMode>0?result->search->BuildFile(pEvent):"",
- timerMode);
-
+ timerMode);
+
sBuffer += string(cmdbuf) + string(pCompleteSearchResults->Next(result)?"\n":"");
delete(Timer);
result = pCompleteSearchResults->Next(result);
}
if (temp_SearchExt) delete temp_SearchExt;
if (pCompleteSearchResults) delete pCompleteSearchResults;
- return sBuffer.c_str();
+ return sBuffer.c_str();
}
else
{
ReplyCode = 901;
if (temp_SearchExt) delete temp_SearchExt;
- return cString("no results");
+ return cString("no results");
}
}
else if (strcasecmp(Command, "UPDT") == 0)
@@ -613,7 +613,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
}
// ---------------------
// recording directories
- else if (strcasecmp(Command, "LSRD") == 0)
+ else if (strcasecmp(Command, "LSRD") == 0)
{
cMenuDirSelect::CreateDirSet();
@@ -621,7 +621,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
cString sBuffer("");
std::set<string>::iterator it;
- for (it = cMenuDirSelect::directorySet.begin(); it != cMenuDirSelect::directorySet.end(); it++)
+ for (it = cMenuDirSelect::directorySet.begin(); it != cMenuDirSelect::directorySet.end(); it++)
{
cString sOldBuffer = sBuffer;
sBuffer = cString::sprintf("%s%s\n", *sOldBuffer, (*it).c_str());
@@ -634,28 +634,28 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no recording directories found");
+ return cString("no recording directories found");
}
}
// -------------------------
// channel groups management
- else if (strcasecmp(Command, "LSTC") == 0)
+ else if (strcasecmp(Command, "LSTC") == 0)
{
- if (*Option)
+ if (*Option)
{
cChannelGroup *changrp = ChannelGroups.GetGroupByName(Option);
if (changrp)
- return cString(changrp->ToText());
+ return cString(changrp->ToText());
else
{
ReplyCode = 901;
return cString::sprintf("channel group '%s' not defined", Option);
}
}
- else if (ChannelGroups.Count()>0)
+ else if (ChannelGroups.Count()>0)
{
cString sBuffer("");
- for (int i = 0; i < ChannelGroups.Count(); i++)
+ for (int i = 0; i < ChannelGroups.Count(); i++)
{
cChannelGroup *changrp = ChannelGroups.Get(i);
if (changrp)
@@ -672,12 +672,12 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no channel groups defined");
+ return cString("no channel groups defined");
}
}
- else if (strcasecmp(Command, "EDIC") == 0)
+ else if (strcasecmp(Command, "EDIC") == 0)
{
- if (*Option)
+ if (*Option)
{
cChannelGroup *changrp = new cChannelGroup;
if (changrp->Parse(Option))
@@ -702,18 +702,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete changrp;
- return cString("Error in channel group settings");
+ return cString("Error in channel group settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing channel group settings");
+ return cString("missing channel group settings");
}
}
- else if (strcasecmp(Command, "DELC") == 0)
+ else if (strcasecmp(Command, "DELC") == 0)
{
- if (*Option)
+ if (*Option)
{
cChannelGroup *changrp = ChannelGroups.GetGroupByName(Option);
if (changrp)
@@ -738,12 +738,12 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("missing channel group");
+ return cString("missing channel group");
}
}
- else if (strcasecmp(Command, "NEWC") == 0)
+ else if (strcasecmp(Command, "NEWC") == 0)
{
- if (*Option)
+ if (*Option)
{
cChannelGroup *changrp = new cChannelGroup;
if (changrp->Parse(Option))
@@ -757,18 +757,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete changrp;
- return cString("Error in channel group settings");
+ return cString("Error in channel group settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing channel group settings");
+ return cString("missing channel group settings");
}
}
- else if (strcasecmp(Command, "RENC") == 0)
+ else if (strcasecmp(Command, "RENC") == 0)
{
- if (*Option)
+ if (*Option)
{
const char* pipePos = strchr(Option, '|');
if (pipePos)
@@ -785,10 +785,10 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
strcpy(changrp->name, newName);
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt)
+ while (SearchExt)
{
- if (SearchExt->useChannel == 2 &&
- SearchExt->channelGroup &&
+ if (SearchExt->useChannel == 2 &&
+ SearchExt->channelGroup &&
strcmp(SearchExt->channelGroup, oldName) == 0)
{
free(SearchExt->channelGroup);
@@ -801,8 +801,8 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
cString strReturn = cString::sprintf("renamed channel group '%s' to '%s'", oldName, newName);
free(oldName);
return strReturn;
-
- }
+
+ }
else
{
free(oldName);
@@ -813,19 +813,19 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
free(oldName);
}
ReplyCode = 901;
- return cString("Error in channel group parameters");
+ return cString("Error in channel group parameters");
}
else
{
ReplyCode = 901;
- return cString("missing channel group parameters");
+ return cString("missing channel group parameters");
}
}
// --------------------
// blacklist management
- else if (strcasecmp(Command, "LSTB") == 0)
+ else if (strcasecmp(Command, "LSTB") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -841,14 +841,14 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in blacklist ID \"%s\"", Option);
+ return cString::sprintf("Error in blacklist ID \"%s\"", Option);
}
}
- else if (Blacklists.Count()>0)
+ else if (Blacklists.Count()>0)
{
cMutexLock BlacklistLock(&Blacklists);
string sBuffer;
- for (int i = 0; i < Blacklists.Count(); i++)
+ for (int i = 0; i < Blacklists.Count(); i++)
{
cBlacklist *blacklist = Blacklists.Get(i);
if (blacklist)
@@ -859,12 +859,12 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no blacklists defined");
+ return cString("no blacklists defined");
}
}
- else if (strcasecmp(Command, "DELB") == 0)
+ else if (strcasecmp(Command, "DELB") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -888,18 +888,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in blacklist ID \"%s\"", Option);
+ return cString::sprintf("Error in blacklist ID \"%s\"", Option);
}
}
else
{
ReplyCode = 901;
- return cString("missing blacklist ID");
+ return cString("missing blacklist ID");
}
}
- else if (strcasecmp(Command, "NEWB") == 0)
+ else if (strcasecmp(Command, "NEWB") == 0)
{
- if (*Option)
+ if (*Option)
{
cBlacklist *blacklist = new cBlacklist;
if (blacklist->Parse(Option))
@@ -915,18 +915,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete blacklist;
- return cString("Error in blacklist settings");
+ return cString("Error in blacklist settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing blacklist settings");
+ return cString("missing blacklist settings");
}
}
- else if (strcasecmp(Command, "EDIB") == 0)
+ else if (strcasecmp(Command, "EDIB") == 0)
{
- if (*Option)
+ if (*Option)
{
cBlacklist *blacklist = new cBlacklist;
if (blacklist->Parse(Option))
@@ -951,20 +951,20 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete blacklist;
- return cString("Error in blacklist settings");
+ return cString("Error in blacklist settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing blacklist settings");
+ return cString("missing blacklist settings");
}
}
// ----------------------------------
// extended EPG categories management
- else if (strcasecmp(Command, "LSTE") == 0)
+ else if (strcasecmp(Command, "LSTE") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -982,13 +982,13 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in category ID \"%s\"", Option);
+ return cString::sprintf("Error in category ID \"%s\"", Option);
}
}
- else if (SearchExtCats.Count()>0)
+ else if (SearchExtCats.Count()>0)
{
string sBuffer;
- for (int i = 0; i < SearchExtCats.Count(); i++)
+ for (int i = 0; i < SearchExtCats.Count(); i++)
{
cSearchExtCat *SearchExtCat = SearchExtCats.Get(i);
if (SearchExtCat)
@@ -999,14 +999,14 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no EPG categories defined");
+ return cString("no EPG categories defined");
}
}
// ------------
// setup values
- else if (strcasecmp(Command, "SETP") == 0)
+ else if (strcasecmp(Command, "SETP") == 0)
{
- if (*Option)
+ if (*Option)
{
if (strcasecmp(Option, "ShowFavoritesMenu") == 0)
return cString::sprintf("%d", EPGSearchConfig.showFavoritesMenu);
@@ -1019,9 +1019,9 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("empty");
+ return cString::sprintf("empty");
}
- }
+ }
else if (strcasecmp(Option, "AddSubtitleToTimerMode") == 0)
return cString::sprintf("%d", EPGSearchConfig.addSubtitleToTimer);
else if (strcasecmp(Option, "DefPriority") == 0)
@@ -1041,20 +1041,20 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
if (!chID.Valid())
{
ReplyCode = 901;
- return cString::sprintf("invalid channel id");
+ return cString::sprintf("invalid channel id");
}
cChannel *ch = Channels.GetByChannelID(chID,true,true);
if (!ch)
{
ReplyCode = 901;
- return cString::sprintf("unknown channel");
+ return cString::sprintf("unknown channel");
}
return cString::sprintf("%s: %d", *ch->GetChannelID().ToString(), DefTimerCheckModes.GetMode(ch));
}
else
{
string sBuffer;
- for (int i = 0; i < Channels.Count(); i++)
+ for (int i = 0; i < Channels.Count(); i++)
{
cChannel* ch = Channels.Get(i);
if (ch && !ch->GroupSep())
@@ -1066,7 +1066,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("setup option not supported");
+ return cString::sprintf("setup option not supported");
}
}
else
@@ -1086,9 +1086,9 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
}
// ---------------------------------
// search timer templates management
- else if (strcasecmp(Command, "LSTT") == 0)
+ else if (strcasecmp(Command, "LSTT") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -1104,14 +1104,14 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in search template ID \"%s\"", Option);
+ return cString::sprintf("Error in search template ID \"%s\"", Option);
}
}
- else if (SearchTemplates.Count()>0)
+ else if (SearchTemplates.Count()>0)
{
string sBuffer;
cMutexLock SearchExtsLock(&SearchTemplates);
- for (int i = 0; i < SearchTemplates.Count(); i++)
+ for (int i = 0; i < SearchTemplates.Count(); i++)
{
cSearchExt* search = SearchTemplates.Get(i);
if (search)
@@ -1122,12 +1122,12 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no search templates defined");
+ return cString("no search templates defined");
}
}
- else if (strcasecmp(Command, "DELT") == 0)
+ else if (strcasecmp(Command, "DELT") == 0)
{
- if (*Option)
+ if (*Option)
{
if (isnumber(Option))
{
@@ -1149,18 +1149,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString::sprintf("Error in search template ID \"%s\"", Option);
+ return cString::sprintf("Error in search template ID \"%s\"", Option);
}
}
else
{
ReplyCode = 901;
- return cString("missing search template ID");
+ return cString("missing search template ID");
}
}
- else if (strcasecmp(Command, "NEWT") == 0)
+ else if (strcasecmp(Command, "NEWT") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt* search = new cSearchExt;
if (search->Parse(Option))
@@ -1176,18 +1176,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete search;
- return cString("Error in search template settings");
+ return cString("Error in search template settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing search template settings");
+ return cString("missing search template settings");
}
}
- else if (strcasecmp(Command, "EDIT") == 0)
+ else if (strcasecmp(Command, "EDIT") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt* search = new cSearchExt;
if (search->Parse(Option))
@@ -1212,18 +1212,18 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
{
ReplyCode = 901;
delete search;
- return cString("Error in search template settings");
+ return cString("Error in search template settings");
}
}
else
{
ReplyCode = 901;
- return cString("missing search template settings");
+ return cString("missing search template settings");
}
}
- else if (strcasecmp(Command, "DEFT") == 0)
+ else if (strcasecmp(Command, "DEFT") == 0)
{
- if (*Option)
+ if (*Option)
{
cSearchExt *searchTemp = SearchTemplates.GetSearchFromID(atoi(Option));
if (searchTemp)
@@ -1245,15 +1245,15 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
// ---------------------------------
// timer conflicts
- else if (strcasecmp(Command, "LSCC") == 0)
+ else if (strcasecmp(Command, "LSCC") == 0)
{
bool relOnly = false;
if (*Option && strcasecmp(Option, "REL") == 0)
relOnly = true;
cConflictCheck conflictCheck;
- conflictCheck.Check();
-
+ conflictCheck.Check();
+
if ((relOnly && conflictCheck.numConflicts > 0) ||
conflictCheck.relevantConflicts > 0)
{
@@ -1268,7 +1268,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
std::ostringstream timerparts;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
{
if (relOnly && (*it)->ignore) continue;
std::ostringstream timerpart;
@@ -1278,7 +1278,7 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
if ((*it)->concurrentTimers)
{
std::ostringstream cctimers;
- for (itcc = (*it)->concurrentTimers->begin(); itcc != (*it)->concurrentTimers->end(); itcc++)
+ for (itcc = (*it)->concurrentTimers->begin(); itcc != (*it)->concurrentTimers->end(); itcc++)
cctimers << (cctimers.str().empty()?"":"#") << (*itcc)->origIndex+1;
timerpart << cctimers.str();
}
@@ -1292,10 +1292,10 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
else
{
ReplyCode = 901;
- return cString("no conflicts found");
+ return cString("no conflicts found");
}
}
- else if (strcasecmp(Command, "MENU") == 0)
+ else if (strcasecmp(Command, "MENU") == 0)
{
if (*Option)
{
@@ -1321,8 +1321,8 @@ cString cPluginEpgsearch::SVDRPCommand(const char *Command, const char *Option,
exitToMainMenu = 1;
return "menu closed";
}
- }
+ }
}
-
+
return NULL;
}
diff --git a/epgsearchtools.c b/epgsearchtools.c
index cdf2404..9623d57 100644
--- a/epgsearchtools.c
+++ b/epgsearchtools.c
@@ -59,7 +59,7 @@ int CompareEventTime(const void *p1, const void *p2)
time_t time1 = (*(cSearchResult **)p1)->event->StartTime();
time_t time2 = (*(cSearchResult **)p2)->event->StartTime();
if (time1 == time2)
- return (int)(ChannelNrFromEvent((*(cSearchResult **)p1)->event) -
+ return (int)(ChannelNrFromEvent((*(cSearchResult **)p1)->event) -
ChannelNrFromEvent((*(cSearchResult **)p2)->event));
else
return (int)(time1 - time2);
@@ -88,34 +88,34 @@ bool MatchesSearchMode(const char* szTest, const char* searchText, int mode, con
if (szTest && *szTest)
{
if (mode == 0) // substring
- return (strstr(szTest, searchText) != NULL);
+ return (strstr(szTest, searchText) != NULL);
else if (mode == 1 || mode == 2) // AND or OR
- {
+ {
bool bTesting = false;
char *pstrSearchToken, *pptr;
bool bFirst=true;
char *pstrSearch=strdup(searchText);
pstrSearchToken=strtok_r(pstrSearch, delim, &pptr);
- while(pstrSearchToken)
+ while(pstrSearchToken)
{
- if(szTest && strstr(szTest, skipspace(pstrSearchToken)))
- {
- if(mode==1)
+ if(szTest && strstr(szTest, skipspace(pstrSearchToken)))
+ {
+ if(mode==1)
{ // means AND
- if(bFirst)
+ if(bFirst)
{
bTesting=true;
bFirst=false;
- }
+ }
else
bTesting&=true;
}
else
bTesting|=true;
- }
- else
+ }
+ else
{// not found!!
- if(mode==1)
+ if(mode==1)
{ // means AND
bTesting=false;
bFirst=false;
@@ -132,7 +132,7 @@ bool MatchesSearchMode(const char* szTest, const char* searchText, int mode, con
return true;
else
return false;
- }
+ }
else if (mode == 4) // regexp
{
regex_t re;
@@ -144,7 +144,7 @@ bool MatchesSearchMode(const char* szTest, const char* searchText, int mode, con
return (status == 0);
}
return false;
- }
+ }
else if (mode == 5) // fuzzy
{
AFUZZY af = { NULL, NULL, NULL, NULL, NULL, NULL, { 0 }, { 0 }, 0, 0, 0, 0, 0, 0 };
@@ -156,13 +156,13 @@ bool MatchesSearchMode(const char* szTest, const char* searchText, int mode, con
afuzzy_free(&af);
return (res > 0);
}
- else if (mode >= 10 && mode <= 15)
+ else if (mode >= 10 && mode <= 15)
{
int testvalue = atoi(szTest);
int value = atoi(searchText);
if (value == 0) return true;
- if (mode == 10) // less
+ if (mode == 10) // less
return testvalue < value;
else if (mode == 11) // less or equal
return testvalue <= value;
@@ -214,7 +214,7 @@ char* GetExtEPGValue(const char* description, const char* catname)
if (isempty(description))
return NULL;
char* tmp = NULL;
-
+
// search the category, must be at beginnig of a line
msprintf(&tmp, "\n%s: ", catname);
char* descr = strdup(description);
@@ -228,7 +228,7 @@ char* GetExtEPGValue(const char* description, const char* catname)
else
cat++; // skip linefeed
- // search the value to appear before the next line feed or end
+ // search the value to appear before the next line feed or end
char* end = strchr(cat, '\n');
int endpos = strlen(cat);
if (end)
@@ -247,7 +247,7 @@ char* GetAuxValue(const char* aux, const char* name)
{
if (isempty(aux))
return NULL;
-
+
char* descr = strdup(aux);
char* beginaux = strstr(descr, "<epgsearch>");
char* endaux = strstr(descr, "</epgsearch>");
@@ -255,12 +255,12 @@ char* GetAuxValue(const char* aux, const char* name)
free(descr);
return NULL;
}
-
+
beginaux += 11; // strlen("<epgsearch>");
endaux[0] = 0;
memmove(descr, beginaux, endaux - beginaux + 1);
-
- if (strcmp(name, "epgsearch") == 0)
+
+ if (strcmp(name, "epgsearch") == 0)
return descr; // full aux
int namelen = strlen(name);
@@ -275,19 +275,19 @@ char* GetAuxValue(const char* aux, const char* name)
free(descr);
return NULL;
}
-
+
cat += namelen + 2;
char* end = strstr(cat, "</");
if (!end) {
- free(descr);
+ free(descr);
return NULL;
}
end[0] = 0;
-
+
int catlen = end - cat + 1;
char* value = (char *) malloc(catlen);
memcpy(value, cat, catlen);
-
+
free(descr);
return value;
}
@@ -343,8 +343,8 @@ char *strreplacei(char *s, const char *s1, const char *s2)
}
std::string strreplace(
- std::string& result,
- const std::string& replaceWhat,
+ std::string& result,
+ const std::string& replaceWhat,
const std::string& replaceWithWhat)
{
while(1)
@@ -367,13 +367,13 @@ void sleepSec(long s)
sleepMSec(s * 1000);
}
-bool SendViaSVDRP(cString SVDRPcmd)
+bool SendViaSVDRP(cString SVDRPcmd)
{
bool bSuccess = true;
cString cmdbuf;
if (EPGSearchConfig.useExternalSVDRP)
{
- cmdbuf = cString::sprintf("%s -p %d \"%s\"",
+ cmdbuf = cString::sprintf("%s -p %d \"%s\"",
cSVDRPClient::SVDRPSendCmd,
EPGSearchConfig.SVDRPPort,
*SVDRPcmd);
@@ -397,11 +397,11 @@ bool SendViaSVDRP(cString SVDRPcmd)
bSuccess = false;
}
}
-
+
return bSuccess;
}
-int SendMsg(cString Message, bool confirm, int seconds)
+int SendMsg(cString Message, bool confirm, int seconds)
{
int Keys = Skins.QueueMessage(mtInfo, Message, seconds, confirm?seconds+2:0);
return Keys;
@@ -429,7 +429,7 @@ cSearchExt* TriggeredFromSearchTimer(const cTimer* timer)
char* searchID = GetAuxValue(timer, "s-id");
if (!searchID)
return NULL;
-
+
cSearchExt* search = SearchExts.GetSearchFromID(atoi(searchID));
free(searchID);
return search;
@@ -438,7 +438,7 @@ cSearchExt* TriggeredFromSearchTimer(const cTimer* timer)
int TriggeredFromSearchTimerID(const cTimer* timer)
{
cSearchExt* trigger = TriggeredFromSearchTimer(timer);
- if (trigger)
+ if (trigger)
return trigger->ID;
else
return -1;
@@ -468,7 +468,7 @@ bool DescriptionMatches(const char* eDescr, const char* rDescr, int matchLimit)
if (100*double(minLength)/double(maxLength) < matchLimit)
return false;
- // last try with Levenshtein Distance, only compare the first 1000 chars
+ // last try with Levenshtein Distance, only compare the first 1000 chars
double fMatch = FuzzyMatch(eDescr, rDescr, 1000);
double tmp_matchlimit = matchLimit/100.0;
if(maxLength - minLength < 5)
@@ -489,7 +489,7 @@ const cEvent* GetEvent(cTimer* timer)
const cEvent* event = NULL;
const cChannel *channel = timer->Channel();
time_t Time = timer->StartTime() + (timer->StopTime() - timer->StartTime()) / 2;
- for (int seconds = 0; seconds <= 3; seconds++)
+ for (int seconds = 0; seconds <= 3; seconds++)
{
{
cSchedulesLock SchedulesLock;
@@ -498,7 +498,7 @@ const cEvent* GetEvent(cTimer* timer)
const cSchedule *Schedule = Schedules->GetSchedule(channel->GetChannelID());
if (Schedule) {
event = Schedule->GetEventAround(Time);
- if (event) return event;
+ if (event) return event;
}
}
}
@@ -511,8 +511,8 @@ const cEvent* GetEvent(cTimer* timer)
}
// this extracts the real description from a given epg entry cutting all that looks like a category line
-// we asume, that a category has a name not longer than MAXCATNAMELENGTH and a value not longer than
-// MAXCATVALUELENGTH (so in most cases e.g. the 'cast' category will stay part of the description). name and
+// we asume, that a category has a name not longer than MAXCATNAMELENGTH and a value not longer than
+// MAXCATVALUELENGTH (so in most cases e.g. the 'cast' category will stay part of the description). name and
// value are separated with ': '
#define MAXCATNAMELENGTH 40
#define MAXCATVALUELENGTH 60
@@ -522,8 +522,8 @@ char* GetRawDescription(const char* descr)
if (!descr || !*descr) return NULL;
char* rawDescr = (char*) calloc(strlen(descr)+1, sizeof(char));
-
- const char* tmp = descr;
+
+ const char* tmp = descr;
while(tmp)
{
// extract a single line
@@ -536,11 +536,11 @@ char* GetRawDescription(const char* descr)
// if (lf) *lf = 0;
// check for category
char* delim = strstr(line, ": ");
- if (!delim ||
+ if (!delim ||
(delim && (delim - line > MAXCATNAMELENGTH || strlen(line) - (delim - line) + 2 > MAXCATVALUELENGTH)))
if (*line)
strcat(rawDescr, line);
-
+
if (lf) tmp += strlen(line)+1; else tmp = NULL;
free(line);
}
@@ -572,7 +572,7 @@ void PrepareTimerFile(const cEvent* event, cTimer* timer)
strn0cpy(directory, EPGSearchConfig.defrecdir,sizeof(directory));
cVarExpr varExprDir(directory);
if (!varExprDir.DependsOnVar("%title%", event))
- {
+ {
strcat(directory, "~");
strcat(directory, timer->File());
}
@@ -620,7 +620,7 @@ bool EventsMatch(const cEvent* event1, const cEvent* event2, bool compareTitle,
bool match = false;
if ((!compareTitle || Title1 == Title2) &&
(!compareSubtitle || (Subtitle1 == Subtitle2 && Subtitle1!="")))
- {
+ {
const char* Descr1 = event1->Description();
const char* Descr2 = event2->Description();
if (compareSummary)
@@ -634,7 +634,7 @@ bool EventsMatch(const cEvent* event1, const cEvent* event2, bool compareTitle,
}
if (compareExpression.size() > 0)
{
- cVarExpr varExpr(compareExpression);
+ cVarExpr varExpr(compareExpression);
string resEvent1 = varExpr.Evaluate(event1);
string resEvent2 = varExpr.Evaluate(event2);
if (resEvent1 != resEvent2)
@@ -645,7 +645,7 @@ bool EventsMatch(const cEvent* event1, const cEvent* event2, bool compareTitle,
bool bCatMatch = ((Descr1 && Descr2) || (!Descr1 && !Descr2));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (catvaluesAvoidRepeat > 0 && SearchExtCat && bCatMatch)
+ while (catvaluesAvoidRepeat > 0 && SearchExtCat && bCatMatch)
{
if (catvaluesAvoidRepeat & (1<<index))
{
@@ -660,7 +660,7 @@ bool EventsMatch(const cEvent* event1, const cEvent* event2, bool compareTitle,
}
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
- }
+ }
if (bCatMatch)
match = true;
}
@@ -678,15 +678,15 @@ int ChannelNrFromEvent(const cEvent* pEvent)
if (!channel)
return -1;
else
- return channel->Number();
+ return channel->Number();
}
void DelTimer(int index)
{
- cString cmdbuf = cString::sprintf("DELT %d", index);
+ cString cmdbuf = cString::sprintf("DELT %d", index);
LogFile.Log(2, "delete timer %d", index);
SendViaSVDRP(cmdbuf);
- gl_timerStatusMonitor->SetConflictCheckAdvised();
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
}
char* FixSeparators(char* buffer, char sep)
@@ -699,7 +699,7 @@ char* FixSeparators(char* buffer, char sep)
if (c == sep) {
for (j = i + 1; (j < l) & (buffer[j] == ' '); j++)
;
-
+
if ((j <= l) | (i + 1 < j)) {
switch (buffer[j]) {
case '\t':
@@ -878,7 +878,7 @@ ssize_t Readline(int sockd, char *vptr, size_t maxlen) {
buffer = vptr;
for ( n = 1; n < maxlen; n++ ) {
-
+
if ( (rc = read(sockd, &c, 1)) == 1 ) {
if ( c == '\n' )
break;
@@ -927,17 +927,17 @@ ssize_t Writeline(int sockd, const char *vptr, size_t n) {
long getAddrFromString(const char* hostnameOrIp, struct sockaddr_in* addr)
{
unsigned long ip;
-
+
struct hostent * he;
-
+
if(hostnameOrIp==NULL || addr==NULL)
return -1;
-
+
ip=inet_addr(hostnameOrIp);
-
+
if(ip!=INADDR_NONE)
{
- addr->sin_addr.s_addr=ip;
+ addr->sin_addr.s_addr=ip;
return 0;
}
else
diff --git a/epgsearchtools.h b/epgsearchtools.h
index e870027..6ce0106 100644
--- a/epgsearchtools.h
+++ b/epgsearchtools.h
@@ -37,31 +37,31 @@ using std::string;
#define CHANNELNAME(x) (x ? x->ShortName(true) : "")
#undef TIMESTRING
-#define TIMESTRING(x) *(TimeString(x))
+#define TIMESTRING(x) *(TimeString(x))
#undef DATESTRING
-#define DATESTRING(x) *(DateString(x))
+#define DATESTRING(x) *(DateString(x))
#undef GETDATESTRING
-#define GETDATESTRING(x) *(x->GetDateString())
+#define GETDATESTRING(x) *(x->GetDateString())
#undef GETTIMESTRING
-#define GETTIMESTRING(x) *(x->GetTimeString())
+#define GETTIMESTRING(x) *(x->GetTimeString())
#undef PRINTDAY
#define PRINTDAY *cTimer::PrintDay
#undef DAYDATETIME
-#define DAYDATETIME(x) *DayDateTime(x)
+#define DAYDATETIME(x) *DayDateTime(x)
#undef CHANNELSTRING
-#define CHANNELSTRING(x) (*x->GetChannelID().ToString())
+#define CHANNELSTRING(x) (*x->GetChannelID().ToString())
#undef WEEKDAYNAME
-#define WEEKDAYNAME(x) (*WeekDayName(x))
+#define WEEKDAYNAME(x) (*WeekDayName(x))
#undef ADDDIR
-#define ADDDIR *AddDirectory
+#define ADDDIR *AddDirectory
#undef CONFIGDIR
#define CONFIGDIR (!ConfigDir?cPlugin::ConfigDirectory():ConfigDir)
diff --git a/log.h b/log.h
index cbf1e3d..bfe214f 100644
--- a/log.h
+++ b/log.h
@@ -43,11 +43,11 @@ class cLogFile: public cFile
void Log(int LogLevel, const char *text, ...)
{
if (LogLevel > loglevellimit) return;
- if(IsOpen())
+ if(IsOpen())
{
char* buffer = NULL;
- va_list Arg;
- va_start(Arg,text);
+ va_list Arg;
+ va_start(Arg,text);
if (vasprintf(&buffer, text, Arg) < 0)
esyslog("EPGSearch: vasprintf error");
va_end(Arg);
@@ -60,7 +60,7 @@ class cLogFile: public cFile
char *p = stpcpy(datebuf, WeekDayName(tm->tm_wday));
*p++ = ' ';
strftime(p, sizeof(datebuf) - (p - datebuf), "%d.%m.%Y", tm);
-
+
char timebuf[25];
strftime(timebuf, sizeof(timebuf), "%T", localtime_r(&now, &tm_r));
@@ -72,8 +72,8 @@ class cLogFile: public cFile
void eSysLog(const char *text, ...)
{
char* buffer = NULL;
- va_list Arg;
- va_start(Arg,text);
+ va_list Arg;
+ va_start(Arg,text);
if (vasprintf(&buffer, text, Arg) < 0)
esyslog("EPGSearch: vasprintf error");
va_end(Arg);
@@ -84,8 +84,8 @@ class cLogFile: public cFile
void iSysLog(const char *text, ...)
{
char* buffer = NULL;
- va_list Arg;
- va_start(Arg,text);
+ va_list Arg;
+ va_start(Arg,text);
if (vasprintf(&buffer, text, Arg) < 0)
esyslog("EPGSearch: vasprintf error");
va_end(Arg);
@@ -102,4 +102,4 @@ extern cLogFile LogFile;
#endif
-
+
diff --git a/mail.c b/mail.c
index 840d131..99b1af9 100644
--- a/mail.c
+++ b/mail.c
@@ -58,7 +58,7 @@ string cMailTimerNotification::Format(const string& templ) const
result = varExprEvent.Evaluate(pEvent);
cVarExpr varExprTimer(result);
result = varExprTimer.Evaluate(pTimer);
-
+
if (timerMod == tmStartStop)
result = ReplaceAll(result, "%timer.modreason%", tr("Start/Stop time has changed"));
if (timerMod == tmFile)
@@ -74,7 +74,7 @@ const cEvent* cMailTimerNotification::GetEvent() const
const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
if (!schedules) return NULL;
const cSchedule *schedule = schedules->GetSchedule(channelID);
- if (!schedule) return NULL;
+ if (!schedule) return NULL;
return schedule->GetEvent(eventID);
}
@@ -152,26 +152,26 @@ string cMailAnnounceEventNotification::Format(const string& templ) const
// -------------
// cMailNotifier
cMailNotifier::cMailNotifier(string Subject, string Body)
-: subject(Subject), body(Body)
+: subject(Subject), body(Body)
{
if (subject.size() > 0)
SendMail(true);
}
-bool cMailNotifier::SendMailViaSendmail()
+bool cMailNotifier::SendMailViaSendmail()
{
char mailcmd[256];
const char* mailargs = "%s -i -FVDR -oem %s";
const char* mailproc = SENDMAIL;
FILE* mail;
-
- string to = EPGSearchConfig.MailAddressTo;
+
+ string to = EPGSearchConfig.MailAddressTo;
snprintf(mailcmd, sizeof(mailcmd), mailargs, mailproc, to.c_str());
-
+
if (!(mail = popen(mailcmd, "w"))) {
return false;
}
-
+
fprintf(mail, "From: VDR\n");
fprintf(mail, "To: %s\n", to.c_str());
fprintf(mail, "Subject: %s\n", subject.c_str());
@@ -181,11 +181,11 @@ bool cMailNotifier::SendMailViaSendmail()
fprintf(mail, "Content-Type: text/plain; charset=%s\n", GetCodeset().c_str());
fprintf(mail, "\n");
-
+
fprintf(mail, "%s", body.c_str());
-
+
pclose(mail);
-
+
return true;
}
@@ -204,16 +204,16 @@ bool cMailNotifier::SendMailViaScript()
string AuthUser = EPGSearchConfig.MailAuthUser;
string AuthPass = EPGSearchConfig.MailAuthPass;
- string cmdArgs =
+ string cmdArgs =
string(" -f \"VDR <") + EPGSearchConfig.MailAddress + ">\"" +
" -t " + EPGSearchConfig.MailAddressTo +
" -s " + EPGSearchConfig.MailServer +
- " -u \"" + subject + "\""+
+ " -u \"" + subject + "\""+
(EPGSearchConfig.MailUseAuth?
(AuthUser != "" ?(" -xu " + AuthUser):"") +
(AuthPass != "" ?(" -xp " + AuthPass):"")
:"") +
- " -o message-charset=" + GetCodeset() +
+ " -o message-charset=" + GetCodeset() +
" -o message-file=" + filename;
bool success = ExecuteMailScript(cmdArgs);
@@ -236,7 +236,7 @@ bool cMailNotifier::SendMail(bool force)
}
else
{
-
+
LogFile.Log(2, "mail delivery delayed until %s", DAYDATETIME(nextMailDelivery));
return false;
}
@@ -249,7 +249,7 @@ bool cMailNotifier::ExecuteMailScript(string ScriptArgs)
if (mailCmd == "sendEmail.pl") // beautify output for standard script
ScriptArgs += " | cut -d\" \" -f 6-";
- cCommand cmd;
+ cCommand cmd;
string fullcmd = "mailcmd: " + mailCmd;
if (!cmd.Parse(fullcmd.c_str()))
{
@@ -266,23 +266,23 @@ bool cMailNotifier::ExecuteMailScript(string ScriptArgs)
bool cMailNotifier::TestMailAccount(string MailAddressTo, string MailAddress, string MailServer, string AuthUser, string AuthPass)
{
- string cmdArgs =
+ string cmdArgs =
string("-v -f \"VDR <") + MailAddress + ">\"" +
" -t " + MailAddressTo +
" -s " + MailServer +
- " -u \"VDR-Testmail\"" +
+ " -u \"VDR-Testmail\"" +
(AuthUser != "" ?(" -xu " + AuthUser):"") +
(AuthPass != "" ?(" -xp " + AuthPass):"") +
" -m \"Success! ;-)\"";
- return ExecuteMailScript(cmdArgs);
+ return ExecuteMailScript(cmdArgs);
}
string cMailNotifier::LoadTemplate(const string& templtype)
{
string filename = *AddDirectory(CONFIGDIR, templtype.c_str());
string templ = "";
- if (filename != "" && access(filename.c_str(), F_OK) == 0)
+ if (filename != "" && access(filename.c_str(), F_OK) == 0)
{
LogFile.iSysLog("loading %s", filename.c_str());
FILE *f = fopen(filename.c_str(), "r");
@@ -298,7 +298,7 @@ string cMailNotifier::LoadTemplate(const string& templtype)
templ += string(s) + "\n";
}
fclose(f);
- }
+ }
}
return templ;
}
@@ -306,7 +306,7 @@ string cMailNotifier::LoadTemplate(const string& templtype)
string cMailNotifier::GetTemplValue(const string& templ, const string& entry)
{
if (templ == "" || entry == "") return "";
-
+
string start = "<" + entry + ">";
string end = "</" + entry + ">";
@@ -361,9 +361,9 @@ void cMailUpdateNotifier::SendUpdateNotifications()
{
// insert pending notifications
cPendingNotification* p = PendingNotifications.First();
- while (p)
+ while (p)
{
- if (p->type == 0)
+ if (p->type == 0)
AddNewTimerNotification(p->eventID, p->channelID);
else if (p->type == 1)
AddModTimerNotification(p->eventID, p->channelID, p->timerMod);
@@ -372,10 +372,10 @@ void cMailUpdateNotifier::SendUpdateNotifications()
else if (p->type == 3)
AddAnnounceEventNotification(p->eventID, p->channelID, p->searchID);
p = PendingNotifications.Next(p);
- }
+ }
- if (newTimers.size() == 0 &&
- modTimers.size() == 0 &&
+ if (newTimers.size() == 0 &&
+ modTimers.size() == 0 &&
delTimers.size() == 0 &&
announceEvents.size() == 0)
return;
@@ -396,7 +396,7 @@ void cMailUpdateNotifier::SendUpdateNotifications()
if (newTimers.size() == 0)
newtimers = tr("No new timers were added.");
std::set<cMailTimerNotification>::iterator itnt;
- for (itnt = newTimers.begin(); itnt != newTimers.end(); itnt++)
+ for (itnt = newTimers.begin(); itnt != newTimers.end(); itnt++)
{
string message = (*itnt).Format(templTimer);
if (message != "") newtimers += message;
@@ -407,7 +407,7 @@ void cMailUpdateNotifier::SendUpdateNotifications()
if (modTimers.size() == 0)
modtimers = tr("No timers were modified.");
std::set<cMailTimerNotification>::iterator itmt;
- for (itmt = modTimers.begin(); itmt != modTimers.end(); itmt++)
+ for (itmt = modTimers.begin(); itmt != modTimers.end(); itmt++)
{
string message = (*itmt).Format(templTimer);
if (message != "") modtimers += message;
@@ -418,7 +418,7 @@ void cMailUpdateNotifier::SendUpdateNotifications()
if (delTimers.size() == 0)
deltimers = tr("No timers were deleted.");
std::set<cMailDelTimerNotification>::iterator itdt;
- for (itdt = delTimers.begin(); itdt != delTimers.end(); itdt++)
+ for (itdt = delTimers.begin(); itdt != delTimers.end(); itdt++)
{
string message = (*itdt).Format("");
if (message != "") deltimers += message;
@@ -429,7 +429,7 @@ void cMailUpdateNotifier::SendUpdateNotifications()
if (announceEvents.size() == 0)
announceevents = tr("No new events to announce.");
std::set<cMailAnnounceEventNotification>::iterator itae;
- for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
+ for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
{
string message = (*itae).Format(templEvent);
if (message != "") announceevents += message;
@@ -462,7 +462,7 @@ void cMailUpdateNotifier::SendUpdateNotifications()
if (SendMail())
{
EPGSearchConfig.lastMailOnSearchtimerAt = time(NULL);
- cPluginManager::GetPlugin("epgsearch")->SetupStore("MailNotificationSearchtimersLastAt",
+ cPluginManager::GetPlugin("epgsearch")->SetupStore("MailNotificationSearchtimersLastAt",
EPGSearchConfig.lastMailOnSearchtimerAt);
// remove pending notifications
while((p = PendingNotifications.First()) != NULL)
@@ -471,24 +471,24 @@ void cMailUpdateNotifier::SendUpdateNotifications()
else
{
// add current notifications to pending ones
- for (itnt = newTimers.begin(); itnt != newTimers.end(); itnt++)
+ for (itnt = newTimers.begin(); itnt != newTimers.end(); itnt++)
PendingNotifications.Add(new cPendingNotification(0, itnt->eventID, itnt->channelID, -1));
- for (itmt = modTimers.begin(); itmt != modTimers.end(); itmt++)
+ for (itmt = modTimers.begin(); itmt != modTimers.end(); itmt++)
PendingNotifications.Add(new cPendingNotification(1, itmt->eventID, itmt->channelID, -1, itmt->timerMod));
- for (itdt = delTimers.begin(); itdt != delTimers.end(); itdt++)
+ for (itdt = delTimers.begin(); itdt != delTimers.end(); itdt++)
PendingNotifications.Add(new cPendingNotification(2, -1, itdt->channelID, itdt->start, -1, -1, itdt->formatted));
- for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
- PendingNotifications.Add(new cPendingNotification(3, itae->eventID, itae->channelID, -1, -1, itae->searchextID));
- }
+ for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
+ PendingNotifications.Add(new cPendingNotification(3, itae->eventID, itae->channelID, -1, -1, itae->searchextID));
+ }
PendingNotifications.Save();
-
+
newTimers.clear();
modTimers.clear();
delTimers.clear();
// Add announced events to the "no announce" list
- for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
+ for (itae = announceEvents.begin(); itae != announceEvents.end(); itae++)
{
- cNoAnnounce* noAnnounce = new cNoAnnounce(itae->GetEvent());
+ cNoAnnounce* noAnnounce = new cNoAnnounce(itae->GetEvent());
if (noAnnounce && noAnnounce->Valid())
NoAnnounces.Add(noAnnounce);
}
@@ -515,14 +515,14 @@ void cMailConflictNotifier::SendConflictNotifications(cConflictCheck& conflictCh
for(cConflictCheckTime* ct = failedList->First(); ct; ct = failedList->Next(ct))
{
- if (!ct || ct->ignore) continue;
+ if (!ct || ct->ignore) continue;
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
if ((*it) && !(*it)->ignore && (*it)->Event())
{
std::string channelID = *(*it)->Event()->ChannelID().ToString();
- newMailConflicts << (*it)->Event()->EventID()
- << "|"
+ newMailConflicts << (*it)->Event()->EventID()
+ << "|"
<< channelID;
}
}
@@ -550,11 +550,11 @@ void cMailConflictNotifier::SendConflictNotifications(cConflictCheck& conflictCh
string templConflictTimer = GetTemplValue(templ, "conflicttimer");
LogFile.Log(3, "extracting templates - done");
- // create the conflict list
+ // create the conflict list
string conflicts;
for(cConflictCheckTime* ct = failedList->First(); ct; ct = failedList->Next(ct))
{
- if (ct->ignore) continue;
+ if (ct->ignore) continue;
// format conflict time
string conflictsAt = templConflictsAt;
conflictsAt = ReplaceAll(conflictsAt, "%conflict.time%", TIMESTRING(ct->evaltime));
@@ -562,7 +562,7 @@ void cMailConflictNotifier::SendConflictNotifications(cConflictCheck& conflictCh
string conflicttimers;
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
if (!(*it)->ignore && (*it)->Event())
{
cMailTimerNotification M((*it)->Event()->EventID(), (*it)->Event()->ChannelID());
@@ -575,7 +575,7 @@ void cMailConflictNotifier::SendConflictNotifications(cConflictCheck& conflictCh
}
conflictsAt = ReplaceAll(conflictsAt, "%conflict.confltimers%", conflicttimers);
- conflicts += conflictsAt;
+ conflicts += conflictsAt;
}
// evaluate variables
diff --git a/mail.h b/mail.h
index 3e432ef..1854983 100644
--- a/mail.h
+++ b/mail.h
@@ -35,7 +35,7 @@ using std::string;
using std::set;
// --- cMailNotifier --------------------------------------------------------
-class cMailNotifier
+class cMailNotifier
{
protected:
string subject;
@@ -68,7 +68,7 @@ class cMailTimerNotification
virtual const cEvent* GetEvent() const;
public:
- cMailTimerNotification(tEventID EventID, tChannelID ChannelID, uint TimerMod = tmNoChange)
+ cMailTimerNotification(tEventID EventID, tChannelID ChannelID, uint TimerMod = tmNoChange)
: eventID(EventID), channelID(ChannelID), timerMod(TimerMod) {}
virtual bool operator< (const cMailTimerNotification &N) const;
virtual string Format(const string& templ) const;
@@ -82,7 +82,7 @@ class cMailDelTimerNotification
public:
string formatted;
- cMailDelTimerNotification(cTimer* t, const cEvent* pEvent, const string& templ);
+ cMailDelTimerNotification(cTimer* t, const cEvent* pEvent, const string& templ);
cMailDelTimerNotification(const string& Formatted, tChannelID ChannelID, time_t Start);
bool operator< (const cMailDelTimerNotification &N) const;
string Format(const string& templ) const { return formatted; }
@@ -93,7 +93,7 @@ class cMailAnnounceEventNotification : public cMailTimerNotification
friend class cMailUpdateNotifier;
int searchextID;
public:
- cMailAnnounceEventNotification(tEventID EventID, tChannelID ChannelID, int SearchExtID)
+ cMailAnnounceEventNotification(tEventID EventID, tChannelID ChannelID, int SearchExtID)
: cMailTimerNotification(EventID, ChannelID), searchextID(SearchExtID) {}
string Format(const string& templ) const;
};
diff --git a/main.c b/main.c
index 8cc6baa..5658551 100644
--- a/main.c
+++ b/main.c
@@ -25,7 +25,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
// and are included only as a placeholder. Nevertheless,
// they *will* get included in the static library if you
// don't remove them :)
-//
+//
// Obviously, you 'll have to write yourself the super-duper
// functions to include in the resulting library...
// Also, it's not necessary to write every function in this file.
@@ -48,6 +48,6 @@ void SampleFunction1()
int SampleFunction2()
{
// insert code here
-
+
return 0;
}
diff --git a/mainmenushortcut.h b/mainmenushortcut.h
index a3c0e6f..6b26a3f 100644
--- a/mainmenushortcut.h
+++ b/mainmenushortcut.h
@@ -28,16 +28,16 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
static const char I18nEpgsearch[] = "vdr-epgsearch";
-class cMainMenuShortcutSetupPage : public cMenuSetupPage
+class cMainMenuShortcutSetupPage : public cMenuSetupPage
{
private:
const char* _setupEntry;
int* const _setupValue;
int dummy; // don't know why, but this is necessary to avoid a crash with ext-patch and active USE_LIEMIKUUTIO
-
+
public:
cMainMenuShortcutSetupPage(const char* setupText, const char* setupEntry, int* const setupValue);
-
+
protected:
virtual void Store(void);
};
diff --git a/menu_announcelist.c b/menu_announcelist.c
index fc5ff01..9862d98 100644
--- a/menu_announcelist.c
+++ b/menu_announcelist.c
@@ -40,7 +40,7 @@ void cMenuAnnounceList::SetHelpKeys(bool Force)
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -48,7 +48,7 @@ void cMenuAnnounceList::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
+ {
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), m_bSort? tr("Button$by channel"):tr("Button$by time"), modeYellow==showTitleEpisode?tr("Button$Episode"):tr("Button$Title"), trVDR("Button$Edit"));
else
@@ -69,15 +69,15 @@ eOSState cMenuAnnounceList::ProcessKey(eKeys Key)
if (item)
{
if (!HasSubMenu())
- return AddSubMenu(new cMenuAnnounceDetails(item->event, item->search));
+ return AddSubMenu(new cMenuAnnounceDetails(item->event, item->search));
else if (!showsDetails)
return Switch();
- else
+ else
return osContinue;
}
}
break;
- default:
+ default:
break;
}
}
@@ -111,7 +111,7 @@ cMenuAnnounceDetails::cMenuAnnounceDetails(const cEvent* Event, const cSearchExt
else
announceAgain = 0;
}
- Set();
+ Set();
}
cMenuAnnounceDetails::~cMenuAnnounceDetails()
@@ -123,13 +123,13 @@ void cMenuAnnounceDetails::Set()
{
int current = Current();
Clear();
-
+
Add(new cMenuEditBoolItem(tr("announce again"), &announceAgain, trVDR("no"), trVDR("yes")));
if (announceAgain)
{
- Add(new cMenuEditBoolItem(IndentMenuItem(tr("with next update")), &announceWithNextUpdate, trVDR("no"), trVDR("yes")));
+ Add(new cMenuEditBoolItem(IndentMenuItem(tr("with next update")), &announceWithNextUpdate, trVDR("no"), trVDR("yes")));
if (!announceWithNextUpdate)
- Add(new cMenuEditDateItem(IndentMenuItem(IndentMenuItem(tr("again from"))), &announceAgainDay, NULL));
+ Add(new cMenuEditDateItem(IndentMenuItem(IndentMenuItem(tr("again from"))), &announceAgainDay, NULL));
}
else
announceAgainDay = 0;
@@ -139,7 +139,7 @@ void cMenuAnnounceDetails::Set()
cOsdItem* pInfoItem = new cOsdItem("");
pInfoItem->SetSelectable(false);
Add(pInfoItem);
-
+
cString info = cString::sprintf("%s: %s", tr("Search timer"), search->search);
pInfoItem = new cOsdItem(info);
pInfoItem->SetSelectable(false);
@@ -166,7 +166,7 @@ eOSState cMenuAnnounceDetails::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
- case kRed:
+ case kRed:
case kGreen:
case kBlue:
case kYellow:
@@ -182,7 +182,7 @@ eOSState cMenuAnnounceDetails::ProcessKey(eKeys Key)
{
if (!noAnnounce)
{
- noAnnounce = new cNoAnnounce(event, announceAgainDay);
+ noAnnounce = new cNoAnnounce(event, announceAgainDay);
NoAnnounces.Add(noAnnounce);
}
else
@@ -191,10 +191,10 @@ eOSState cMenuAnnounceDetails::ProcessKey(eKeys Key)
}
if (announceAgain && announceWithNextUpdate && noAnnounce)
NoAnnounces.Del(noAnnounce);
- NoAnnounces.Save();
+ NoAnnounces.Save();
}
return osBack;
- default:
+ default:
break;
}
}
diff --git a/menu_blacklistedit.c b/menu_blacklistedit.c
index 68dca0e..dd6a73c 100644
--- a/menu_blacklistedit.c
+++ b/menu_blacklistedit.c
@@ -48,7 +48,7 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
SearchModes[3] = strdup(tr("match exactly"));
SearchModes[4] = strdup(tr("regular expression"));
SearchModes[5] = strdup(tr("fuzzy"));
-
+
DaysOfWeek[0] = strdup(WeekDayName(0));
DaysOfWeek[1] = strdup(WeekDayName(1));
DaysOfWeek[2] = strdup(WeekDayName(2));
@@ -57,7 +57,7 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
DaysOfWeek[5] = strdup(WeekDayName(5));
DaysOfWeek[6] = strdup(WeekDayName(6));
DaysOfWeek[7] = strdup(tr("user-defined"));
-
+
UseChannelSel[0] = strdup(trVDR("no"));
UseChannelSel[1] = strdup(tr("interval"));
UseChannelSel[2] = strdup(tr("channel group"));
@@ -65,15 +65,15 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
if (New)
{
- cSearchExt* SearchTempl = NULL; // copy the default settings, if we have a default template
+ cSearchExt* SearchTempl = NULL; // copy the default settings, if we have a default template
cMutexLock SearchTemplatesLock(&SearchTemplates);
cSearchExt *SearchExtTempl = SearchTemplates.First();
- while (SearchExtTempl)
- {
+ while (SearchExtTempl)
+ {
if (SearchExtTempl->ID == EPGSearchConfig.DefSearchTemplateID)
SearchTempl = SearchExtTempl;
SearchExtTempl = SearchTemplates.Next(SearchExtTempl);
- }
+ }
if (SearchTempl)
Blacklist->CopyFromTemplate(SearchTempl);
}
@@ -81,7 +81,7 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
blacklist = Blacklist;
addIfConfirmed = New;
- if (blacklist)
+ if (blacklist)
{
data = *blacklist;
UserDefDayOfWeek = 0;
@@ -95,7 +95,7 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
channelGroupName = NULL;
channelMin = channelMax = cDevice::CurrentChannel();
- channelGroupNr = 0;
+ channelGroupNr = 0;
if (data.useChannel==1)
{
channelMin = data.channelMin->Number();
@@ -115,14 +115,14 @@ cMenuBlacklistEdit::cMenuBlacklistEdit(cBlacklist *Blacklist, bool New)
channelGroupName = strdup(data.channelGroup);
channelGroupNr++;
}
- }
+ }
catvaluesNumeric = NULL;
if (SearchExtCats.Count() > 0)
{
catvaluesNumeric = (int*) malloc(SearchExtCats.Count() * sizeof(int));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
catvaluesNumeric[index] = atol(blacklist->catvalues[index]);
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -137,7 +137,7 @@ void cMenuBlacklistEdit::Set()
{
int current = Current();
Clear();
-
+
Add(new cMenuEditStrItem( tr("Search term"), data.search, sizeof(data.search), tr(AllowedChars)));
Add(new cMenuEditStraItem(tr("Search mode"), &data.mode, 6, SearchModes));
if (data.mode == 5) // fuzzy
@@ -145,8 +145,8 @@ void cMenuBlacklistEdit::Set()
Add(new cMenuEditBoolItem( tr("Match case"), &data.useCase, trVDR("no"), trVDR("yes")));
Add(new cMenuEditBoolItem( tr("Use title"), &data.useTitle, trVDR("no"), trVDR("yes")));
Add(new cMenuEditBoolItem( tr("Use subtitle"), &data.useSubtitle, trVDR("no"), trVDR("yes")));
- Add(new cMenuEditBoolItem( tr("Use description"), &data.useDescription, trVDR("no"), trVDR("yes")));
-
+ Add(new cMenuEditBoolItem( tr("Use description"), &data.useDescription, trVDR("no"), trVDR("yes")));
+
// show Categories only if we have them
if (SearchExtCats.Count() > 0)
{
@@ -155,19 +155,19 @@ void cMenuBlacklistEdit::Set()
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
Add(new cMenuEditIntItem(IndentMenuItem(SearchExtCat->menuname), &catvaluesNumeric[index], 0, 999999, ""));
else
Add(new cMenuEditStrItem( IndentMenuItem(SearchExtCat->menuname), data.catvalues[index], MaxFileName, tr(AllowedChars)));
-
+
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
}
Add(new cMenuEditBoolItem(IndentMenuItem(tr("Ignore missing categories")), &data.ignoreMissingEPGCats, trVDR("no"), trVDR("yes"))); }
}
-
+
Add(new cMenuEditStraItem(tr("Use channel"), &data.useChannel, 4, UseChannelSel));
if (data.useChannel==1)
{
@@ -192,7 +192,7 @@ void cMenuBlacklistEdit::Set()
channelGroupNr++;
Add(new cMenuEditStraItem(IndentMenuItem(tr("Channel group")), &channelGroupNr, ChannelGroups.Count()+1, menuitemsChGr));
}
-
+
Add(new cMenuEditBoolItem( tr("Use time"), &data.useTime, trVDR("no"), trVDR("yes")));
if (data.useTime == true)
{
@@ -212,7 +212,7 @@ void cMenuBlacklistEdit::Set()
{
UserDefDayOfWeek = data.DayOfWeek;
data.DayOfWeek = 7;
- }
+ }
Add(new cMenuEditStraItem(IndentMenuItem(tr("Day of week")), &data.DayOfWeek, 8, DaysOfWeek));
}
Add(new cMenuEditBoolItem( tr("Use global"), &data.isGlobal, trVDR("no"), trVDR("yes")));
@@ -250,9 +250,9 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
int iTemp_useDuration = data.useDuration;
int iTemp_useDayOfWeek = data.useDayOfWeek;
int iTemp_useExtEPGInfo = data.useExtEPGInfo;
-
+
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
if (iTemp_mode != data.mode ||
iTemp_useTime != data.useTime ||
iTemp_useChannel != data.useChannel ||
@@ -264,7 +264,7 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
Display();
}
const char* ItemText = Get(Current())->Text();
-
+
if (!HasSubMenu())
{
if (strlen(ItemText)>0 && strstr(ItemText, tr(" from channel")) == ItemText && ((Key >= k0 && Key <= k9) || Key == kLeft || Key == kRight))
@@ -289,16 +289,16 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
int iOnExtCatItem = 0;
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (strstr(ItemText, IndentMenuItem(SearchExtCat->menuname)) == ItemText)
- {
+ {
iOnExtCatItem = 1;
if (SearchExtCat->nvalues > 0)
iOnExtCatItemBrowsable = 1;
iCatIndex = index;
catname = SearchExtCat->menuname;
- break;
+ break;
}
index++;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -335,7 +335,7 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
else if (iOnExtCatItem)
{
if (!InEditMode(ItemText, IndentMenuItem(catname), data.catvalues[iCatIndex]) ||
- SearchExtCats.Get(iCatIndex)->searchmode >= 10)
+ SearchExtCats.Get(iCatIndex)->searchmode >= 10)
SetHelp(NULL, NULL, NULL, iOnExtCatItemBrowsable?tr("Button$Select"):NULL);
}
else if (strstr(ItemText, tr("Search term")) != ItemText)
@@ -345,13 +345,13 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
if (HasSubMenu())
return osContinue;
switch (Key) {
- case kOk:
- if (data.useChannel==1)
+ case kOk:
+ if (data.useChannel==1)
{
cChannel *ch = Channels.GetByNumber(channelMin);
if (ch)
data.channelMin = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -359,7 +359,7 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
ch = Channels.GetByNumber(channelMax);
if (ch)
data.channelMax = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -372,17 +372,17 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
}
if (data.useChannel==2)
data.channelGroup = strdup(menuitemsChGr[channelGroupNr]);
-
- if (blacklist)
+
+ if (blacklist)
{
*blacklist = data;
if (data.DayOfWeek == 7)
blacklist->DayOfWeek = UserDefDayOfWeek;
-
+
// transfer numeric cat values back to search
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
{
@@ -399,7 +399,7 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
blacklist->ID = Blacklists.GetNewID();
Blacklists.Add(blacklist);
}
-
+
Blacklists.Save();
addIfConfirmed = false;
}
@@ -408,10 +408,10 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
if (iOnUserDefDayItem)
state = AddSubMenu(new cMenuEditDaysOfWeek(&UserDefDayOfWeek));
break;
-
- case kBlue:
+
+ case kBlue:
if (iOnUseChannelGroups || iOnChannelGroup)
- {
+ {
if (channelGroupName)
free(channelGroupName);
channelGroupName = strdup(menuitemsChGr[channelGroupNr]);
@@ -446,7 +446,7 @@ eOSState cMenuBlacklistEdit::ProcessKey(eKeys Key)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
catvaluesNumeric[index] = atoi(data.catvalues[index]);
diff --git a/menu_blacklists.c b/menu_blacklists.c
index ddc0cde..28d947e 100644
--- a/menu_blacklists.c
+++ b/menu_blacklists.c
@@ -73,7 +73,7 @@ void cMenuBlacklistsItem::Set(void)
}
else if (blacklist->useChannel == 2)
line << setiosflags(ios::left) << setw(11) << blacklist->channelGroup;
-
+
line << "\t";
if (blacklist->useTime)
{
@@ -85,7 +85,7 @@ void cMenuBlacklistsItem::Set(void)
}
else
line << "--:--\t--:--";
-
+
SetText(strdup(line.str().c_str()), false);
}
@@ -101,7 +101,7 @@ cMenuBlacklists::cMenuBlacklists()
{
cMutexLock BlacklistLock(&Blacklists);
cBlacklist *Blacklist = Blacklists.First();
- while (Blacklist) {
+ while (Blacklist) {
Add(new cMenuBlacklistsItem(Blacklist));
Blacklist = Blacklists.Next(Blacklist);
}
@@ -165,8 +165,8 @@ eOSState cMenuBlacklists::ProcessKey(eKeys Key)
default: break;
}
}
- if (BlacklistNumber >= 0 && !HasSubMenu())
- {
+ if (BlacklistNumber >= 0 && !HasSubMenu())
+ {
cMutexLock BlacklistLock(&Blacklists);
cBlacklist* Blacklist = Blacklists.Get(BlacklistNumber);
if (Blacklist) // a newly created search was confirmed with Ok
diff --git a/menu_commands.c b/menu_commands.c
index a732f09..7bfa484 100644
--- a/menu_commands.c
+++ b/menu_commands.c
@@ -28,8 +28,8 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include <vdr/plugin.h>
#include "menu_searchresults.h"
#include "menu_myedittimer.h"
-#include "menu_search.h"
-#include "menu_searchedit.h"
+#include "menu_search.h"
+#include "menu_searchedit.h"
#include "epgsearchcfg.h"
#include "recdone.h"
#include "epgsearchtools.h"
@@ -48,7 +48,7 @@ cMenuSearchCommands::cMenuSearchCommands(const char *Title, const cEvent* Event,
directCall = DirectCall;
SetHasHotkeys();
LoadCommands();
-
+
search = Search;
event = Event;
Add(new cOsdItem(hk(tr("Repeats"))));
@@ -83,7 +83,7 @@ void cMenuSearchCommands::LoadCommands()
while(pstrSearchToken) // may contain multiple code, e.g. 'ger,deu'
{
cString cmdFile = cString::sprintf("%s-%s.conf", ADDDIR(CONFIGDIR, "epgsearchcmds"), pstrSearchToken);
- if (access(cmdFile, F_OK) == 0)
+ if (access(cmdFile, F_OK) == 0)
{
commands.Load(cmdFile, true);
bLoaded = true;
@@ -103,7 +103,7 @@ eOSState cMenuSearchCommands::Switch(void)
return osEnd;
else
{
- Skins.Message(mtInfo, trVDR("Can't switch channel!"));
+ Skins.Message(mtInfo, trVDR("Can't switch channel!"));
return osContinue;
}
}
@@ -119,7 +119,7 @@ eOSState cMenuSearchCommands::Record(void)
int timerMatch = tmNone;
cTimer* timer = Timers.GetMatch(event, &timerMatch);
- if (timerMatch == tmFull)
+ if (timerMatch == tmFull)
{
if (EPGSearchConfig.useVDRTimerEditMenu)
return AddSubMenu(new cMenuEditTimer(timer));
@@ -130,18 +130,18 @@ eOSState cMenuSearchCommands::Record(void)
timer = new cTimer(event);
PrepareTimerFile(event, timer);
cTimer *t = Timers.GetTimer(timer);
-
- if (EPGSearchConfig.onePressTimerCreation == 0 || t || (!t && event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
+
+ if (EPGSearchConfig.onePressTimerCreation == 0 || t || (!t && event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
{
if (t)
{
delete timer;
- timer = t;
+ timer = t;
}
if (EPGSearchConfig.useVDRTimerEditMenu)
return AddSubMenu(new cMenuEditTimer(timer, !t));
else
- return AddSubMenu(new cMenuMyEditTimer(timer, !t, event));
+ return AddSubMenu(new cMenuMyEditTimer(timer, !t, event));
}
else
{
@@ -169,7 +169,7 @@ eOSState cMenuSearchCommands::Record(void)
Timers.Add(timer);
timer->Matches();
Timers.SetModified();
-
+
LogFile.iSysLog("timer %s added (active)", *timer->ToDescr());
return osBack;
}
@@ -192,7 +192,7 @@ eOSState cMenuSearchCommands::MarkAsRecorded(void)
eOSState cMenuSearchCommands::AddToSwitchList(void)
{
if (!event) return osContinue;
-
+
time_t now = time(NULL);
if (now >= event->StartTime())
{
@@ -204,7 +204,7 @@ eOSState cMenuSearchCommands::AddToSwitchList(void)
{
if (!Interface->Confirm(tr("Add to switch list?")))
return osContinue;
- cMutexLock SwitchTimersLock(&SwitchTimers);
+ cMutexLock SwitchTimersLock(&SwitchTimers);
SwitchTimers.Add(new cSwitchTimer(event));
SwitchTimers.Save();
cSwitchTimerThread::Init(); // asure the thread is running
@@ -213,11 +213,11 @@ eOSState cMenuSearchCommands::AddToSwitchList(void)
{
if (!Interface->Confirm(tr("Delete from switch list?")))
return osContinue;
- cMutexLock SwitchTimersLock(&SwitchTimers);
+ cMutexLock SwitchTimersLock(&SwitchTimers);
SwitchTimers.Del(switchTimer);
SwitchTimers.Save();
if (SwitchTimers.Count() == 0)
- cSwitchTimerThread::Exit();
+ cSwitchTimerThread::Exit();
}
return osBack;
}
@@ -249,19 +249,19 @@ eOSState cMenuSearchCommands::Execute(void)
if (current == 0)
return AddSubMenu(new cMenuSearchResultsForQuery(event->Title(), true));
if (current == 1)
- return Record();
+ return Record();
if (current == 2)
return Switch();
if (current == 3)
- return CreateSearchTimer();
+ return CreateSearchTimer();
if (current == 4)
return AddSubMenu(new cMenuSearchResultsForRecs(event->Title()));
if (current == 5)
- return MarkAsRecorded();
+ return MarkAsRecorded();
if (current == 6)
- return AddToSwitchList();
+ return AddToSwitchList();
if (current == 7)
- return CreateBlacklist();
+ return CreateBlacklist();
}
cCommand *command = commands.Get(current-8);
@@ -275,13 +275,13 @@ eOSState cMenuSearchCommands::Execute(void)
if (confirmed) {
buffer = cString::sprintf("%s...", command->Title());
Skins.Message(mtStatus, buffer);
-
- buffer = cString::sprintf("'%s' %ld %ld %d '%s' '%s'",
- EscapeString(event->Title()).c_str(),
- event->StartTime(),
- event->EndTime(),
- ChannelNrFromEvent(event),
- EscapeString(Channels.GetByChannelID(event->ChannelID(), true, true)->Name()).c_str(),
+
+ buffer = cString::sprintf("'%s' %ld %ld %d '%s' '%s'",
+ EscapeString(event->Title()).c_str(),
+ event->StartTime(),
+ event->EndTime(),
+ ChannelNrFromEvent(event),
+ EscapeString(Channels.GetByChannelID(event->ChannelID(), true, true)->Name()).c_str(),
EscapeString(event->ShortText()?event->ShortText():"").c_str());
const char *Result = command->Execute(buffer);
Skins.Message(mtStatus, NULL);
@@ -309,7 +309,7 @@ eOSState cMenuSearchCommands::ProcessKey(eKeys Key)
case kBlue:
return osContinue;
case k1...k9:
- case kOk:
+ case kOk:
return Execute();
default: break;
}
diff --git a/menu_conflictcheck.c b/menu_conflictcheck.c
index c31b1c8..230048b 100644
--- a/menu_conflictcheck.c
+++ b/menu_conflictcheck.c
@@ -54,7 +54,7 @@ cMenuConflictCheckItem::cMenuConflictCheckItem(cConflictCheckTime* Ct, cConflict
int recPart = timerObj->recDuration * 100 / (timerObj->stop - timerObj->start);
buffer = cString::sprintf("%d\t%s\t%d\t%2d%%\t%s", t->Channel()->Number(), t->Channel()->ShortName(true), t->Priority(), recPart, t->File());
}
- SetText(buffer);
+ SetText(buffer);
}
// --- cMenuConflictCheck -------------------------------------------------------
@@ -65,7 +65,7 @@ cMenuConflictCheck::cMenuConflictCheck()
showAll = false;
lastSel = -1;
BuildList();
- Update();
+ Update();
}
void cMenuConflictCheck::Update()
@@ -82,7 +82,7 @@ void cMenuConflictCheck::Update()
else
SetHelp(NULL, NULL, NULL, NULL);
- cString buffer = cString::sprintf("%s - %d/%d %s", tr("Timer conflicts"),
+ cString buffer = cString::sprintf("%s - %d/%d %s", tr("Timer conflicts"),
showAll?conflictCheck.numConflicts:conflictCheck.relevantConflicts,
conflictCheck.numConflicts,
tr("conflicts"));
@@ -93,7 +93,7 @@ void cMenuConflictCheck::Update()
bool cMenuConflictCheck::BuildList()
{
Clear();
- conflictCheck.Check();
+ conflictCheck.Check();
if ((showAll && conflictCheck.numConflicts > 0) ||
conflictCheck.relevantConflicts > 0)
@@ -104,7 +104,7 @@ bool cMenuConflictCheck::BuildList()
if (!showAll && ct->ignore) continue;
Add(new cMenuConflictCheckItem(ct));
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
if (!(*it)->ignore || showAll)
Add(new cMenuConflictCheckItem(ct, *it));
}
@@ -129,15 +129,15 @@ eOSState cMenuConflictCheck::ProcessKey(eKeys Key)
{
bool HadSubMenu = HasSubMenu();
eOSState state = cOsdMenu::ProcessKey(Key);
- if (state == osUnknown)
+ if (state == osUnknown)
{
- switch (Key)
+ switch (Key)
{
case kOk:
if (Count() == 1)
return osBack;
case kRed:
- if (CurrentTimerObj())
+ if (CurrentTimerObj())
state = AddSubMenu(new cMenuConflictCheckDetails(CurrentTimerObj(), &conflictCheck));
break;
case kBlue:
@@ -171,7 +171,7 @@ bool cMenuConflictCheckDetailsItem::Update(bool Force)
bool oldhasTimer = hasTimer;
hasTimer = timerObj->OrigTimer()?timerObj->OrigTimer()->HasFlags(tfActive):false;
if (Force || hasTimer != oldhasTimer)
- {
+ {
cTimer* timer = timerObj->timer;
char device[2]="";
if (hasTimer)
@@ -183,8 +183,8 @@ bool cMenuConflictCheckDetailsItem::Update(bool Force)
}
cString buffer = cString::sprintf("%s\t%d\t%s - %s\t%d\t%s\t%s", hasTimer?">":"", timer->Channel()->Number(), TIMESTRING(timerObj->start), TIMESTRING(timerObj->stop), timer->Priority(), device, timer->File());
-
- SetText(buffer);
+
+ SetText(buffer);
}
return true;
}
@@ -207,10 +207,10 @@ bool cMenuConflictCheckDetails::BuildList()
{
Clear();
int sel = -1;
-
+
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
if (timerObj->concurrentTimers)
- for (it = timerObj->concurrentTimers->begin(); it != timerObj->concurrentTimers->end(); it++)
+ for (it = timerObj->concurrentTimers->begin(); it != timerObj->concurrentTimers->end(); it++)
{
Add(new cMenuConflictCheckDetailsItem(*it));
if ((*it)->Event())
@@ -242,7 +242,7 @@ eOSState cMenuConflictCheckDetails::Commands(eKeys Key)
if (HasSubMenu() || Count() == 0)
return osContinue;
cConflictCheckTimerObj* curTimerObj = CurrentTimerObj();
- if (curTimerObj && curTimerObj->Event())
+ if (curTimerObj && curTimerObj->Event())
{
cMenuSearchCommands *menu;
eOSState state = AddSubMenu(menu = new cMenuSearchCommands(tr("EPG Commands"), curTimerObj->Event(), true));
@@ -306,7 +306,7 @@ eOSState cMenuConflictCheckDetails::ShowSummary()
return osContinue;
const cEvent *ei = curTimerObj->Event();
- if (ei)
+ if (ei)
{
cChannel *channel = Channels.GetByChannelID(ei->ChannelID(), true, true);
if (channel)
@@ -316,19 +316,19 @@ eOSState cMenuConflictCheckDetails::ShowSummary()
}
void cMenuConflictCheckDetails::UpdateCurrent()
-{
+{
cEventObj* cureventObj = eventObjects.GetCurrent();
if (cureventObj && cureventObj->Event())
- for (cMenuConflictCheckDetailsItem *item = (cMenuConflictCheckDetailsItem *)First(); item; item = (cMenuConflictCheckDetailsItem *)Next(item))
+ for (cMenuConflictCheckDetailsItem *item = (cMenuConflictCheckDetailsItem *)First(); item; item = (cMenuConflictCheckDetailsItem *)Next(item))
if (item->timerObj && item->timerObj->Event() == cureventObj->Event())
{
cureventObj->Select(false);
SetCurrent(item);
Display();
break;
- }
+ }
}
-
+
eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
{
bool HadSubMenu = HasSubMenu();
@@ -337,11 +337,11 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
if (!HasSubMenu() && HadSubMenu) // navigation in summary could have changed current item, so update it
UpdateCurrent();
- if (state == osUnknown)
+ if (state == osUnknown)
{
- switch (Key)
+ switch (Key)
{
- case k1...k9:
+ case k1...k9:
if (!HasSubMenu())
return Commands(Key);
else
@@ -352,9 +352,9 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
return ShowSummary();
else
state = osContinue;
- break;
+ break;
case kRed:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
if (CurrentTimerObj() && CurrentTimerObj()->Event())
return Commands(k1);
@@ -365,15 +365,15 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
state = osContinue;
break;
case kGreen:
- if(!HasSubMenu())
+ if(!HasSubMenu())
state = ToggleTimer(CurrentTimerObj());
break;
case kYellow:
- if(!HasSubMenu())
+ if(!HasSubMenu())
state = DeleteTimer(CurrentTimerObj());
break;
case kBlue:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
if (CurrentTimerObj() && CurrentTimerObj()->Event())
return AddSubMenu(new cMenuSearchCommands(tr("EPG Commands"),CurrentTimerObj()->Event()));
@@ -386,7 +386,7 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
default: break;
}
}
- if (!HasSubMenu())
+ if (!HasSubMenu())
{
// perhaps a timer was deleted, so first check this
if (conflictCheck)
@@ -394,13 +394,13 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
if (timerObj->concurrentTimers)
{
- for (it = timerObj->concurrentTimers->begin(); it != timerObj->concurrentTimers->end(); it++)
+ for (it = timerObj->concurrentTimers->begin(); it != timerObj->concurrentTimers->end(); it++)
{
bool found = false;
- for(cTimer* checkT = Timers.First(); checkT; checkT = Timers.Next(checkT))
+ for(cTimer* checkT = Timers.First(); checkT; checkT = Timers.Next(checkT))
{
checkT->Matches();
- if (checkT == (*it)->OrigTimer()) // ok -> found, check for changes
+ if (checkT == (*it)->OrigTimer()) // ok -> found, check for changes
{
if (checkT->IsSingleEvent())
{
@@ -421,7 +421,7 @@ eOSState cMenuConflictCheckDetails::ProcessKey(eKeys Key)
time_t Start = cTimer::SetTime((*it)->start, cTimer::TimeToInt(checkT->Start()));
if (Start == (*it)->start && (*it)->stop == (*it)->start + length)
- found = true;
+ found = true;
}
}
}
diff --git a/menu_conflictcheck.h b/menu_conflictcheck.h
index 754bd93..8db5f06 100644
--- a/menu_conflictcheck.h
+++ b/menu_conflictcheck.h
@@ -30,7 +30,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
// --- cMenuConflictCheckItem ------------------------------------------------------
class cMenuConflictCheckItem : public cOsdItem {
-public:
+public:
cConflictCheckTime* checktime;
cConflictCheckTimerObj* timerObj;
cMenuConflictCheckItem(cConflictCheckTime* Ct, cConflictCheckTimerObj* TimerObj = NULL);
@@ -39,7 +39,7 @@ public:
// --- cMenuConflictCheck ------------------------------------------------------
class cMenuConflictCheck : public cOsdMenu {
private:
- cConflictCheck conflictCheck;
+ cConflictCheck conflictCheck;
bool showAll;
int lastSel;
virtual eOSState ProcessKey(eKeys Key);
@@ -53,7 +53,7 @@ private:
// --- cMenuConflictCheckDetailsItem ------------------------------------------------------
class cMenuConflictCheckDetailsItem : public cOsdItem {
bool hasTimer;
-public:
+public:
cConflictCheckTimerObj* timerObj;
cMenuConflictCheckDetailsItem(cConflictCheckTimerObj* TimerObj = NULL);
bool Update(bool Force = false);
@@ -63,7 +63,7 @@ public:
class cMenuConflictCheckDetails : public cOsdMenu {
private:
cConflictCheck* conflictCheck;
- cConflictCheckTimerObj* timerObj;
+ cConflictCheckTimerObj* timerObj;
cConflictCheckTime* checktime;
cEventObjects eventObjects;
diff --git a/menu_deftimercheckmethod.c b/menu_deftimercheckmethod.c
index deee8b7..f587aea 100644
--- a/menu_deftimercheckmethod.c
+++ b/menu_deftimercheckmethod.c
@@ -39,11 +39,11 @@ bool cDefTimerCheckMode::Parse(const char *s)
char *pos_next;
int parameter = 1;
int valuelen;
-
+
#define MAXVALUELEN (10 * MaxFileName)
-
+
char value[MAXVALUELEN];
-
+
pos = line = strdup(s);
pos_next = pos + strlen(pos);
if (*pos_next == '\n') *pos_next = 0;
@@ -55,9 +55,9 @@ bool cDefTimerCheckMode::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
{
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
valuelen = MAXVALUELEN;
}
strn0cpy(value, pos, valuelen);
@@ -75,7 +75,7 @@ bool cDefTimerCheckMode::Parse(const char *s)
}
if (*pos) pos++;
} //while
-
+
free(line);
return (parameter >= 2) ? true : false;
}
@@ -137,13 +137,13 @@ void cMenuDefTimerCheckMethod::Set()
{
int current = Current();
Clear();
-
+
delete modes;
- modes = new int[Channels.Count()];
+ modes = new int[Channels.Count()];
int i=0;
- for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel), i++)
+ for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel), i++)
{
- if (!channel->GroupSep() && *channel->Name())
+ if (!channel->GroupSep() && *channel->Name())
{
modes[i] = DefTimerCheckModes.GetMode(channel);
Add(new cMenuEditStraItem(channel->Name(), &modes[i], 3, CheckModes));
@@ -161,8 +161,8 @@ eOSState cMenuDefTimerCheckMethod::ProcessKey(eKeys Key)
case kOk:
{
int i=0;
- for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel), i++)
- if (!channel->GroupSep() && *channel->Name())
+ for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel), i++)
+ if (!channel->GroupSep() && *channel->Name())
DefTimerCheckModes.SetMode(channel, modes[i]);
DefTimerCheckModes.Save();
return osBack;
@@ -173,7 +173,7 @@ eOSState cMenuDefTimerCheckMethod::ProcessKey(eKeys Key)
return state;
}
-
+
diff --git a/menu_dirselect.c b/menu_dirselect.c
index 387815f..30f2537 100644
--- a/menu_dirselect.c
+++ b/menu_dirselect.c
@@ -32,7 +32,7 @@ cDirExts DirExts;
cConfDDirExts ConfDDirExts;
// --- cMenuDirItem ---------------------------------------------------------
-class cMenuDirItem : public cOsdItem
+class cMenuDirItem : public cOsdItem
{
private:
char* directory;
@@ -52,10 +52,10 @@ int cMenuDirItem::Compare(const cListObject &ListObject) const
if (hasVars1 != hasVars2)
return hasVars2-hasVars1;
else
- return strcasecmp(directory, p->directory);
+ return strcasecmp(directory, p->directory);
}
else
- return strcasecmp(directory, p->directory);
+ return strcasecmp(directory, p->directory);
}
@@ -105,7 +105,7 @@ void cMenuDirSelect::AddDistinct(const char* szText)
return;
for(int i=0; i<Count(); i++)
- {
+ {
const char* ItemText = Get(i)->Text();
char* itemtext = strdup(ItemText);
char* sztext = strdup(szText);
@@ -130,7 +130,7 @@ void cMenuDirSelect::CreateDirSet(bool extraDirs)
// add distinct directories from current recordings
if (Recordings.Count() == 0)
Recordings.Load();
- for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
+ for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording))
{
if (recording->HierarchyLevels() > 0)
{
@@ -139,10 +139,10 @@ void cMenuDirSelect::CreateDirSet(bool extraDirs)
char* pos = strrchr(dir, '~');
if (pos)
{
- *pos=0;
- for(int iLevel = 0; iLevel < recording->HierarchyLevels(); iLevel++)
- {
- directorySet.insert(dir);
+ *pos=0;
+ for(int iLevel = 0; iLevel < recording->HierarchyLevels(); iLevel++)
+ {
+ directorySet.insert(dir);
char* pos = strrchr(dir, '~');
if (pos)
*pos=0;
@@ -152,17 +152,17 @@ void cMenuDirSelect::CreateDirSet(bool extraDirs)
}
}
// add distinct directories from current timers
- for (cTimer *timer = Timers.First(); timer; timer = Timers.Next(timer))
+ for (cTimer *timer = Timers.First(); timer; timer = Timers.Next(timer))
{
char* dir = strdup(timer->File());
// strip the trailing name dir
char* pos = strrchr(dir, '~');
if (pos)
{
- *pos=0;
+ *pos=0;
do
{
- directorySet.insert(dir);
+ directorySet.insert(dir);
char* pos = strrchr(dir, '~');
if (pos)
*pos=0;
@@ -184,7 +184,7 @@ void cMenuDirSelect::CreateDirSet(bool extraDirs)
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *searchExt = SearchExts.First();
// add distinct directories from existing search timers
- while (searchExt)
+ while (searchExt)
{
if (strlen(searchExt->directory) > 0)
directorySet.insert(searchExt->directory);
@@ -193,16 +193,16 @@ void cMenuDirSelect::CreateDirSet(bool extraDirs)
// add distinct directories from epgsearchdirs.conf
DirExts.Load(AddDirectory(CONFIGDIR, "epgsearchdirs.conf"), true);
cDirExt* DirExt = DirExts.First();
- while (DirExt)
+ while (DirExt)
{
- directorySet.insert(DirExt->Name());
+ directorySet.insert(DirExt->Name());
DirExt = DirExts.Next(DirExt);
}
// add distinct directories from conf.d files
DirExt = ConfDDirExts.First();
- while (DirExt)
+ while (DirExt)
{
- directorySet.insert(DirExt->Name());
+ directorySet.insert(DirExt->Name());
DirExt = ConfDDirExts.Next(DirExt);
}
}
@@ -230,7 +230,7 @@ void cMenuDirSelect::Load()
CreateDirSet();
std::set<string>::iterator it;
- for (it = directorySet.begin(); it != directorySet.end(); it++)
+ for (it = directorySet.begin(); it != directorySet.end(); it++)
AddDistinct((*it).c_str());
Sort();
@@ -271,7 +271,7 @@ eOSState cMenuDirSelect::ProcessKey(eKeys Key)
case kRed:
return osContinue;
case kBlue:
- case kOk:
+ case kOk:
if (Count() > 0)
strn0cpy(Directory,Get(Current())->Text(), MaxFileName);
return osBack;
diff --git a/menu_event.c b/menu_event.c
index 4753f04..52c3fd6 100644
--- a/menu_event.c
+++ b/menu_event.c
@@ -34,7 +34,7 @@ cMenuEventSearch::cMenuEventSearch(const cEvent* Event, cEventObjects& EventObje
eventObjects(EventObjects),
surfMode(SurfMode)
{
-
+
eventObjects.SetCurrent(Event);
szGreen = szYellow = NULL;
Set();
@@ -62,7 +62,7 @@ cEventObj* cMenuEventSearch::GetNext(const cEvent* Event)
{
cEventObjects::iterator nexti = i;
nexti++;
- return nexti != eventObjects.end() ? *nexti : NULL;
+ return nexti != eventObjects.end() ? *nexti : NULL;
}
return NULL;
@@ -79,11 +79,11 @@ void cMenuEventSearch::Set()
if (szYellow) free(szYellow);
szGreen = szYellow = NULL;
- if (event)
+ if (event)
{
cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true, true);
bool canSwitch = false;
- if (channel)
+ if (channel)
{
SetTitle(channel->Name());
canSwitch = channel->Number() != cDevice::CurrentChannel();
@@ -92,7 +92,7 @@ void cMenuEventSearch::Set()
cEventObj* eventObjPrev = GetPrev(event);
cEventObj* eventObjNext = GetNext(event);
- int timerMatch = tmNone;
+ int timerMatch = tmNone;
Timers.GetMatch(event, &timerMatch);
const char* szRed = trVDR("Button$Record");
if (timerMatch == tmFull)
@@ -108,9 +108,9 @@ void cMenuEventSearch::Set()
}
else if (surfMode == SurfModeChannel)
{
- if (eventObjPrev && eventObjPrev->Event())
+ if (eventObjPrev && eventObjPrev->Event())
szGreen = strdup(CHANNELNAME(Channels.GetByChannelID(eventObjPrev->Event()->ChannelID(), true, true)));
- if (eventObjNext && eventObjNext->Event())
+ if (eventObjNext && eventObjNext->Event())
szYellow = strdup(CHANNELNAME(Channels.GetByChannelID(eventObjNext->Event()->ChannelID(), true, true)));
SetHelp(szRed, szGreen, szYellow, canSwitch ? trVDR("Button$Switch") : NULL);
}
@@ -166,7 +166,7 @@ eOSState cMenuEventSearch::ProcessKey(eKeys Key)
DisplayMenu()->Scroll(NORMALKEY(Key) == kUp || NORMALKEY(Key) == kLeft, NORMALKEY(Key) == kLeft || NORMALKEY(Key) == kRight);
cStatus::MsgOsdTextItem(NULL, NORMALKEY(Key) == kUp);
return osContinue;
- case k1...k9:
+ case k1...k9:
if (!HasSubMenu())
return Commands(Key);
else
@@ -178,7 +178,7 @@ eOSState cMenuEventSearch::ProcessKey(eKeys Key)
}
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
if (state == osUnknown) {
switch (Key) {
case kOk: return osBack;
@@ -215,9 +215,9 @@ eOSState cMenuEventSearch::ProcessKey(eKeys Key)
}
cMenuEventSearchSimple::cMenuEventSearchSimple(const cEvent* Event, cEventObjects& EventObjects)
- :cMenuEventSearch(Event, EventObjects)
-{
- Set();
+ :cMenuEventSearch(Event, EventObjects)
+{
+ Set();
}
void cMenuEventSearchSimple::Set()
@@ -231,11 +231,11 @@ void cMenuEventSearchSimple::Set()
if (szYellow) free(szYellow);
szGreen = szYellow = NULL;
- if (event)
+ if (event)
{
cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true, true);
bool canSwitch = false;
- if (channel)
+ if (channel)
{
SetTitle(channel->Name());
canSwitch = channel->Number() != cDevice::CurrentChannel();
diff --git a/menu_event.h b/menu_event.h
index 6b76f60..0155360 100644
--- a/menu_event.h
+++ b/menu_event.h
@@ -34,7 +34,7 @@ typedef enum
} MenuEventSurfMode;
class cEventObj
-{
+{
const cEvent *event;
bool selected;
public:
diff --git a/menu_favorites.c b/menu_favorites.c
index 4444ca0..fdd4b64 100644
--- a/menu_favorites.c
+++ b/menu_favorites.c
@@ -47,7 +47,7 @@ bool cMenuFavorites::BuildList()
cSearchExt *SearchExt = SearchExts.First();
int timespan = EPGSearchConfig.FavoritesMenuTimespan*60;
- while (SearchExt)
+ while (SearchExt)
{
if (SearchExt->useInFavorites)
pCompleteSearchResults = SearchExt->Run(modeBlue == showNoPayTV?1:0, false, timespan, pCompleteSearchResults, true);
@@ -58,9 +58,9 @@ bool cMenuFavorites::BuildList()
{
set<const cEvent*> foundEvents;
pCompleteSearchResults->SortBy(CompareEventTime);
-
- for (cSearchResult* pResultObj = pCompleteSearchResults->First();
- pResultObj;
+
+ for (cSearchResult* pResultObj = pCompleteSearchResults->First();
+ pResultObj;
pResultObj = pCompleteSearchResults->Next(pResultObj))
{
if (foundEvents.find(pResultObj->event) == foundEvents.end())
@@ -69,21 +69,21 @@ bool cMenuFavorites::BuildList()
Add(new cMenuSearchResultsItem(pResultObj->event, modeYellow == showEpisode, false, menuTemplate));
eventObjects.Add(pResultObj->event);
}
- }
+ }
delete pCompleteSearchResults;
}
- SetHelpKeys();
+ SetHelpKeys();
cString szTitle = cString::sprintf("%s: %d %s", tr("Favorites"), Count(), tr("Search results"));
SetTitle(szTitle);
Display();
-
+
return true;
}
eOSState cMenuFavorites::OnGreen()
{
eOSState state = osUnknown;
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
toggleKeys = 0;
cMenuWhatsOnSearch::currentShowMode = cMenuWhatsOnSearch::GetNextMode();
@@ -95,7 +95,7 @@ eOSState cMenuFavorites::OnGreen()
eOSState cMenuFavorites::OnYellow()
{
eOSState state = osUnknown;
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
if (item && item->event)
@@ -120,7 +120,7 @@ eOSState cMenuFavorites::ProcessKey(eKeys Key)
}
eOSState state = cMenuSearchResults::ProcessKey(Key);
- if (state == osUnknown)
+ if (state == osUnknown)
{
switch (Key) {
case kRecord:
@@ -128,21 +128,21 @@ eOSState cMenuFavorites::ProcessKey(eKeys Key)
state = OnRed();
break;
case k0:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
toggleKeys = 1 - toggleKeys;
SetHelpKeys(true);
}
state = osContinue;
break;
- case k1...k9:
+ case k1...k9:
state = HasSubMenu()?osContinue:Commands(Key);
break;
case kBlue:
return EPGSearchConfig.useOkForSwitch?ShowSummary():Switch();
break;
case kOk:
- if(HasSubMenu())
+ if(HasSubMenu())
{
state = cOsdMenu::ProcessKey(Key);
break;
@@ -152,7 +152,7 @@ eOSState cMenuFavorites::ProcessKey(eKeys Key)
else
state = osBack;
break;
- default:
+ default:
break;
}
}
@@ -164,7 +164,7 @@ void cMenuFavorites::SetHelpKeys(bool Force)
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -172,18 +172,18 @@ void cMenuFavorites::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
- showMode nextShowMode = cMenuWhatsOnSearch::GetNextMode();
+ {
+ showMode nextShowMode = cMenuWhatsOnSearch::GetNextMode();
cShowMode* mode = cMenuWhatsOnSearch::GetShowMode(nextShowMode);
const char* szButtonGreen = NULL;
- if (mode)
+ if (mode)
szButtonGreen = mode->GetDescription();
-
+
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch"));
else
SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch"));
helpKeys = NewHelpKeys;
- }
+ }
}
diff --git a/menu_main.c b/menu_main.c
index 4de14a8..4ef989c 100644
--- a/menu_main.c
+++ b/menu_main.c
@@ -29,7 +29,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "epgsearchext.h"
#include "menu_event.h"
#include "menu_searchresults.h"
-#include "menu_search.h"
+#include "menu_search.h"
#include "menu_commands.h"
#include "epgsearchcfg.h"
#include "epgsearchtools.h"
@@ -81,14 +81,14 @@ cMenuSearchMain::cMenuSearchMain(void)
void cMenuSearchMain::Display(void)
{
cOsdMenu::Display();
-
- if (Count() > 0)
+
+ if (Count() > 0)
{
int i = 0;
- for (cOsdItem *item = First(); item; item = Next(item))
- cStatus::MsgOsdEventItem(!item->Selectable() ? 0 :
- ((cMenuMyScheduleItem*)item)->event,
+ for (cOsdItem *item = First(); item; item = Next(item))
+ cStatus::MsgOsdEventItem(!item->Selectable() ? 0 :
+ ((cMenuMyScheduleItem*)item)->event,
item->Text(), i++, Count());
}
}
@@ -117,7 +117,7 @@ void cMenuSearchMain::PrepareSchedule(cChannel *Channel)
if (schedules) {
const cSchedule *Schedule = schedules->GetSchedule(Channel);
currentChannel = Channel->Number();
- if (Schedule && Schedule->Events()->First())
+ if (Schedule && Schedule->Events()->First())
{
const cEvent *PresentEvent = Schedule->GetPresentEvent();
time_t now = time(NULL);
@@ -137,8 +137,8 @@ void cMenuSearchMain::PrepareSchedule(cChannel *Channel)
struct tm tm_rEvent;
struct tm tm_rLastEvent;
time_t EventDate = Event->StartTime();
- struct tm *t_event = localtime_r(&EventDate, &tm_rEvent);
- struct tm *t_lastevent = localtime_r(&lastEventDate, &tm_rLastEvent);
+ struct tm *t_event = localtime_r(&EventDate, &tm_rEvent);
+ struct tm *t_lastevent = localtime_r(&lastEventDate, &tm_rLastEvent);
if (t_event->tm_mday != t_lastevent->tm_mday)
{
cString szSep = cString::sprintf("----------------------------------\t %s ----------------------------------------------------------------------------------------------", GETDATESTRING(Event));
@@ -159,7 +159,7 @@ void cMenuSearchMain::PrepareSchedule(cChannel *Channel)
}
if (shiftTime)
{
- cString buffer = cString::sprintf("%s (%s%dh %dm)", Channel->Name(), shiftTime>0?"+":"",
+ cString buffer = cString::sprintf("%s (%s%dh %dm)", Channel->Name(), shiftTime>0?"+":"",
shiftTime/60, abs(shiftTime)%60);
SetTitle(buffer);
}
@@ -179,7 +179,7 @@ eOSState cMenuSearchMain::Record(void)
{
cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)Get(Current());
if (item) {
- if (item->timerMatch == tmFull)
+ if (item->timerMatch == tmFull)
{
int tm = tmNone;
cTimer *timer = Timers.GetMatch(item->event, &tm);
@@ -195,17 +195,17 @@ eOSState cMenuSearchMain::Record(void)
cTimer *timer = new cTimer(item->event);
PrepareTimerFile(item->event, timer);
cTimer *t = Timers.GetTimer(timer);
- if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
+ if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
{
if (t)
{
delete timer;
- timer = t;
+ timer = t;
}
if (EPGSearchConfig.useVDRTimerEditMenu)
return AddSubMenu(new cMenuEditTimer(timer, !t));
else
- return AddSubMenu(new cMenuMyEditTimer(timer, !t, item->event));
+ return AddSubMenu(new cMenuMyEditTimer(timer, !t, item->event));
}
else
{
@@ -232,7 +232,7 @@ eOSState cMenuSearchMain::Record(void)
SetAux(timer, fullaux);
Timers.Add(timer);
- gl_timerStatusMonitor->SetConflictCheckAdvised();
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
timer->Matches();
Timers.SetModified();
LogFile.iSysLog("timer %s added (active)", *timer->ToDescr());
@@ -255,7 +255,7 @@ eOSState cMenuSearchMain::Switch(void)
if (channel && cDevice::PrimaryDevice()->SwitchChannel(channel, true))
return osEnd;
}
- Skins.Message(mtInfo, trVDR("Can't switch channel!"));
+ Skins.Message(mtInfo, trVDR("Can't switch channel!"));
return osContinue;
}
@@ -263,7 +263,7 @@ eOSState cMenuSearchMain::ExtendedSearch(void)
{
return AddSubMenu(new cMenuEPGSearchExt());
}
-
+
eOSState cMenuSearchMain::Commands(eKeys Key)
{
if (HasSubMenu() || Count() == 0)
@@ -284,7 +284,7 @@ eOSState cMenuSearchMain::ShowSummary()
if (Count())
{
cMenuMyScheduleItem *mi = (cMenuMyScheduleItem *)Get(Current());
- if (mi && mi->event)
+ if (mi && mi->event)
return AddSubMenu(new cMenuEventSearch(mi->event, eventObjects, SurfModeTime));
}
return osContinue;
@@ -295,7 +295,7 @@ void cMenuSearchMain::SetHelpKeys(bool Force)
cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -307,12 +307,12 @@ void cMenuSearchMain::SetHelpKeys(bool Force)
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), trVDR("Button$Now"), trVDR("Button$Next"), EPGSearchConfig.bluekeymode==0?trVDR("Button$Switch"):tr("Button$Search"));
else
- {
+ {
const char* szGreenToggled = CHANNELNAME(Channels.GetByNumber(currentChannel-1,-1));
const char* szYellowToggled = CHANNELNAME(Channels.GetByNumber(currentChannel+1,1));
-
+
SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), (EPGSearchConfig.toggleGreenYellow==0?trVDR("Button$Now"):szGreenToggled), (EPGSearchConfig.toggleGreenYellow==0?trVDR("Button$Next"):szYellowToggled), EPGSearchConfig.bluekeymode==1?trVDR("Button$Switch"):tr("Button$Search"));
-
+
}
helpKeys = NewHelpKeys;
}
@@ -333,18 +333,18 @@ void cMenuSearchMain::UpdateCurrent()
// navigation in summary could have changed current item, so update it
cEventObj* cureventObj = eventObjects.GetCurrent();
if (cureventObj && cureventObj->Event())
- for (cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)First(); item; item = (cMenuMyScheduleItem *)Next(item))
+ for (cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)First(); item; item = (cMenuMyScheduleItem *)Next(item))
if (item->event == cureventObj->Event())
{
cureventObj->Select(false);
SetCurrent(item);
Display();
break;
- }
+ }
}
eOSState cMenuSearchMain::ProcessKey(eKeys Key)
-{
+{
bool HadSubMenu = HasSubMenu();
eOSState state = cOsdMenu::ProcessKey(Key);
@@ -387,7 +387,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
UpdateCurrent();
state = Record();
break;
- }
+ }
if (Count())
{
if (EPGSearchConfig.redkeymode==toggleKeys)
@@ -404,21 +404,21 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
}
break;
case k0:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
toggleKeys = 1 - toggleKeys;
SetHelpKeys(true);
}
state = osContinue;
break;
- case k1...k9:
+ case k1...k9:
if (!HasSubMenu())
return Commands(Key);
else
state = osContinue;
break;
- case kGreen:
- if (schedules)
+ case kGreen:
+ if (schedules)
{
if (HasSubMenu() && !InWhatsOnMenu && !InFavoritesMenu)
{
@@ -451,10 +451,10 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
return AddSubMenu(new cMenuWhatsOnSearch(schedules, ChannelNr));
}
}
- else
+ else
{
cChannel *channel = Channels.GetByNumber(currentChannel-1,-1);
-
+
if (channel) {
PrepareSchedule(channel);
if (channel->Number() != cDevice::CurrentChannel()) {
@@ -466,7 +466,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
return osContinue;
}
}
- case kYellow:
+ case kYellow:
if (schedules)
{
if (HasSubMenu())
@@ -510,7 +510,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
return ExtendedSearch();
break;
case kInfo:
- case kOk:
+ case kOk:
if (Count())
return ShowSummary();
break;
@@ -531,7 +531,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
}
else
shiftTime = 0;
-
+
PrepareSchedule(ch);
if (ch->Number() != cDevice::CurrentChannel()) {
otherChannel = ch->Number();
@@ -554,7 +554,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
gl_InfoConflict = 0;
if (Interface->Confirm(tr("Timer conflict! Show?")))
return AddSubMenu(new cMenuConflictCheck());
- }
+ }
}
return state;
}
diff --git a/menu_myedittimer.c b/menu_myedittimer.c
index f2312bb..cf281c2 100644
--- a/menu_myedittimer.c
+++ b/menu_myedittimer.c
@@ -48,14 +48,14 @@ cMenuMyEditTimer::cMenuMyEditTimer(cTimer *Timer, bool New, const cEvent* Event,
strcpy(directory, "");
UserDefDaysOfWeek = 0;
checkmode = 0;
- if (Timer)
+ if (Timer)
{
timer = Timer;
event = Event;
flags = Timer->Flags();
day = Timer->Day();
weekdays = Timer->WeekDays();
-
+
start = Timer->Start();
stop = Timer->Stop();
priority = Timer->Priority();
@@ -68,7 +68,7 @@ cMenuMyEditTimer::cMenuMyEditTimer(cTimer *Timer, bool New, const cEvent* Event,
if (forcechannel)
channel = forcechannel->Number();
SplitFile();
-
+
addIfConfirmed = New;
Set();
SetHelp(addIfConfirmed?NULL:trVDR("Button$Delete"), NULL, NULL, NULL);
@@ -81,10 +81,10 @@ void cMenuMyEditTimer::SplitFile()
char* tmp = strrchr(file, '~');
if (tmp) // split file in real file and directory
{
- if (event && !isempty(event->ShortText()))
+ if (event && !isempty(event->ShortText()))
{
cString eventFile = cString::sprintf("%s~%s", event->Title(), event->ShortText());
- char* tmp2 = strstr(file, eventFile);
+ char* tmp2 = strstr(file, eventFile);
if (tmp2) // file contains title and subtitle
{
if (tmp2 > file)
@@ -119,7 +119,7 @@ void cMenuMyEditTimer::Set()
int current = Current();
Clear();
- cSearchExt* search = TriggeredFromSearchTimer(timer);
+ cSearchExt* search = TriggeredFromSearchTimer(timer);
Add(new cMenuEditStrItem( trVDR("File"), file, MaxFileName, trVDR(FileNameChars)));
Add(new cMenuEditStrItem( tr("Directory"), directory, MaxFileName, tr(AllowedChars)));
@@ -303,7 +303,7 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
else
SetHelp(addIfConfirmed?NULL:trVDR("Button$Delete"), NULL, NULL, NULL);
}
-
+
if ((Key == kYellow) && ((iOnDirectoryItem && !InEditMode(ItemText, tr("Directory"), directory)) ||
(iOnFileItem && !InEditMode(ItemText, trVDR("File"), file))))
{
@@ -314,12 +314,12 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
RefreshCurrent();
Display();
}
-
- if (state == osUnknown)
+
+ if (state == osUnknown)
{
- switch (Key)
+ switch (Key)
{
- case kOk:
+ case kOk:
{
cChannel *ch = Channels.GetByNumber(channel);
if (!ch)
@@ -327,7 +327,7 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
}
-
+
string fullaux = "";
string aux = "";
if (timer && timer->Aux())
@@ -338,9 +338,9 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
{
time_t startTime = 0, stopTime = 0;;
int begin = cTimer::TimeToInt(start); // seconds from midnight
- int length = cTimer::TimeToInt(stop) - begin;
+ int length = cTimer::TimeToInt(stop) - begin;
if (length < 0)
- length += SECSINDAY;
+ length += SECSINDAY;
startTime = cTimer::SetTime(day, begin);
stopTime = startTime + length;
bstart = event->StartTime() - startTime;
@@ -351,7 +351,7 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
{
aux = epgsearchaux;
free(epgsearchaux);
- }
+ }
aux = UpdateAuxValue(aux, "channel", NumToString(ch->Number()) + " - " + CHANNELNAME(ch));
aux = UpdateAuxValue(aux, "update", checkmode);
aux = UpdateAuxValue(aux, "eventid", event->EventID());
@@ -364,20 +364,20 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
}
fullaux = UpdateAuxValue(fullaux, "epgsearch", aux);
}
-
+
#ifdef USE_PINPLUGIN
aux = "";
aux = UpdateAuxValue(aux, "protected", fskProtection ? "yes" : "no");
fullaux = UpdateAuxValue(fullaux, "pin-plugin", aux);
#endif
-
+
char* tmpFile = strdup(file);
tmpFile = strreplace(tmpFile, ':', '|');
char* tmpDir = strdup(directory);
tmpDir = strreplace(tmpDir, ':', '|');
if (strlen(tmpFile) == 0)
tmpFile = strdup(CHANNELNAME(ch));
-
+
if (timer)
{
cString cmdbuf;
@@ -421,7 +421,7 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
case kGreen:
case kYellow:
return osContinue;
- case kBlue:
+ case kBlue:
if (HasSubMenu())
return osContinue;
if (iOnDirectoryItem && !InEditMode(ItemText, tr("Directory"), directory))
@@ -435,10 +435,10 @@ eOSState cMenuMyEditTimer::ProcessKey(eKeys Key)
default: break;
}
}
-
+
if (Key != kNone && !HasSubMenu())
{
- if (iOnDirectoryItem && !InEditMode(ItemText, tr("Directory"), directory))
+ if (iOnDirectoryItem && !InEditMode(ItemText, tr("Directory"), directory))
ReplaceDirVars();
}
return state;
@@ -467,4 +467,4 @@ void cMenuMyEditTimer::ReplaceDirVars()
Display();
return;
}
-
+
diff --git a/menu_myedittimer.h b/menu_myedittimer.h
index 639a00f..94fffd7 100644
--- a/menu_myedittimer.h
+++ b/menu_myedittimer.h
@@ -47,7 +47,7 @@ private:
char file[MaxFileName];
char directory[MaxFileName];
#ifdef USE_PINPLUGIN
- int fskProtection;
+ int fskProtection;
#endif
int checkmode;
public:
diff --git a/menu_quicksearch.c b/menu_quicksearch.c
index 7177595..65a02a6 100644
--- a/menu_quicksearch.c
+++ b/menu_quicksearch.c
@@ -46,7 +46,7 @@ void cMenuQuickSearch::Set()
{
int current = Current();
Clear();
-
+
Add(new cMenuEditStrItem( tr("Search term"), data.search, sizeof(data.search), tr(AllowedChars)));
if (editmode == QUICKSEARCHEXT)
{
@@ -58,8 +58,8 @@ void cMenuQuickSearch::Set()
Add(new cMenuEditBoolItem( tr("Use title"), &data.useTitle, trVDR("no"), trVDR("yes")));
Add(new cMenuEditBoolItem( tr("Use subtitle"), &data.useSubtitle, trVDR("no"), trVDR("yes")));
Add(new cMenuEditBoolItem( tr("Use description"), &data.useDescription, trVDR("no"), trVDR("yes")));
-
-
+
+
// show Categories only if we have them
if (SearchExtCats.Count() > 0)
{
@@ -68,7 +68,7 @@ void cMenuQuickSearch::Set()
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
Add(new cMenuEditStrItem( IndentMenuItem(SearchExtCat->menuname), data.catvalues[index], MaxFileName, tr(AllowedChars)));
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -76,7 +76,7 @@ void cMenuQuickSearch::Set()
}
}
}
-
+
Add(new cMenuEditStraItem(tr("Use channel"), &data.useChannel, 4, UseChannelSel));
if (data.useChannel==1)
{
@@ -101,7 +101,7 @@ void cMenuQuickSearch::Set()
channelGroupNr++;
Add(new cMenuEditStraItem(IndentMenuItem(tr("Channel group")), &channelGroupNr, ChannelGroups.Count()+1, menuitemsChGr));
}
-
+
Add(new cMenuEditBoolItem( tr("Use time"), &data.useTime, trVDR("no"), trVDR("yes")));
if (data.useTime == true)
{
@@ -121,7 +121,7 @@ void cMenuQuickSearch::Set()
{
UserDefDayOfWeek = data.DayOfWeek;
data.DayOfWeek = 7;
- }
+ }
Add(new cMenuEditStraItem(IndentMenuItem(tr("Day of week")), &data.DayOfWeek, 8, DaysOfWeek));
}
Add(new cMenuEditStraItem(tr("Use blacklists"), &data.blacklistMode, 3, BlacklistModes));
@@ -143,9 +143,9 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
int iTemp_allowedRepeats = data.allowedRepeats;
int iTemp_delAfterDays = data.delAfterDays;
int iTemp_action = data.action;
-
+
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
if (iTemp_mode != data.mode ||
iTemp_useTime != data.useTime ||
iTemp_useChannel != data.useChannel ||
@@ -161,7 +161,7 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
Display();
}
const char* ItemText = Get(Current())->Text();
-
+
if (!HasSubMenu())
{
if (strlen(ItemText)>0 && strstr(ItemText, tr(" from channel")) == ItemText && ((Key >= k0 && Key <= k9) || Key == kLeft || Key == kRight))
@@ -187,16 +187,16 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
int iOnExtCatItem = 0;
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (strstr(ItemText, IndentMenuItem(SearchExtCat->menuname)) == ItemText)
- {
+ {
iOnExtCatItem = 1;
if (SearchExtCat->nvalues > 0)
iOnExtCatItemBrowsable = 1;
iCatIndex = index;
catname = SearchExtCat->menuname;
- break;
+ break;
}
index++;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -235,7 +235,7 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
}
else if (iOnExtCatItem)
{
- if (!InEditMode(ItemText, IndentMenuItem(catname), data.catvalues[iCatIndex]))
+ if (!InEditMode(ItemText, IndentMenuItem(catname), data.catvalues[iCatIndex]))
SetHelp(NULL, GREENLABEL, NULL, iOnExtCatItemBrowsable?tr("Button$Select"):NULL);
}
else if (strstr(ItemText, tr("Search term")) != ItemText)
@@ -245,13 +245,13 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
if (HasSubMenu())
return osContinue;
switch (Key) {
- case kOk:
- if (data.useChannel==1)
+ case kOk:
+ if (data.useChannel==1)
{
cChannel *ch = Channels.GetByNumber(channelMin);
if (ch)
data.channelMin = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -259,7 +259,7 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
ch = Channels.GetByNumber(channelMax);
if (ch)
data.channelMax = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -272,18 +272,18 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
}
if (data.useChannel==2)
data.channelGroup = strdup(menuitemsChGr[channelGroupNr]);
-
- if ((data.useTitle || data.useSubtitle || data.useDescription) &&
- (int(strlen(data.search)) < 3) &&
+
+ if ((data.useTitle || data.useSubtitle || data.useDescription) &&
+ (int(strlen(data.search)) < 3) &&
!Interface->Confirm(tr("Edit$Search text too short - use anyway?")))
break;
-
- if (searchExt)
+
+ if (searchExt)
{
*searchExt = data;
if (data.DayOfWeek == 7)
searchExt->DayOfWeek = UserDefDayOfWeek;
-
+
if (data.blacklistMode == blacklistsSelection)
{
searchExt->blacklists.Clear();
@@ -304,10 +304,10 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
if (iOnUserDefDayItem)
state = AddSubMenu(new cMenuEditDaysOfWeek(&UserDefDayOfWeek));
break;
-
- case kBlue:
+
+ case kBlue:
if (iOnUseChannelGroups || iOnChannelGroup)
- {
+ {
if (channelGroupName)
free(channelGroupName);
channelGroupName = strdup(menuitemsChGr[channelGroupNr]);
@@ -323,7 +323,7 @@ eOSState cMenuQuickSearch::ProcessKey(eKeys Key)
SetHelp(NULL, GREENLABEL, NULL, NULL);
Set();
Display();
- break;
+ break;
case kYellow: state = osContinue;
default: break;
}
diff --git a/menu_quicksearch.h b/menu_quicksearch.h
index 87a9ebc..c4e9258 100644
--- a/menu_quicksearch.h
+++ b/menu_quicksearch.h
@@ -28,12 +28,12 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "epgsearchtools.h"
// --- cMenuQuickSearch --------------------------------------------------------
-class cMenuQuickSearch : public cMenuEditSearchExt {
+class cMenuQuickSearch : public cMenuEditSearchExt {
int editmode;
virtual void Set();
public:
cMenuQuickSearch(cSearchExt*);
virtual eOSState ProcessKey(eKeys Key);
};
-
+
#endif
diff --git a/menu_recsdone.c b/menu_recsdone.c
index 1e9b210..79bbe20 100644
--- a/menu_recsdone.c
+++ b/menu_recsdone.c
@@ -38,13 +38,13 @@ void cMenuRecDoneItem::Set()
if (!recDone)
return;
char *buffer = NULL;
-
+
char buf[32];
struct tm tm_r;
tm *tm = localtime_r(&recDone->startTime, &tm_r);
strftime(buf, sizeof(buf), "%d.%m.%y %H:%M", tm);
- msprintf(&buffer, "%s\t%s~%s", buf, recDone->title && !showEpisodeOnly?recDone->title:"",
+ msprintf(&buffer, "%s\t%s~%s", buf, recDone->title && !showEpisodeOnly?recDone->title:"",
recDone->shortText?recDone->shortText:"");
SetText(buffer, false);
}
@@ -185,7 +185,7 @@ eOSState cMenuRecsDone::ProcessKey(eKeys Key)
default: break;
}
}
-
+
return state;
}
@@ -195,7 +195,7 @@ eOSState cMenuTextDone::ProcessKey(eKeys Key)
if (state == osContinue) {
switch (Key) {
case kBlue:
- if (recDone->aux) return AddSubMenu(new cMenuText(tr("Auxiliary info"), recDone->aux));
+ if (recDone->aux) return AddSubMenu(new cMenuText(tr("Auxiliary info"), recDone->aux));
break;
case kOk: return osBack;
default: state = osContinue;
@@ -205,9 +205,9 @@ eOSState cMenuTextDone::ProcessKey(eKeys Key)
}
// --- cMenuTextDone ----------------------------------------------------------
-cMenuTextDone::cMenuTextDone(const char *Title, cRecDone* RecDone, eDvbFont Font)
-: cMenuText(Title, RecDone->description, Font), recDone(RecDone)
+cMenuTextDone::cMenuTextDone(const char *Title, cRecDone* RecDone, eDvbFont Font)
+: cMenuText(Title, RecDone->description, Font), recDone(RecDone)
{
if (recDone->aux) SetHelp(NULL, NULL, NULL, tr("Button$Aux info"));
}
-
+
diff --git a/menu_search.c b/menu_search.c
index ddfb5ac..3929845 100644
--- a/menu_search.c
+++ b/menu_search.c
@@ -82,7 +82,7 @@ void cMenuSearchExtItem::Set(void)
line << setiosflags(ios::left) << setw(11) << searchExt->channelGroup;
else
line << " ";
-
+
line << "\t";
if (searchExt->useTime)
{
@@ -94,7 +94,7 @@ void cMenuSearchExtItem::Set(void)
}
else
line << "--:--\t--:--";
-
+
SetText(strdup(line.str().c_str()), false);
}
@@ -125,7 +125,7 @@ void cMenuEPGSearchExt::UpdateTitle()
int total=0, active=0;
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt *SearchExt = SearchExts.First();
- while (SearchExt) {
+ while (SearchExt) {
if (SearchExt->useAsSearchTimer) active++;
SearchExt = SearchExts.Next(SearchExt);
total++;
@@ -196,7 +196,7 @@ eOSState cMenuEPGSearchExt::ProcessKey(eKeys Key)
switch (Key) {
case k0:
if (HasSubMenu())
- return osContinue;
+ return osContinue;
if (CurrentSearchExt())
state = AddSubMenu(new cMenuSearchActions(CurrentSearchExt()));
else
@@ -208,7 +208,7 @@ eOSState cMenuEPGSearchExt::ProcessKey(eKeys Key)
state = Actions(k1);
case kBlue:
if (HasSubMenu())
- return osContinue;
+ return osContinue;
state = AddSubMenu(new cMenuSearchActions(CurrentSearchExt()));
break;
case kRed:
@@ -224,8 +224,8 @@ eOSState cMenuEPGSearchExt::ProcessKey(eKeys Key)
default: break;
}
}
- if (SearchNumber >= 0 && !HasSubMenu())
- {
+ if (SearchNumber >= 0 && !HasSubMenu())
+ {
cMutexLock SearchExtsLock(&SearchExts);
cSearchExt* search = SearchExts.Get(SearchNumber);
if (search) // a newly created search was confirmed with Ok
diff --git a/menu_searchactions.c b/menu_searchactions.c
index 92bd1f2..2fa7f9f 100644
--- a/menu_searchactions.c
+++ b/menu_searchactions.c
@@ -50,7 +50,7 @@ cMenuSearchActions::cMenuSearchActions(cSearchExt* Search, bool DirectCall)
{
directCall = DirectCall;
SetHasHotkeys();
-
+
search = Search;
Add(new cOsdItem(hk(tr("Execute search"))));
@@ -84,7 +84,7 @@ eOSState cMenuSearchActions::Search(void)
eOSState cMenuSearchActions::OnOffSearchtimer(void)
{
- if (search)
+ if (search)
{
search->useAsSearchTimer = search->useAsSearchTimer?0:1;
SearchExts.Save();
@@ -96,9 +96,9 @@ eOSState cMenuSearchActions::OnOffSearchtimer(void)
if (!EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
{
cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
- Skins.Message(mtInfo, tr("Search timers activated in setup."));
+ Skins.Message(mtInfo, tr("Search timers activated in setup."));
}
- }
+ }
}
return osBack;
}
@@ -113,18 +113,18 @@ eOSState cMenuSearchActions::Execute()
if (current == 0)
return Search();
if (current == 1)
- return OnOffSearchtimer();
+ return OnOffSearchtimer();
if (current == 2)
{
if (!EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
{
cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
- Skins.Message(mtInfo, tr("Search timers activated in setup."));
+ Skins.Message(mtInfo, tr("Search timers activated in setup."));
}
if (Interface->Confirm(tr("Run search timer update?")))
updateForced = 3; // with message about completion
return osBack;
- }
+ }
if (current == 3 && search)
return AddSubMenu(new cMenuRecsDone(search));
if (current == 4 && search)
@@ -167,7 +167,7 @@ eOSState cMenuSearchActions::Execute()
search->DeleteAllTimers();
return osBack;
}
- if (current == 10)
+ if (current == 10)
return AddSubMenu(new cMenuConflictCheck());
}
return osContinue;
@@ -191,7 +191,7 @@ eOSState cMenuSearchActions::ProcessKey(eKeys Key)
case kYellow:
case kBlue:
return osContinue;
- case kOk:
+ case kOk:
if (!HasSubMenu())
return Execute();
default: break;
diff --git a/menu_searchedit.c b/menu_searchedit.c
index 4dd24d2..f1969d6 100644
--- a/menu_searchedit.c
+++ b/menu_searchedit.c
@@ -57,7 +57,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
SearchModes[3] = strdup(tr("match exactly"));
SearchModes[4] = strdup(tr("regular expression"));
SearchModes[5] = strdup(tr("fuzzy"));
-
+
DaysOfWeek[0] = strdup(WeekDayName(0));
DaysOfWeek[1] = strdup(WeekDayName(1));
DaysOfWeek[2] = strdup(WeekDayName(2));
@@ -66,7 +66,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
DaysOfWeek[5] = strdup(WeekDayName(5));
DaysOfWeek[6] = strdup(WeekDayName(6));
DaysOfWeek[7] = strdup(tr("user-defined"));
-
+
UseChannelSel[0] = strdup(trVDR("no"));
UseChannelSel[1] = strdup(tr("interval"));
UseChannelSel[2] = strdup(tr("channel group"));
@@ -99,7 +99,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
CompareDateModes[2] = strdup(tr("same week"));
CompareDateModes[3] = strdup(tr("same month"));
-#if APIVERSNUM > 10710
+#if APIVERSNUM > 10710
// collect content string IDs
std::set<std::string> contentStrings;
for(unsigned int i=0; i<CONTENT_DESCRIPTOR_MAX;i++)
@@ -116,15 +116,15 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
if (!templateMode && New)
{
- cSearchExt* SearchTempl = NULL; // copy the default settings, if we have a default template
+ cSearchExt* SearchTempl = NULL; // copy the default settings, if we have a default template
cMutexLock SearchTemplatesLock(&SearchTemplates);
cSearchExt *SearchExtTempl = SearchTemplates.First();
- while (SearchExtTempl)
- {
+ while (SearchExtTempl)
+ {
if (SearchExtTempl->ID == EPGSearchConfig.DefSearchTemplateID)
SearchTempl = SearchExtTempl;
SearchExtTempl = SearchTemplates.Next(SearchExtTempl);
- }
+ }
if (SearchTempl)
SearchExt->CopyFromTemplate(SearchTempl, FromEPG);
}
@@ -134,7 +134,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
if (!templateMode)
SetHelp(NULL, NULL, tr("Button$Help"), tr("Button$Templates"));
- if (searchExt)
+ if (searchExt)
{
data = *searchExt;
UserDefDayOfWeek = 0;
@@ -148,7 +148,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
channelGroupName = NULL;
channelMin = channelMax = cDevice::CurrentChannel();
- channelGroupNr = 0;
+ channelGroupNr = 0;
if (data.channelMin)
channelMin = data.channelMin->Number();
if (data.channelMax)
@@ -171,7 +171,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
}
contentStringsFlags = NULL;
-#if APIVERSNUM > 10710
+#if APIVERSNUM > 10710
// set the flags for the content descriptors
contentStringsFlags = (int*) malloc((CONTENT_DESCRIPTOR_MAX+1) * sizeof(int));
for(unsigned int i=0; i<=CONTENT_DESCRIPTOR_MAX;i++)
@@ -188,7 +188,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
catvaluesNumeric = (int*) malloc(SearchExtCats.Count() * sizeof(int));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
catarrayAvoidRepeats[index] = (SearchExt->catvaluesAvoidRepeat & (1<<index))?1:0;
catvaluesNumeric[index] = atol(SearchExt->catvalues[index]);
@@ -198,7 +198,7 @@ cMenuEditSearchExt::cMenuEditSearchExt(cSearchExt *SearchExt, bool New, bool Tem
}
blacklists.Clear();
if (data.blacklistMode == blacklistsSelection)
- {
+ {
cBlacklistObject* blacklistObj = searchExt->blacklists.First();
while(blacklistObj)
{
@@ -221,7 +221,7 @@ void cMenuEditSearchExt::Set()
int current = Current();
Clear();
helpTexts.clear();
-
+
if (templateMode)
{
Add(new cMenuEditStrItem( tr("Template name"), data.search, sizeof(data.search), tr(AllowedChars)));
@@ -249,11 +249,11 @@ void cMenuEditSearchExt::Set()
Add(new cMenuEditBoolItem( tr("Use subtitle"), &data.useSubtitle, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$Set this to 'Yes' if you like to search in the episode of an event."));
Add(new cMenuEditBoolItem( tr("Use description"), &data.useDescription, trVDR("no"), trVDR("yes")));
- AddHelp(tr("Help$Set this to 'Yes' if you like to search in the summary of an event."));
-
-#if APIVERSNUM > 10710
+ AddHelp(tr("Help$Set this to 'Yes' if you like to search in the summary of an event."));
+
+#if APIVERSNUM > 10710
Add(new cMenuEditBoolItem( tr("Use content descriptor"), &useContentDescriptors, trVDR("no"), trVDR("yes")));
- AddHelp(tr("Help$Set this to 'Yes' if you want to search the contents by a descriptor."));
+ AddHelp(tr("Help$Set this to 'Yes' if you want to search the contents by a descriptor."));
if (useContentDescriptors)
{
vector<int>::const_iterator it;
@@ -269,7 +269,7 @@ void cMenuEditSearchExt::Set()
if (SearchExtCats.Count() > 0)
{
Add(new cMenuEditBoolItem( tr("Use extended EPG info"), &data.useExtEPGInfo, trVDR("no"), trVDR("yes")));
- AddHelp(tr("Help$The summary of an event, can contain additional information like 'Genre', 'Category', 'Year',... called 'EPG categories' within EPGSearch. External EPG providers often deliver this information. This allows refining a search and other nice things, like searching for the 'tip of the day'. To use it set this to 'Yes'."));
+ AddHelp(tr("Help$The summary of an event, can contain additional information like 'Genre', 'Category', 'Year',... called 'EPG categories' within EPGSearch. External EPG providers often deliver this information. This allows refining a search and other nice things, like searching for the 'tip of the day'. To use it set this to 'Yes'."));
if (data.useExtEPGInfo)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
@@ -280,7 +280,7 @@ void cMenuEditSearchExt::Set()
Add(new cMenuEditIntItem(IndentMenuItem(SearchExtCat->menuname), &catvaluesNumeric[index], 0, 999999, ""));
else
Add(new cMenuEditStrItem( IndentMenuItem(SearchExtCat->menuname), data.catvalues[index], MaxFileName, tr(AllowedChars)));
- AddHelp(tr("Help$The file epgsearchcats.conf specifies the search mode for this entry. One can search by text or by value. You can also edit a list of predefined values in this file that can be selected here."));
+ AddHelp(tr("Help$The file epgsearchcats.conf specifies the search mode for this entry. One can search by text or by value. You can also edit a list of predefined values in this file that can be selected here."));
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
@@ -288,7 +288,7 @@ void cMenuEditSearchExt::Set()
Add(new cMenuEditBoolItem(IndentMenuItem(tr("Ignore missing categories")), &data.ignoreMissingEPGCats, trVDR("no"), trVDR("yes")));
AddHelp(tr("Help$If a selected category is not part of the summary of an event this normally excludes this event from the search results. To avoid this, set this option to 'Yes', but please handle this with care to avoid a huge amount of results.")); }
}
-
+
Add(new cMenuEditStraItem(tr("Use channel"), &data.useChannel, 4, UseChannelSel));
if (data.useChannel==1)
{
@@ -313,7 +313,7 @@ void cMenuEditSearchExt::Set()
channelGroupNr++;
Add(new cMenuEditStraItem(IndentMenuItem(tr("Channel group")), &channelGroupNr, ChannelGroups.Count()+1, menuitemsChGr));
}
-
+
Add(new cMenuEditBoolItem( tr("Use time"), &data.useTime, trVDR("no"), trVDR("yes")));
if (data.useTime == true)
{
@@ -333,7 +333,7 @@ void cMenuEditSearchExt::Set()
{
UserDefDayOfWeek = data.DayOfWeek;
data.DayOfWeek = 7;
- }
+ }
Add(new cMenuEditStraItem(IndentMenuItem(tr("Day of week")), &data.DayOfWeek, 8, DaysOfWeek));
}
Add(new cMenuEditStraItem(tr("Use blacklists"), &data.blacklistMode, 4, BlacklistModes));
@@ -387,19 +387,19 @@ void cMenuEditSearchExt::Set()
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int iUsed = 0;
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (catarrayAvoidRepeats[index])
iUsed++;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
}
-
+
cString itemtext = cString::sprintf("%s (%d/%d)", tr("Compare categories"), iUsed, SearchExtCats.Count());
Add(new cOsdItem(IndentMenuItem(IndentMenuItem(itemtext))));
}
}
-
+
Add(new cMenuEditIntItem(IndentMenuItem(trVDR("Priority")), &data.Priority, 0, MAXPRIORITY));
Add(new cMenuEditIntItem(IndentMenuItem(trVDR("Lifetime")), &data.Lifetime, 0, MAXLIFETIME));
Add(new cMenuEditIntItem(IndentMenuItem(trVDR("Setup.Recording$Margin at start (min)")), &data.MarginStart, -INT_MAX, INT_MAX));
@@ -488,9 +488,9 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
int iTemp_action = data.action;
int iTemp_delMode = data.delMode;
int iTemp_compareSummary = data.compareSummary;
-
+
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
if (iTemp_mode != data.mode ||
iTemp_useTime != data.useTime ||
iTemp_useChannel != data.useChannel ||
@@ -502,8 +502,8 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
iTemp_avoidRepeats != data.avoidRepeats ||
iTemp_allowedRepeats != data.allowedRepeats ||
iTemp_delAfterDays != data.delAfterDays ||
- iTemp_action != data.action ||
- iTemp_delMode != data.delMode ||
+ iTemp_action != data.action ||
+ iTemp_delMode != data.delMode ||
iTemp_compareSummary != data.compareSummary)
{
Set();
@@ -517,7 +517,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
}
}
const char* ItemText = Get(Current())->Text();
-
+
if (!HasSubMenu())
{
if (strlen(ItemText)>0 && strstr(ItemText, tr(" from channel")) == ItemText && ((Key >= k0 && Key <= k9) || Key == kLeft || Key == kRight))
@@ -548,21 +548,21 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
int iOnExtCatItem = 0;
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (strstr(ItemText, IndentMenuItem(SearchExtCat->menuname)) == ItemText)
- {
+ {
iOnExtCatItem = 1;
if (SearchExtCat->nvalues > 0)
iOnExtCatItemBrowsable = 1;
iCatIndex = index;
catname = SearchExtCat->menuname;
- break;
+ break;
}
index++;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
}
-
+
if (strstr(ItemText, tr("Search term")) == ItemText)
{
if (!InEditMode(ItemText, tr("Search term"), data.search)) // show template for a new search
@@ -625,7 +625,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
else if (iOnExtCatItem)
{
if (!InEditMode(ItemText, IndentMenuItem(catname), data.catvalues[iCatIndex]) ||
- SearchExtCats.Get(iCatIndex)->searchmode >= 10)
+ SearchExtCats.Get(iCatIndex)->searchmode >= 10)
SetHelp(NULL, NULL, tr("Button$Help"), iOnExtCatItemBrowsable?tr("Button$Select"):NULL);
}
else if (strstr(ItemText, tr("Search term")) != ItemText)
@@ -635,13 +635,13 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
if (HasSubMenu())
return osContinue;
switch (Key) {
- case kOk:
- if (data.useChannel==1)
+ case kOk:
+ if (data.useChannel==1)
{
cChannel *ch = Channels.GetByNumber(channelMin);
if (ch)
data.channelMin = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -649,7 +649,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
ch = Channels.GetByNumber(channelMax);
if (ch)
data.channelMax = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -662,23 +662,23 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
}
if (data.useChannel==2)
data.channelGroup = strdup(menuitemsChGr[channelGroupNr]);
-
- if ((data.useTitle || data.useSubtitle || data.useDescription) &&
- (int(strlen(data.search)) < 3) &&
+
+ if ((data.useTitle || data.useSubtitle || data.useDescription) &&
+ (int(strlen(data.search)) < 3) &&
!Interface->Confirm(tr("Edit$Search text too short - use anyway?")))
break;
-
- if (searchExt)
+
+ if (searchExt)
{
*searchExt = data;
if (data.DayOfWeek == 7)
searchExt->DayOfWeek = UserDefDayOfWeek;
-
+
// transfer cat selection for 'avoid repeats' back to search
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
searchExt->catvaluesAvoidRepeat = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (catarrayAvoidRepeats[index])
searchExt->catvaluesAvoidRepeat += (1<<index);
@@ -689,7 +689,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
// transfer numeric cat values back to search
SearchExtCat = SearchExtCats.First();
index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
{
@@ -699,7 +699,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
SearchExtCat = SearchExtCats.Next(SearchExtCat);
index++;
}
-
+
searchExt->SetContentFilter(useContentDescriptors?contentStringsFlags:NULL);
if (data.blacklistMode == blacklistsSelection)
@@ -724,9 +724,9 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
if (searchExt->useAsSearchTimer && !EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
{
cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
- Skins.Message(mtInfo, tr("Search timers activated in setup."));
+ Skins.Message(mtInfo, tr("Search timers activated in setup."));
}
-
+
SearchExts.Save();
addIfConfirmed = false;
}
@@ -735,12 +735,12 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
if (iOnUserDefDayItem)
state = AddSubMenu(new cMenuEditDaysOfWeek(&UserDefDayOfWeek));
break;
-
- case kBlue:
+
+ case kBlue:
if (iOnDirectoryItem && !InEditMode(ItemText, IndentMenuItem(tr("Directory")), data.directory))
state = AddSubMenu(new cMenuDirSelect(data.directory));
if (iOnUseChannelGroups || iOnChannelGroup)
- {
+ {
if (channelGroupName)
free(channelGroupName);
channelGroupName = strdup(menuitemsChGr[channelGroupNr]);
@@ -792,7 +792,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
catarrayAvoidRepeats[index] = (data.catvaluesAvoidRepeat & (1<<index))?1:0;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -804,7 +804,7 @@ eOSState cMenuEditSearchExt::ProcessKey(eKeys Key)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
catvaluesNumeric[index] = atoi(data.catvalues[index]);
@@ -842,7 +842,7 @@ eOSState cMenuEditDaysOfWeek::ProcessKey(eKeys Key)
{
int i=0;
if (Key == kBack && negate)
- *pDaysOfWeek = -*pDaysOfWeek;
+ *pDaysOfWeek = -*pDaysOfWeek;
eOSState state = cOsdMenu::ProcessKey(Key);
@@ -870,7 +870,7 @@ cMenuSearchEditCompCats::cMenuSearchEditCompCats(int* catarrayAvoidRepeats)
edit_catarrayAvoidRepeats = (int*) malloc(SearchExtCats.Count() * sizeof(int));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
edit_catarrayAvoidRepeats[index] = catarrayAvoidRepeats[index];
cString menutext = cString::sprintf("%s %s", tr("Compare"), SearchExtCat->menuname);
@@ -894,7 +894,7 @@ eOSState cMenuSearchEditCompCats::ProcessKey(eKeys Key)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
search_catarrayAvoidRepeats[index] = edit_catarrayAvoidRepeats[index];
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -997,7 +997,7 @@ eOSState cMenuBlacklistsSelection::ProcessKey(eKeys Key)
state = osBack;
break;
case kRed:
- case kGreen:
+ case kGreen:
case kYellow:
{
cMutexLock BlacklistLock(&Blacklists);
@@ -1067,13 +1067,13 @@ cMenuCatValuesSelect::cMenuCatValuesSelect(char* CatValues, int CatIndex, int Se
char *pstrSearchToken, *pptr;
char *pstrSearch=strdup(catValues);
pstrSearchToken=strtok_r(pstrSearch, ",;|~", &pptr);
- while(pstrSearchToken)
+ while(pstrSearchToken)
{
- if(SearchExtCat->values[i] && strcmp(SearchExtCat->values[i], skipspace(pstrSearchToken))==0)
+ if(SearchExtCat->values[i] && strcmp(SearchExtCat->values[i], skipspace(pstrSearchToken))==0)
sel_cats[i] = true;
pstrSearchToken=strtok_r(NULL, ",;|~", &pptr);
}
- free(pstrSearch);
+ free(pstrSearch);
}
}
Set();
@@ -1085,7 +1085,7 @@ void cMenuCatValuesSelect::Set()
int current = Current();
int selCount = 0;
Clear();
-
+
string SearchMode = string(tr("Search mode")) + ": ";
if (searchMode == 0)
SearchMode += tr("phrase");
@@ -1145,7 +1145,7 @@ eOSState cMenuCatValuesSelect::ProcessKey(eKeys Key)
state = osBack;
}
else
- {
+ {
sel_cats[Current()-1] = !sel_cats[Current()-1];
Set();
Display();
diff --git a/menu_searchedit.h b/menu_searchedit.h
index 43e6b8c..8572674 100644
--- a/menu_searchedit.h
+++ b/menu_searchedit.h
@@ -68,7 +68,7 @@ public:
virtual eOSState ProcessKey(eKeys Key);
eOSState Help();
};
-
+
// --- cMenuEditDaysOfWeek --------------------------------------------------------
class cMenuEditDaysOfWeek : public cOsdMenu {
private:
diff --git a/menu_searchresults.c b/menu_searchresults.c
index 0f5fb4f..5e1e498 100644
--- a/menu_searchresults.c
+++ b/menu_searchresults.c
@@ -47,7 +47,7 @@ extern bool isUTF8;
static int CompareRecording(const void *p1, const void *p2)
{
-#if APIVERSNUM < 10721
+#if APIVERSNUM < 10721
return (int)((*(cRecording **)p1)->start - (*(cRecording **)p2)->start);
#else
return (int)((*(cRecording **)p1)->Start() - (*(cRecording **)p2)->Start());
@@ -55,8 +55,8 @@ static int CompareRecording(const void *p1, const void *p2)
}
// --- cMenuSearchResultsItem -------------------------------------------------------
-cMenuSearchResultsItem::cMenuSearchResultsItem(const cEvent *EventInfo, bool EpisodeOnly,
- bool PreviewTimer, cMenuTemplate* MenuTemplate,
+cMenuSearchResultsItem::cMenuSearchResultsItem(const cEvent *EventInfo, bool EpisodeOnly,
+ bool PreviewTimer, cMenuTemplate* MenuTemplate,
const cSearchExt* Search)
{
fileName = NULL;
@@ -74,18 +74,18 @@ bool cMenuSearchResultsItem::Update(bool Force)
{
if (!menuTemplate)
return false;
-
+
bool result = false;
int OldTimerMatch = timerMatch;
bool OldInSwitchList = inSwitchList;
- bool hasMatch = false;
+ bool hasMatch = false;
cTimer* timer = NULL;
if (event) timer = Timers.GetMatch(event, &timerMatch);
if (event) inSwitchList = (SwitchTimers.InSwitchList(event)!=NULL);
if (timer) hasMatch = true;
-
- if (Force || timerMatch != OldTimerMatch || inSwitchList != OldInSwitchList)
+
+ if (Force || timerMatch != OldTimerMatch || inSwitchList != OldInSwitchList)
{
char t[Utf8BufSize(2)]="",v[Utf8BufSize(2)]="",r[Utf8BufSize(2)]="";
char szStatus[Utf8BufSize(4)] = "";
@@ -103,7 +103,7 @@ bool cMenuSearchResultsItem::Update(bool Force)
}
else
{
-#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
+#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
#else
sprintf(t, "%s", (event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?ICON_REC_UTF8:ICON_CLOCK_UTF8) : ICON_CLOCK_HALF_UTF8 : " "));
sprintf(v, "%s", event && event->Vps() && (event->Vps() - event->StartTime()) ? ICON_VPS_UTF8 : " ");
@@ -127,20 +127,20 @@ bool cMenuSearchResultsItem::Update(bool Force)
}
if (t[0] != 'T' && previewTimer)
t[0] = 'P';
-
+
strcpy(szStatus, t);
strcat(szStatus, v);
strcat(szStatus, r);
-
+
char* buffer = strdup(menuTemplate->MenuTemplate());
strreplace(buffer, '|', '\t');
- if (!strcasestr(buffer, "%subtitle%") && cTemplFile::GetTemplateByName("MenuFavorites") != menuTemplate)
+ if (!strcasestr(buffer, "%subtitle%") && cTemplFile::GetTemplateByName("MenuFavorites") != menuTemplate)
// make sure, there is a subtitle
buffer = strreplacei(buffer, "%title%", "%title% ~ %subtitle%");
if (episodeOnly)
buffer = strreplacei(buffer, "%title%", "");
-
+
// parse the epxression and evaluate it
cVarExpr varExpr(buffer);
char* tmp = strdup(varExpr.Evaluate(event).c_str());
@@ -155,7 +155,7 @@ bool cMenuSearchResultsItem::Update(bool Force)
buffer = FixSeparators(buffer, '~');
buffer = FixSeparators(buffer, ':');
buffer = FixSeparators(buffer, '-');
-
+
SetText(buffer, false);
if (EPGSearchConfig.checkTimerConflAfterTimerProg && !Force && timer && timerMatch && timerMatch != OldTimerMatch)
@@ -163,7 +163,7 @@ bool cMenuSearchResultsItem::Update(bool Force)
cConflictCheck C;
C.Check();
if (C.TimerInConflict(timer))
- gl_InfoConflict = 1;
+ gl_InfoConflict = 1;
}
return true;
@@ -174,7 +174,7 @@ bool cMenuSearchResultsItem::Update(bool Force)
cMenuSearchResultsItem::cMenuSearchResultsItem(cRecording *Recording)
{
event = NULL;
- search = NULL;
+ search = NULL;
fileName = strdup(Recording->FileName());
SetText(Recording->Title('\t'));
}
@@ -215,7 +215,7 @@ eOSState cMenuSearchResults::Record(void)
UpdateCurrent();
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
if (item) {
- if (item->timerMatch == tmFull)
+ if (item->timerMatch == tmFull)
{
int tm = tmNone;
cTimer *timer = Timers.GetMatch(item->event, &tm);
@@ -231,17 +231,17 @@ eOSState cMenuSearchResults::Record(void)
cTimer *timer = new cTimer(item->event);
PrepareTimerFile(item->event, timer);
cTimer *t = Timers.GetTimer(timer);
- if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
+ if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
{
if (t)
{
delete timer;
- timer = t;
+ timer = t;
}
if (EPGSearchConfig.useVDRTimerEditMenu)
return AddSubMenu(new cMenuEditTimer(timer, !t));
else
- return AddSubMenu(new cMenuMyEditTimer(timer, !t, item->event));
+ return AddSubMenu(new cMenuMyEditTimer(timer, !t, item->event));
}
else
{
@@ -269,7 +269,7 @@ eOSState cMenuSearchResults::Record(void)
SetAux(timer, fullaux);
Timers.Add(timer);
- gl_timerStatusMonitor->SetConflictCheckAdvised();
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
timer->Matches();
Timers.SetModified();
LogFile.iSysLog("timer %s added (active)", *timer->ToDescr());
@@ -294,7 +294,7 @@ eOSState cMenuSearchResults::Switch(void)
if (channel && cDevice::PrimaryDevice()->SwitchChannel(channel, true))
return osEnd;
}
- Skins.Message(mtInfo, trVDR("Can't switch channel!"));
+ Skins.Message(mtInfo, trVDR("Can't switch channel!"));
return osContinue;
}
@@ -318,7 +318,7 @@ eOSState cMenuSearchResults::ShowSummary()
if (Count())
{
const cEvent *ei = ((cMenuSearchResultsItem *)Get(Current()))->event;
- if (ei)
+ if (ei)
{
cChannel *channel = Channels.GetByChannelID(ei->ChannelID(), true, true);
if (channel)
@@ -332,7 +332,7 @@ eOSState cMenuSearchResults::OnRed(cSearchExt* searchExt)
{
eOSState state = osUnknown;
- if(HasSubMenu())
+ if(HasSubMenu())
return Record();
if (Count())
@@ -355,7 +355,7 @@ eOSState cMenuSearchResults::OnRed(cSearchExt* searchExt)
eOSState cMenuSearchResults::OnGreen()
{
eOSState state = osUnknown;
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
m_bSort=!m_bSort;
BuildList();
@@ -367,7 +367,7 @@ eOSState cMenuSearchResults::OnGreen()
eOSState cMenuSearchResults::OnYellow()
{
eOSState state = osUnknown;
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
modeYellow = (modeYellow==showTitleEpisode?showEpisode:showTitleEpisode);
BuildList();
@@ -380,14 +380,14 @@ void cMenuSearchResults::UpdateCurrent()
{
cEventObj* cureventObj = eventObjects.GetCurrent();
if (cureventObj && cureventObj->Event())
- for (cMenuSearchResultsItem* item = (cMenuSearchResultsItem*)First(); item; item = (cMenuSearchResultsItem*)Next(item))
+ for (cMenuSearchResultsItem* item = (cMenuSearchResultsItem*)First(); item; item = (cMenuSearchResultsItem*)Next(item))
if (item->event == cureventObj->Event())
{
cureventObj->Select(false);
SetCurrent(item);
Display();
break;
- }
+ }
}
eOSState cMenuSearchResults::ProcessKey(eKeys Key)
@@ -401,22 +401,22 @@ eOSState cMenuSearchResults::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
case k0:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
toggleKeys = 1 - toggleKeys;
SetHelpKeys(true);
}
state = osContinue;
break;
- case kGreen:
+ case kGreen:
state = OnGreen();
break;
- case kYellow:
+ case kYellow:
state = OnYellow();
break;
case kOk:
case kInfo:
- if(HasSubMenu())
+ if(HasSubMenu())
{
state = cOsdMenu::ProcessKey(Key);
break;
@@ -426,11 +426,11 @@ eOSState cMenuSearchResults::ProcessKey(eKeys Key)
else
state = osBack;
break;
- default:
+ default:
break;
}
}
- if (!HasSubMenu())
+ if (!HasSubMenu())
{
if ((HadSubMenu || gl_TimerProgged) && Update())
{
@@ -448,7 +448,7 @@ eOSState cMenuSearchResults::ProcessKey(eKeys Key)
gl_InfoConflict = 0;
if (Interface->Confirm(tr("Timer conflict! Show?")))
state = AddSubMenu(new cMenuConflictCheck());
- }
+ }
}
return state;
}
@@ -483,9 +483,9 @@ bool cMenuSearchResultsForSearch::BuildList()
if (pSearchResults)
{
pSearchResults->SortBy(m_bSort? CompareEventTime: CompareEventChannel);
-
- for (cSearchResult* pResultObj = pSearchResults->First();
- pResultObj;
+
+ for (cSearchResult* pResultObj = pSearchResults->First();
+ pResultObj;
pResultObj = pSearchResults->Next(pResultObj))
{
if (ignoreRunning && now > pResultObj->event->StartTime())
@@ -496,19 +496,19 @@ bool cMenuSearchResultsForSearch::BuildList()
Add(new cMenuSearchResultsItem(pResultObj->event, modeYellow == showEpisode, pResultObj->needsTimer, menuTemplate));
eventObjects.Add(pResultObj->event);
}
-
+
delete pSearchResults;
}
if (Count())
SetCurrent(Get(0));
- SetHelpKeys(true);
+ SetHelpKeys(true);
cString szTitle = cString::sprintf("%d %s - %s", Count(), tr("Search results"), searchExt->search);
SetTitle(szTitle);
SetCurrent(Get(current));
Display();
-
+
return hasResults;
}
@@ -517,7 +517,7 @@ void cMenuSearchResultsForSearch::SetHelpKeys(bool Force)
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -525,12 +525,12 @@ void cMenuSearchResultsForSearch::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
+ {
ModeBlueSR nextModeBlue = (ModeBlueSR)(((int)modeBlue+1)%3);
- if (nextModeBlue == showTimerPreview &&
+ if (nextModeBlue == showTimerPreview &&
(searchExt->useAsSearchTimer == 0 || searchExt->avoidRepeats == 0))
nextModeBlue = (ModeBlueSR)(((int)nextModeBlue+1)%3);
-
+
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), m_bSort? tr("Button$by channel"):tr("Button$by time"), modeYellow==showTitleEpisode?tr("Button$Episode"):tr("Button$Title"), ButtonBlue[(int)nextModeBlue]);
else
@@ -549,7 +549,7 @@ eOSState cMenuSearchResultsForSearch::ProcessKey(eKeys Key)
case kRed:
state = OnRed(searchExt);
break;
- case k1...k9:
+ case k1...k9:
state = HasSubMenu()?osContinue:Commands(Key, searchExt);
break;
case kBlue:
@@ -558,18 +558,18 @@ eOSState cMenuSearchResultsForSearch::ProcessKey(eKeys Key)
else
{
modeBlue = (ModeBlueSR)(((int)modeBlue+1)%3);
- if (modeBlue == showTimerPreview &&
+ if (modeBlue == showTimerPreview &&
(!searchExt || (searchExt && (searchExt->useAsSearchTimer == 0 || searchExt->avoidRepeats == 0))))
modeBlue = (ModeBlueSR)(((int)modeBlue+1)%3);
-
+
if (modeBlue == showTimerPreview)
m_bSort = true; // show always sorted by channel
BuildList();
-
- state = osContinue;
+
+ state = osContinue;
}
break;
- default:
+ default:
break;
}
}
@@ -587,7 +587,7 @@ cMenuSearchResultsForBlacklist::cMenuSearchResultsForBlacklist(cBlacklist* Black
blacklist = Blacklist;
m_bSort = true;
modeBlue = blacklist->useChannel==3?showNoPayTV:(EPGSearchConfig.ignorePayTV?showNoPayTV:showAll);
-
+
BuildList();
}
@@ -601,9 +601,9 @@ bool cMenuSearchResultsForBlacklist::BuildList()
if (pSearchResults)
{
pSearchResults->SortBy(m_bSort? CompareEventTime: CompareEventChannel);
-
- for (cSearchResult* pResultObj = pSearchResults->First();
- pResultObj;
+
+ for (cSearchResult* pResultObj = pSearchResults->First();
+ pResultObj;
pResultObj = pSearchResults->Next(pResultObj))
{
if (ignoreRunning && now > pResultObj->event->StartTime())
@@ -611,18 +611,18 @@ bool cMenuSearchResultsForBlacklist::BuildList()
Add(new cMenuSearchResultsItem(pResultObj->event, modeYellow == showEpisode, false));
eventObjects.Add(pResultObj->event);
}
-
+
delete pSearchResults;
}
if (Count())
SetCurrent(Get(0));
- SetHelpKeys();
+ SetHelpKeys();
cString szTitle = cString::sprintf("%d %s - %s", Count(), tr("Blacklist results"), blacklist->search);
SetTitle(szTitle);
SetCurrent(Get(current));
Display();
-
+
return true;
}
@@ -632,7 +632,7 @@ eOSState cMenuSearchResultsForBlacklist::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
- case k1...k9:
+ case k1...k9:
state = HasSubMenu()?osContinue:Commands(Key);
break;
case kRecord:
@@ -643,9 +643,9 @@ eOSState cMenuSearchResultsForBlacklist::ProcessKey(eKeys Key)
if (HasSubMenu())
state = Switch();
else
- state = osContinue;
+ state = osContinue;
break;
- default:
+ default:
break;
}
}
@@ -657,7 +657,7 @@ void cMenuSearchResultsForBlacklist::SetHelpKeys(bool Force)
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -665,12 +665,12 @@ void cMenuSearchResultsForBlacklist::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
+ {
ModeBlueSR nextModeBlue = (ModeBlueSR)(((int)modeBlue+1)%3);
if (nextModeBlue == showTimerPreview)
nextModeBlue = (ModeBlueSR)(((int)nextModeBlue+1)%3);
-
+
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), m_bSort? tr("Button$by channel"):tr("Button$by time"), modeYellow==showTitleEpisode?tr("Button$Episode"):tr("Button$Title"), NULL);
else
@@ -710,7 +710,7 @@ bool cMenuSearchResultsForQuery::BuildList()
/* if (!bRes)
{
char* szMessage = NULL;
- asprintf(&szMessage, tr("No results! Try again with tolerance %d?"), searchExt->mode == 5?searchExt->fuzzyTolerance+1:1);
+ asprintf(&szMessage, tr("No results! Try again with tolerance %d?"), searchExt->mode == 5?searchExt->fuzzyTolerance+1:1);
string sMessage = szMessage;
free(szMessage);
if (Interface->Confirm(sMessage.c_str()))
@@ -745,7 +745,7 @@ bool cMenuSearchResultsForRecs::BuildList()
{
cRecording **pArray = NULL;
int num = 0;
-
+
int current = Current();
Clear();
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
@@ -756,7 +756,7 @@ bool cMenuSearchResultsForRecs::BuildList()
if (s1.empty() || s2.empty()) continue;
// tolerance for fuzzy searching: 90% of the shorter text length, but at least 1
- int tolerance = std::max(1, (int)std::min(s1.size(), s2.size()) / 10);
+ int tolerance = std::max(1, (int)std::min(s1.size(), s2.size()) / 10);
bool match = FindIgnoreCase(s1, s2) >= 0 ||
FindIgnoreCase(s2, s1) >= 0;
@@ -811,7 +811,7 @@ cRecording *cMenuSearchResultsForRecs::GetRecording(cMenuSearchResultsItem *Item
eOSState cMenuSearchResultsForRecs::Play(void)
{
cMenuSearchResultsItem *ri = (cMenuSearchResultsItem*)Get(Current());
- if (ri)
+ if (ri)
{
cRecording *recording = GetRecording(ri);
if (recording) {
@@ -826,7 +826,7 @@ eOSState cMenuSearchResultsForRecs::ProcessKey(eKeys Key)
{
eOSState state = cOsdMenu::ProcessKey(Key);
- if (state == osUnknown)
+ if (state == osUnknown)
{
if (Key == kOk)
{
@@ -851,7 +851,7 @@ cMenuSearchResultsForList::cMenuSearchResultsForList(cSearchResults& SearchResul
ignoreRunning = IgnoreRunning;
BuildList();
-
+
cString szTitle = cString::sprintf(Title, Count());
SetTitle(szTitle);
}
@@ -861,7 +861,7 @@ void cMenuSearchResultsForList::SetHelpKeys(bool Force)
cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -869,7 +869,7 @@ void cMenuSearchResultsForList::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
+ {
if (toggleKeys==0)
SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), m_bSort? tr("Button$by channel"):tr("Button$by time"), modeYellow==showTitleEpisode?tr("Button$Episode"):tr("Button$Title"), ButtonBlue[0]);
else
@@ -886,9 +886,9 @@ bool cMenuSearchResultsForList::BuildList()
Clear();
eventObjects.Clear();
searchResults->SortBy(m_bSort? CompareEventTime: CompareEventChannel);
-
- for (cSearchResult* pResultObj = searchResults->First();
- pResultObj;
+
+ for (cSearchResult* pResultObj = searchResults->First();
+ pResultObj;
pResultObj = searchResults->Next(pResultObj))
{
if (ignoreRunning && now > pResultObj->event->StartTime())
@@ -899,7 +899,7 @@ bool cMenuSearchResultsForList::BuildList()
if (Count())
SetCurrent(Get(0));
- SetHelpKeys();
+ SetHelpKeys();
SetCurrent(Get(current));
Display();
@@ -913,14 +913,14 @@ eOSState cMenuSearchResultsForList::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
- case k1...k9:
+ case k1...k9:
state = HasSubMenu()?osContinue:Commands(Key);
break;
case kRecord:
case kRed:
state = OnRed();
break;
- default:
+ default:
break;
}
}
diff --git a/menu_searchresults.h b/menu_searchresults.h
index 868144d..3c90944 100644
--- a/menu_searchresults.h
+++ b/menu_searchresults.h
@@ -49,14 +49,14 @@ class cMenuSearchResultsItem : public cOsdItem {
bool previewTimer;
bool episodeOnly;
cMenuTemplate* menuTemplate;
- public:
+ public:
int timerMatch;
bool inSwitchList;
const cEvent *event;
const cSearchExt* search;
const char *FileName(void) { return fileName; }
- cMenuSearchResultsItem(const cEvent *EventInfo, bool EpisodeOnly = false,
- bool PreviewTimer = false, cMenuTemplate* MenuTemplate = NULL,
+ cMenuSearchResultsItem(const cEvent *EventInfo, bool EpisodeOnly = false,
+ bool PreviewTimer = false, cMenuTemplate* MenuTemplate = NULL,
const cSearchExt* Search = NULL);
cMenuSearchResultsItem(cRecording *Recording);
bool Update(bool Force = false);
@@ -84,13 +84,13 @@ class cMenuSearchResults : public cOsdMenu {
virtual void SetHelpKeys(bool Force=false)=0;
bool Update(void);
void UpdateCurrent();
-
+
static const cEvent *scheduleEventInfo;
ModeYellowSR modeYellow;
ModeBlueSR modeBlue;
public:
bool m_bSort;
-
+
cMenuSearchResults(cMenuTemplate* MenuTemplate);
};
diff --git a/menu_searchtemplate.c b/menu_searchtemplate.c
index 3604260..e9a4eb5 100644
--- a/menu_searchtemplate.c
+++ b/menu_searchtemplate.c
@@ -81,7 +81,7 @@ void cMenuSearchTemplateItem::Set(void)
}
else if (searchExt->useChannel == 2)
line << setiosflags(ios::left) << setw(11) << searchExt->channelGroup;
-
+
line << "\t";
if (searchExt->useTime)
{
@@ -93,7 +93,7 @@ void cMenuSearchTemplateItem::Set(void)
}
else
line << "--:--\t--:--";
-
+
SetText(strdup(line.str().c_str()), false);
}
@@ -112,7 +112,7 @@ cMenuEPGSearchTemplate::cMenuEPGSearchTemplate(cSearchExt* Search, cBlacklist* B
newSearch = New;
cMutexLock SearchTemplatesLock(&SearchTemplates);
cSearchExt *SearchExt = SearchTemplates.First();
- while (SearchExt) {
+ while (SearchExt) {
Add(new cMenuSearchTemplateItem(SearchExt));
SearchExt = SearchTemplates.Next(SearchExt);
}
@@ -201,7 +201,7 @@ eOSState cMenuEPGSearchTemplate::ProcessKey(eKeys Key)
if (!newSearch && !Interface->Confirm(tr("Overwrite existing entries?")))
return osBack;
// duplicate template
- cSearchExt* t =CurrentSearchTemplate();
+ cSearchExt* t =CurrentSearchTemplate();
if (!t) return osContinue;
// copy all except the name and id
search->CopyFromTemplate(t);
@@ -211,7 +211,7 @@ eOSState cMenuEPGSearchTemplate::ProcessKey(eKeys Key)
if (!newSearch && !Interface->Confirm(tr("Overwrite existing entries?")))
return osBack;
// duplicate template
- cSearchExt* t =CurrentSearchTemplate();
+ cSearchExt* t =CurrentSearchTemplate();
if (!t) return osContinue;
// copy all except the name and id
blacklist->CopyFromTemplate(t);
@@ -230,8 +230,8 @@ eOSState cMenuEPGSearchTemplate::ProcessKey(eKeys Key)
default: break;
}
}
- if (SearchNumber >= 0 && !HasSubMenu())
- {
+ if (SearchNumber >= 0 && !HasSubMenu())
+ {
cSearchExt* search = SearchTemplates.Get(SearchNumber);
if (search) // a newly created template was confirmed with Ok
Add(new cMenuSearchTemplateItem(search));
diff --git a/menu_switchtimers.c b/menu_switchtimers.c
index 87915fc..48ceb48 100644
--- a/menu_switchtimers.c
+++ b/menu_switchtimers.c
@@ -46,7 +46,7 @@ cMenuEditSwitchTimer::cMenuEditSwitchTimer(cSwitchTimer* SwitchTimer, bool New)
switchTimer = SwitchTimer;
addIfConfirmed = New;
- if (switchTimer)
+ if (switchTimer)
{
data = *switchTimer;
Set();
@@ -66,12 +66,12 @@ void cMenuEditSwitchTimer::Set()
if (data.mode == 2) // ask for switching
Add(new cMenuEditIntItem(tr("Ask ... minutes before start"), &data.switchMinsBefore, 0, 99));
- cString info = cString::sprintf("%s:\t%s", tr("action at"),
+ cString info = cString::sprintf("%s:\t%s", tr("action at"),
TIMESTRING(data.startTime - 60 * data.switchMinsBefore));
cOsdItem* pInfoItem = new cOsdItem(info);
pInfoItem->SetSelectable(false);
Add(pInfoItem);
- Add(new cMenuEditBoolItem(tr("Unmute sound"), &data.unmute, trVDR("no"), trVDR("yes")));
+ Add(new cMenuEditBoolItem(tr("Unmute sound"), &data.unmute, trVDR("no"), trVDR("yes")));
SetCurrent(Get(current));
}
@@ -100,13 +100,13 @@ eOSState cMenuEditSwitchTimer::ProcessKey(eKeys Key)
*switchTimer = data;
cMutexLock SwitchTimersLock(&SwitchTimers);
if (addIfConfirmed)
- SwitchTimers.Add(switchTimer);
+ SwitchTimers.Add(switchTimer);
SwitchTimers.Save();
}
addIfConfirmed = false;
return osBack;
break;
- }
+ }
default: break;
}
}
@@ -142,9 +142,9 @@ void cMenuSwitchTimerItem::Set()
int cMenuSwitchTimerItem::Compare(const cListObject &ListObject) const
{
cMenuSwitchTimerItem *p = (cMenuSwitchTimerItem *)&ListObject;
- if (switchTimer->startTime > p->switchTimer->startTime)
- return 1;
- else
+ if (switchTimer->startTime > p->switchTimer->startTime)
+ return 1;
+ else
return -1;
}
@@ -161,7 +161,7 @@ void cMenuSwitchTimers::Set()
Clear();
cMutexLock SwitchTimersLock(&SwitchTimers);
cSwitchTimer* switchTimer = SwitchTimers.First();
- while (switchTimer)
+ while (switchTimer)
{
const cEvent* event = switchTimer->Event();
if (event)
@@ -198,10 +198,10 @@ eOSState cMenuSwitchTimers::Delete(void)
eOSState cMenuSwitchTimers::DeleteAll(void)
{
- if (Interface->Confirm(tr("Edit$Delete all entries?")))
+ if (Interface->Confirm(tr("Edit$Delete all entries?")))
{
cMutexLock SwitchTimersLock(&SwitchTimers);
- while (SwitchTimers.First())
+ while (SwitchTimers.First())
SwitchTimers.Del(SwitchTimers.First());
SwitchTimers.Save();
Set();
@@ -215,7 +215,7 @@ eOSState cMenuSwitchTimers::Summary(void)
if (HasSubMenu() || Count() == 0)
return osContinue;
cSwitchTimer *curSwitchTimer = CurrentSwitchTimer();
-
+
if (curSwitchTimer)
{
const cEvent* event = curSwitchTimer->Event();
diff --git a/menu_templateedit.c b/menu_templateedit.c
index 9613c23..1611170 100644
--- a/menu_templateedit.c
+++ b/menu_templateedit.c
@@ -37,7 +37,7 @@ extern cChannelGroups ChannelGroups;
extern cSearchExtCats SearchExtCats;
cMenuEditTemplate::cMenuEditTemplate(cSearchExt *SearchExt, bool New)
- : cMenuEditSearchExt(SearchExt, New, true)
+ : cMenuEditSearchExt(SearchExt, New, true)
{
SetTitle(tr("Edit template"));
}
@@ -57,9 +57,9 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
int iTemp_allowedRepeats = data.allowedRepeats;
int iTemp_delAfterDays = data.delAfterDays;
int iTemp_delMode = data.delMode;
-
+
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
if (iTemp_mode != data.mode ||
iTemp_useTime != data.useTime ||
iTemp_useChannel != data.useChannel ||
@@ -76,7 +76,7 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
Display();
}
const char* ItemText = Get(Current())->Text();
-
+
if (!HasSubMenu())
{
if (strlen(ItemText)>0 && strstr(ItemText, tr(" from channel")) == ItemText && ((Key >= k0 && Key <= k9) || Key == kLeft || Key == kRight))
@@ -105,16 +105,16 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
int iOnExtCatItem = 0;
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (strstr(ItemText, IndentMenuItem(SearchExtCat->menuname)) == ItemText)
- {
+ {
iOnExtCatItem = 1;
if (SearchExtCat->nvalues > 0)
iOnExtCatItemBrowsable = 1;
iCatIndex = index;
catname = SearchExtCat->menuname;
- break;
+ break;
}
index++;
SearchExtCat = SearchExtCats.Next(SearchExtCat);
@@ -174,7 +174,7 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
else if (iOnExtCatItem)
{
if (!InEditMode(ItemText, IndentMenuItem(catname), data.catvalues[iCatIndex]) ||
- SearchExtCats.Get(iCatIndex)->searchmode >= 10)
+ SearchExtCats.Get(iCatIndex)->searchmode >= 10)
SetHelp(NULL, NULL, NULL, iOnExtCatItemBrowsable?tr("Button$Select"):NULL);
}
else if (strstr(ItemText, tr("Template name")) != ItemText)
@@ -184,13 +184,13 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
if (HasSubMenu())
return osContinue;
switch (Key) {
- case kOk:
- if (data.useChannel==1)
+ case kOk:
+ if (data.useChannel==1)
{
cChannel *ch = Channels.GetByNumber(channelMin);
if (ch)
data.channelMin = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -198,7 +198,7 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
ch = Channels.GetByNumber(channelMax);
if (ch)
data.channelMax = ch;
- else
+ else
{
Skins.Message(mtError, tr("*** Invalid Channel ***"));
break;
@@ -211,18 +211,18 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
}
if (data.useChannel==2)
data.channelGroup = strdup(menuitemsChGr[channelGroupNr]);
-
- if (searchExt)
+
+ if (searchExt)
{
*searchExt = data;
if (data.DayOfWeek == 7)
searchExt->DayOfWeek = UserDefDayOfWeek;
-
+
// transfer cat selection for 'avoid repeats' back to search
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
searchExt->catvaluesAvoidRepeat = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (catarrayAvoidRepeats[index])
searchExt->catvaluesAvoidRepeat += (1<<index);
@@ -233,7 +233,7 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
// transfer numeric cat values back to search
SearchExtCat = SearchExtCats.First();
index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
{
@@ -271,12 +271,12 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
if (iOnUserDefDayItem)
state = AddSubMenu(new cMenuEditDaysOfWeek(&UserDefDayOfWeek));
break;
-
- case kBlue:
+
+ case kBlue:
if (iOnDirectoryItem && !InEditMode(ItemText, IndentMenuItem(tr("Directory")), data.directory))
state = AddSubMenu(new cMenuDirSelect(data.directory));
if (iOnUseChannelGroups || iOnChannelGroup)
- {
+ {
if (channelGroupName)
free(channelGroupName);
channelGroupName = strdup(menuitemsChGr[channelGroupNr]);
@@ -304,7 +304,7 @@ eOSState cMenuEditTemplate::ProcessKey(eKeys Key)
{
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (SearchExtCat)
+ while (SearchExtCat)
{
if (SearchExtCat->searchmode >= 10)
catvaluesNumeric[index] = atoi(data.catvalues[index]);
diff --git a/menu_templateedit.h b/menu_templateedit.h
index 3face2e..64f6d76 100644
--- a/menu_templateedit.h
+++ b/menu_templateedit.h
@@ -34,4 +34,4 @@ class cMenuEditTemplate: public cMenuEditSearchExt {
};
#endif
-
+
diff --git a/menu_timersdone.c b/menu_timersdone.c
index ab99475..64115d2 100644
--- a/menu_timersdone.c
+++ b/menu_timersdone.c
@@ -38,7 +38,7 @@ void cMenuTimerDoneItem::Set(void)
if (!timerDone)
return;
char *buffer = NULL;
-
+
char buf[32];
struct tm tm_r;
tm *tm = localtime_r(&timerDone->start, &tm_r);
@@ -107,14 +107,14 @@ void cMenuTimersDone::UpdateCurrent()
// navigation in summary could have changed current item, so update it
cEventObj* cureventObj = eventObjects.GetCurrent();
if (cureventObj && cureventObj->Event())
- for (cMenuTimerDoneItem *item = (cMenuTimerDoneItem *)First(); item; item = (cMenuTimerDoneItem *)Next(item))
+ for (cMenuTimerDoneItem *item = (cMenuTimerDoneItem *)First(); item; item = (cMenuTimerDoneItem *)Next(item))
if (item->timerDone->GetEvent() == cureventObj->Event())
{
cureventObj->Select(false);
SetCurrent(item);
Display();
break;
- }
+ }
}
cTimerDone *cMenuTimersDone::CurrentTimerDone(void)
diff --git a/menu_whatson.c b/menu_whatson.c
index 4fd232a..06d3542 100644
--- a/menu_whatson.c
+++ b/menu_whatson.c
@@ -31,7 +31,7 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
#include "menu_event.h"
#include "menu_myedittimer.h"
#include "menu_searchresults.h"
-#include "menu_search.h"
+#include "menu_search.h"
#include "menu_commands.h"
#include "epgsearchcfg.h"
#include "switchtimer.h"
@@ -79,13 +79,13 @@ bool cMenuMyScheduleItem::Update(bool Force)
int OldTimerMatch = timerMatch;
bool OldInSwitchList = inSwitchList;
- bool hasMatch = false;
+ bool hasMatch = false;
cTimer* timer = NULL;
if (event) timer = Timers.GetMatch(event, &timerMatch);
if (event) inSwitchList = (SwitchTimers.InSwitchList(event)!=NULL);
if (timer) hasMatch = true;
-
- if (Force || timerMatch != OldTimerMatch || inSwitchList != OldInSwitchList)
+
+ if (Force || timerMatch != OldTimerMatch || inSwitchList != OldInSwitchList)
{
char szProgressPart[Utf8BufSize(12)] = "";
char szProgressPartT2S[12] = "";
@@ -106,15 +106,15 @@ bool cMenuMyScheduleItem::Update(bool Force)
}
if (mode == showNext)
frac = ( ( 30*60 - min((time_t)30*60, startTime - now) ) * 8 + 15*60 ) / (30*60);
-
+
frac = min(8,max(0, frac));
-
+
szProgressPartT2S[0] = '[';
memset(szProgressPartT2S + 1,'|',frac);
memset(szProgressPartT2S + 1 + frac ,' ', 8 - frac);
szProgressPartT2S[9] = ']';
szProgressPartT2S[10] = 0;
-
+
if (!isUTF8)
{
szProgressPart[0] = ICON_BAR_OPEN;
@@ -125,7 +125,7 @@ bool cMenuMyScheduleItem::Update(bool Force)
}
else
{
-#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
+#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
#else
std::stringstream buffer;
buffer << ICON_BAR_OPEN_UTF8;
@@ -145,11 +145,11 @@ bool cMenuMyScheduleItem::Update(bool Force)
}
}
}
-
+
char t[Utf8BufSize(2)],v[Utf8BufSize(2)],r[Utf8BufSize(2)];
char szStatus[Utf8BufSize(4)];
szStatus[3] = 0;
- t[1]=v[1]=r[1] = 0;
+ t[1]=v[1]=r[1] = 0;
if (EPGSearchConfig.WarEagle)
{
@@ -161,7 +161,7 @@ bool cMenuMyScheduleItem::Update(bool Force)
}
else
{
-#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
+#if defined(__GNUC__) && __GNUC__ < 3 && __GNUC_MINOR__ < 96
#else
sprintf(t, "%s", (event && hasMatch ? (timerMatch == tmFull) ? ((timer && timer->Recording())?ICON_REC_UTF8:ICON_CLOCK_UTF8) : ICON_CLOCK_HALF_UTF8 : " "));
sprintf(v, "%s", event && event->Vps() && (event->Vps() - event->StartTime()) ? ICON_VPS_UTF8 : " ");
@@ -199,9 +199,9 @@ bool cMenuMyScheduleItem::Update(bool Force)
char* buffer = strdup(menutemplate);
strreplace(buffer, '|', '\t');
- char* title = NULL;
+ char* title = NULL;
title = strdup(event?event->Title():tr(">>> no info! <<<"));
- title = strreplacei(title, ":", "%colon%"); // asume a title has the form "a?b:c",
+ title = strreplacei(title, ":", "%colon%"); // asume a title has the form "a?b:c",
// we need to replace the colon to avoid misinterpretation the expression as a condition
buffer = strreplacei(buffer, "%title%", title);
free(title);
@@ -222,7 +222,7 @@ bool cMenuMyScheduleItem::Update(bool Force)
char* tmp = strdup(varExpr.Evaluate(event).c_str());
free(buffer);
buffer = tmp;
-
+
buffer = strreplacei(buffer, "$status$", szStatus);
buffer = strreplacei(buffer, "$t_status$", t);
buffer = strreplacei(buffer, "$v_status$", v);
@@ -239,9 +239,9 @@ bool cMenuMyScheduleItem::Update(bool Force)
cConflictCheck C;
C.Check();
if (C.TimerInConflict(timer))
- gl_InfoConflict = 1;
+ gl_InfoConflict = 1;
}
- return true;
+ return true;
}
return result;
}
@@ -262,13 +262,13 @@ cMenuWhatsOnSearch::cMenuWhatsOnSearch(const cSchedules *Schedules, int CurrentC
helpKeys = -1;
shiftTime = 0;
schedules = Schedules;
-
+
CreateShowModes();
-
+
LoadSchedules();
-
+
currentChannel = CurrentChannelNr;
-
+
SetHelpKeys();
}
@@ -288,14 +288,14 @@ const char* cMenuWhatsOnSearch::MenuKind()
void cMenuWhatsOnSearch::Display(void)
{
cOsdMenu::Display();
-
- if (Count() > 0)
+
+ if (Count() > 0)
{
int i = 0;
- for (cOsdItem *item = First(); item; item = Next(item))
- cStatus::MsgOsdEventItem(!item->Selectable() ? 0 :
- ((cMenuMyScheduleItem*)item)->event,
+ for (cOsdItem *item = First(); item; item = Next(item))
+ cStatus::MsgOsdEventItem(!item->Selectable() ? 0 :
+ ((cMenuMyScheduleItem*)item)->event,
item->Text(), i++, Count());
}
}
@@ -317,7 +317,7 @@ void cMenuWhatsOnSearch::LoadSchedules()
{
Clear();
eventObjects.Clear();
-
+
// time_t SeekTime;
cString szTitle;
cShowMode* mode = GetShowMode(currentShowMode);
@@ -331,10 +331,10 @@ void cMenuWhatsOnSearch::LoadSchedules()
{
if (mode)
seekTime = GetTimeT(mode->GetTime());
- if (seekTime < time(NULL)) seekTime += HOURS2SECS(24);
+ if (seekTime < time(NULL)) seekTime += HOURS2SECS(24);
}
seekTime += shiftTime*60;
-
+
struct tm tm_r;
time_t now = time(NULL);
@@ -350,11 +350,11 @@ void cMenuWhatsOnSearch::LoadSchedules()
seekTime = GetTimeT(mode->GetTime());
if (seekTime < time(NULL) && currentShowMode != showNow && currentShowMode != showNext)
{
- seekTime += HOURS2SECS(24);
- szTitle = cString::sprintf("%s - %s (%s)", tr("Overview"), mode->GetDescription(), *WeekDayName(seekTime));
+ seekTime += HOURS2SECS(24);
+ szTitle = cString::sprintf("%s - %s (%s)", tr("Overview"), mode->GetDescription(), *WeekDayName(seekTime));
}
else
- szTitle = cString::sprintf("%s - %s", tr("Overview"), mode->GetDescription());
+ szTitle = cString::sprintf("%s - %s", tr("Overview"), mode->GetDescription());
}
SetTitle(szTitle);
@@ -370,9 +370,9 @@ void cMenuWhatsOnSearch::LoadSchedules()
if (currentChannel > maxChannel)
maxChannel = 0;
- for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel))
- {
- if (!Channel->GroupSep())
+ for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel))
+ {
+ if (!Channel->GroupSep())
{
if (maxChannel && Channel->Number() > maxChannel) break;
if (EPGSearchConfig.showRadioChannels == 0 && ISRADIO(Channel))
@@ -380,16 +380,16 @@ void cMenuWhatsOnSearch::LoadSchedules()
const cSchedule *Schedule = schedules->GetSchedule(Channel);
const cEvent *Event = NULL;
- if (Schedule)
- {
+ if (Schedule)
+ {
if (shiftTime != 0)
Event = Schedule->GetEventAround(seekTime);
else
{
switch(currentShowMode)
- {
+ {
default:
- case showNow:
+ case showNow:
Event = Schedule->GetPresentEvent();
break;
case showNext:
@@ -408,7 +408,7 @@ void cMenuWhatsOnSearch::LoadSchedules()
continue;
Add(new cMenuMyScheduleItem(Event, Channel, currentShowMode, currentTemplate), Channel->Number() == currentChannel);
- if (Event) eventObjects.Add(Event);
+ if (Event) eventObjects.Add(Event);
}
else
{
@@ -437,10 +437,10 @@ showMode cMenuWhatsOnSearch::GetNextMode()
{
showMode nextShowMode = currentShowMode;
cShowMode* Mode = GetShowMode(currentShowMode);
- if (Mode)
+ if (Mode)
{
cShowMode* ModeNext = showModes.Next(Mode);
- if (ModeNext == NULL)
+ if (ModeNext == NULL)
nextShowMode = showNow;
else
nextShowMode = ModeNext->GetMode();
@@ -465,12 +465,12 @@ void cMenuWhatsOnSearch::CreateShowModes()
if (!EPGSearchConfig.ShowModes[i].GetUsage())
continue;
- time_t SeekTime = GetTimeT(EPGSearchConfig.ShowModes[i].GetTime());
+ time_t SeekTime = GetTimeT(EPGSearchConfig.ShowModes[i].GetTime());
if (SeekTime < now)
SeekTime += HOURS2SECS(24);
if (SeekTime - now > HOURS2SECS(SKIPHOURS))
continue;
- cShowMode* Mode = new cShowMode((showMode)i, EPGSearchConfig.ShowModes[i].GetDescription(),
+ cShowMode* Mode = new cShowMode((showMode)i, EPGSearchConfig.ShowModes[i].GetDescription(),
1, EPGSearchConfig.ShowModes[i].GetTime(), SeekTime);
showModes.Add(Mode);
}
@@ -484,7 +484,7 @@ void cMenuWhatsOnSearch::CreateShowModes()
cShowMode* cMenuWhatsOnSearch::GetShowMode(showMode mode)
{
- for (cShowMode *showMode = showModes.First(); showMode; showMode = showModes.Next(showMode))
+ for (cShowMode *showMode = showModes.First(); showMode; showMode = showModes.Next(showMode))
if (mode == showMode->GetMode())
return showMode;
return NULL;
@@ -505,16 +505,16 @@ eOSState cMenuWhatsOnSearch::Switch(void)
if (cDevice::PrimaryDevice()->SwitchChannel(item->channel, true))
return osEnd;
}
- Skins.Message(mtInfo, trVDR("Can't switch channel!"));
+ Skins.Message(mtInfo, trVDR("Can't switch channel!"));
return osContinue;
}
eOSState cMenuWhatsOnSearch::Record(void)
{
cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)Get(Current());
- if (item)
+ if (item)
{
- if (item->timerMatch == tmFull)
+ if (item->timerMatch == tmFull)
{
int tm = tmNone;
cTimer *timer = Timers.GetMatch(item->event, &tm);
@@ -535,14 +535,14 @@ eOSState cMenuWhatsOnSearch::Record(void)
}
else
timer = new cTimer(false, false, item->channel);
-
+
cTimer *t = Timers.GetTimer(timer);
- if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
+ if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL)))
{
if (t)
{
delete timer;
- timer = t;
+ timer = t;
}
timer->SetFlags(tfActive);
if (EPGSearchConfig.useVDRTimerEditMenu)
@@ -574,7 +574,7 @@ eOSState cMenuWhatsOnSearch::Record(void)
#endif
SetAux(timer, fullaux);
Timers.Add(timer);
- gl_timerStatusMonitor->SetConflictCheckAdvised();
+ gl_timerStatusMonitor->SetConflictCheckAdvised();
timer->Matches();
Timers.SetModified();
LogFile.iSysLog("timer %s added (active)", *timer->ToDescr());
@@ -605,9 +605,9 @@ eOSState cMenuWhatsOnSearch::Commands(eKeys Key)
return osContinue;
cMenuMyScheduleItem *mi = (cMenuMyScheduleItem *)Get(Current());
- if (mi)
+ if (mi)
{
- if (!mi->event)
+ if (!mi->event)
{
if (Key == k3)
return Switch();
@@ -635,7 +635,7 @@ void cMenuWhatsOnSearch::SetHelpKeys(bool Force)
cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)Get(Current());
int NewHelpKeys = 0;
if (item) {
- if (item->Selectable() && item->timerMatch == tmFull)
+ if (item->Selectable() && item->timerMatch == tmFull)
NewHelpKeys = 2;
else
NewHelpKeys = 1;
@@ -643,21 +643,21 @@ void cMenuWhatsOnSearch::SetHelpKeys(bool Force)
bool hasTimer = (NewHelpKeys == 2);
if (NewHelpKeys != helpKeys || Force)
- {
- showMode nextShowMode = GetNextMode();
+ {
+ showMode nextShowMode = GetNextMode();
cShowMode* mode = GetShowMode(nextShowMode);
const char* szButtonGreen = NULL;
- if (mode)
+ if (mode)
szButtonGreen = mode->GetDescription();
if (toggleKeys==0)
- SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")),
- szButtonGreen,
- trVDR("Button$Schedule"),
+ SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")),
+ szButtonGreen,
+ trVDR("Button$Schedule"),
EPGSearchConfig.bluekeymode==0?(EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch")):tr("Button$Search"));
else
- SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")),
- (EPGSearchConfig.toggleGreenYellow==0?szButtonGreen:"<<"),
- (EPGSearchConfig.toggleGreenYellow==0?trVDR("Button$Schedule"):">>"),
+ SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")),
+ (EPGSearchConfig.toggleGreenYellow==0?szButtonGreen:"<<"),
+ (EPGSearchConfig.toggleGreenYellow==0?trVDR("Button$Schedule"):">>"),
EPGSearchConfig.bluekeymode==1?(EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch")):tr("Button$Search"));
helpKeys = NewHelpKeys;
}
@@ -668,7 +668,7 @@ eOSState cMenuWhatsOnSearch::Shift(int iMinutes)
shiftTime += iMinutes;
cMenuMyScheduleItem *mi = (cMenuMyScheduleItem *)Get(Current());
int TempChannel = currentChannel;
- if (mi)
+ if (mi)
{
currentChannel = mi->channel->Number();
scheduleChannel = Channels.GetByNumber(currentChannel);
@@ -685,7 +685,7 @@ eOSState cMenuWhatsOnSearch::ShowSummary()
if (Count())
{
const cEvent *ei = ((cMenuMyScheduleItem *)Get(Current()))->event;
- if (ei)
+ if (ei)
{
cChannel *channel = Channels.GetByChannelID(ei->ChannelID(), true, true);
if (channel)
@@ -700,14 +700,14 @@ void cMenuWhatsOnSearch::UpdateCurrent()
// navigation in summary could have changed current item, so update it
cEventObj* cureventObj = eventObjects.GetCurrent();
if (cureventObj && cureventObj->Event())
- for (cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)First(); item; item = (cMenuMyScheduleItem *)Next(item))
+ for (cMenuMyScheduleItem *item = (cMenuMyScheduleItem *)First(); item; item = (cMenuMyScheduleItem *)Next(item))
if (item->event == cureventObj->Event())
{
cureventObj->Select(false);
SetCurrent(item);
Display();
break;
- }
+ }
}
eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
@@ -728,11 +728,11 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
case kFastRew:
- if(!HasSubMenu())
+ if(!HasSubMenu())
return Shift(-EPGSearchConfig.timeShiftValue);
break;
case kFastFwd:
- if(!HasSubMenu())
+ if(!HasSubMenu())
return Shift(EPGSearchConfig.timeShiftValue);
break;
case kRecord:
@@ -741,7 +741,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
UpdateCurrent();
state = Record();
break;
- }
+ }
if (Count())
{
if (EPGSearchConfig.redkeymode==toggleKeys)
@@ -750,7 +750,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
{
cMenuMyScheduleItem *mi = (cMenuMyScheduleItem *)Get(Current());
if (mi) {
- if (mi->event)
+ if (mi->event)
return AddSubMenu(new cMenuSearchCommands(tr("EPG Commands"),mi->event));
else
return osContinue;
@@ -760,7 +760,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
break;
case k0:
- if(!HasSubMenu())
+ if(!HasSubMenu())
{
toggleKeys = 1 - toggleKeys;
SetHelpKeys(true);
@@ -768,8 +768,8 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
state = osContinue;
break;
case k1...k9: return Commands(Key);
- case kYellow:
- if(!HasSubMenu())
+ case kYellow:
+ if(!HasSubMenu())
{
if (toggleKeys == 0 || (toggleKeys == 1 && EPGSearchConfig.toggleGreenYellow == 0))
{
@@ -798,9 +798,9 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
}
else
return Shift(EPGSearchConfig.timeShiftValue);
- }
- case kGreen:
- if(!HasSubMenu())
+ }
+ case kGreen:
+ if(!HasSubMenu())
{
if (toggleKeys == 0 || (toggleKeys == 1 && EPGSearchConfig.toggleGreenYellow == 0))
{
@@ -809,7 +809,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
else
currentShowMode = GetNextMode();
cMenuMyScheduleItem *mi = (cMenuMyScheduleItem *)Get(Current());
- if (mi)
+ if (mi)
{
currentChannel = mi->channel->Number();
scheduleChannel = Channels.GetByNumber(currentChannel);
@@ -819,7 +819,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
return Shift(-EPGSearchConfig.timeShiftValue);
}
break;
- case kBlue:
+ case kBlue:
if (HasSubMenu())
{
UpdateCurrent();
@@ -845,7 +845,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
default: break;
}
}
- if (!HasSubMenu())
+ if (!HasSubMenu())
{
if ((HadSubMenu || gl_TimerProgged) && Update())
{
@@ -865,7 +865,7 @@ eOSState cMenuWhatsOnSearch::ProcessKey(eKeys Key)
return AddSubMenu(new cMenuConflictCheck());
}
}
-
+
return state;
}
diff --git a/menu_whatson.h b/menu_whatson.h
index 1d5adf4..377bdf7 100644
--- a/menu_whatson.h
+++ b/menu_whatson.h
@@ -66,9 +66,9 @@ private:
static int CurrentChannel(void) { return currentChannel; }
static void SetCurrentChannel(int ChannelNr) { currentChannel = ChannelNr; }
static cChannel *ScheduleChannel(cChannel* forceChannel = NULL);
- virtual eOSState ProcessKey(eKeys Key);
+ virtual eOSState ProcessKey(eKeys Key);
virtual eOSState Switch(void);
- virtual eOSState Shift(int);
+ virtual eOSState Shift(int);
virtual eOSState Commands(eKeys Key);
virtual eOSState ShowSummary();
void SetHelpKeys(bool Force = false);
diff --git a/noannounce.c b/noannounce.c
index e2f13c4..d70290b 100644
--- a/noannounce.c
+++ b/noannounce.c
@@ -43,7 +43,7 @@ cNoAnnounce::cNoAnnounce(const cEvent* e, time_t NextAnnounce)
startTime = 0;
buffer = NULL;
if (e)
- {
+ {
if (e->Title()) title = e->Title();
if (e->ShortText()) shortText = e->ShortText();
channelID = e->ChannelID();
@@ -72,11 +72,11 @@ bool cNoAnnounce::Parse(const char *s)
char *pos_next;
int parameter = 1;
int valuelen;
-
+
#define MAXVALUELEN (10 * MaxFileName)
-
+
char value[MAXVALUELEN];
-
+
pos = line = strdup(s);
pos_next = pos + strlen(pos);
if (*pos_next == '\n') *pos_next = 0;
@@ -88,9 +88,9 @@ bool cNoAnnounce::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
{
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
valuelen = MAXVALUELEN;
}
strn0cpy(value, pos, valuelen);
@@ -114,10 +114,10 @@ bool cNoAnnounce::Parse(const char *s)
}
if (*pos) pos++;
} //while
-
+
title = ReplaceAll(title, "|", ":");
shortText = ReplaceAll(shortText, "|", ":");
-
+
free(line);
return (parameter >= 5) ? true : false;
}
@@ -125,7 +125,7 @@ bool cNoAnnounce::Parse(const char *s)
const char *cNoAnnounce::ToText(void) const
{
free(buffer);
- msprintf(&buffer, "%s:%s:%s:%ld:%ld",
+ msprintf(&buffer, "%s:%s:%s:%ld:%ld",
ReplaceAll(title, ":", "|").c_str(),
ReplaceAll(shortText, ":", "|").c_str(),
*channelID.ToString(),
@@ -144,7 +144,7 @@ cNoAnnounce* cNoAnnounces::InList(const cEvent* e)
{
cNoAnnounce noAnnounceTemp(e);
cNoAnnounce* noAnnounce = First();
- while (noAnnounce)
+ while (noAnnounce)
{
if (*noAnnounce == noAnnounceTemp)
{
@@ -157,7 +157,7 @@ cNoAnnounce* cNoAnnounces::InList(const cEvent* e)
return noAnnounce;
}
noAnnounce = Next(noAnnounce);
- }
+ }
return NULL;
}
@@ -165,18 +165,18 @@ void cNoAnnounces::ClearOutdated(void)
{
// remove outdated items
cNoAnnounce* noAnnounce = First();
- while (noAnnounce)
+ while (noAnnounce)
{
cNoAnnounce* noAnnounceNext = Next(noAnnounce);
if (noAnnounce->startTime < time(NULL))
Del(noAnnounce);
noAnnounce = noAnnounceNext;
- }
+ }
}
void cNoAnnounces::UpdateNextAnnounce(const cEvent* e, time_t NextAnnounce)
{
cNoAnnounce* noAnnounce = InList(e);
if (noAnnounce)
- noAnnounce->nextAnnounce = NextAnnounce;
+ noAnnounce->nextAnnounce = NextAnnounce;
}
diff --git a/noannounce.h b/noannounce.h
index c62e832..759b317 100644
--- a/noannounce.h
+++ b/noannounce.h
@@ -37,10 +37,10 @@ public:
string shortText; // Short description of this event
time_t startTime; // Start time of the timer
time_t nextAnnounce; // time of the next announce
- tChannelID channelID;
+ tChannelID channelID;
static char *buffer;
-
+
cNoAnnounce();
cNoAnnounce(const cEvent* Event, time_t NextAnnounce = 0);
~cNoAnnounce();
diff --git a/patches/MainMenuHooks-v1_0.patch b/patches/MainMenuHooks-v1_0.patch
index ee168e1..4f08c0e 100644
--- a/patches/MainMenuHooks-v1_0.patch
+++ b/patches/MainMenuHooks-v1_0.patch
@@ -2,7 +2,7 @@ This is a "patch" for the Video Disk Recorder (VDR).
* Authors:
Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
+Martin Prochnow <nordlicht at martins-kabuff dot de>
Frank Schmirler <vdrdev at schmirler dot de>
Christian Wieninger <cwieninger at gmx dot de>
diff --git a/patches/timercmd-0.1_1.6.0.diff b/patches/timercmd-0.1_1.6.0.diff
index f45f70a..bbab3f5 100644
--- a/patches/timercmd-0.1_1.6.0.diff
+++ b/patches/timercmd-0.1_1.6.0.diff
@@ -78,14 +78,14 @@ diff -Nru vdr-1.6.0/menu.c vdr-1.6.0-patched/menu.c
+ cRecording *rc_dummy = new cRecording(ti, pEvent);
+ Recordings.Load();
+ cRecording *rc = Recordings.GetByName(rc_dummy->FileName());
-+
++
+ delete rc_dummy;
+ if(rc)
+ iRecNumber=rc->Index() + 1;
+ }
+//Parameter format TimerNumber 'ChannelId' Start Stop 'Titel' 'Subtitel' 'file' RecNumer
+// 1 2 3 4 5 6 7 8
-+ asprintf(&parameter, "%d '%s' %d %d '%s' '%s' '%s' %d", ti->Index(),
++ asprintf(&parameter, "%d '%s' %d %d '%s' '%s' '%s' %d", ti->Index(),
+ *ti->Channel()->GetChannelID().ToString(),
+ (int)ti->StartTime(),
+ (int)ti->StopTime(),
diff --git a/patches/timercmd-0.1_1.7.17.diff b/patches/timercmd-0.1_1.7.17.diff
index 69407b7..609cefb 100644
--- a/patches/timercmd-0.1_1.7.17.diff
+++ b/patches/timercmd-0.1_1.7.17.diff
@@ -56,14 +56,14 @@ diff -Nru vdr-1.7.17/menu.c vdr-1.7.17-patched/menu.c
+ cRecording *rc_dummy = new cRecording(ti, pEvent);
+ Recordings.Load();
+ cRecording *rc = Recordings.GetByName(rc_dummy->FileName());
-+
++
+ delete rc_dummy;
+ if(rc)
+ iRecNumber=rc->Index() + 1;
+ }
+//Parameter format TimerNumber 'ChannelId' Start Stop 'Titel' 'Subtitel' 'file' RecNumer
+// 1 2 3 4 5 6 7 8
-+ asprintf(&parameter, "%d '%s' %d %d '%s' '%s' '%s' %d", ti->Index(),
++ asprintf(&parameter, "%d '%s' %d %d '%s' '%s' '%s' %d", ti->Index(),
+ *ti->Channel()->GetChannelID().ToString(),
+ (int)ti->StartTime(),
+ (int)ti->StopTime(),
diff --git a/pending_notifications.c b/pending_notifications.c
index d136528..bd96953 100644
--- a/pending_notifications.c
+++ b/pending_notifications.c
@@ -69,16 +69,16 @@ bool cPendingNotification::Read(FILE *f)
{
p->type = Type;
p->eventID = EventID;
- p->timerMod = TimerMod;
+ p->timerMod = TimerMod;
p->searchID = SearchID;
p->start = Start;
PendingNotifications.Add(p);
}
}
- }
+ }
break;
- case 'C':
+ case 'C':
{
s = skipspace(s + 1);
char *pC = strchr(s, ' ');
@@ -120,13 +120,13 @@ const char *cPendingNotification::ToText(void) const
if (buffer)
free(buffer);
buffer = NULL;
-
+
cChannel *channel = Channels.GetByChannelID(channelID, true, true);
if (!channel)
LogFile.Log(3,"invalid channel in pending notifications!");
- msprintf(&buffer, "N %d %u %d %d %ld\nC %s\n%s%s%sn",
- type, eventID, timerMod, searchID, start,
+ msprintf(&buffer, "N %d %u %d %d %ld\nC %s\n%s%s%sn",
+ type, eventID, timerMod, searchID, start,
channel?CHANNELSTRING(channel):"",
tmpFormatted?"F ":"",tmpFormatted?tmpFormatted:"", tmpFormatted?"\n":"");
diff --git a/pending_notifications.h b/pending_notifications.h
index f32669f..a6c291b 100644
--- a/pending_notifications.h
+++ b/pending_notifications.h
@@ -37,19 +37,19 @@ public:
time_t start;
uint timerMod;
int searchID;
- string formatted;
+ string formatted;
static char *buffer;
-
+
cPendingNotification()
: type(-1), start(-1), timerMod(-1), searchID(-1) {}
- cPendingNotification(int Type, tEventID EventID, tChannelID ChannelID, time_t Start, uint TimerMod = -1,
+ cPendingNotification(int Type, tEventID EventID, tChannelID ChannelID, time_t Start, uint TimerMod = -1,
int SearchID = -1, string Formatted = "")
- : type(Type), eventID(EventID), channelID(ChannelID), start(Start), timerMod(TimerMod),
+ : type(Type), eventID(EventID), channelID(ChannelID), start(Start), timerMod(TimerMod),
searchID(SearchID), formatted(Formatted) {}
~cPendingNotification();
-
+
static bool Read(FILE *f);
bool Parse(const char *s);
const char *ToText(void) const;
diff --git a/po/ca_ES.po b/po/ca_ES.po
index 30366ee..7a57798 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Jordi Vilà <jvila@tinet.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
-"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 507a081..06fc054 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
-"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: cs\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/da_DK.po b/po/da_DK.po
index 090ef7c..3a810a5 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
-"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/de_DE.po b/po/de_DE.po
index c1abf0f..ec0d7cf 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
-"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
msgid "Channel groups"
msgstr "Kanalgruppen"
@@ -1285,4 +1285,3 @@ msgstr "in %02ldh"
#, c-format
msgid "in %02ldm"
msgstr "in %02ldm"
-
diff --git a/po/el_GR.po b/po/el_GR.po
index 79b4331..b24eb3c 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
-"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: el\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index cf1c455..222fc37 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-11-18 20:09+0200\n"
"Last-Translator: bittor from open7x0.org <bittor7x0 _at_ gmail.com>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
-"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
msgid "Channel groups"
msgstr "Grupos de canales"
diff --git a/po/et_EE.po b/po/et_EE.po
index 28f7357..275bc36 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
-"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 7a89db8..8b762af 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: EPGSearch 0.9.25\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2011-01-04 21:07+0200\n"
"Last-Translator: Ville Skyttä <ville.skytta@iki.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
-"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
"X-Generator: Lokalize 1.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 9548fa8..989e457 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2008-04-30 08:36+0200\n"
"Last-Translator: Patrice Staudt <patrice.staudt@laposte.net>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
-"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
msgid "Channel groups"
msgstr "Groupe de chaînes"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 9688bee..d3b28db 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Drazen Dupor <drazen.dupor@dupor.com>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
-"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/hu_HU.po b/po/hu_HU.po
index bb7911c..38634f4 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
-"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/it_IT.po b/po/it_IT.po
index f831fdd..b36afe6 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2011-07-17 17:46+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
-"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
"X-Poedit-Language: Italian\n"
"X-Poedit-Country: ITALY\n"
"X-Poedit-SourceCharset: utf-8\n"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index af4b1d7..5c7f2c7 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.10\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
-"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
msgid "Channel groups"
msgstr "kanalo grupÄ—s"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index ab12b16..8039661 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
-"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
msgid "Channel groups"
msgstr "Kanaal groepen"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index b82909b..abdb08d 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
-"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: nn\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index b615a05..adb465d 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
-"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 016c6e8..d864be3 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Paulo Lopes <pmml@netvita.pt>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
-"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 31f283e..d30c66f 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
-"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 8c1aee0..0a8a6c9 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
-"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/sk_SK.po b/po/sk_SK.po
index ddd8fe5..fa2874d 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: epgsearch\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2009-11-02 09:40+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <hrala.milan@gmail.com>\n"
-"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
msgid "Channel groups"
msgstr "Skupiny kanálov"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index c2ad234..289bdb6 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
-"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: sl\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/sv_SE.po b/po/sv_SE.po
index bc8a7cc..94ef967 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
-"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
msgid "Channel groups"
msgstr ""
diff --git a/po/tr_TR.po b/po/tr_TR.po
index a210912..ffaf6c9 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <cwieninger@gmx.de>\n"
-"POT-Creation-Date: 2011-09-14 19:13+0300\n"
+"POT-Creation-Date: 2011-09-19 19:17+0200\n"
"PO-Revision-Date: 2007-08-14 20:21+0200\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
-"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
msgid "Channel groups"
msgstr ""
diff --git a/rcfile.c b/rcfile.c
index 2567ac8..3864ef2 100644
--- a/rcfile.c
+++ b/rcfile.c
@@ -44,12 +44,12 @@ cRCLine::~cRCLine()
bool cRCLine::Parse(char *s)
{
char *p = strchr(s, '=');
- if (p)
+ if (p)
{
*p = 0;
char *Name = compactspace(s);
char *Value = compactspace(p + 1);
- if (*Name)
+ if (*Name)
{
name = strdup(Name);
value = strdup(Value);
@@ -71,15 +71,15 @@ cRCFile::cRCFile()
bool cRCFile::Load(const char *FileName)
{
- if (cConfig<cRCLine>::Load(FileName, true))
+ if (cConfig<cRCLine>::Load(FileName, true))
{
bool result = true;
- for (cRCLine *l = First(); l; l = Next(l))
+ for (cRCLine *l = First(); l; l = Next(l))
{
bool error = false;
if (!Parse(l->Name(), l->Value()))
error = true;
- if (error)
+ if (error)
{
LogFile.eSysLog("ERROR: unknown parameter: %s = %s", l->Name(), l->Value());
result = false;
diff --git a/rcfile.h b/rcfile.h
index ec15b1d..884eea2 100644
--- a/rcfile.h
+++ b/rcfile.h
@@ -42,7 +42,7 @@ public:
};
-class cRCFile : public cConfig<cRCLine>
+class cRCFile : public cConfig<cRCLine>
{
bool Parse(const char *Name, const char *Value);
public:
diff --git a/recdone.c b/recdone.c
index c4345d3..19e3148 100644
--- a/recdone.c
+++ b/recdone.c
@@ -145,9 +145,9 @@ bool cRecDone::Read(FILE *f)
RecsDone.Add(recDone);
}
}
- }
+ }
break;
- case 'C':
+ case 'C':
{
s = skipspace(s + 1);
char *p = strchr(s, ' ');
@@ -193,13 +193,13 @@ const char *cRecDone::ToText(void)
if (buffer)
free(buffer);
buffer = NULL;
-
+
cChannel *channel = Channels.GetByChannelID(channelID, true, true);
if (!channel)
LogFile.Log(3,"invalid channel in recs done!");
- msprintf(&buffer, "R %ld %d %d\nC %s\n%s%s%s%s%s%s%s%s%s%s%s%sr",
- startTime, duration, searchID,
+ msprintf(&buffer, "R %ld %d %d\nC %s\n%s%s%s%s%s%s%s%s%s%s%s%sr",
+ startTime, duration, searchID,
channel?CHANNELSTRING(channel):"",
title?"T ":"",title?title:"", title?"\n":"",
shortText?"S ":"",shortText?shortText:"", shortText?"\n":"",
@@ -224,7 +224,7 @@ int cRecDone::ChannelNr()
if (!channel)
return -1;
else
- return channel->Number();
+ return channel->Number();
}
// -- cRecsDone -----------------------------------------------------------------
@@ -238,7 +238,7 @@ bool CatValuesMatch(unsigned long catvaluesAvoidRepeat, const string& rDescr, co
bool bCatMatch = ((rDescr != "" && eDescr != "") || (rDescr == "" && eDescr == ""));
cSearchExtCat *SearchExtCat = SearchExtCats.First();
int index = 0;
- while (catvaluesAvoidRepeat > 0 && SearchExtCat && bCatMatch)
+ while (catvaluesAvoidRepeat > 0 && SearchExtCat && bCatMatch)
{
if (catvaluesAvoidRepeat & (1<<index))
{
@@ -260,7 +260,7 @@ bool CatValuesMatch(unsigned long catvaluesAvoidRepeat, const string& rDescr, co
bool MatchesInExpression(const string& expression, const cRecDone* recDone, const cEvent* event)
{
cVarExpr varExpr(expression);
-
+
cEvent recDoneEvent(0);
recDoneEvent.SetTitle(recDone->title);
recDoneEvent.SetShortText(recDone->shortText);
@@ -279,7 +279,7 @@ int cRecsDone::GetCountRecordings(const cEvent* event, bool compareTitle, int co
*first = NULL;
if (!event)
return 0;
-
+
cMutexLock RecsDoneLock(this);
int count = 0;
@@ -302,7 +302,7 @@ int cRecsDone::GetCountRecordings(const cEvent* event, bool compareTitle, int co
if ((compareSummary || catvaluesAvoidRepeat != 0) && event->Description())
{
eDescr = event->Description();
- char* rawDescr = GetRawDescription(event->Description());
+ char* rawDescr = GetRawDescription(event->Description());
eRawDescr = rawDescr?rawDescr:"";
if (rawDescr) free(rawDescr);
}
@@ -314,7 +314,7 @@ int cRecsDone::GetCountRecordings(const cEvent* event, bool compareTitle, int co
cRecDone* firstrecDone = NULL;
cRecDone* recDone = First();
- while (recDone)
+ while (recDone)
{
string rTitle = "";
if (compareTitle)
@@ -329,14 +329,14 @@ int cRecsDone::GetCountRecordings(const cEvent* event, bool compareTitle, int co
string s = recDone->shortText?recDone->shortText:"";
rSubtitle = GetAlNum(s);
std::transform(rSubtitle.begin(), rSubtitle.end(), rSubtitle.begin(), tolower);
- }
+ }
string rDescr = "";
string rRawDescr = "";
if ((compareSummary || catvaluesAvoidRepeat != 0) && recDone->description)
{
rDescr = recDone->description;
char* rawDescr = recDone->rawdescription?recDone->rawdescription:GetRawDescription(recDone->description);
- recDone->rawdescription = rawDescr;
+ recDone->rawdescription = rawDescr;
rRawDescr = rawDescr?rawDescr:"";
}
@@ -371,7 +371,7 @@ void cRecsDone::RemoveSearchID(int ID)
if (Count() == 0)
Load(AddDirectory(CONFIGDIR, "epgsearchdone.data"));
cRecDone* recDone = First();
- while (recDone)
+ while (recDone)
{
if (recDone->searchID == ID)
{
@@ -440,15 +440,15 @@ int cRecsDone::GetTotalCountRecordings(cSearchExt* search, cRecDone** first)
if (!search) return 0;
if (first)
*first = NULL;
-
+
cMutexLock RecsDoneLock(this);
int count = 0;
cRecDone* firstrecDone = NULL;
cRecDone* recDone = First();
- while (recDone)
+ while (recDone)
{
- if (recDone->searchID == search->ID)
+ if (recDone->searchID == search->ID)
{
count++;
if (!firstrecDone) firstrecDone = recDone;
diff --git a/recdone.h b/recdone.h
index ea00ccb..0e33fdf 100644
--- a/recdone.h
+++ b/recdone.h
@@ -39,9 +39,9 @@ public:
char *description; // Description of this event
char *aux; // Aux info
time_t startTime; // Start time of the timer
- int duration;
+ int duration;
int searchID; // ID of the search, that triggered this recording
- tChannelID channelID;
+ tChannelID channelID;
char* rawdescription;
static char *buffer;
diff --git a/recstatus.c b/recstatus.c
index 1c43f9e..6e2ae6b 100644
--- a/recstatus.c
+++ b/recstatus.c
@@ -40,21 +40,21 @@ cRecStatusMonitor::cRecStatusMonitor()
{
}
-void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const char* Filename, bool On)
+void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const char* Filename, bool On)
{
time_t now = time(NULL);
// insert new timers currently recording in TimersRecording
if (On && Name)
{
if (EPGSearchConfig.checkTimerConflOnRecording)
- cConflictCheckThread::Init((cPluginEpgsearch*)cPluginManager::GetPlugin("epgsearch"), true);
+ cConflictCheckThread::Init((cPluginEpgsearch*)cPluginManager::GetPlugin("epgsearch"), true);
- for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
+ for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
if (ti->Recording())
{
// check if this is a new entry
cRecDoneTimerObj *tiRFound = NULL;
- for (cRecDoneTimerObj *tiR = TimersRecording.First(); tiR; tiR = TimersRecording.Next(tiR))
+ for (cRecDoneTimerObj *tiR = TimersRecording.First(); tiR; tiR = TimersRecording.Next(tiR))
if (tiR->timer == ti)
{
tiRFound = tiR;
@@ -68,14 +68,14 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
LogFile.Log(1,"accepting resume of '%s' on device %d", Name, Device->CardIndex());
tiRFound->lastBreak = 0;
}
- continue;
+ continue;
}
-
+
cRecDoneTimerObj* timerObj = new cRecDoneTimerObj(ti, Device->DeviceNumber());
TimersRecording.Add(timerObj);
cSearchExt* search = TriggeredFromSearchTimer(ti);
- if (!search || (search->avoidRepeats == 0 && search->delMode == 0)) // ignore if not avoid repeats and no auto-delete
+ if (!search || (search->avoidRepeats == 0 && search->delMode == 0)) // ignore if not avoid repeats and no auto-delete
continue;
bool vpsUsed = ti->HasFlags(tfVps) && ti->Event() && ti->Event()->Vps();
@@ -102,7 +102,7 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
LogFile.Log(1,"recording started too late! will be ignored");
}
}
-
+
if (!On)
{
cMutexLock RecsDoneLock(&RecsDone);
@@ -113,8 +113,8 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
{
// check if timer still exists
bool found = false;
- for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
- if (ti == tiR->timer)
+ for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
+ if (ti == tiR->timer)
{
found = true;
break;
@@ -126,7 +126,7 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
{
cSearchExt* search = SearchExts.GetSearchFromID(tiR->recDone->searchID);
if (!search) return;
-
+
// check if recording has ended before timer end
bool complete = true;
@@ -153,7 +153,7 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
if (complete)
{
RecsDone.Add(tiR->recDone);
- LogFile.Log(1,"added rec done for '%s~%s';%s", tiR->recDone->title?tiR->recDone->title:"unknown title",
+ LogFile.Log(1,"added rec done for '%s~%s';%s", tiR->recDone->title?tiR->recDone->title:"unknown title",
tiR->recDone->shortText?tiR->recDone->shortText:"unknown subtitle",
search->search);
RecsDone.Save();
@@ -165,13 +165,13 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
// trigger a search timer update (skip running events)
search->skipRunningEvents = true;
- updateForced = 1;
+ updateForced = 1;
}
else if (tiR->lastBreak == 0) // store first break
tiR->lastBreak = now;
}
- if (tiR->lastBreak == 0 || (now - tiR->lastBreak) > ALLOWED_BREAK_INSECS)
- { // remove finished recordings or those with an unallowed break
+ if (tiR->lastBreak == 0 || (now - tiR->lastBreak) > ALLOWED_BREAK_INSECS)
+ { // remove finished recordings or those with an unallowed break
if (tiR->recDone) delete tiR->recDone; // clean up
cRecDoneTimerObj *tiRNext = TimersRecording.Next(tiR);
TimersRecording.Del(tiR);
@@ -196,7 +196,7 @@ void cRecStatusMonitor::Recording(const cDevice *Device, const char *Name, const
int cRecStatusMonitor::TimerRecDevice(cTimer* timer)
{
if (!timer) return 0;
- for (cRecDoneTimerObj *tiR = TimersRecording.First(); tiR; tiR = TimersRecording.Next(tiR))
+ for (cRecDoneTimerObj *tiR = TimersRecording.First(); tiR; tiR = TimersRecording.Next(tiR))
if (tiR->timer == timer && timer->Recording()) return tiR->deviceNr+1;
return 0;
}
@@ -218,18 +218,18 @@ int cRecStatusMonitor::RecLengthInSecs(cRecording *pRecording)
{
struct stat buf;
cString fullname = cString::sprintf("%s%s", pRecording->FileName(), "/index.vdr");
- if (stat(fullname, &buf) == 0)
- {
+ if (stat(fullname, &buf) == 0)
+ {
struct tIndex { int offset; uchar type; uchar number; short reserved; };
int delta = buf.st_size % sizeof(tIndex);
- if (delta)
+ if (delta)
{
delta = sizeof(tIndex) - delta;
esyslog("ERROR: invalid file size (%ld) in '%s'", buf.st_size, *fullname);
}
return (buf.st_size + delta) / sizeof(tIndex) / SecondsToFrames(1);
}
- else
+ else
return -1;
}
diff --git a/recstatus.h b/recstatus.h
index 6d2f3b2..b17ede4 100644
--- a/recstatus.h
+++ b/recstatus.h
@@ -36,7 +36,7 @@ public:
~cRecDoneTimerObj() { timer = NULL; recDone = NULL; } // do not delete anything!
};
-class cRecStatusMonitor : public cStatus
+class cRecStatusMonitor : public cStatus
{
cList<cRecDoneTimerObj> TimersRecording;
protected:
diff --git a/scripts/autotimer2searchtimer.pl b/scripts/autotimer2searchtimer.pl
index 6cb24b2..c068b39 100755
--- a/scripts/autotimer2searchtimer.pl
+++ b/scripts/autotimer2searchtimer.pl
@@ -157,9 +157,9 @@ sub CONF_Collect {
$stitle = $at->{section} & 1 ? 1 : 0;
$ssubtitle = $at->{section} & 2 ? 1 : 0;
$sdescription = $at->{section} & 4 ? 1 : 0;
-
+
$id += 1 if ($EPGSEARCH_FILENAME);
-
+
$data = sprintf $conf_str,
$id,
$pattern,
diff --git a/scripts/convert_epgsearchdone_data.pl b/scripts/convert_epgsearchdone_data.pl
index 0a04c68..719b456 100755
--- a/scripts/convert_epgsearchdone_data.pl
+++ b/scripts/convert_epgsearchdone_data.pl
@@ -84,7 +84,7 @@ while(<DATEI>) {
print NEU sprintf("%s\n",$aux);
}
print NEU sprintf("@ <epgsearch>%s</epgsearch>\n",$epgsearch) if ( $neuformat == 0 && $epgsearch ne "" );
-
+
}
close(DATEI);
diff --git a/scripts/convert_info_vdr.pl b/scripts/convert_info_vdr.pl
index 87a0524..7f3611a 100755
--- a/scripts/convert_info_vdr.pl
+++ b/scripts/convert_info_vdr.pl
@@ -43,7 +43,7 @@ printf ("Konvertiere %s\n",$DateiAlt);
while(<DATEI>) {
$Zeile = $_;
-
+
print NEU $Zeile if $Zeile =~ /^[CETSX] .+/;
$epgsearch = $1 if $Zeile =~ /^D .*(Kanal.+Suchtimer.+S-ID.+)$/;
@@ -58,7 +58,7 @@ while(<DATEI>) {
$neuformat=1;
$aux = $1;
}
-
+
}
if ( $neuformat == 1 && $aux !~ /epgsearch/ && $epgsearch ne "" ) {
diff --git a/scripts/epgsearchcmds-french.conf b/scripts/epgsearchcmds-french.conf
index cc87a9f..7ed836f 100644
--- a/scripts/epgsearchcmds-french.conf
+++ b/scripts/epgsearchcmds-french.conf
@@ -24,7 +24,7 @@
# ENG epg2taste : /usr/local/bin/epg2taste.sh
# ENG epg2autotimer : /usr/local/bin/epg2autotimer.sh
#
-# En Francais :
+# En Francais :
Rappel de l'émission? : /usr/lib/vdr/epgsearch/rememberevent.sh 0
Rappel de l'émission? (avec changement de chaînes) : /usr/lib/vdr/epgsearch/rememberevent.sh 1
Programme interdit : /usr/lib/vdr/epgsearch/epg2taste.sh
diff --git a/scripts/mtdone2epgsearchdone.sh b/scripts/mtdone2epgsearchdone.sh
index 897dcd3..52d9062 100755
--- a/scripts/mtdone2epgsearchdone.sh
+++ b/scripts/mtdone2epgsearchdone.sh
@@ -49,7 +49,7 @@ function AddRecToDone()
Title=$(echo $Rec|cut -f1 -d'|')
Subtitle=$(echo $Rec|cut -f2 -d'|')
[ "$Subtitle" = "NoSub" ] && Subtitle=""
-
+
if [ "$ASK_SID" = "yes" ]; then
if [ "$Title" != "$PrevTitle" ]; then
@@ -112,6 +112,6 @@ if [ "$TEST" = "yes" ]; then
printf "\n\nTEST run !!!!\nNow take a look at the File $EPGSEARCHDONE_FILE to see if everything is OK.\n\n"
else
# Tell epgsearch that done-file was changed
- echo "$SVDRPSEND PLUG epgsearch UPDD >/dev/null 2>&1" | at now >/dev/null 2>&1
+ echo "$SVDRPSEND PLUG epgsearch UPDD >/dev/null 2>&1" | at now >/dev/null 2>&1
fi
diff --git a/scripts/recordingdone.sh b/scripts/recordingdone.sh
index ca71aa9..a176841 100755
--- a/scripts/recordingdone.sh
+++ b/scripts/recordingdone.sh
@@ -40,7 +40,7 @@
TEST=yes
# should we add recordings that have a S-ID in info.vdr ?
-# That is recordings already recorded with epgsearch-autotimer
+# That is recordings already recorded with epgsearch-autotimer
# and they are probably already in the done file!
# yes = add recodrings with S-ID
# no = don't add recordings with S-ID
diff --git a/scripts/sendEmail.pl b/scripts/sendEmail.pl
index 2f2d143..642ac0f 100755
--- a/scripts/sendEmail.pl
+++ b/scripts/sendEmail.pl
@@ -2,7 +2,7 @@
##############################################################################
## sendEmail
## Written by: Brandon Zehm <caspian@dotconf.net>
-##
+##
## License:
## sendEmail (hereafter referred to as "program") is free software;
## you can redistribute it and/or modify it under the terms of the GNU General
@@ -11,7 +11,7 @@
## Note that when redistributing modified versions of this source code, you
## must ensure that this disclaimer and the above coder's names are included
## VERBATIM in the modified code.
-##
+##
## Disclaimer:
## This program is provided with no warranty of any kind, either expressed or
## implied. It is the responsibility of the user (you) to fully research and
@@ -21,9 +21,9 @@
## or anything that happens because of your use (or misuse) of this program,
## including but not limited to anything you, your lawyers, or anyone else
## can dream up. And now, a relevant quote directly from the GPL:
-##
+##
## NO WARRANTY
-##
+##
## 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
## FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
## OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
@@ -33,7 +33,7 @@
## TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
## PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
## REPAIR OR CORRECTION.
-##
+##
##############################################################################
use strict;
use IO::Socket;
@@ -54,25 +54,25 @@ my %conf = (
"hostname" => 'localhost', ## Used in printmsg() for all output, and in SMTP EHLO.
"debug" => 0, ## Default debug level
"error" => '', ## Error messages will often be stored here
-
+
## Logging
"debug" => 0,
"stdout" => 1,
"logging" => 0, ## If this is true the printmsg function prints to the log file
"logFile" => '', ## If this is specified (form the command line via -l) this file will be used for logging.
-
+
## Network
"server" => 'localhost', ## Default SMTP server
"port" => 25, ## Default port
"alarm" => '', ## Default timeout for connects and reads, this gets set from $opt{'timeout'}
-
+
## Email
"delimiter" => "----MIME delimiter for sendEmail-" ## MIME Delimiter
. rand(1000000), ## Add some randomness to the delimiter
"Message-ID" => rand(1000000) . "-sendEmail", ## Message-ID for email header
"authUsername" => '', ## Username used in SMTP Auth
"authPassword" => '', ## Password used in SMTP Auth
-
+
);
@@ -80,16 +80,16 @@ my %conf = (
my %opt = (
## Addressing
"reply-to" => '', ## Reply-To field
-
+
## Message
"message-file" => '', ## File to read message body from
"message-header" => '', ## Additional email header line
"message-format" => 'normal', ## If "raw" is specified the message is sent unmodified
"message-charset" => 'iso-8859-1', ## Message character-set
-
+
## Network
"timeout" => 60, ## Default timeout for connects and reads, this is copied to $conf{'alarm'} later.
-
+
);
## More variables used later in the program
@@ -173,7 +173,7 @@ if (!($message)) {
}
close(MFILE);
}
-
+
## Read message body from STDIN
else {
alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32
@@ -213,8 +213,8 @@ my $date = sprintf("%s, %s %s %d %.2d:%.2d:%.2d %s",$day, $mday, $mon, $year, $h
## Connect to the SMTP server ##
##################################
printmsg("DEBUG => Connecting to $conf{'server'}:$conf{'port'}", 1);
-$SIG{'ALRM'} = sub {
- printmsg("ERROR => Timeout while connecting to $conf{'server'}:$conf{'port'} There was no response after $conf{'alarm'} seconds.", 0);
+$SIG{'ALRM'} = sub {
+ printmsg("ERROR => Timeout while connecting to $conf{'server'}:$conf{'port'} There was no response after $conf{'alarm'} seconds.", 0);
printmsg("HINT => Try specifying a different mail relay with the -s option.", 1);
quit("", 1);
};
@@ -247,7 +247,7 @@ if ( (!$SERVER) or (!$SERVER->opened()) ) {
if (SMTPchat()) { quit($conf{'error'}, 1); }
## EHLO
-if (SMTPchat('EHLO ' . $conf{'hostname'})) {
+if (SMTPchat('EHLO ' . $conf{'hostname'})) {
printmsg($conf{'error'}, 0);
printmsg("NOTICE => EHLO command failed, attempting HELO instead");
if (SMTPchat('HELO ' . $conf{'hostname'})) { quit($conf{'error'}, 1); }
@@ -301,36 +301,36 @@ if ($opt{'message-format'} =~ /^raw$/i) {
## If the message-format isn't raw, then build and send the message,
else {
-
+
## Message-ID: <MessageID>
print $SERVER 'Message-ID: <' . $conf{'Message-ID'} . '@' . $conf{'hostname'} . '>' . $CRLF;
-
+
## From: "Name" <address@domain.com> (the pointless test below is just to keep scoping correct)
if ($from) {
my ($name, $address) = returnAddressParts($from);
print $SERVER 'From: "' . $name . '" <' . $address . '>' . $CRLF;
}
-
- ## Reply-To:
+
+ ## Reply-To:
if ($opt{'reply-to'}) {
my ($name, $address) = returnAddressParts($opt{'reply-to'});
print $SERVER 'Reply-To: "' . $name . '" <' . $address . '>' . $CRLF;
}
-
+
## To: "Name" <address@domain.com>
if (scalar(@to) > 0) {
print $SERVER "To:";
for (my $a = 0; $a < scalar(@to); $a++) {
my $msg = "";
-
+
my ($name, $address) = returnAddressParts($to[$a]);
$msg = " \"$name\" <$address>";
-
+
## If we're not on the last address add a comma to the end of the line.
if (($a + 1) != scalar(@to)) {
$msg .= ",";
}
-
+
print $SERVER $msg . $CRLF;
}
}
@@ -338,41 +338,41 @@ else {
else {
print $SERVER "To: \"Undisclosed Recipients\" <>$CRLF";
}
-
+
if (scalar(@cc) > 0) {
print $SERVER "Cc:";
for (my $a = 0; $a < scalar(@cc); $a++) {
my $msg = "";
-
+
my ($name, $address) = returnAddressParts($cc[$a]);
$msg = " \"$name\" <$address>";
-
+
## If we're not on the last address add a comma to the end of the line.
if (($a + 1) != scalar(@cc)) {
$msg .= ",";
}
-
+
print $SERVER $msg . $CRLF;
}
}
-
+
print $SERVER 'Subject: ' . $subject . $CRLF; ## Subject
print $SERVER 'Date: ' . $date . $CRLF; ## Date
print $SERVER 'X-Mailer: sendEmail-'.$conf{'version'}.$CRLF; ## X-Mailer
-
+
## Send an additional message header line if specified
if ($opt{'message-header'}) {
print $SERVER $opt{'message-header'} . $CRLF;
}
-
+
## Encode all messages with MIME.
print $SERVER "MIME-Version: 1.0$CRLF";
print $SERVER "Content-Type: multipart/mixed; boundary=\"$conf{'delimiter'}\"$CRLF";
print $SERVER "$CRLF";
print $SERVER "This is a multi-part message in MIME format. To properly display this message you need a MIME-Version 1.0 compliant Email program.$CRLF";
print $SERVER "$CRLF";
-
-
+
+
## Send message body
print $SERVER "--$conf{'delimiter'}$CRLF";
## If the message contains HTML change the Content-Type
@@ -388,14 +388,14 @@ else {
print $SERVER "Content-Transfer-Encoding: 7bit$CRLF";
print $SERVER $CRLF;
print $SERVER $message;
-
-
-
+
+
+
## Send Attachemnts
if ($attachments[0]) {
## Disable the alarm so people on modems can send big attachments
alarm(0) if ($^O !~ /win/i); ## alarm() doesn't work in win32
-
+
## Send the attachments
foreach my $filename (@attachments) {
## This is check 2, we already checked this above, but just in case...
@@ -411,10 +411,10 @@ else {
}
}
}
-
-
+
+
## End the mime encoded message
- print $SERVER "$CRLF--$conf{'delimiter'}--$CRLF";
+ print $SERVER "$CRLF--$conf{'delimiter'}--$CRLF";
}
@@ -443,10 +443,10 @@ close $SERVER;
if ($conf{'debug'} or $conf{'logging'}) {
printmsg("Generating a detailed exit message", 3);
-
+
## Put the message together
my $output = "Email was sent successfully! From: <" . (returnAddressParts($from))[1] . "> ";
-
+
if (scalar(@to) > 0) {
$output .= "To: ";
for ($a = 0; $a < scalar(@to); $a++) {
@@ -466,19 +466,19 @@ if ($conf{'debug'} or $conf{'logging'}) {
}
}
$output .= "Subject: [$subject] " if ($subject);
- if (scalar(@attachments_names) > 0) {
+ if (scalar(@attachments_names) > 0) {
$output .= "Attachment(s): ";
foreach(@attachments_names) {
$output .= "[$_] ";
}
}
$output .= "Server: [$conf{'server'}:$conf{'port'}]";
-
-
+
+
######################
# Exit the program #
######################
-
+
## Print / Log the detailed message
quit($output, 0);
}
@@ -526,35 +526,35 @@ else {
###############################################################################################
## Function: initialize ()
-##
+##
## Does all the script startup jibberish.
-##
+##
###############################################################################################
sub initialize {
- ## Set STDOUT to flush immediatly after each print
+ ## Set STDOUT to flush immediatly after each print
$| = 1;
-
+
## Intercept signals
$SIG{'QUIT'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
$SIG{'INT'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
$SIG{'KILL'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
$SIG{'TERM'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
-
+
## ALARM and HUP signals are not supported in Win32
unless ($^O =~ /win/i) {
$SIG{'HUP'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
$SIG{'ALRM'} = sub { quit("EXITING: Received SIG$_[0]", 1); };
}
-
+
## Fixup $conf{'programName'}
$conf{'programName'} =~ s/(.)*[\/,\\]//;
$0 = $conf{'programName'} . " " . join(" ", @ARGV);
-
+
## Fixup $conf{'hostname'}
if ($conf{'hostname'} eq 'localhost') {
$conf{'hostname'} = "";
-
+
if ($ENV{'HOSTNAME'}) {
$conf{'hostname'} = lc($ENV{'HOSTNAME'});
}
@@ -566,15 +566,15 @@ sub initialize {
use Sys::Hostname;
$conf{'hostname'} = lc(hostname());
}
-
+
## Assign a name of "localhost" if it can't find anything else.
if (!$conf{'hostname'}) {
$conf{'hostname'} = 'localhost';
}
-
+
$conf{'hostname'} =~ s/\..*$//; ## Remove domain name if it's present
}
-
+
return(1);
}
@@ -594,32 +594,32 @@ sub initialize {
###############################################################################################
## Function: processCommandLine ()
-##
+##
## Processes command line storing important data in global vars (usually %conf)
-##
+##
###############################################################################################
sub processCommandLine {
-
-
+
+
############################
## Process command line ##
############################
-
+
my @ARGS = @ARGV; ## This is so later we can re-parse the command line args later if we need to
my $numargv = @ARGS;
help() unless ($numargv);
my $counter = 0;
-
+
for ($counter = 0; $counter < $numargv; $counter++) {
-
+
if ($ARGS[$counter] =~ /^-h$/i) { ## Help ##
help();
}
-
+
elsif ($ARGS[$counter] eq "") { ## Ignore null arguments
## Do nothing
}
-
+
elsif ($ARGS[$counter] =~ /^--help/) { ## Topical Help ##
$counter++;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) {
@@ -629,12 +629,12 @@ sub processCommandLine {
help();
}
}
-
+
elsif ($ARGS[$counter] =~ /^-o$/i) { ## Options specified with -o ##
$counter++;
## Loop through each option passed after the -o
while ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) {
-
+
if ($ARGS[$counter] !~ /(\S+)=(\S.*)/) {
printmsg("WARNING => Name/Value pair [$ARGS[$counter]] is not properly formatted", 0);
printmsg("WARNING => Arguments proceeding -o should be in the form of \"name=value\"", 0);
@@ -652,13 +652,13 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-f$/) { ## From ##
$counter++;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { $from = $ARGS[$counter]; }
else { printmsg("WARNING => The argument after -f was not an email address!", 0); $counter--; }
}
-
+
elsif ($ARGS[$counter] =~ /^-t$/) { ## To ##
$counter++;
while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) {
@@ -671,7 +671,7 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-cc$/) { ## Cc ##
$counter++;
while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) {
@@ -684,7 +684,7 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-bcc$/) { ## Bcc ##
$counter++;
while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) {
@@ -697,7 +697,7 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-m$/) { ## Message ##
$counter++;
$message = "";
@@ -706,12 +706,12 @@ sub processCommandLine {
$message .= $ARGS[$counter];
$counter++;
} $counter--;
-
+
## Replace '\n' with $CRLF.
## This allows newlines with messages sent on the command line
$message =~ s/\\n/$CRLF/g;
}
-
+
elsif ($ARGS[$counter] =~ /^-u$/) { ## Subject ##
$counter++;
$subject = "";
@@ -721,7 +721,7 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-s$/) { ## Server ##
$counter++;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) {
@@ -732,7 +732,7 @@ sub processCommandLine {
}
else { printmsg("WARNING - The argument after -s was not the server!", 0); $counter--; }
}
-
+
elsif ($ARGS[$counter] =~ /^-a$/) { ## Attachments ##
$counter++;
while ($ARGS[$counter] && ($ARGS[$counter] !~ /^-/)) {
@@ -740,7 +740,7 @@ sub processCommandLine {
$counter++;
} $counter--;
}
-
+
elsif ($ARGS[$counter] =~ /^-xu$/) { ## AuthSMTP Username ##
$counter++;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) {
@@ -750,12 +750,12 @@ sub processCommandLine {
$tmp =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64
$conf{'authUsername'} = $tmp;
}
- else {
+ else {
printmsg("WARNING => The argument after -xu was not valid username!", 0);
$counter--;
}
}
-
+
elsif ($ARGS[$counter] =~ /^-xp$/) { ## AuthSMTP Password ##
$counter++;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) {
@@ -770,28 +770,28 @@ sub processCommandLine {
$counter--;
}
}
-
+
elsif ($ARGS[$counter] =~ /^-l$/) { ## Logging ##
$counter++;
$conf{'logging'} = 1;
if ($ARGS[$counter] && $ARGS[$counter] !~ /^-/) { $conf{'logFile'} = $ARGS[$counter]; }
else { printmsg("WARNING - The argument after -l was not the log file!", 0); $counter--; }
}
-
+
elsif ($ARGS[$counter] =~ s/^-v+//i) { ## Verbosity ##
my $tmp = (length($&) - 1);
$conf{'debug'} += $tmp;
}
-
+
elsif ($ARGS[$counter] =~ /^-q$/) { ## Quiet ##
$conf{'stdout'} = 0;
}
-
+
else {
printmsg("Error: \"$ARGS[$counter]\" is not a recognized option!", 0);
help();
}
-
+
}
@@ -799,8 +799,8 @@ sub processCommandLine {
-
-
+
+
###################################################
## Verify required variables are set correctly ##
###################################################
@@ -817,7 +817,7 @@ sub processCommandLine {
if ( ((scalar(@to)) + (scalar(@cc)) + (scalar(@bcc))) <= 0) {
quit("ERROR => You must specify at least one recipient via -t, -cc, or -bcc", 1);
}
-
+
## Make sure email addresses look OK.
foreach my $addr (@to, @cc, @bcc, $from, $opt{'reply-to'}) {
if ($addr) {
@@ -828,7 +828,7 @@ sub processCommandLine {
}
}
}
-
+
## Make sure all attachments exist.
foreach my $file (@attachments) {
if ( (! -f $file) or (! -r $file) ) {
@@ -837,17 +837,17 @@ sub processCommandLine {
quit("", 1);
}
}
-
+
if ($conf{'logging'} and (!$conf{'logFile'})) {
quit("ERROR => You used -l to enable logging but didn't specify a log file!", 1);
- }
-
+ }
+
if ( $conf{'authUsername'} ) {
if (!$conf{'authPassword'}) {
quit ("ERROR => You must supply both a username and a password to use SMTP auth.",1);
}
}
-
+
## Return 0 errors
return(0);
}
@@ -907,49 +907,49 @@ sub getResponse {
## be sent to the server, but a valid response is still required from the server.
##
## Input: [$command] A (optional) valid SMTP command (ex. "HELO")
-##
-##
-## Output: Returns zero on success, or non-zero on error.
+##
+##
+## Output: Returns zero on success, or non-zero on error.
## Error messages will be stored in $conf{'error'}
-##
-##
+##
+##
## Example: SMTPchat ("HELO mail.isp.net");
###############################################################################################
sub SMTPchat {
my ($command) = @_;
-
+
printmsg("INFO => Sending: \t$command", 1) if ($command);
-
+
## Send our command
print $SERVER "$command$CRLF" if ($command);
-
+
## Read a response from the server
$SIG{'ALRM'} = sub { $conf{'error'} = "alarm"; $SERVER->close(); };
alarm($conf{'alarm'}) if ($^O !~ /win/i); ## alarm() doesn't work in win32;
- my $result = getResponse(\$SERVER);
+ my $result = getResponse(\$SERVER);
alarm(0) if ($^O !~ /win/i); ## alarm() doesn't work in win32;
-
+
## Generate an alert if we timed out
if ($conf{'error'} eq "alarm") {
$conf{'error'} = "ERROR => Timeout while reading from $conf{'server'}:$conf{'port'} There was no response after $conf{'alarm'} seconds.";
return(1);
}
-
+
## Make sure the server actually responded
if (!$result) {
$conf{'error'} = "ERROR => $conf{'server'}:$conf{'port'} returned a zero byte response to our query.";
return(2);
}
-
+
## Validate the response
if (evalSMTPresponse($result)) {
## conf{'error'} will already be set here
return(2);
}
-
+
## Print the success messsage
printmsg($conf{'error'}, 1);
-
+
## Return Success
return(0);
}
@@ -970,46 +970,46 @@ sub SMTPchat {
##
## Description: Searches $message for either an SMTP success or error code, and returns
## 0 on success, and the actual error code on error.
-##
##
-## Input: $message Data received from a SMTP server (ex. "220
-##
-##
-## Output: Returns zero on success, or non-zero on error.
+##
+## Input: $message Data received from a SMTP server (ex. "220
+##
+##
+## Output: Returns zero on success, or non-zero on error.
## Error messages will be stored in $conf{'error'}
-##
-##
+##
+##
## Example: SMTPchat ("HELO mail.isp.net");
###############################################################################################
sub evalSMTPresponse {
my ($message) = @_;
-
+
## Validate input
- if (!$message) {
+ if (!$message) {
$conf{'error'} = "ERROR => No message was passed to evalSMTPresponse(). What happened?";
return(1)
}
-
+
printmsg("DEBUG => evalSMTPresponse() - Checking for SMTP success or error status in the message: $message ", 3);
-
+
## Look for a SMTP success code
if ($message =~ /^([23]\d\d)/) {
printmsg("DEBUG => evalSMTPresponse() - Found SMTP success code: $1", 2);
$conf{'error'} = "SUCCESS => Received: \t$message";
return(0);
}
-
+
## Look for a SMTP error code
if ($message =~ /^([45]\d\d)/) {
printmsg("DEBUG => evalSMTPresponse() - Found SMTP error code: $1", 2);
$conf{'error'} = "ERROR => Received: \t$message";
return($1);
}
-
+
## If no SMTP codes were found return an error of 1
$conf{'error'} = "ERROR => Received a message with no success or error code. The message received was: $message";
return(2);
-
+
}
@@ -1093,12 +1093,12 @@ sub return_day {
###############################################################################################
## Function: returnAddressParts(string $address)
##
-## Description: Returns a two element array containing the "Name" and "Address" parts of
+## Description: Returns a two element array containing the "Name" and "Address" parts of
## an email address.
-##
+##
## Example: "Brandon Zehm <caspian@dotconf.net>"
## would return: ("Brandon Zehm", "caspian@dotconf.net");
-##
+##
## "caspian@dotconf.net"
## would return: ("caspian@dotconf.net", "caspian@dotconf.net")
###############################################################################################
@@ -1106,35 +1106,35 @@ sub returnAddressParts {
my $input = $_[0];
my $name = "";
my $address = "";
-
+
## Make sure to fail if it looks totally invalid
if ($input !~ /(\S+\@\S+)/) {
$conf{'error'} = "ERROR => The address [$input] doesn't look like a valid email address, ignoring it";
return(undef());
}
-
+
## Check 1, should find addresses like: "Brandon Zehm <caspian@dotconf.net>"
elsif ($input =~ /^\s*(\S(.*\S)?)\s*<(\S+\@\S+)>/o) {
($name, $address) = ($1, $3);
}
-
+
## Otherwise if that failed, just get the address: <caspian@dotconf.net>
elsif ($input =~ /<(\S+\@\S+)>/o) {
$name = $address = $1;
}
-
+
## Or maybe it was formatted this way: caspian@dotconf.net
elsif ($input =~ /(\S+\@\S+)/o) {
$name = $address = $1;
}
-
+
## Something stupid happened, just return an error.
unless ($name and $address) {
printmsg("ERROR => Couldn't parse the address: $input", 0);
printmsg("HINT => If you think this should work, consider reporting this as a bug to $conf{'authorEmail'}", 1);
return(undef());
}
-
+
## Make sure there aren't invalid characters in the address, and return it.
my $ctrl = '\000-\037';
my $nonASCII = '\x80-\xff';
@@ -1169,18 +1169,18 @@ sub send_attachment {
my (@fields, $y, $filename_name, $encoding, ## Local variables
@attachlines, $content_type);
my $bin = 1;
-
- @fields = split(/\/|\\/, $filename); ## Get the actual filename without the path
- $filename_name = pop(@fields);
+
+ @fields = split(/\/|\\/, $filename); ## Get the actual filename without the path
+ $filename_name = pop(@fields);
push @attachments_names, $filename_name; ## FIXME: This is only used later for putting in the log file
-
+
##########################
## Autodetect Mime Type ##
##########################
-
+
@fields = split(/\./, $filename_name);
$encoding = $fields[$#fields];
-
+
if ($encoding =~ /txt|text|log|conf|^c$|cpp|^h$|inc|m3u/i) { $content_type = 'text/plain'; }
elsif ($encoding =~ /html|htm|shtml|shtm|asp|php|cfm/i) { $content_type = 'text/html'; }
elsif ($encoding =~ /sh$/i) { $content_type = 'application/x-sh'; }
@@ -1216,16 +1216,16 @@ sub send_attachment {
elsif ($encoding =~ /latex/i) { $content_type = 'application/x-latex'; }
elsif ($encoding =~ /vcf/i) { $content_type = 'application/x-vcard'; }
else { $content_type = 'application/octet-stream'; }
-
-
+
+
############################
## Process the attachment ##
############################
-
+
#####################################
## Generate and print MIME headers ##
#####################################
-
+
$y = "$CRLF--$conf{'delimiter'}$CRLF";
$y .= "Content-Type: $content_type;$CRLF";
$y .= " name=\"$filename_name\"$CRLF";
@@ -1233,24 +1233,24 @@ sub send_attachment {
$y .= "Content-Disposition: attachment; filename=\"$filename_name\"$CRLF";
$y .= "$CRLF";
print $SERVER $y;
-
-
+
+
###########################################################
## Convert the file to base64 and print it to the server ##
###########################################################
-
- open (FILETOATTACH, $filename) || do {
+
+ open (FILETOATTACH, $filename) || do {
printmsg("ERROR => Opening the file [$filename] for attachment failed with the error: $!", 0);
return(1);
};
binmode(FILETOATTACH); ## Hack to make Win32 work
-
+
my $res = "";
my $tmp = "";
my $base64 = "";
while (<FILETOATTACH>) { ## Read a line from the (binary) file
$res .= $_;
-
+
###################################
## Convert binary data to base64 ##
###################################
@@ -1260,16 +1260,16 @@ sub send_attachment {
$tmp =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64
$base64 .= $tmp;
}
-
+
################################
## Print chunks to the server ##
################################
while ($base64 =~ s/(.{76})//s) {
print $SERVER "$1$CRLF";
}
-
+
}
-
+
###################################
## Encode and send the leftovers ##
###################################
@@ -1280,7 +1280,7 @@ sub send_attachment {
chop($res);
$res =~ tr|` -_|AA-Za-z0-9+/|; ## Translate from uuencode to base64
}
-
+
############################
## Fix padding at the end ##
############################
@@ -1291,12 +1291,12 @@ sub send_attachment {
print $SERVER "$1$CRLF";
}
}
-
+
close (FILETOATTACH) || do {
printmsg("ERROR - Closing the filehandle for file [$filename] failed with the error: $!", 0);
return(2);
};
-
+
## Return 0 errors
return(0);
@@ -1327,9 +1327,9 @@ sub send_attachment {
## Input: $message A message to be printed, logged, etc.
## $level The debug level of the message. If
## not defined 0 will be assumed. 0 is
-## considered a normal message, 1 and
+## considered a normal message, 1 and
## higher is considered a debug message.
-##
+##
## Output: Prints to STDOUT
##
## Assumptions: $conf{'hostname'} should be the name of the computer we're running on.
@@ -1344,33 +1344,33 @@ sub send_attachment {
sub printmsg {
## Assign incoming parameters to variables
my ( $message, $level ) = @_;
-
+
## Make sure input is sane
$level = 0 if (!defined($level));
$message =~ s/\s+$//sgo;
$message =~ s/\r?\n/, /sgo;
-
+
## Continue only if the debug level of the program is >= message debug level.
if ($conf{'debug'} >= $level) {
-
+
## Get the date in the format: Dec 3 11:14:04
my ($sec, $min, $hour, $mday, $mon) = localtime();
$mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')[$mon];
my $date = sprintf("%s %02d %02d:%02d:%02d", $mon, $mday, $hour, $min, $sec);
-
+
## Print to STDOUT always if debugging is enabled, or if conf{stdout} is true.
if ( ($conf{'debug'} >= 1) or ($conf{'stdout'} == 1) ) {
print "$date $conf{'hostname'} $conf{'programName'}\[$$\]: $message\n";
}
-
+
## Print to the log file if $conf{'logging'} is true
if ($conf{'logFile'}) {
if (openLogFile($conf{'logFile'})) { $conf{'logFile'} = ""; printmsg("ERROR => Opening the file [$conf{'logFile'}] for appending returned the error: $!", 1); }
print LOGFILE "$date $conf{'hostname'} $conf{'programName'}\[$$\]: $message\n";
}
-
+
}
-
+
## Return 0 errors
return(0);
}
@@ -1387,24 +1387,24 @@ sub printmsg {
###############################################################################################
-## FUNCTION:
+## FUNCTION:
## openLogFile ( $filename )
-##
-##
-## DESCRIPTION:
+##
+##
+## DESCRIPTION:
## Opens the file $filename and attaches it to the filehandle "LOGFILE". Returns 0 on success
## and non-zero on failure. Error codes are listed below, and the error message gets set in
## global variable $!.
-##
-##
-## Example:
+##
+##
+## Example:
## openFile ("/var/log/sendEmail.log");
##
###############################################################################################
sub openLogFile {
## Get the incoming filename
my $filename = $_[0];
-
+
## Make sure our file exists, and if the file doesn't exist then create it
if ( ! -f $filename ) {
print STDERR "NOTICE: The log file [$filename] does not exist. Creating it now with mode [0600].\n" if ($conf{'stdout'});
@@ -1412,15 +1412,15 @@ sub openLogFile {
close LOGFILE;
chmod (0600, $filename);
}
-
+
## Now open the file and attach it to a filehandle
open (LOGFILE,">>$filename") or return (1);
-
+
## Put the file into non-buffering mode
select LOGFILE;
$| = 1;
select STDOUT;
-
+
## Return success
return(0);
}
@@ -1442,9 +1442,9 @@ sub openLogFile {
###############################################################################################
## Function: quit (string $message, int $errorLevel)
-##
-## Description: Exits the program, optionally printing $message. It
-## returns an exit error level of $errorLevel to the
+##
+## Description: Exits the program, optionally printing $message. It
+## returns an exit error level of $errorLevel to the
## system (0 means no errors, and is assumed if empty.)
##
## Example: quit("Exiting program normally", 0);
@@ -1456,12 +1456,12 @@ sub quit {
$incoming{'errorLevel'}
) = @_;
$incoming{'errorLevel'} = 0 if (!defined($incoming{'errorLevel'}));
-
+
## Print exit message
- if ($incoming{'message'}) {
+ if ($incoming{'message'}) {
printmsg($incoming{'message'}, 0);
}
-
+
## Exit
exit($incoming{'errorLevel'});
}
@@ -1480,9 +1480,9 @@ sub quit {
###############################################################################################
## Function: help ()
##
-## Description: For all those newbies ;)
+## Description: For all those newbies ;)
## Prints a help message and exits the program.
-##
+##
###############################################################################################
sub help {
exit(1) if (!$conf{'stdout'});
@@ -1491,23 +1491,23 @@ print <<EOM;
${colorBold}$conf{'programName'}-$conf{'version'} by $conf{'authorName'} <$conf{'authorEmail'}>${colorNoBold}
Synopsis: $conf{'programName'} -f ADDRESS [options]
-
+
${colorRed}Required:${colorNormal}
-f ADDRESS from (sender) email address
* At least one recipient required via -t, -cc, or -bcc
* Message body required via -m, STDIN, or -o message-file=FILE
-
+
${colorGreen}Common:${colorNormal}
-t ADDRESS [ADDR ...] to email address(es)
-u SUBJECT message subject
-m MESSAGE message body
-s SERVER[:PORT] smtp mail relay, default is $conf{'server'}:$conf{'port'}
-
+
${colorGreen}Optional:${colorNormal}
-a FILE [FILE ...] file attachment(s)
-cc ADDRESS [ADDR ...] cc email address(es)
-bcc ADDRESS [ADDR ...] bcc email address(es)
-
+
${colorGreen}Paranormal:${colorNormal}
-xu USERNAME authentication user (for SMTP authentication)
-xp PASSWORD authentication password (for SMTP authentication)
@@ -1515,7 +1515,7 @@ Synopsis: $conf{'programName'} -f ADDRESS [options]
-v verbosity, use multiple times for greater effect
-q be quiet (no stdout output)
-o NAME=VALUE see extended help topic "misc" for details
-
+
${colorGreen}Help:${colorNormal}
--help TOPIC The following extended help topics are available:
addressing explain addressing and related options
@@ -1539,9 +1539,9 @@ exit(1);
###############################################################################################
## Function: helpTopic ($topic)
##
-## Description: For all those newbies ;)
+## Description: For all those newbies ;)
## Prints a help message and exits the program.
-##
+##
###############################################################################################
sub helpTopic {
exit(1) if (!$conf{'stdout'});
@@ -1565,17 +1565,17 @@ Options related to addressing:
-cc ADDRESS [ADDRESS ...]
-bcc ADDRESS [ADDRESS ...]
-o reply-to=ADDRESS
-
+
-f ADDRESS
This required option specifies who the email is from, I.E. the sender's
email address.
-
+
-t ADDRESS [ADDRESS ...]
This option specifies the primary recipient(s). At least one recipient
address must be specified via the -t, -cc. or -bcc options.
-cc ADDRESS [ADDRESS ...]
- This option specifies the "carbon copy" recipient(s). At least one
+ This option specifies the "carbon copy" recipient(s). At least one
recipient address must be specified via the -t, -cc. or -bcc options.
-bcc ADDRESS [ADDRESS ...]
@@ -1585,7 +1585,7 @@ Options related to addressing:
-o reply-to=ADDRESS
This option specifies that an optional "Reply-To" address should be
written in the email's headers.
-
+
${colorGreen}Email Address Syntax${colorNormal}
Email addresses may be specified in one of two ways:
@@ -1595,7 +1595,7 @@ Email addresses may be specified in one of two ways:
The "Full Name" method is useful if you want a name, rather than a plain
email address, to be displayed in the recipient's From, To, or Cc fields
when they view the message.
-
+
${colorGreen}Multiple Recipients${colorNormal}
The -t, -cc, and -bcc options each accept multiple addresses. They may be
@@ -1608,16 +1608,16 @@ Examples:
* Space separated list:
-t jane.doe\@yahoo.com "John Doe <john.doe\@gmail.com>"
-
+
* Semi-colon separated list:
-t "jane.doe\@yahoo.com; John Doe <john.doe\@gmail.com>"
-
+
* Comma separated list:
-t "jane.doe\@yahoo.com, John Doe <john.doe\@gmail.com>"
-
+
* Multiple -t, -cc, or -bcc options:
-t "jane.doe\@yahoo.com" -t "John Doe <john.doe\@gmail.com>"
-
+
EOM
last CASE;
@@ -1642,12 +1642,12 @@ Options related to the message:
-o message-header=EMAIL HEADER
-o message-format=raw
-o message-charset=CHARSET
-
+
-u SUBJECT
This option allows you to specify the subject for your email message.
- It is not required (anymore) that the subject be quoted, although it
+ It is not required (anymore) that the subject be quoted, although it
is recommended. The subject will be read until an argument starting
- with a hyphen (-) is found.
+ with a hyphen (-) is found.
Examples:
-u "Contact information while on vacation"
-u New Microsoft vulnerability discovered
@@ -1657,21 +1657,21 @@ Options related to the message:
body for your email. The message may be specified on the command line
with this -m option, read from a file with the -o message-file=FILE
option, or read from STDIN if neither of these options are present.
-
+
It is not required (anymore) that the message be quoted, although it is
recommended. The message will be read until an argument starting with a
hyphen (-) is found.
Examples:
-m "See you in South Beach, Hawaii. -Todd"
-m Please ensure that you upgrade your systems right away
-
+
Multi-line message bodies may be specified with the -m option by putting
a "\\n" into the message. Example:
-m "This is line 1.\\nAnd this is line 2."
-
+
HTML messages are supported, simply begin your message with "<html>" and
sendEmail will properly label the mime header so MUAs properly render
- the message.
+ the message.
-o message-file=FILE
This option is one of three methods that allow you to specify the message
@@ -1697,23 +1697,23 @@ Options related to the message:
-o message-header=EMAIL HEADER
-o message-charset=CHARSET
-a ATTACHMENT
-
+
-o message-charset=CHARSET
This option allows you to specify the character-set for the message body.
The default is iso-8859-1.
-
+
${colorGreen}The Message Body${colorNormal}
The message body may be specified in one of three ways:
1) Via the -m MESSAGE command line option.
Example:
-m "This is the message body"
-
+
2) By putting the message body in a file and using the -o message-file=FILE
command line option.
Example:
-o message-file=/root/message.txt
-
+
3) By piping the message body to sendEmail when nither of the above command
line options were specified.
Example:
@@ -1722,14 +1722,14 @@ The message body may be specified in one of three ways:
If the message body begins with "<html>" then the message will be treated as
an HTML message and the MIME headers will be written so that a HTML capable
email client will display the message in it's HTML form.
-Any of the above methods may be used with the -o message-format=raw option
+Any of the above methods may be used with the -o message-format=raw option
to deliver an already complete email message.
EOM
last CASE;
};
-
+
@@ -1747,7 +1747,7 @@ Options that don't fit anywhere else:
-xp PASSWORD
-a ATTACHMENT
-o timeout=SECONDS
-
+
-xu USERNAME
This option, in conjunction with the -xp option, allows you to specify
a username and password to be used with SMTP servers requiring
@@ -1761,12 +1761,12 @@ Options that don't fit anywhere else:
-a ATTACHMENT [ATTACHMENT]
This option allows you to attach any number of files to your email
message.
-
--o timeout=SECONDS
+
+-o timeout=SECONDS
This option sets the timeout value in seconds used for all network reads,
writes, and a few other things.
-
+
${colorGreen}The Complete -o Parameter List${colorNormal}
-o message-file=FILE
-o message-header=EMAIL HEADER
@@ -1775,11 +1775,11 @@ ${colorGreen}The Complete -o Parameter List${colorNormal}
-o reply-to=ADDRESS
-o timeout=SECONDS
-
+
EOM
last CASE;
};
-
+
@@ -1795,7 +1795,7 @@ ${colorGreen}Networking Options${colorNormal}
Options related to networking:
-s SERVER[:PORT]
-o timeout=SECONDS
-
+
-s SERVER[:PORT]
This option allows you to specify the SMTP server sendEmail should
connect to to deliver your email message to. If this option is not
@@ -1809,21 +1809,21 @@ Options related to networking:
If you have your own email server running on port 300 you would
probably use an option like this:
-s myserver.mydomain.com:300
-
--o timeout=SECONDS
+
+-o timeout=SECONDS
This option sets the timeout value in seconds used for all network reads,
writes, and a few other things.
-
+
EOM
last CASE;
};
-
-
-
-
-
-
+
+
+
+
+
+
## OUTPUTO
($topic eq 'output') && do {
print <<EOM;
@@ -1835,7 +1835,7 @@ Options related to output:
-l LOGFILE
-v
-q
-
+
-l LOGFILE
This option allows you to specify a log file to append to. Every message
that is displayed to STDOUT is also written to the log file. This may be
@@ -1845,7 +1845,7 @@ Options related to output:
This option tells sendEmail to disable printing to STDOUT. In other
words nothing will be printed to the console. This does not affect the
behavior of the -l or -v options.
-
+
-v
This option allows you to increase the debug level of sendEmail. You may
either use this option more than once, or specify more than one v at a
@@ -1853,20 +1853,20 @@ Options related to output:
Specifies a debug level of 1: -v
Specifies a debug level of 2: -vv
Specifies a debug level of 2: -v -v
- A debug level of one is recommended when doing any sort of debugging.
+ A debug level of one is recommended when doing any sort of debugging.
At that level you will see the entire SMTP transaction (except the
body of the email message), and hints will be displayed for most
warnings and errors. The highest debug level is three.
-
+
EOM
last CASE;
};
-
+
## Unknown option selected!
quit("ERROR => The help topic specified is not valid!", 1);
};
-
+
exit(1);
}
diff --git a/scripts/timerrep.sh b/scripts/timerrep.sh
index ab9bae5..d00ea1c 100755
--- a/scripts/timerrep.sh
+++ b/scripts/timerrep.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#------------------------------------------------------------------------------
# this script allows searching for a repeat of timer using epgsearch (>=0.9.3).
-# it requires the timercmd patch from Gerhard Steiner, that extends the timers
+# it requires the timercmd patch from Gerhard Steiner, that extends the timers
# menu of VDR with commands like in recordings menu
#
# add the following lines to your timercmds.conf
@@ -29,7 +29,7 @@ cat << EOM >/tmp/cmd.sh
SEARCHTERM="$6"~"$7";
#event info not yet present? then extract it from the file name
-if test "\$SEARCHTERM" == "~"; then
+if test "\$SEARCHTERM" == "~"; then
SEARCHTERM='$8'
#cut leading special folders
i=0;
diff --git a/scripts/undoneepgsearch.sh b/scripts/undoneepgsearch.sh
index ee502c0..8716ec8 100755
--- a/scripts/undoneepgsearch.sh
+++ b/scripts/undoneepgsearch.sh
@@ -137,7 +137,7 @@ else
[ $DEBUG = yes ] && printf "\nMatch=$Match\n"
- [ $Match -eq 1 ] && grep -m$Match -A4 "^T $Title$" $EPGSEARCHDONE_WORK >$TempFile || grep -m$Match -A4 "^T $Title$" $EPGSEARCHDONE_WORK | grep -A5 "^--$" >$TempFile
+ [ $Match -eq 1 ] && grep -m$Match -A4 "^T $Title$" $EPGSEARCHDONE_WORK >$TempFile || grep -m$Match -A4 "^T $Title$" $EPGSEARCHDONE_WORK | grep -A5 "^--$" >$TempFile
if [ -z "$Subtitle" ]; then
grep -q "$Description" $TempFile
diff --git a/searchtimer_thread.c b/searchtimer_thread.c
index 91be7b7..1244a6a 100644
--- a/searchtimer_thread.c
+++ b/searchtimer_thread.c
@@ -66,11 +66,11 @@ cSearchTimerThread::cSearchTimerThread(cPluginEpgsearch* thePlugin)
}
cSearchTimerThread::~cSearchTimerThread() {
- if (m_Active)
+ if (m_Active)
Stop();
}
-void cSearchTimerThread::Init(cPluginEpgsearch* thePlugin, bool activatePermanently)
+void cSearchTimerThread::Init(cPluginEpgsearch* thePlugin, bool activatePermanently)
{
if (activatePermanently)
{
@@ -78,7 +78,7 @@ void cSearchTimerThread::Init(cPluginEpgsearch* thePlugin, bool activatePermanen
thePlugin->SetupStore("UseSearchTimers", EPGSearchConfig.useSearchTimers);
}
if (!EPGSearchConfig.useSearchTimers)
- return;
+ return;
if (m_Instance == NULL) {
m_Instance = new cSearchTimerThread(thePlugin);
m_Instance->Start();
@@ -128,8 +128,8 @@ cTimer *cSearchTimerThread::GetTimer(cSearchExt *searchExt, const cEvent *pEvent
}
tm *tmStartEv = localtime_r(&eStart, &tm_r);
-
- for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
+
+ for (cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
{
if (ti->Channel() != channel)
continue;
@@ -160,7 +160,7 @@ cTimer *cSearchTimerThread::GetTimer(cSearchExt *searchExt, const cEvent *pEvent
tm *tmStartTi = localtime_r(&tStart, &tm_r);
if (tmStartEv->tm_mday != tmStartTi->tm_mday)
continue;
-
+
// some providers change EPG times only for a few seconds
// ignore this to avoid search timer mails because of such changes
bTimesMatchExactly = (abs(tStart -eStart) < 60 && abs(tStop - eStop) < 60);
@@ -192,7 +192,7 @@ bool cSearchTimerThread::TimerWasModified(cTimer* t)
return bMod;
}
-void cSearchTimerThread::Action(void)
+void cSearchTimerThread::Action(void)
{
if (EPGSearchConfig.useExternalSVDRP && !cSVDRPClient::SVDRPSendCmd)
{
@@ -209,7 +209,7 @@ void cSearchTimerThread::Action(void)
Wait.Wait(1000);
time_t nextUpdate = time(NULL);
- while (m_Active)
+ while (m_Active)
{
time_t now = time(NULL);
bool needUpdate = NeedUpdate();
@@ -228,7 +228,7 @@ void cSearchTimerThread::Action(void)
while(EITScanner.Active() && m_Active);
LogFile.Log(1,"EPG scan finished");
}
- if (Timers.BeingEdited())
+ if (Timers.BeingEdited())
{
Wait.Wait(1000);
continue;
@@ -239,12 +239,12 @@ void cSearchTimerThread::Action(void)
cTimerObjList* pOutdatedTimers = NULL;
// for thread safeness we work with a copy of the current searches,
- // because SVDRP would not work if the main thread would be locked
- cSearchExts* localSearchExts = SearchExts.Clone();
+ // because SVDRP would not work if the main thread would be locked
+ cSearchExts* localSearchExts = SearchExts.Clone();
cSearchExt *searchExt = localSearchExts->First();
// reset announcelist
announceList.Clear();
- while (searchExt && m_Active)
+ while (searchExt && m_Active)
{
if (!searchExt->IsActiveAt(now))
{
@@ -264,26 +264,26 @@ void cSearchTimerThread::Action(void)
if (searchExt->pauseOnNrRecordings > 0)
searchExt->CheckExistingRecordings(pSearchResults);
- for (cSearchResult* pResultObj = pSearchResults->First();
- pResultObj;
+ for (cSearchResult* pResultObj = pSearchResults->First();
+ pResultObj;
pResultObj = pSearchResults->Next(pResultObj))
{
const cEvent* pEvent = pResultObj->event;
if (!pEvent)
continue;
-
+
cChannel *channel = Channels.GetByChannelID(pEvent->ChannelID(), true, true);
if (!channel)
continue;
-
+
int index = 0;
cTimer *timer = new cTimer(pEvent);
- // create the file
+ // create the file
char* file = NULL;
if ((file = searchExt->BuildFile(pEvent)) != NULL)
{
- while(strstr(file, "!^pipe^!")) file = strreplace(file, "!^pipe^!", "|"); // revert the translation of '|' in BuildFile
+ while(strstr(file, "!^pipe^!")) file = strreplace(file, "!^pipe^!", "|"); // revert the translation of '|' in BuildFile
if (strstr(file, "!^invalid^!") || strlen(file) == 0)
{
LogFile.eSysLog("Skipping timer due to invalid or empty filename");
@@ -298,7 +298,7 @@ void cSearchTimerThread::Action(void)
}
int Priority = searchExt->Priority;
int Lifetime = searchExt->Lifetime;
-
+
// search for an already existing timer
bool bTimesMatchExactly = false;
cTimer *t = GetTimer(searchExt, pEvent, bTimesMatchExactly);
@@ -306,7 +306,7 @@ void cSearchTimerThread::Action(void)
char* Summary = NULL;
uint timerMod = tmNoChange;
- if (t)
+ if (t)
{ // already exists
pOutdatedTimers->DelTimer(t);
@@ -316,7 +316,7 @@ void cSearchTimerThread::Action(void)
delete timer;
continue;
}
-
+
int triggerID = TriggeredFromSearchTimerID(t);
if (!pResultObj->needsTimer && !t->Recording()) // not needed
{
@@ -325,14 +325,14 @@ void cSearchTimerThread::Action(void)
LogFile.Log(1,"delete timer for '%s~%s' (%s - %s, channel %d)", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
RemoveTimer(t, pEvent);
}
- else if (triggerID == -1) //manual timer
+ else if (triggerID == -1) //manual timer
{
LogFile.Log(2,"keep obsolete timer for '%s~%s' (%s - %s, channel %d) - was manually created", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
}
delete timer;
continue;
}
- if (TimerWasModified(t)) // don't touch timer modified by user
+ if (TimerWasModified(t)) // don't touch timer modified by user
{
LogFile.Log(2,"timer for '%s~%s' (%s - %s, channel %d) modified by user - won't be touched", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
delete timer;
@@ -350,9 +350,9 @@ void cSearchTimerThread::Action(void)
pFile = strreplace(pFile, ':', '|');
pFile = strreplace(pFile, " ~", "~");
pFile = strreplace(pFile, "~ ", "~");
-
+
Summary = SummaryExtended(searchExt, t, pEvent);
-
+
if (bTimesMatchExactly && strcmp(pFile, timer->File()) == 0
&& (t->Aux() != NULL && strcmp(t->Aux(), Summary) == 0)
)
@@ -376,8 +376,8 @@ void cSearchTimerThread::Action(void)
free(newEventID);
}
- if (LogFile.Level() >= 3) // output reasons for a timer modification
- {
+ if (LogFile.Level() >= 3) // output reasons for a timer modification
+ {
if (timerMod & tmStartStop)
LogFile.Log(3,"timer for '%s~%s' (%s - %s, channel %d) : start/stop has changed", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
if (timerMod & tmFile)
@@ -391,14 +391,14 @@ void cSearchTimerThread::Action(void)
}
free(pFile);
- if (t->Recording() && t->StopTime() == timer->StopTime())
+ if (t->Recording() && t->StopTime() == timer->StopTime())
{
// only update recording timers if stop time has changed, since all other settings can't be modified
LogFile.Log(2,"timer for '%s~%s' (%s - %s, channel %d) already recording - no changes possible", pEvent->Title()?pEvent->Title():"no title", pEvent->ShortText()?pEvent->ShortText():"no subtitle", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), ChannelNrFromEvent(pEvent));
delete timer;
continue;
}
- }
+ }
else
{
if (!pResultObj->needsTimer)
@@ -407,15 +407,15 @@ void cSearchTimerThread::Action(void)
continue;
}
}
-
- if (searchExt->action == searchTimerActionAnnounceViaOSD)
+
+ if (searchExt->action == searchTimerActionAnnounceViaOSD)
{
if (t || // timer already exists or
NoAnnounces.InList(pEvent) || // announcement not wanted anymore or
- (EPGSearchConfig.noAnnounceWhileReplay &&
- cDevice::PrimaryDevice()->Replaying() &&
+ (EPGSearchConfig.noAnnounceWhileReplay &&
+ cDevice::PrimaryDevice()->Replaying() &&
!(updateForced & UPDS_WITH_OSD)) // no announce while replay within automatic updates
- )
+ )
{
if (Summary) free(Summary);
delete timer;
@@ -429,52 +429,52 @@ void cSearchTimerThread::Action(void)
continue;
}
- if (searchExt->action == searchTimerActionAnnounceViaMail)
+ if (searchExt->action == searchTimerActionAnnounceViaMail)
{
if (t || // timer already exists or
NoAnnounces.InList(pEvent) ||
- pEvent->StartTime() < time(NULL)) // already started?
+ pEvent->StartTime() < time(NULL)) // already started?
{
if (Summary) free(Summary);
delete timer;
continue;
}
- mailNotifier.AddAnnounceEventNotification(pEvent->EventID(), pEvent->ChannelID(), searchExt->ID);
+ mailNotifier.AddAnnounceEventNotification(pEvent->EventID(), pEvent->ChannelID(), searchExt->ID);
if (Summary) free(Summary);
delete timer;
continue;
}
- if (searchExt->action == searchTimerActionSwitchOnly ||
+ if (searchExt->action == searchTimerActionSwitchOnly ||
searchExt->action == searchTimerActionAnnounceAndSwitch) // add to switch list
{
time_t now = time(NULL);
if (now < pEvent->StartTime())
{
if (!SwitchTimers.InSwitchList(pEvent))
- {
+ {
cMutexLock SwitchTimersLock(&SwitchTimers);
int mode = 0;
if (searchExt->action == searchTimerActionAnnounceAndSwitch)
mode = 2;
LogFile.Log(3,"adding switch timer event for '%s~%s' (%s - %s); search timer: '%s'", pEvent->Title(), pEvent->ShortText()?pEvent->ShortText():"", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), searchExt->search);
- SwitchTimers.Add(new cSwitchTimer(pEvent, searchExt->switchMinsBefore, mode,
+ SwitchTimers.Add(new cSwitchTimer(pEvent, searchExt->switchMinsBefore, mode,
searchExt->unmuteSoundOnSwitch));
SwitchTimers.Save();
- cSwitchTimerThread::Init();
+ cSwitchTimerThread::Init();
}
}
if (Summary) free(Summary);
delete timer;
continue;
}
-
+
if (AddModTimer(timer, index, searchExt, pEvent, Priority, Lifetime, Summary, timerMod))
{
if (index == 0)
LogFile.Log(1,"added timer for '%s~%s' (%s - %s); search timer: '%s'", pEvent->Title(), pEvent->ShortText()?pEvent->ShortText():"", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), searchExt->search);
else
- LogFile.Log(1,"modified timer %d for '%s~%s' (%s - %s); search timer: '%s'", index, pEvent->Title(), pEvent->ShortText()?pEvent->ShortText():"", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), searchExt->search);
+ LogFile.Log(1,"modified timer %d for '%s~%s' (%s - %s); search timer: '%s'", index, pEvent->Title(), pEvent->ShortText()?pEvent->ShortText():"", GETDATESTRING(pEvent), GETTIMESTRING(pEvent), searchExt->search);
}
if (Summary) free(Summary);
delete timer;
@@ -495,7 +495,7 @@ void cSearchTimerThread::Action(void)
cTimer* t = tObj->timer;
// timer could have been deleted meanwhile, so check if its still there
bool found = false;
- for(cTimer* checkT = Timers.First(); checkT; checkT = Timers.Next(checkT))
+ for(cTimer* checkT = Timers.First(); checkT; checkT = Timers.Next(checkT))
if (checkT == t)
{
found = true;
@@ -521,10 +521,10 @@ void cSearchTimerThread::Action(void)
if (announceList.Count() > 0)
{
cString msgfmt = cString::sprintf(tr("%d new broadcast(s) found! Show them?"), announceList.Count());
- if (SendMsg(msgfmt, true,7) == kOk)
+ if (SendMsg(msgfmt, true,7) == kOk)
{
m_plugin->showAnnounces = true;
- cRemote::CallPlugin("epgsearch");
+ cRemote::CallPlugin("epgsearch");
}
}
@@ -536,8 +536,8 @@ void cSearchTimerThread::Action(void)
if (EPGSearchConfig.checkTimerConflictsAfterUpdate && m_Active)
{
LogFile.iSysLog("check for timer conflicts");
- cConflictCheck conflictCheck;
- conflictCheck.Check();
+ cConflictCheck conflictCheck;
+ conflictCheck.Check();
if (conflictCheck.relevantConflicts > 0)
{
@@ -549,21 +549,21 @@ void cSearchTimerThread::Action(void)
conflictCheck.EvaluateConflCheckCmd();
- cString msgfmt = cString::sprintf(tr("%d timer conflict(s)! First at %s. Show them?"),
+ cString msgfmt = cString::sprintf(tr("%d timer conflict(s)! First at %s. Show them?"),
conflictCheck.relevantConflicts,
*DateTime(conflictCheck.nextRelevantConflictDate));
- bool doMessage = EPGSearchConfig.noConflMsgWhileReplay == 0 ||
- !cDevice::PrimaryDevice()->Replaying() ||
+ bool doMessage = EPGSearchConfig.noConflMsgWhileReplay == 0 ||
+ !cDevice::PrimaryDevice()->Replaying() ||
conflictCheck.nextRelevantConflictDate - now < 2*60*60 ||
(updateForced & UPDS_WITH_OSD);
- if (doMessage && SendMsg(msgfmt, true,7) == kOk)
+ if (doMessage && SendMsg(msgfmt, true,7) == kOk)
{
m_plugin->showConflicts = true;
- cRemote::CallPlugin("epgsearch");
+ cRemote::CallPlugin("epgsearch");
}
}
-
- LogFile.iSysLog("check for timer conflicts - done");
+
+ LogFile.iSysLog("check for timer conflicts - done");
}
// delete expired recordings
@@ -586,7 +586,7 @@ void cSearchTimerThread::Action(void)
justRunning = false;
}
if (m_Active)
- Wait.Wait(2000); // to avoid high system load if time%30==0
+ Wait.Wait(2000); // to avoid high system load if time%30==0
while (m_Active && !NeedUpdate() && time(NULL)%30 != 0) // sync heart beat to a multiple of 5secs
Wait.Wait(1000);
};
@@ -619,11 +619,11 @@ char* cSearchTimerThread::SummaryExtended(cSearchExt* searchExt, cTimer* Timer,
time_t stop = eStop + (UseVPS?0:(searchExt->MarginStop * 60));
char* addSummaryFooter = NULL;
- msprintf(&addSummaryFooter, "<channel>%d - %s</channel><searchtimer>%s</searchtimer><start>%ld</start><stop>%ld</stop><s-id>%d</s-id><eventid>%ld</eventid>",
+ msprintf(&addSummaryFooter, "<channel>%d - %s</channel><searchtimer>%s</searchtimer><start>%ld</start><stop>%ld</stop><s-id>%d</s-id><eventid>%ld</eventid>",
Timer->Channel()->Number(), CHANNELNAME(Timer->Channel()),
- searchExt->search,
- start,
- stop,
+ searchExt->search,
+ start,
+ stop,
searchExt->ID,
(long) pEvent->EventID());
@@ -649,7 +649,7 @@ char* cSearchTimerThread::SummaryExtended(cSearchExt* searchExt, cTimer* Timer,
return tmpSummary;
}
-bool cSearchTimerThread::AddModTimer(cTimer* Timer, int index, cSearchExt* searchExt, const cEvent* pEvent, int Prio, int Lifetime, char* Summary, uint timerMod)
+bool cSearchTimerThread::AddModTimer(cTimer* Timer, int index, cSearchExt* searchExt, const cEvent* pEvent, int Prio, int Lifetime, char* Summary, uint timerMod)
{
char *cmdbuf = NULL;
@@ -686,54 +686,54 @@ bool cSearchTimerThread::AddModTimer(cTimer* Timer, int index, cSearchExt* searc
tmpSummary = strdup(Summary);
strreplace(tmpSummary, '\n', '|');
}
- else
+ else
tmpSummary = SummaryExtended(searchExt, Timer, pEvent);
if (index==0)
- msprintf(&cmdbuf, "NEWT %d:%d:%s:%s:%s:%d:%d:%s:%s",
+ msprintf(&cmdbuf, "NEWT %d:%d:%s:%s:%s:%d:%d:%s:%s",
Flags,
Timer->Channel()->Number(),
*Timer->PrintDay(start, Timer->WeekDays(), true),
bufStart,
bufEnd,
- Prio,
- Lifetime,
+ Prio,
+ Lifetime,
Timer->File(),
tmpSummary?tmpSummary:"");
else
- msprintf(&cmdbuf, "MODT %d %d:%d:%s:%s:%s:%d:%d:%s:%s",
+ msprintf(&cmdbuf, "MODT %d %d:%d:%s:%s:%s:%d:%d:%s:%s",
index,
Flags,
Timer->Channel()->Number(),
*Timer->PrintDay(start, Timer->WeekDays(), true),
bufStart,
bufEnd,
- Prio,
- Lifetime,
+ Prio,
+ Lifetime,
Timer->File(),
tmpSummary?tmpSummary:"");
if (!SendViaSVDRP(cmdbuf))
return false;
-
- if (gl_timerStatusMonitor) gl_timerStatusMonitor->SetConflictCheckAdvised();
-
+
+ if (gl_timerStatusMonitor) gl_timerStatusMonitor->SetConflictCheckAdvised();
+
cTimerDone* timerdone = new cTimerDone(start, stop, pEvent, searchExt->ID);
if (index==0)
TimersDone.Add(timerdone);
else
TimersDone.Update(start, stop, pEvent, searchExt->ID, timerdone);
-
+
if (EPGSearchConfig.sendMailOnSearchtimers)
{
if (index==0) // new
- mailNotifier.AddNewTimerNotification(pEvent->EventID(), pEvent->ChannelID());
+ mailNotifier.AddNewTimerNotification(pEvent->EventID(), pEvent->ChannelID());
else
- mailNotifier.AddModTimerNotification(pEvent->EventID(), pEvent->ChannelID(), timerMod);
+ mailNotifier.AddModTimerNotification(pEvent->EventID(), pEvent->ChannelID(), timerMod);
}
free(cmdbuf);
if (tmpSummary) free(tmpSummary);
-
+
return true;
}
@@ -741,7 +741,7 @@ void cSearchTimerThread::RemoveTimer(cTimer* t, const cEvent* e)
{
if (!t) return;
if (EPGSearchConfig.sendMailOnSearchtimers)
- mailNotifier.AddRemoveTimerNotification(t,e);
+ mailNotifier.AddRemoveTimerNotification(t,e);
if (!EPGSearchConfig.TimerProgRepeat)
{
cTimerDone * TimerDone = TimersDone.InList(t->StartTime(), t->StopTime(), e, -1);
@@ -757,7 +757,7 @@ void cSearchTimerThread::RemoveTimer(cTimer* t, const cEvent* e)
void cSearchTimerThread::DelRecording(int index)
{
- cString cmdbuf = cString::sprintf("DELR %d", index);
+ cString cmdbuf = cString::sprintf("DELR %d", index);
LogFile.Log(2, "delete recording %d", index);
SendViaSVDRP(cmdbuf);
}
@@ -767,9 +767,9 @@ void cSearchTimerThread::CheckExpiredRecs()
LogFile.Log(1, "check for expired recordings started");
cThreadLock RecordingsLock(&Recordings);
cList<cRecordingObj> DelRecordings;
- for (cRecording *recording = Recordings.First(); recording && m_Active; recording = Recordings.Next(recording))
+ for (cRecording *recording = Recordings.First(); recording && m_Active; recording = Recordings.Next(recording))
{
-#if APIVERSNUM < 10721
+#if APIVERSNUM < 10721
LogFile.Log(3, "check recording %s from %s for expiration", recording->Name(), DAYDATETIME(recording->start));
if (recording->start == 0)
#else
@@ -783,10 +783,10 @@ void cSearchTimerThread::CheckExpiredRecs()
if (recording->IsEdited()) continue;
if (!recording->Info()) continue;
- char* searchID = GetAuxValue(recording, "s-id");
- char* searchName = GetAuxValue(recording, "searchtimer");
+ char* searchID = GetAuxValue(recording, "s-id");
+ char* searchName = GetAuxValue(recording, "searchtimer");
if (!searchName)
- searchName = GetAuxValue(recording, "search timer");
+ searchName = GetAuxValue(recording, "search timer");
if (!searchID || !searchName)
{
@@ -795,7 +795,7 @@ void cSearchTimerThread::CheckExpiredRecs()
continue;
}
cSearchExt* search = SearchExts.GetSearchFromID(atoi(searchID));
- if (!search || strcmp(search->search, searchName) != 0)
+ if (!search || strcmp(search->search, searchName) != 0)
{
if (searchID) free(searchID);
if (searchName) free(searchName);
@@ -807,7 +807,7 @@ void cSearchTimerThread::CheckExpiredRecs()
if (search->delAfterDays == 0) continue;
time_t now = time(NULL);
-#if APIVERSNUM < 10721
+#if APIVERSNUM < 10721
int daysBetween = int(double((now - recording->start)) / (60*60*24));
#else
int daysBetween = int(double((now - recording->Start())) / (60*60*24));
@@ -816,27 +816,27 @@ void cSearchTimerThread::CheckExpiredRecs()
DelRecordings.Add(new cRecordingObj(recording, search));
else
LogFile.Log(3, "recording will expire in %d days, search timer %s", search->delAfterDays - daysBetween, search->search);
- }
- for (cRecordingObj *recordingObj = DelRecordings.First(); recordingObj && m_Active; recordingObj = DelRecordings.Next(recordingObj))
+ }
+ for (cRecordingObj *recordingObj = DelRecordings.First(); recordingObj && m_Active; recordingObj = DelRecordings.Next(recordingObj))
{
cRecording* recording = recordingObj->recording;
cSearchExt* search = recordingObj->search;
if (search->recordingsKeep > 0 && search->recordingsKeep >= search->GetCountRecordings())
{
-#if APIVERSNUM < 10721
+#if APIVERSNUM < 10721
LogFile.Log(1, "recording '%s' from %s expired, but will be kept, search timer %s", recording->Name(), DAYDATETIME(recording->start), recordingObj->search->search);
#else
LogFile.Log(1, "recording '%s' from %s expired, but will be kept, search timer %s", recording->Name(), DAYDATETIME(recording->Start()), recordingObj->search->search);
#endif
continue;
}
-#if APIVERSNUM < 10721
+#if APIVERSNUM < 10721
LogFile.Log(1, "delete expired recording '%s' from %s, search timer %s", recording->Name(), DAYDATETIME(recording->start), recordingObj->search->search);
#else
LogFile.Log(1, "delete expired recording '%s' from %s, search timer %s", recording->Name(), DAYDATETIME(recording->Start()), recordingObj->search->search);
#endif
cRecordControl *rc = cRecordControls::GetRecordControl(recording->FileName());
- if (!rc)
+ if (!rc)
{
if (!recording->Delete())
LogFile.Log(1, "error deleting recording!");
@@ -865,25 +865,25 @@ void cSearchTimerThread::ModifyManualTimer(const cEvent* event, const cTimer* ti
strftime(daybuffer, DAYBUFFERSIZE, "%Y-%m-%d", &tm_r_start);
strftime(startbuffer, DAYBUFFERSIZE, "%H%M", &tm_r_start);
strftime(stopbuffer, DAYBUFFERSIZE, "%H%M", &tm_r_stop);
-
+
char* cmdbuf = NULL;
- msprintf(&cmdbuf, "MODT %d %d:%d:%s:%s:%s:%d:%d:%s:%s",
+ msprintf(&cmdbuf, "MODT %d %d:%d:%s:%s:%s:%d:%d:%s:%s",
timer->Index()+1,
timer->Flags(),
timer->Channel()->Number(),
daybuffer,
startbuffer,
stopbuffer,
- timer->Priority(),
- timer->Lifetime(),
+ timer->Priority(),
+ timer->Lifetime(),
timer->File(),
timer->Aux());
-
+
if (EPGSearchConfig.sendMailOnSearchtimers)
- mailNotifier.AddModTimerNotification(event->EventID(), event->ChannelID());
+ mailNotifier.AddModTimerNotification(event->EventID(), event->ChannelID());
cTimerThread timerThread;
- timerThread.Init(cmdbuf);
+ timerThread.Init(cmdbuf);
free(cmdbuf);
}
@@ -895,7 +895,7 @@ void cSearchTimerThread::CheckManualTimers()
const cSchedules *schedules;
schedules = cSchedules::Schedules(schedulesLock);
- for (cTimer *ti = Timers.First(); ti && m_Active; ti = Timers.Next(ti))
+ for (cTimer *ti = Timers.First(); ti && m_Active; ti = Timers.Next(ti))
{
if (TriggeredFromSearchTimerID(ti) != -1) continue; // manual timer?
@@ -912,7 +912,7 @@ void cSearchTimerThread::CheckManualTimers()
int bstop = szbstop? atoi(szbstop) : 0;
free(szbstop);
- // how to check?
+ // how to check?
char* updateMethod = GetAuxValue(ti, "update");
if (updateMethod && atoi(updateMethod) == UPD_EVENTID) // by event ID?
{
@@ -923,7 +923,7 @@ void cSearchTimerThread::CheckManualTimers()
tEventID eventID = 0;
char* szEventID = GetAuxValue(ti, "eventid");
if (szEventID)
- eventID = atol(szEventID);
+ eventID = atol(szEventID);
LogFile.Log(3,"checking manual timer %d by event ID %u", ti->Index()+1, eventID);
const cEvent* event = schedule->GetEvent(eventID);
if (event)
@@ -954,13 +954,13 @@ void cSearchTimerThread::CheckManualTimers()
if (eventlist.Count() > 0)
{
// choose the event with the best match by duration
- long origlen = (ti->StopTime() - bstop) - (ti->StartTime() + bstart);
+ long origlen = (ti->StopTime() - bstop) - (ti->StartTime() + bstart);
double maxweight = 0;
const cEvent* event = eventlist.First()->event;
for (cSearchResult* pResultObj = eventlist.First(); pResultObj; pResultObj = eventlist.Next(pResultObj))
{
const cEvent* testevent = pResultObj->event;
- time_t start = (testevent->StartTime() < ti->StartTime()) ? ti->StartTime() : testevent->StartTime();
+ time_t start = (testevent->StartTime() < ti->StartTime()) ? ti->StartTime() : testevent->StartTime();
time_t stop = (testevent->EndTime() > ti->StopTime()) ? ti->StopTime() : testevent->EndTime();
double weight = double(stop - start) / double(testevent->EndTime() - testevent->StartTime());
LogFile.Log(3,"candidate '%s~%s' (%s - %s) timer match: %f, duration match: %f", testevent->Title(), testevent->ShortText()?testevent->ShortText():"", GETDATESTRING(testevent), GETTIMESTRING(testevent), weight, (double(testevent->EndTime() - testevent->StartTime()) / origlen));
@@ -972,7 +972,7 @@ void cSearchTimerThread::CheckManualTimers()
}
LogFile.Log(3,"selected candidate is '%s~%s' (%s - %s)", event->Title(), event->ShortText()?event->ShortText():"", GETDATESTRING(event), GETTIMESTRING(event));
if ((maxweight > 0 && event->StartTime() - bstart != ti->StartTime()) || (event->EndTime() + bstop != ti->StopTime()))
- ModifyManualTimer(event, ti, bstart, bstop);
+ ModifyManualTimer(event, ti, bstart, bstop);
else if (maxweight <= 0)
LogFile.Log(3,"selected candidate is too bad");
}
@@ -980,7 +980,7 @@ void cSearchTimerThread::CheckManualTimers()
LogFile.Log(1,"ooops - no events found touching manual timer %d", ti->Index()+1);
}
if (updateMethod) free(updateMethod);
- }
+ }
}
LogFile.Log(1, "manual timer check finished");
}
@@ -988,7 +988,7 @@ void cSearchTimerThread::CheckManualTimers()
// check if EPG is present for the configured hours
void cSearchTimerThread::CheckEPGHours()
{
- if (EPGSearchConfig.checkEPGHours <= 0 ||
+ if (EPGSearchConfig.checkEPGHours <= 0 ||
(EPGSearchConfig.checkEPGWarnByOSD == 0 && EPGSearchConfig.checkEPGWarnByMail == 0) ||
EPGSearchConfig.checkEPGchannelGroupNr <= 0)
return;
@@ -1004,45 +1004,45 @@ void cSearchTimerThread::CheckEPGHours()
LogFile.Log(2,"checking channel group '%s'", channelGroup->name);
time_t checkTime = time(NULL) + EPGSearchConfig.checkEPGHours * 60 * 60;
-
+
cSchedulesLock schedulesLock;
const cSchedules *schedules;
schedules = cSchedules::Schedules(schedulesLock);
-
+
cChannelGroup channelsWithSmallEPG;
cChannelGroupItem* channelInGroup = channelGroup->channels.First();
- while (channelInGroup)
+ while (channelInGroup)
{
cChannel* channel = channelInGroup->channel;
// get the channels schedule
const cSchedule* schedule = schedules->GetSchedule(channel);
- if (!schedule || !schedule->GetEventAround(checkTime))
+ if (!schedule || !schedule->GetEventAround(checkTime))
{
LogFile.Log(3,"less than %d hours of EPG for channel %s!", EPGSearchConfig.checkEPGHours, channel->Name());
cChannelGroupItem* channelitem = new cChannelGroupItem(channel);
channelsWithSmallEPG.channels.Add(channelitem);
}
channelInGroup = channelGroup->channels.Next(channelInGroup);
- }
+ }
// create a string list of the channels found
if (channelsWithSmallEPG.channels.Count() > 0)
{
string sBuffer;
channelInGroup = channelsWithSmallEPG.channels.First();
- while (channelInGroup)
+ while (channelInGroup)
{
cChannel* channel = channelInGroup->channel;
if (channel)
sBuffer += " " + string(channel->ShortName(true));
channelInGroup = channelsWithSmallEPG.channels.Next(channelInGroup);
- }
-
-
+ }
+
+
if (EPGSearchConfig.checkEPGWarnByOSD)
{
cString msgfmt = cString::sprintf(tr("small EPG content on:%s"), sBuffer.c_str());
- SendMsg(msgfmt);
+ SendMsg(msgfmt);
}
if (EPGSearchConfig.checkEPGWarnByMail)
{
diff --git a/searchtimer_thread.h b/searchtimer_thread.h
index 541f12c..b7a84bc 100644
--- a/searchtimer_thread.h
+++ b/searchtimer_thread.h
@@ -75,4 +75,4 @@ class cSearchTimerThread: public cThread {
void CheckEPGHours();
};
-#endif
+#endif
diff --git a/services.c b/services.c
index 30d3cc6..9dc7141 100644
--- a/services.c
+++ b/services.c
@@ -42,13 +42,13 @@ std::list<std::string> cEpgsearchServiceHandler::SearchTimerList()
{
std::list<std::string> list;
cMutexLock SearchExtsLock(&SearchExts);
- for (int i = 0; i < SearchExts.Count(); i++)
+ for (int i = 0; i < SearchExts.Count(); i++)
{
cSearchExt* search = SearchExts.Get(i);
if (search)
list.push_back(search->ToText());
}
- return list;
+ return list;
}
int cEpgsearchServiceHandler::AddSearchTimer(const std::string& settings)
@@ -85,7 +85,7 @@ bool cEpgsearchServiceHandler::ModSearchTimer(const std::string& settings)
LogFile.Log(1,"modified search '%s' (%d) via service interface", searchTemp->search, searchTemp->ID);
SearchExts.Save();
if (searchTemp->useAsSearchTimer && !EPGSearchConfig.useSearchTimers) // enable search timer thread if necessary
- cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
+ cSearchTimerThread::Init((cPluginEpgsearch*) cPluginManager::GetPlugin("epgsearch"), true);
return true;
}
}
@@ -122,14 +122,14 @@ std::list<std::string> cEpgsearchServiceHandler::TranslateResults(cSearchResults
// transfer to result list
pCompleteSearchResults->SortBy(CompareEventTime);
cSearchResult *result = pCompleteSearchResults->First();
- while (result && result->search)
+ while (result && result->search)
{
const cEvent* pEvent = result->event;
cTimer* Timer = new cTimer(pEvent);
-
+
static char bufStart[25];
static char bufEnd[25];
-
+
struct tm tm_r; time_t eStart = pEvent->StartTime();
time_t eStop = pEvent->EndTime();
time_t start = eStart - (result->search->MarginStart * 60);
@@ -139,18 +139,18 @@ std::list<std::string> cEpgsearchServiceHandler::TranslateResults(cSearchResults
start = pEvent->Vps();
stop = start + pEvent->Duration();
}
-
+
strftime(bufStart, sizeof(bufStart), "%H%M", localtime_r(&start, &tm_r));
strftime(bufEnd, sizeof(bufEnd), "%H%M", localtime_r(&stop, &tm_r));
-
+
int timerMatch;
bool hasTimer = false;
- if (Timers.GetMatch(pEvent, &timerMatch))
+ if (Timers.GetMatch(pEvent, &timerMatch))
hasTimer = (timerMatch == tmFull);
-
+
if (!result->search->useAsSearchTimer)
result->needsTimer = false;
-
+
cChannel *channel = Channels.GetByChannelID(pEvent->ChannelID(), true, true);
int timerMode = hasTimer?1:(result->needsTimer?2:0);
@@ -161,7 +161,7 @@ std::list<std::string> cEpgsearchServiceHandler::TranslateResults(cSearchResults
std::string description = pEvent->Description()?ReplaceAll(pEvent->Description(), "|", "!^pipe!^"):"";
description = ReplaceAll(description, ":", "|");
- cString cmdbuf = cString::sprintf("%d:%u:%s:%s:%s:%ld:%ld:%s:%ld:%ld:%s:%d",
+ cString cmdbuf = cString::sprintf("%d:%u:%s:%s:%s:%ld:%ld:%s:%ld:%ld:%s:%d",
result->search->ID,
pEvent->EventID(),
title.c_str(),
@@ -173,8 +173,8 @@ std::list<std::string> cEpgsearchServiceHandler::TranslateResults(cSearchResults
timerMode>0?start:-1,
timerMode>0?stop:-1,
timerMode>0?result->search->BuildFile(pEvent):"",
- timerMode);
-
+ timerMode);
+
list.push_back(*cmdbuf);
delete(Timer);
@@ -203,20 +203,20 @@ std::list<std::string> cEpgsearchServiceHandler::QuerySearch(std::string query)
std::list<std::string> list;
cSearchExt* temp_SearchExt = new cSearchExt;
- if (temp_SearchExt->Parse(query.c_str()))
+ if (temp_SearchExt->Parse(query.c_str()))
{
- cSearchResults* pCompleteSearchResults = temp_SearchExt->Run();
+ cSearchResults* pCompleteSearchResults = temp_SearchExt->Run();
list = TranslateResults(pCompleteSearchResults);
if (pCompleteSearchResults) delete pCompleteSearchResults;
}
delete temp_SearchExt;
- return list;
+ return list;
}
std::list<std::string> cEpgsearchServiceHandler::ExtEPGInfoList()
{
std::list<std::string> list;
- for (int i = 0; i < SearchExtCats.Count(); i++)
+ for (int i = 0; i < SearchExtCats.Count(); i++)
{
cSearchExtCat *SearchExtCat = SearchExtCats.Get(i);
if (SearchExtCat)
@@ -228,7 +228,7 @@ std::list<std::string> cEpgsearchServiceHandler::ExtEPGInfoList()
std::list<std::string> cEpgsearchServiceHandler::ChanGrpList()
{
std::list<std::string> list;
- for (int i = 0; i < ChannelGroups.Count(); i++)
+ for (int i = 0; i < ChannelGroups.Count(); i++)
{
cChannelGroup *changrp = ChannelGroups.Get(i);
if (changrp)
@@ -242,13 +242,13 @@ std::list<std::string> cEpgsearchServiceHandler::BlackList()
std::list<std::string> list;
cMutexLock BlacklistLock(&Blacklists);
- for (int i = 0; i < Blacklists.Count(); i++)
+ for (int i = 0; i < Blacklists.Count(); i++)
{
cBlacklist* blacklist = Blacklists.Get(i);
if (blacklist)
list.push_back(blacklist->ToText());
}
- return list;
+ return list;
}
std::set<std::string> cEpgsearchServiceHandler::DirectoryList()
@@ -276,8 +276,8 @@ std::list<std::string> cEpgsearchServiceHandler::TimerConflictList(bool relOnly)
{
std::list<std::string> list;
cConflictCheck conflictCheck;
- conflictCheck.Check();
-
+ conflictCheck.Check();
+
if ((relOnly && conflictCheck.numConflicts > 0) ||
conflictCheck.relevantConflicts > 0)
{
@@ -286,13 +286,13 @@ std::list<std::string> cEpgsearchServiceHandler::TimerConflictList(bool relOnly)
for(cConflictCheckTime* ct = failedList->First(); ct; ct = failedList->Next(ct))
{
if (relOnly && ct->ignore) continue;
-
+
std::ostringstream conflline;
conflline << ct->evaltime << ":";
std::set<cConflictCheckTimerObj*,TimerObjSort>::iterator it;
-
+
std::ostringstream timerparts;
- for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
+ for (it = ct->failedTimers.begin(); it != ct->failedTimers.end(); it++)
{
if (relOnly && (*it)->ignore) continue;
std::ostringstream timerpart;
@@ -302,7 +302,7 @@ std::list<std::string> cEpgsearchServiceHandler::TimerConflictList(bool relOnly)
if ((*it)->concurrentTimers)
{
std::ostringstream cctimers;
- for (itcc = (*it)->concurrentTimers->begin(); itcc != (*it)->concurrentTimers->end(); itcc++)
+ for (itcc = (*it)->concurrentTimers->begin(); itcc != (*it)->concurrentTimers->end(); itcc++)
cctimers << (cctimers.str().empty()?"":"#") << (*itcc)->origIndex+1;
timerpart << cctimers.str();
}
@@ -312,17 +312,17 @@ std::list<std::string> cEpgsearchServiceHandler::TimerConflictList(bool relOnly)
list.push_back(conflline.str());
}
}
-
+
// set advised to false after an external conflict check
if (gl_timerStatusMonitor) gl_timerStatusMonitor->SetConflictCheckAdvised(false);
- return list;
+ return list;
}
bool cEpgsearchServiceHandler::IsConflictCheckAdvised()
{
- return gl_timerStatusMonitor?gl_timerStatusMonitor->ConflictCheckAdvised():false;
-}
+ return gl_timerStatusMonitor?gl_timerStatusMonitor->ConflictCheckAdvised():false;
+}
std::set<std::string> cEpgsearchServiceHandler::ShortDirectoryList()
{
diff --git a/services.h b/services.h
index 748d94d..209f57e 100644
--- a/services.h
+++ b/services.h
@@ -100,7 +100,7 @@ struct Epgsearch_searchresults_v1_0
bool useDescription; // search in description
// out
- class cServiceSearchResult : public cListObject
+ class cServiceSearchResult : public cListObject
{
public:
const cEvent* event;
@@ -119,7 +119,7 @@ struct Epgsearch_switchtimer_v1_0
// in/out
int switchMinsBefore;
int announceOnly;
-// out
+// out
bool success; // result
};
@@ -128,7 +128,7 @@ class cServiceHandler
{
public:
virtual std::list<std::string> SearchTimerList() = 0;
- // returns a list of search timer entries in the same format as used in epgsearch.conf
+ // returns a list of search timer entries in the same format as used in epgsearch.conf
virtual int AddSearchTimer(const std::string&) = 0;
// adds a new search timer and returns its ID (-1 on error)
virtual bool ModSearchTimer(const std::string&) = 0;
@@ -136,11 +136,11 @@ class cServiceHandler
virtual bool DelSearchTimer(int) = 0;
// deletes search timer with given ID and returns success
virtual std::list<std::string> QuerySearchTimer(int) = 0;
- // returns the search result of the searchtimer with given ID in the same format as used in SVDRP command 'QRYS' (->MANUAL)
+ // returns the search result of the searchtimer with given ID in the same format as used in SVDRP command 'QRYS' (->MANUAL)
virtual std::list<std::string> QuerySearch(std::string) = 0;
- // returns the search result of the searchtimer with given settings in the same format as used in SVDRP command 'QRYS' (->MANUAL)
+ // returns the search result of the searchtimer with given settings in the same format as used in SVDRP command 'QRYS' (->MANUAL)
virtual std::list<std::string> ExtEPGInfoList() = 0;
- // returns a list of extended EPG categories in the same format as used in epgsearchcats.conf
+ // returns a list of extended EPG categories in the same format as used in epgsearchcats.conf
virtual std::list<std::string> ChanGrpList() = 0;
// returns a list of channel groups maintained by epgsearch
virtual std::list<std::string> BlackList() = 0;
@@ -165,9 +165,9 @@ class cServiceHandler_v1_1 : public cServiceHandler
{
public:
// Get timer conflicts
- virtual std::list<std::string> TimerConflictList(bool relOnly=false) = 0;
+ virtual std::list<std::string> TimerConflictList(bool relOnly=false) = 0;
// Check if a conflict check is advised
- virtual bool IsConflictCheckAdvised() = 0;
+ virtual bool IsConflictCheckAdvised() = 0;
};
struct Epgsearch_services_v1_1
@@ -183,7 +183,7 @@ class cServiceHandler_v1_2 : public cServiceHandler_v1_1
// List of all recording directories used in recordings, timers (and optionally search timers or in epgsearchdirs.conf)
virtual std::set<std::string> ShortDirectoryList() = 0;
// Evaluate an expression against an event
- virtual std::string Evaluate(const std::string& expr, const cEvent* event) = 0;
+ virtual std::string Evaluate(const std::string& expr, const cEvent* event) = 0;
};
struct Epgsearch_services_v1_2
diff --git a/svdrpclient.h b/svdrpclient.h
index 2ca7dd3..16d4716 100644
--- a/svdrpclient.h
+++ b/svdrpclient.h
@@ -41,7 +41,7 @@ public:
{
bConnected = false;
sock = socket(PF_INET, SOCK_STREAM, 0);
- if (sock < 0)
+ if (sock < 0)
{
LogFile.eSysLog("error creating socket!");
return;
@@ -68,7 +68,7 @@ public:
close(sock);
}
- bool SendCmd(const char* cmd)
+ bool SendCmd(const char* cmd)
{
if (!bConnected)
return false;
@@ -83,12 +83,12 @@ public:
long rc = 0;
if ((rc = Receive()) != SVDRPDISCONNECT)
LogFile.eSysLog("could not disconnect (%ld)!", rc);
-
+
close(sock);
sock = -1;
return cmdret;
}
- bool Send(const char* szSend)
+ bool Send(const char* szSend)
{
int length = strlen(szSend);
int sent = 0;
@@ -104,7 +104,7 @@ public:
while ( sent < length );
return true;
}
- long Receive()
+ long Receive()
{
char* csResp = strdup("");
char ch;
@@ -134,7 +134,7 @@ public:
}
free(csResp);
csResp = strdup("");
- }
+ }
free(csResp);
return rc;
}
diff --git a/switchtimer.c b/switchtimer.c
index 8a0d6df..e1d3f12 100644
--- a/switchtimer.c
+++ b/switchtimer.c
@@ -60,7 +60,7 @@ bool cSwitchTimer::Parse(const char *s)
char value[MAXVALUELEN];
startTime=0;
-
+
pos = line = strdup(s);
pos_next = pos + strlen(pos);
if (*pos_next == '\n') *pos_next = 0;
@@ -72,12 +72,12 @@ bool cSwitchTimer::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
valuelen = MAXVALUELEN;
strn0cpy(value, pos, valuelen);
pos = pos_next;
switch (parameter) {
- case 1:
+ case 1:
channelID = tChannelID::FromString(value);
break;
case 2:
@@ -103,7 +103,7 @@ bool cSwitchTimer::Parse(const char *s)
}
if (*pos) pos++;
} //while
-
+
free(line);
return (parameter >= 3) ? true : false;
}
@@ -118,7 +118,7 @@ const cEvent* cSwitchTimer::Event()
const cSchedules* schedules = cSchedules::Schedules(schedulesLock);
if (!schedules) return NULL;
const cSchedule *Schedule = schedules->GetSchedule(channelID);
- if (Schedule)
+ if (Schedule)
{
event = Schedule->GetEvent(eventID, startTime);
if (!event)
@@ -138,9 +138,9 @@ cString cSwitchTimer::ToText(bool& ignore)
}
cChannel *channel = Channels.GetByChannelID(channelID, true, true);
if (!channel) return NULL;
- cString buffer = cString::sprintf("%s:%u:%ld:%d:%d:%d",
- CHANNELSTRING(channel), eventID,
- startTime, switchMinsBefore,
+ cString buffer = cString::sprintf("%s:%u:%ld:%d:%d:%d",
+ CHANNELSTRING(channel), eventID,
+ startTime, switchMinsBefore,
mode, unmute?1:0);
return buffer;
}
@@ -160,10 +160,10 @@ cSwitchTimer* cSwitchTimers::InSwitchList(const cEvent* event)
if (!event) return false;
cMutexLock SwitchTimersLock(this);
cSwitchTimer* switchTimer = SwitchTimers.First();
- while (switchTimer)
+ while (switchTimer)
{
- if (switchTimer->eventID == event->EventID() &&
- switchTimer->channelID == event->ChannelID() &&
+ if (switchTimer->eventID == event->EventID() &&
+ switchTimer->channelID == event->ChannelID() &&
switchTimer->startTime == event->StartTime())
return switchTimer;
switchTimer = SwitchTimers.Next(switchTimer);
@@ -175,7 +175,7 @@ bool cSwitchTimers::Exists(const cSwitchTimer* SwitchTimer)
{
cMutexLock SwitchTimersLock(this);
cSwitchTimer* switchTimer = SwitchTimers.First();
- while (switchTimer)
+ while (switchTimer)
{
if (switchTimer == SwitchTimer)
return true;
diff --git a/switchtimer.h b/switchtimer.h
index 9cf168b..526452c 100644
--- a/switchtimer.h
+++ b/switchtimer.h
@@ -45,7 +45,7 @@ public:
bool Save(FILE *f);
};
-class cSwitchTimers : public cConfig<cSwitchTimer>, public cMutex
+class cSwitchTimers : public cConfig<cSwitchTimer>, public cMutex
{
public:
cSwitchTimers(void) {}
diff --git a/switchtimer_thread.c b/switchtimer_thread.c
index 9f48421..9c8e2fc 100644
--- a/switchtimer_thread.c
+++ b/switchtimer_thread.c
@@ -40,7 +40,7 @@ cSwitchTimerThread::cSwitchTimerThread(void)
}
cSwitchTimerThread::~cSwitchTimerThread() {
- if (m_Active)
+ if (m_Active)
Stop();
}
@@ -64,10 +64,10 @@ void cSwitchTimerThread::Stop(void) {
Cancel(6);
}
-void cSwitchTimerThread::Action(void)
+void cSwitchTimerThread::Action(void)
{
m_Active = true;
-
+
// let VDR do its startup
if (!cPluginEpgsearch::VDR_readyafterStartup)
LogFile.Log(2, "SwitchTimerThread: waiting for VDR to become ready...");
@@ -75,7 +75,7 @@ void cSwitchTimerThread::Action(void)
Wait.Wait(1000);
time_t nextUpdate = time(NULL);
- while (m_Active)
+ while (m_Active)
{
time_t now = time(NULL);
if (now >= nextUpdate)
@@ -84,7 +84,7 @@ void cSwitchTimerThread::Action(void)
SwitchTimers.Lock();
LogFile.Log(3,"switch timer check started");
cSwitchTimer* switchTimer = SwitchTimers.First();
- while (switchTimer && m_Active)
+ while (switchTimer && m_Active)
{
if (switchTimer->startTime - now < switchTimer->switchMinsBefore*60 + MSG_DELAY + 1)
{
@@ -94,10 +94,10 @@ void cSwitchTimerThread::Action(void)
bool doUnmute = switchTimer->unmute;
SwitchTimers.Del(switchTimer);
- const cEvent* event = switchTimer->Event();
+ const cEvent* event = switchTimer->Event();
if (event && channel && (event->EndTime() >= now))
{
- cString Message = cString::sprintf("%s: %s - %s", event->Title(),
+ cString Message = cString::sprintf("%s: %s - %s", event->Title(),
CHANNELNAME(channel), GETTIMESTRING(event));
cString SwitchCmd = cString::sprintf("CHAN %d", channel->Number());
// switch
@@ -121,13 +121,13 @@ void cSwitchTimerThread::Action(void)
LogFile.Log(1,"switching to channel %d", channel->Number());
if (cDevice::CurrentChannel() != channel->Number())
SendViaSVDRP(SwitchCmd);
-
+
if (doUnmute && cDevice::PrimaryDevice()->IsMute())
cDevice::PrimaryDevice()->ToggleMute();
}
- }
-
+ }
+
if (m_Active)
Wait.Wait(1000 * MSG_DELAY);
}
diff --git a/switchtimer_thread.h b/switchtimer_thread.h
index 3ae946b..81bbb43 100644
--- a/switchtimer_thread.h
+++ b/switchtimer_thread.h
@@ -44,4 +44,4 @@ class cSwitchTimerThread: public cThread {
static void Exit(void);
};
-#endif
+#endif
diff --git a/templatefile.c b/templatefile.c
index 8a4b2a6..370f53d 100644
--- a/templatefile.c
+++ b/templatefile.c
@@ -38,7 +38,7 @@ bool cMenuTemplate::PrepareTemplate(const char* templateLine)
pstrSearchToken=strtok_r(pstrSearch, "|", &pptr);
cString stripped;
int iToken = 0;
- while(pstrSearchToken)
+ while(pstrSearchToken)
{
char* tmp = strchr(pstrSearchToken,':');
if (tmp)
@@ -107,12 +107,12 @@ bool cTemplLine::Parse(char *s)
if (s && s[0] == '#')
return true;
char *p = strchr(s, '=');
- if (p)
+ if (p)
{
*p = 0;
char *Name = compactspace(s);
char *Value = compactspace(p + 1);
- if (*Name)
+ if (*Name)
{
name = strdup(Name);
value = strdup(Value);
@@ -130,7 +130,7 @@ cTemplFile::cTemplFile()
void cTemplFile::Reset()
{
std::set<cMenuTemplate*>::iterator it;
- for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
+ for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
delete (*it);
menuTemplates.clear();
}
@@ -138,7 +138,7 @@ void cTemplFile::Reset()
cMenuTemplate* cTemplFile::GetTemplateByName(const char* Name)
{
std::set<cMenuTemplate*>::iterator it;
- for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
+ for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
if (!strcasecmp(Name, (*it)->Name())) return (*it);
return NULL;
}
@@ -149,15 +149,15 @@ bool cTemplFile::Load(const char *FileName)
if (strstr(Setup.FontOsd, "VDRSymbols") == Setup.FontOsd)
EPGSearchConfig.WarEagle = 1;
- if (cConfig<cTemplLine>::Load(FileName, true))
+ if (cConfig<cTemplLine>::Load(FileName, true))
{
bool result = true;
- for (cTemplLine *l = First(); l; l = Next(l))
+ for (cTemplLine *l = First(); l; l = Next(l))
{
bool error = false;
if (!Parse(l->Name(), l->Value()))
error = true;
- if (error)
+ if (error)
{
result = false;
}
@@ -175,18 +175,18 @@ bool cTemplFile::Parse(const char *Name, const char *Value)
EPGSearchConfig.WarEagle = atoi(Value);
return true;
}
-
+
if (!strcasecmp(Name, "MenuWhatsOnNow") ||
!strcasecmp(Name, "MenuWhatsOnNext") ||
!strcasecmp(Name, "MenuWhatsOnElse") ||
!strcasecmp(Name, "MenuSchedule") ||
- !strncasecmp(Name, "MenuSearchResults", strlen("MenuSearchResults")) ||
+ !strncasecmp(Name, "MenuSearchResults", strlen("MenuSearchResults")) ||
!strcasecmp(Name, "MenuFavorites"))
{
cMenuTemplate* menuTemplate = new cMenuTemplate(Name);
if (menuTemplate->PrepareTemplate(Value))
{
- LogFile.Log(3, "loaded menu template: %s", Name);
+ LogFile.Log(3, "loaded menu template: %s", Name);
cMenuTemplate* TemplOld = GetTemplateByName(Name);
if (TemplOld)
{
@@ -198,9 +198,9 @@ bool cTemplFile::Parse(const char *Name, const char *Value)
return true;
}
}
- else
+ else
{
- LogFile.eSysLog("ERROR: unknown parameter: %s = %s", Name, Value);
+ LogFile.eSysLog("ERROR: unknown parameter: %s = %s", Name, Value);
return false;
}
return true;
@@ -209,7 +209,7 @@ bool cTemplFile::Parse(const char *Name, const char *Value)
void cTemplFile::PrepareDefaultTemplates()
{
char channelnr[20] = "";
- sprintf(channelnr, "%%chnr%%:%d|", CHNUMWIDTH);
+ sprintf(channelnr, "%%chnr%%:%d|", CHNUMWIDTH);
bool text2skin = !(strcmp(Setup.OSDSkin, "soppalusikka") == 0 ||
strcmp(Setup.OSDSkin, "classic") == 0 ||
@@ -225,15 +225,15 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (WhatsOnNow && WhatsOnNow->MenuTemplate() == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%s%s$status$:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%s%s$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"",
EPGSearchConfig.showProgress==0?"":(EPGSearchConfig.showProgress==1?"%progrT2S%:4|":"%progr%:5|"),
text2skin?" ":"");
WhatsOnNow->PrepareTemplate(menutemplate);
}
-
+
// What's on next and else
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:7|$status$:4|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:7|$status$:4|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
cMenuTemplate* WhatsOnNext = GetTemplateByName("MenuWhatsOnNext");
if (!WhatsOnNext)
@@ -244,7 +244,7 @@ void cTemplFile::PrepareDefaultTemplates()
if (WhatsOnNext && WhatsOnNext->MenuTemplate() == 0)
WhatsOnNext->PrepareTemplate(menutemplate);
cMenuTemplate* WhatsOnElse = GetTemplateByName("MenuWhatsOnElse");
- if (!WhatsOnElse)
+ if (!WhatsOnElse)
{
WhatsOnElse = new cMenuTemplate("MenuWhatsOnElse");
menuTemplates.insert(WhatsOnElse);
@@ -254,7 +254,7 @@ void cTemplFile::PrepareDefaultTemplates()
// Schedule
cMenuTemplate* Schedule = GetTemplateByName("MenuSchedule");
- if (!Schedule)
+ if (!Schedule)
{
Schedule = new cMenuTemplate("MenuSchedule");
menuTemplates.insert(Schedule);
@@ -274,7 +274,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (SearchResults && SearchResults->MenuTemplate() == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%datesh%%:6|%%time%%:6|$status$:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%datesh%%:6|%%time%%:6|$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
SearchResults->PrepareTemplate(menutemplate);
}
@@ -288,7 +288,7 @@ void cTemplFile::PrepareDefaultTemplates()
}
if (Favorites && Favorites->MenuTemplate() == 0)
{
- sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%%timespan%%:7|$status$:3|%%title%% ~ %%subtitle%%:30",
+ sprintf(menutemplate, "%s%%chsh%%:12|%%time%%:6|%%timespan%%:7|$status$:3|%%title%% ~ %%subtitle%%:30",
EPGSearchConfig.showChannelNr?channelnr:"");
Favorites->PrepareTemplate(menutemplate);
}
@@ -299,7 +299,7 @@ void cTemplFile::PrepareDefaultTemplates()
SearchTemplates = new char*[CountSearchResultsTemplates()];
std::set<cMenuTemplate*>::iterator it;
int Count = 0;
- for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
+ for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
if (!strncasecmp("MenuSearchResults", (*it)->Name(), strlen("MenuSearchResults")))
{
char* templateName = strdup((*it)->Name() + strlen("MenuSearchResults"));
@@ -312,7 +312,7 @@ int cTemplFile::CountSearchResultsTemplates()
{
int Count = 0;
std::set<cMenuTemplate*>::iterator it;
- for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
+ for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
if (!strncasecmp("MenuSearchResults", (*it)->Name(), strlen("MenuSearchResults"))) Count++;
return Count;
}
@@ -321,7 +321,7 @@ cMenuTemplate* cTemplFile::GetSearchTemplateByPos(int iPos)
{
int Count = 0;
std::set<cMenuTemplate*>::iterator it;
- for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
+ for (it = menuTemplates.begin(); it != menuTemplates.end(); it++)
if (!strncasecmp("MenuSearchResults", (*it)->Name(), strlen("MenuSearchResults")))
if(Count++ == iPos)
return (*it);
diff --git a/templatefile.h b/templatefile.h
index 93af155..85cad22 100644
--- a/templatefile.h
+++ b/templatefile.h
@@ -37,15 +37,15 @@ class cMenuTemplate
private:
char name[MAXTEMPLLEN];
char* menuTemplate;
- int menuTabs[cSkinDisplayMenu::MaxTabs];
+ int menuTabs[cSkinDisplayMenu::MaxTabs];
public:
- cMenuTemplate(const char* Name)
+ cMenuTemplate(const char* Name)
{
- strcpy(name, Name);
+ strcpy(name, Name);
menuTemplate = 0;
for(int i=0; i<cSkinDisplayMenu::MaxTabs; i++) menuTabs[i] = 0;
}
- ~cMenuTemplate()
+ ~cMenuTemplate()
{
if (menuTemplate) free(menuTemplate);
}
@@ -69,7 +69,7 @@ public:
};
-class cTemplFile : public cConfig<cTemplLine>
+class cTemplFile : public cConfig<cTemplLine>
{
public:
static set<cMenuTemplate*> menuTemplates; // the set of all templates
diff --git a/timer_thread.c b/timer_thread.c
index 5f24e38..823a456 100644
--- a/timer_thread.c
+++ b/timer_thread.c
@@ -47,7 +47,7 @@ cTimerThread::cTimerThread()
}
cTimerThread::~cTimerThread() {
- if (m_Active)
+ if (m_Active)
Stop();
cTimerThread::m_Instance = NULL;
}
@@ -73,7 +73,7 @@ void cTimerThread::Stop(void) {
Cancel(3);
}
-void cTimerThread::Action(void)
+void cTimerThread::Action(void)
{
m_Active = true;
if (EPGSearchConfig.useExternalSVDRP && !cSVDRPClient::SVDRPSendCmd)
@@ -82,9 +82,9 @@ void cTimerThread::Action(void)
m_Active = false;
return;
}
- while (m_Active)
+ while (m_Active)
{
- if (Timers.BeingEdited())
+ if (Timers.BeingEdited())
{
sleepSec(1);
continue;
@@ -101,7 +101,7 @@ void cTimerThread::Action(void)
else
{
gl_TimerProgged = 1;
- if (gl_timerStatusMonitor) gl_timerStatusMonitor->SetConflictCheckAdvised();
+ if (gl_timerStatusMonitor) gl_timerStatusMonitor->SetConflictCheckAdvised();
}
m_Active = false;
};
diff --git a/timer_thread.h b/timer_thread.h
index d3b43f3..f38627e 100644
--- a/timer_thread.h
+++ b/timer_thread.h
@@ -56,4 +56,4 @@ public:
void Exit(void);
};
-#endif
+#endif
diff --git a/timerdone.c b/timerdone.c
index eea0336..52e9eeb 100644
--- a/timerdone.c
+++ b/timerdone.c
@@ -54,7 +54,7 @@ bool cTimerDone::operator== (const cTimerDone &arg) const
{
if (title != arg.title) return false;
if (shorttext != "" && arg.shorttext != "" && shorttext != arg.shorttext) return false;
-
+
if (searchID > -1 && arg.searchID > -1)
return searchID == arg.searchID;
else
@@ -71,11 +71,11 @@ bool cTimerDone::Parse(const char *s)
char *pos_next;
int parameter = 1;
int valuelen;
-
+
#define MAXVALUELEN (10 * MaxFileName)
-
+
char value[MAXVALUELEN];
-
+
pos = line = strdup(s);
pos_next = pos + strlen(pos);
if (*pos_next == '\n') *pos_next = 0;
@@ -87,9 +87,9 @@ bool cTimerDone::Parse(const char *s)
if (!pos_next)
pos_next = pos + strlen(pos);
valuelen = pos_next - pos + 1;
- if (valuelen > MAXVALUELEN)
+ if (valuelen > MAXVALUELEN)
{
- LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
+ LogFile.eSysLog("entry '%s' is too long. Will be truncated!", pos);
valuelen = MAXVALUELEN;
}
strn0cpy(value, pos, valuelen);
@@ -115,8 +115,8 @@ bool cTimerDone::Parse(const char *s)
}
if (*pos) pos++;
} //while
-
-
+
+
title = ReplaceAll(title, "|", ":");
shorttext = ReplaceAll(shorttext, "|", ":");
@@ -129,10 +129,10 @@ cString cTimerDone::ToText(void) const
cChannel *channel = Channels.GetByChannelID(channelID, true, true);
string info = string(DAYDATETIME(start)) + " - " + string(channel?channel->Name():"");
- cString buffer = cString::sprintf("%s:%ld:%ld:%d:%s:%s:%s",
+ cString buffer = cString::sprintf("%s:%ld:%ld:%d:%s:%s:%s",
*channelID.ToString(),
start,
- stop,
+ stop,
searchID,
ReplaceAll(title, ":", "|").c_str(),
ReplaceAll(shorttext, ":", "|").c_str(),
@@ -161,12 +161,12 @@ cTimerDone* cTimersDone::InList(const time_t Start, const time_t Stop, const cEv
{
cTimerDone td(Start, Stop, pEvent, SearchID);
cTimerDone* timerdone = First();
- while (timerdone)
+ while (timerdone)
{
if (*timerdone == td)
return timerdone;
timerdone = Next(timerdone);
- }
+ }
return NULL;
}
@@ -174,19 +174,19 @@ void cTimersDone::ClearOutdated(void)
{
// remove outdated items
cTimerDone* timerdone = First();
- while (timerdone)
+ while (timerdone)
{
cTimerDone* timerdoneNext = Next(timerdone);
if (timerdone->stop < time(NULL))
Del(timerdone);
timerdone = timerdoneNext;
- }
+ }
}
void cTimersDone::Update(const time_t Start, const time_t Stop, const cEvent* pEvent, const int SearchID, cTimerDone* Timerdone)
-{
+{
cTimerDone* timerdone = InList(Start, Stop, pEvent, SearchID);
- if(timerdone)
+ if(timerdone)
{
timerdone->start = Timerdone->start;
timerdone->stop = Timerdone->stop;
@@ -203,11 +203,11 @@ void cTimersDone::Update(const time_t Start, const time_t Stop, const cEvent* pE
void cTimersDone::RemoveEntriesOfSearch(const int SearchID)
{
cTimerDone* timerdone = First();
- while (timerdone)
+ while (timerdone)
{
cTimerDone* timerdoneNext = Next(timerdone);
if (timerdone->searchID == SearchID)
Del(timerdone);
timerdone = timerdoneNext;
- }
+ }
}
diff --git a/timerdone.h b/timerdone.h
index 0f292d7..9cf44d2 100644
--- a/timerdone.h
+++ b/timerdone.h
@@ -34,7 +34,7 @@ class cTimerDone : public cListObject {
public:
time_t start; // Start time of the timer
time_t stop; // Stop time of the timer
- tChannelID channelID;
+ tChannelID channelID;
int searchID;
string title;
string shorttext;
diff --git a/timerstatus.h b/timerstatus.h
index 9cfc925..61b933d 100644
--- a/timerstatus.h
+++ b/timerstatus.h
@@ -27,15 +27,15 @@ The project's page is at http://winni.vdr-developer.org/epgsearch
enum eTimerChange { tcMod, tcAdd, tcDel };
#endif
-class cTimerStatusMonitor : public cStatus
+class cTimerStatusMonitor : public cStatus
{
bool conflictCheckAdvised;
protected:
virtual void TimerChange(const cTimer *Timer, eTimerChange Change);
public:
cTimerStatusMonitor();
- void SetConflictCheckAdvised(bool ConflictCheckAdvised = true);
- bool ConflictCheckAdvised();
+ void SetConflictCheckAdvised(bool ConflictCheckAdvised = true);
+ bool ConflictCheckAdvised();
};
extern cTimerStatusMonitor* gl_timerStatusMonitor;
diff --git a/uservars.c b/uservars.c
index 2da06f5..78d51ea 100644
--- a/uservars.c
+++ b/uservars.c
@@ -66,7 +66,7 @@ string cUserVar::Evaluate(const cEvent* e, bool escapeStrings)
// avoid double dir separators
int pos = 0;
while((pos = result.find("~~")) >= 0)
- result.replace(pos, 2, "~");
+ result.replace(pos, 2, "~");
return result;
}
@@ -78,15 +78,15 @@ string cUserVar::EvaluateShellCmd(const cEvent* e)
if (varparser.cmdArgs != "")
{
string args = varparser.cmdArgs;
- varparser.compExpr = args; //handle the args as composed expr
+ varparser.compExpr = args; //handle the args as composed expr
cmdArgs = EvaluateCompExpr(e, true);
}
const char* res = varparser.cmd->Execute(cmdArgs.c_str());
string result = res?res:"";
int crPos = 0; // remove any CR
while((crPos = result.find("\n")) >= 0)
- result.replace(crPos, 1, "");
-
+ result.replace(crPos, 1, "");
+
return result;
}
@@ -98,8 +98,8 @@ string cUserVar::EvaluateConnectCmd(const cEvent* e)
int conn_s; /* connection socket */
struct sockaddr_in servaddr; /* socket address structure */
char buffer[MAX_LINE]; /* character buffer */
-
- if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
+
+ if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
{
LogFile.eSysLog("Error creating listening socket");
return "";
@@ -115,7 +115,7 @@ string cUserVar::EvaluateConnectCmd(const cEvent* e)
return "";
}
- if ( connect(conn_s, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 )
+ if ( connect(conn_s, (struct sockaddr *) &servaddr, sizeof(servaddr) ) < 0 )
{
LogFile.eSysLog("Error calling connect()");
return "";
@@ -145,7 +145,7 @@ string cUserVar::EvaluateCondExpr(const cEvent* e, bool escapeStrings)
string resRight = rightExp.Evaluate(e);
if (varparser.condOp == condEq && resLeft == resRight) condresult = "1"; // assign any value
if (varparser.condOp == condNeq && resLeft != resRight) condresult = "1"; // assign any value
-
+
cUserVar* condVarTrue = UserVars.GetFromName(varparser.condvarTrue);
cUserVar* condVarFalse = UserVars.GetFromName(varparser.condvarFalse);
if (!condVarTrue || !condVarFalse) return "";
@@ -188,13 +188,13 @@ string cUserVar::EvaluateInternalVars(const string& Expr, const cEvent* e, bool
if (expr.find('%') == string::npos) return expr;
std::map<string, cInternalVar*>::iterator it;
- for (it = UserVars.internalVars.begin(); it != UserVars.internalVars.end(); it++)
+ for (it = UserVars.internalVars.begin(); it != UserVars.internalVars.end(); it++)
{
string varName = (it->second)->Name();
int varPos = 0;
while((varPos = FindIgnoreCase(expr, varName)) >= 0)
{
- usedVars.insert(it->second);
+ usedVars.insert(it->second);
expr.replace(varPos, varName.size(), (it->second)->Evaluate(e, escapeStrings));
}
}
@@ -207,14 +207,14 @@ string cUserVar::EvaluateExtEPGVars(const string& Expr, const cEvent* e, bool es
if (expr.find('%') == string::npos) return expr;
std::map<string, cExtEPGVar*>::iterator evar;
- for (evar = UserVars.extEPGVars.begin(); evar != UserVars.extEPGVars.end(); evar++)
+ for (evar = UserVars.extEPGVars.begin(); evar != UserVars.extEPGVars.end(); evar++)
{
string varName = evar->second->Name();
int varPos = 0;
while((varPos = FindIgnoreCase(expr, varName)) >= 0)
{
expr.replace(varPos, varName.size(), evar->second->Evaluate(e, escapeStrings));
- usedVars.insert(evar->second);
+ usedVars.insert(evar->second);
}
}
return expr;
@@ -226,7 +226,7 @@ string cUserVar::EvaluateUserVars(const string& Expr, const cEvent* e, bool esca
if (expr.find('%') == string::npos) return expr;
std::set<cUserVar*>::iterator it;
- for (it = UserVars.userVars.begin(); it != UserVars.userVars.end(); it++)
+ for (it = UserVars.userVars.begin(); it != UserVars.userVars.end(); it++)
{
string varName = (*it)->Name();
int varPos = 0;
@@ -245,7 +245,7 @@ string cUserVar::EvaluateInternalTimerVars(const string& Expr, const cTimer* t)
if (expr.find('%') == string::npos) return expr;
std::map<string, cTimerVar*>::iterator tvar;
- for (tvar = UserVars.internalTimerVars.begin(); tvar != UserVars.internalTimerVars.end(); tvar++)
+ for (tvar = UserVars.internalTimerVars.begin(); tvar != UserVars.internalTimerVars.end(); tvar++)
{
string varName = tvar->second->Name();
int varPos = 0;
@@ -264,7 +264,7 @@ string cUserVar::EvaluateInternalSearchVars(const string& Expr, const cSearchExt
if (expr.find('%') == string::npos) return expr;
std::map<string, cSearchVar*>::iterator svar;
- for (svar = UserVars.internalSearchVars.begin(); svar != UserVars.internalSearchVars.end(); svar++)
+ for (svar = UserVars.internalSearchVars.begin(); svar != UserVars.internalSearchVars.end(); svar++)
{
string varName = svar->second->Name();
int varPos = 0;
@@ -289,7 +289,7 @@ bool cUserVar::DependsOnVar(cUserVar* var)
if (!var) return false;
if (usedVars.find(var) != usedVars.end()) return true;
std::set<cUserVar*>::iterator it;
- for (it = usedVars.begin(); it != usedVars.end(); it++)
+ for (it = usedVars.begin(); it != usedVars.end(); it++)
if ((*it)->DependsOnVar(var))
return true;
return false;
@@ -302,7 +302,7 @@ bool cUserVar::AddDepVar(cUserVar* var)
LogFile.eSysLog("ERROR - found cylic reference to var '%s' in var '%s'", var->Name().c_str(), Name().c_str());
return false;
}
- usedVars.insert(var);
+ usedVars.insert(var);
return true;
}
@@ -318,7 +318,7 @@ bool cUserVarLine::Parse(char *s)
if (s && s[0] == '#')
return true;
char *p = strchr(s, '=');
- if (p)
+ if (p)
{
cUserVar* userVar = new cUserVar;
if (userVar->varparser.Parse(s))
@@ -342,18 +342,18 @@ cUserVar* cUserVars::GetFromName(const string& varName, bool log)
{
string VarName = Strip(varName);
std::transform(VarName.begin(), VarName.end(), VarName.begin(), tolower);
-
+
std::map<string, cInternalVar*>::iterator ivar = internalVars.find(VarName);
- if (ivar != internalVars.end())
+ if (ivar != internalVars.end())
return ivar->second;
std::set<cUserVar*>::iterator uvar;
- for (uvar = userVars.begin(); uvar != userVars.end(); uvar++)
+ for (uvar = userVars.begin(); uvar != userVars.end(); uvar++)
if (EqualsNoCase((*uvar)->Name(), VarName))
return (*uvar);
std::map<string, cExtEPGVar*>::iterator evar = extEPGVars.find(VarName);
- if (evar != extEPGVars.end())
+ if (evar != extEPGVars.end())
return evar->second;
if (log)
diff --git a/uservars.h b/uservars.h
index e98c0ec..4d78f74 100644
--- a/uservars.h
+++ b/uservars.h
@@ -41,8 +41,8 @@ using std::map;
using std::ostringstream;
class cUserVar : public cListObject {
- const cEvent* oldEvent; // cache
- bool oldescapeStrings;
+ const cEvent* oldEvent; // cache
+ bool oldescapeStrings;
string oldResult;
string EvaluateCondExpr(const cEvent* e, bool escapeStrings = false);
@@ -80,12 +80,12 @@ class cExtEPGVar : public cUserVar {
string Name() { return name; }
bool IsCondExpr() { return false; }
bool IsShellCmd() { return false; }
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cSearchExtCat* SearchExtCat = SearchExtCats.First();
- while (SearchExtCat)
+ while (SearchExtCat)
{
string varName = string("%") + SearchExtCat->name + string("%");
int varPos = FindIgnoreCase(varName, name);
@@ -113,9 +113,9 @@ class cInternalVar : public cUserVar {
class cTitleVar : public cInternalVar {
public:
cTitleVar() : cInternalVar("%title%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
{
- string res = (e && !isempty(e->Title()))? e->Title() : "";
+ string res = (e && !isempty(e->Title()))? e->Title() : "";
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -123,9 +123,9 @@ public:
class cSubtitleVar : public cInternalVar {
public:
cSubtitleVar() : cInternalVar("%subtitle%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
{
- string res = (e && !isempty(e->ShortText()))? e->ShortText() : "";
+ string res = (e && !isempty(e->ShortText()))? e->ShortText() : "";
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -133,9 +133,9 @@ public:
class cSummaryVar : public cInternalVar {
public:
cSummaryVar() : cInternalVar("%summary%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- string res = (e && !isempty(e->Description()))? e->Description() : "";
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ string res = (e && !isempty(e->Description()))? e->Description() : "";
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -143,8 +143,8 @@ public:
class cHTMLSummaryVar : public cInternalVar {
public:
cHTMLSummaryVar() : cInternalVar("%htmlsummary%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (e && !isempty(e->Description()))
{
string res = ReplaceAll(e->Description(), "\n", "<br />");
@@ -158,9 +158,9 @@ public:
class cEventIDVar : public cInternalVar {
public:
cEventIDVar() : cInternalVar("%eventid%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- if (e)
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ if (e)
{
ostringstream os;
os << e->EventID();
@@ -172,12 +172,12 @@ public:
class cLiveEventIDVar : public cInternalVar {
public:
cLiveEventIDVar() : cInternalVar("%liveeventid%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cChannel *channel = Channels.GetByChannelID(e->ChannelID(), true);
if (!channel) return "";
-
+
string res(channel->GetChannelID().ToString());
res = "event_" + res;
res = ReplaceAll(res, ".", "p");
@@ -190,9 +190,9 @@ public:
class cTimeVar : public cInternalVar {
public:
cTimeVar() : cInternalVar("%time%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- string res = (e? *(e->GetTimeString()) : "");
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ string res = (e? *(e->GetTimeString()) : "");
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -200,9 +200,9 @@ public:
class cTimeEndVar : public cInternalVar {
public:
cTimeEndVar() : cInternalVar("%timeend%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- string res = (e? *(e->GetEndTimeString()) : "");
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ string res = (e? *(e->GetEndTimeString()) : "");
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -210,9 +210,9 @@ public:
class cTime_wVar : public cInternalVar {
public:
cTime_wVar() : cInternalVar("%time_w%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- string res = (e? WEEKDAYNAME(e->StartTime()) : "");
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ string res = (e? WEEKDAYNAME(e->StartTime()) : "");
if (escapeStrings) return "'" + EscapeString(res) + "'"; else return res;
}
};
@@ -220,8 +220,8 @@ public:
class cTime_dVar : public cInternalVar {
public:
cTime_dVar() : cInternalVar("%time_d%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char day[3] = "";
struct tm tm_r;
@@ -235,8 +235,8 @@ public:
class cTime_lngVar : public cInternalVar {
public:
cTime_lngVar() : cInternalVar("%time_lng%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
ostringstream os;
os << e->StartTime();
@@ -247,8 +247,8 @@ public:
class cTimeSpanVar : public cInternalVar {
public:
cTimeSpanVar() : cInternalVar("%timespan%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
time_t diff = e->StartTime() - time(NULL);
string res;
@@ -286,17 +286,17 @@ public:
class cLength_Var : public cInternalVar {
public:
cLength_Var() : cInternalVar("%length%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
- return (e? NumToString(e->Duration()) : "");
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
+ return (e? NumToString(e->Duration()) : "");
}
};
class cDateVar : public cInternalVar {
public:
cDateVar() : cInternalVar("%date%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char date[9] = "";
struct tm tm_r;
@@ -310,8 +310,8 @@ public:
class cDateShortVar : public cInternalVar {
public:
cDateShortVar() : cInternalVar("%datesh%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char dateshort[7] = "";
struct tm tm_r;
@@ -325,8 +325,8 @@ public:
class cDateISOVar : public cInternalVar {
public:
cDateISOVar() : cInternalVar("%date_iso%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char dateISO[11] = "";
struct tm tm_r;
@@ -340,8 +340,8 @@ public:
class cYearVar : public cInternalVar {
public:
cYearVar() : cInternalVar("%year%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char year[5] = "";
struct tm tm_r;
@@ -355,8 +355,8 @@ public:
class cMonthVar : public cInternalVar {
public:
cMonthVar() : cInternalVar("%month%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char month[3] = "";
struct tm tm_r;
@@ -370,8 +370,8 @@ public:
class cDayVar : public cInternalVar {
public:
cDayVar() : cInternalVar("%day%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char day[3] = "";
struct tm tm_r;
@@ -385,8 +385,8 @@ public:
class cWeekVar : public cInternalVar {
public:
cWeekVar() : cInternalVar("%week%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
char day[3] = "";
struct tm tm_r;
@@ -400,8 +400,8 @@ public:
class cChannelNrVar : public cInternalVar {
public:
cChannelNrVar() : cInternalVar("%chnr%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
int chnr = ChannelNrFromEvent(e);
if (chnr < 0) return "";
return NumToString(chnr);
@@ -411,8 +411,8 @@ public:
class cChannelShortVar : public cInternalVar {
public:
cChannelShortVar() : cInternalVar("%chsh%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cChannel *channel = Channels.GetByChannelID(e->ChannelID(), true);
string res = channel?channel->ShortName(true):"";
@@ -423,8 +423,8 @@ public:
class cChannelLongVar : public cInternalVar {
public:
cChannelLongVar() : cInternalVar("%chlng%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cChannel *channel = Channels.GetByChannelID(e->ChannelID(), true);
string res = channel?channel->Name():"";
@@ -435,8 +435,8 @@ public:
class cChannelDataVar : public cInternalVar {
public:
cChannelDataVar() : cInternalVar("%chdata%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cChannel *channel = Channels.GetByChannelID(e->ChannelID(), true);
return channel?CHANNELSTRING(channel):"";
@@ -446,8 +446,8 @@ class cChannelDataVar : public cInternalVar {
class cChannelGroupVar : public cInternalVar {
public:
cChannelGroupVar() : cInternalVar("%chgrp%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
ostringstream os;
cChannel *channel = Channels.GetByChannelID(e->ChannelID(), true);
@@ -462,8 +462,8 @@ public:
class cNEWTCmdVar : public cInternalVar {
public:
cNEWTCmdVar() : cInternalVar("%newtcmd%") {}
- string Evaluate(const cEvent* e, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent* e, bool escapeStrings = false)
+ {
if (!e) return "";
cTimer* timer = new cTimer(e);
string newtCmd = *(timer->ToText());
@@ -475,17 +475,17 @@ class cNEWTCmdVar : public cInternalVar {
class cColonVar : public cInternalVar {
public:
cColonVar() : cInternalVar("%colon%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
return ":";
}
};
-
+
class cDateNowVar : public cInternalVar {
public:
cDateNowVar() : cInternalVar("%datenow%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
char date[9] = "";
struct tm tm_r;
const time_t t = time(NULL);
@@ -498,8 +498,8 @@ class cDateNowVar : public cInternalVar {
class cDateShortNowVar : public cInternalVar {
public:
cDateShortNowVar() : cInternalVar("%dateshnow%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
char dateshort[7] = "";
struct tm tm_r;
const time_t t = time(NULL);
@@ -512,8 +512,8 @@ public:
class cDateISONowVar : public cInternalVar {
public:
cDateISONowVar() : cInternalVar("%date_iso_now%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
char dateISO[11] = "";
struct tm tm_r;
const time_t t = time(NULL);
@@ -526,8 +526,8 @@ public:
class cTimeNowVar : public cInternalVar {
public:
cTimeNowVar() : cInternalVar("%timenow%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
return TIMESTRING(time(NULL));
}
};
@@ -535,18 +535,18 @@ public:
class cVideodirVar : public cInternalVar {
public:
cVideodirVar() : cInternalVar("%videodir%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
return VideoDirectory;
}
};
-
+
class cPlugconfdirVar : public cInternalVar {
public:
static string dir;
cPlugconfdirVar() : cInternalVar("%plugconfdir%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
return dir;
}
};
@@ -555,8 +555,8 @@ class cEpgsearchconfdirVar : public cInternalVar {
public:
static string dir;
cEpgsearchconfdirVar() : cInternalVar("%epgsearchdir%") {}
- string Evaluate(const cEvent*, bool escapeStrings = false)
- {
+ string Evaluate(const cEvent*, bool escapeStrings = false)
+ {
return CONFIGDIR;
}
};
@@ -564,7 +564,7 @@ class cEpgsearchconfdirVar : public cInternalVar {
// timer variables
class cTimerVar {
const string name;
- public:
+ public:
cTimerVar(const string& Name) : name(Name) {}
virtual ~cTimerVar() {}
string Name() { return name; }
@@ -574,8 +574,8 @@ class cTimerVar {
class cTimerDateVar : public cTimerVar {
public:
cTimerDateVar() : cTimerVar("%timer.date%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
return DATESTRING(t->StartTime());
}
@@ -584,8 +584,8 @@ class cTimerDateVar : public cTimerVar {
class cTimerStartVar : public cTimerVar {
public:
cTimerStartVar() : cTimerVar("%timer.start%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
return TIMESTRING(t->StartTime());
}
@@ -594,8 +594,8 @@ class cTimerStartVar : public cTimerVar {
class cTimerStopVar : public cTimerVar {
public:
cTimerStopVar() : cTimerVar("%timer.stop%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
return TIMESTRING(t->StopTime());
}
@@ -604,8 +604,8 @@ class cTimerStopVar : public cTimerVar {
class cTimerFileVar : public cTimerVar {
public:
cTimerFileVar() : cTimerVar("%timer.file%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
return t->File();
}
@@ -614,8 +614,8 @@ class cTimerFileVar : public cTimerVar {
class cTimerChnrVar : public cTimerVar {
public:
cTimerChnrVar() : cTimerVar("%timer.chnr%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t || !t->Channel()) return "";
return NumToString(t->Channel()->Number());
}
@@ -624,8 +624,8 @@ class cTimerChnrVar : public cTimerVar {
class cTimerChannelShortVar : public cTimerVar {
public:
cTimerChannelShortVar() : cTimerVar("%timer.chsh%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t || !t->Channel()) return "";
return t->Channel()->ShortName(true);
}
@@ -634,8 +634,8 @@ public:
class cTimerChannelLongVar : public cTimerVar {
public:
cTimerChannelLongVar() : cTimerVar("%timer.chlng%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t || !t->Channel()) return "";
return t->Channel()->Name();
}
@@ -644,8 +644,8 @@ public:
class cTimerSearchVar : public cTimerVar {
public:
cTimerSearchVar() : cTimerVar("%timer.search%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
cSearchExt* s = TriggeredFromSearchTimer(t);
if (!s) return "";
@@ -656,8 +656,8 @@ class cTimerSearchVar : public cTimerVar {
class cTimerSearchIDVar : public cTimerVar {
public:
cTimerSearchIDVar() : cTimerVar("%timer.searchid%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t) return "";
int ID = TriggeredFromSearchTimerID(t);
if (ID < 0) return "";
@@ -668,12 +668,12 @@ class cTimerSearchIDVar : public cTimerVar {
class cTimerLiveIDVar : public cTimerVar {
public:
cTimerLiveIDVar() : cTimerVar("%timer.liveid%") {}
- string Evaluate(const cTimer* t)
- {
+ string Evaluate(const cTimer* t)
+ {
if (!t || !t->Channel()) return "";
ostringstream builder;
builder << *(t->Channel()->GetChannelID().ToString()) << ":" << t->WeekDays() << ":"
- << t->Day() << ":" << t->Start() << ":" << t->Stop();
+ << t->Day() << ":" << t->Start() << ":" << t->Stop();
string res = builder.str();
res = "timer_" + res;
res = ReplaceAll(res, ".", "p");
@@ -686,7 +686,7 @@ public:
// search variables
class cSearchVar {
const string name;
- public:
+ public:
cSearchVar(const string& Name) : name(Name) {}
virtual ~cSearchVar() {}
string Name() { return name; }
@@ -696,8 +696,8 @@ class cSearchVar {
class cSearchQueryVar : public cSearchVar {
public:
cSearchQueryVar() : cSearchVar("%search.query%") {}
- string Evaluate(const cSearchExt* s)
- {
+ string Evaluate(const cSearchExt* s)
+ {
if (!s) return "";
return s->search;
}
@@ -706,8 +706,8 @@ public:
class cSearchSeriesVar : public cSearchVar {
public:
cSearchSeriesVar() : cSearchVar("%search.series%") {}
- string Evaluate(const cSearchExt* s)
- {
+ string Evaluate(const cSearchExt* s)
+ {
if (!s) return "";
return NumToString(s->useEpisode);
}
@@ -760,8 +760,8 @@ class cUserVars : public cList<cUserVar> {
cTimerChnrVar timerChnrVar;
cTimerChannelShortVar timerChShortVar;
cTimerChannelLongVar timerChLongVar;
- cTimerSearchVar timerSearchVar;
- cTimerSearchIDVar timerSearchIDVar;
+ cTimerSearchVar timerSearchVar;
+ cTimerSearchIDVar timerSearchIDVar;
cTimerLiveIDVar timerLiveIDVar;
map<string, cExtEPGVar*> extEPGVars;
@@ -808,7 +808,7 @@ class cUserVars : public cList<cUserVar> {
internalVars[plugconfdirVar.Name()] = &plugconfdirVar;
internalVars[epgsearchconfdirVar.Name()] = &epgsearchconfdirVar;
- internalTimerVars[timerDateVar.Name()] = &timerDateVar;
+ internalTimerVars[timerDateVar.Name()] = &timerDateVar;
internalTimerVars[timerStartVar.Name()] = &timerStartVar;
internalTimerVars[timerStopVar.Name()] = &timerStopVar;
internalTimerVars[timerFileVar.Name()] = &timerFileVar;
@@ -826,7 +826,7 @@ class cUserVars : public cList<cUserVar> {
void InitExtEPGVars()
{
cSearchExtCat* SearchExtCat = SearchExtCats.First();
- while (SearchExtCat)
+ while (SearchExtCat)
{
string varName = string("%") + SearchExtCat->name + string("%");
std::transform(varName.begin(), varName.end(), varName.begin(), tolower);
@@ -838,7 +838,7 @@ class cUserVars : public cList<cUserVar> {
void ResetCache()
{
cUserVar* var = First();
- while (var)
+ while (var)
{
var->ResetCache();
var = Next(var);
@@ -867,18 +867,18 @@ public:
};
-class cUserVarFile : public cConfig<cUserVarLine>
+class cUserVarFile : public cConfig<cUserVarLine>
{
public:
cUserVarFile() { UserVars.Clear(); };
};
-class cVarExpr
+class cVarExpr
{
string expr;
public:
set<cUserVar*> usedVars;
- cVarExpr(const string& Expr) : expr(Expr) {}
+ cVarExpr(const string& Expr) : expr(Expr) {}
string Evaluate(const cEvent* e = NULL);
string Evaluate(const cTimer* t);
string Evaluate(const cSearchExt* s);
diff --git a/varparser.c b/varparser.c
index ec69a31..fb5f83a 100644
--- a/varparser.c
+++ b/varparser.c
@@ -33,7 +33,7 @@ bool cVarParser::Parse(const string& input)
}
bool cVarParser::ParseAssign(const string& input)
-{
+{
int assignPos = input.find("=");
if (assignPos >= 0)
{
@@ -45,7 +45,7 @@ bool cVarParser::ParseAssign(const string& input)
return ParseExp(assign);
}
}
- LogFile.eSysLog("error parsing '%s'", input.c_str());
+ LogFile.eSysLog("error parsing '%s'", input.c_str());
return false;
}
@@ -77,7 +77,7 @@ bool cVarParser::ParseExp(const string& input)
}
// composed expression
compExpr = input;
- return true;
+ return true;
}
bool cVarParser::ParseShellCmd(const string& input)
@@ -145,7 +145,7 @@ bool cVarParser::ParseLengthCmd(const string& input)
}
bool cVarParser::ParseCondExp(const string& input)
-{
+{
int condEndPos = input.find("?");
string cond(input.begin(), input.begin() + condEndPos);
int condNeqPos = cond.find("!=");
@@ -161,14 +161,14 @@ bool cVarParser::ParseCondExp(const string& input)
{
if (!ParseEquality(cond))
{
- LogFile.eSysLog("error parsing '%s'", input.c_str());
+ LogFile.eSysLog("error parsing '%s'", input.c_str());
return false;
}
condOp = (condEqPos >= 0)?condEq:condNeq;
}
else
{
- LogFile.eSysLog("error parsing '%s'", input.c_str());
+ LogFile.eSysLog("error parsing '%s'", input.c_str());
return false;
}
@@ -180,13 +180,13 @@ bool cVarParser::ParseCondExp(const string& input)
string falsePart(truefalse.begin() + elsePos + 1, truefalse.end());
if (ParseVar(truePart) && ParseVar(falsePart))
{
- condvarTrue = Strip(truePart);
- condvarFalse = Strip(falsePart);
+ condvarTrue = Strip(truePart);
+ condvarFalse = Strip(falsePart);
type = cVarParser::condition;
return true;
}
}
- LogFile.eSysLog("error parsing '%s'", input.c_str());
+ LogFile.eSysLog("error parsing '%s'", input.c_str());
condEqLeft = condEqRight = "";
return false;
}
@@ -211,7 +211,7 @@ bool cVarParser::ParseEquality(const string& input)
}
bool cVarParser::ParseVar(const string& input)
-{
+{
string str = Strip(input);
if (str.size() > 2 && str[0] == '%' && str[str.size()-1] == '%')
return true;
diff --git a/varparser.h b/varparser.h
index 328b812..0a7dc9b 100644
--- a/varparser.h
+++ b/varparser.h
@@ -48,7 +48,7 @@ class cVarParser
connectcmd,
lengthcmd
} exprType;
-
+
public:
string varName;
string condEqLeft;
@@ -62,7 +62,7 @@ class cVarParser
string cmdArgs;
string connectAddr;
- int connectPort;
+ int connectPort;
exprType type;
cVarParser() : cmd(NULL), connectPort(-1), type(composed) {}