Hello community, here is the log from the commit of package vdr for openSUSE:Factory checked in at 2019-03-10 09:32:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/vdr (Old) and /work/SRC/openSUSE:Factory/.vdr.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "vdr" Sun Mar 10 09:32:11 2019 rev:51 rq:680779 version:2.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/vdr/vdr.changes 2018-12-04 20:54:19.932852699 +0100 +++ /work/SRC/openSUSE:Factory/.vdr.new.28833/vdr.changes 2019-03-10 09:32:13.372222473 +0100 @@ -1,0 +2,41 @@ +Tue Feb 12 09:06:59 UTC 2019 - Jan Engelhardt <[email protected]> + +- Do not ignore errors from useradd. +- Replace overly strong PreReq by Requires(pre)/Requires, + or in case of documentation, drop it. + +------------------------------------------------------------------- +Mon Jan 7 10:20:52 UTC 2019 - [email protected] + +- require pkg-config from vdr-devel +- vdr does not provide vdr-devel + +------------------------------------------------------------------- +Sat Dec 29 21:21:35 UTC 2018 - [email protected] + +- add official after-release-patches from + ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/: + - vdr-2.4.0-01-fix-svdrp-modt-recflag.diff + - vdr-2.4.0-02-fix-invalid-locking-sequence.diff + - vdr-2.4.0-03-fix-locking-channel-display.diff + - vdr-2.4.0-04-fix-locking-channel-display-2.diff + - vdr-2.4.0-05-fix-shutdown.diff + - vdr-2.4.0-06-fix-channel-switch.diff + - vdr-2.4.0-07-fix-disabling-mtd.diff + +------------------------------------------------------------------- +Wed Dec 26 20:49:41 UTC 2018 - Stefan Seyfried <[email protected]> + +- own /etc/vdr/plugins, which is needed by almost every plugin + +------------------------------------------------------------------- +Wed Dec 26 13:45:21 UTC 2018 - Stefan Seyfried <[email protected]> + +- update to stable vdr-2.4.0 release + - see HISTORY file for detailed changelog +- renamed / rebased patch: + - vdr-2.3.9-use-ncurses5.diff -> vdr-2.4.0-use-ncurses5.diff +- removed dvbhddevice hack from specfile (plugin no longer in + vdr tarball) + +------------------------------------------------------------------- @@ -7,0 +49,15 @@ + +------------------------------------------------------------------- +Wed Mar 21 12:43:09 UTC 2018 - [email protected] + +- update to unstable vdr-2.3.9 release +- removed obsoleted patches: + - vdr-2.0.6-wareagle-fix.patch + - vdr-1.7.36-wareagle.patch +- renamed / rebased patches: + - vdr-1.7.29-menuselection.patch -> vdr-2.3.9-menuselection.patch + - vdr-2.0.4-MainMenuHooks-v1_0_1.patch -> vdr-2.3.9-MainMenuHooks-v1_0_1.patch + - vdr-2.2.0-gcc7.diff -> vdr-2.3.9-gcc7.diff + - vdr-2.2.0-use-ncurses5.diff -> vdr-2.3.9-use-ncurses5.diff +- added 16_vdr_wareagleicon.patch (from minidvblinux.de git) +- disabled vdr-2.2.0-dynamite.diff for now Old: ---- vdr-1.7.29-menuselection.patch vdr-1.7.36-wareagle.patch vdr-2.0.4-MainMenuHooks-v1_0_1.patch vdr-2.0.6-wareagle-fix.patch vdr-2.2.0-dynamite.diff vdr-2.2.0-gcc7.diff vdr-2.2.0-use-ncurses5.diff vdr-2.2.0.tar.bz2 New: ---- 16_vdr_wareagleicon.patch vdr-2.3.9-MainMenuHooks-v1_0_1.patch vdr-2.3.9-gcc7.diff vdr-2.3.9-menuselection.patch vdr-2.4.0-01-fix-svdrp-modt-recflag.diff vdr-2.4.0-02-fix-invalid-locking-sequence.diff vdr-2.4.0-03-fix-locking-channel-display.diff vdr-2.4.0-04-fix-locking-channel-display-2.diff vdr-2.4.0-05-fix-shutdown.diff vdr-2.4.0-06-fix-channel-switch.diff vdr-2.4.0-07-fix-disabling-mtd.diff vdr-2.4.0-use-ncurses5.diff vdr-2.4.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ vdr.spec ++++++ --- /var/tmp/diff_new_pack.x9cwpf/_old 2019-03-10 09:32:14.164222274 +0100 +++ /var/tmp/diff_new_pack.x9cwpf/_new 2019-03-10 09:32:14.164222274 +0100 @@ -1,7 +1,7 @@ # # spec file for package vdr # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,24 +17,8 @@ Name: vdr -BuildRequires: doxygen -BuildRequires: fdupes -BuildRequires: fontconfig-devel -BuildRequires: freetype2-devel -BuildRequires: gcc-c++ -BuildRequires: graphviz -BuildRequires: libcap-devel -BuildRequires: libjpeg-devel -BuildRequires: linux-glibc-devel -BuildRequires: ncurses-devel -%if 0%{?suse_version} >= 1330 -BuildRequires: ncurses5-devel -%endif -BuildRequires: pkg-config -BuildRequires: systemd-devel -# %define vdrname vdr -%define vdr_apiversion 2.2.0 +%define vdr_apiversion 2.4.0 %define vdr_localedir %{_datadir}/vdr/locale %define vdr_libdir %{_libdir}/vdr %define vdr_includedir %{_includedir}/vdr @@ -42,8 +26,7 @@ %define vdr_sysconfdir /etc/vdr # Url: http://www.tvdr.de/ -PreReq: /usr/sbin/useradd -Version: 2.2.0 +Version: 2.4.0 Release: 0 Summary: Video Disk Recorder License: GPL-2.0-or-later @@ -58,17 +41,41 @@ Source92: greenish.css Source95: vdr-doc.desktop # -Patch1: vdr-1.7.29-menuselection.patch +Patch1: vdr-2.3.9-menuselection.patch Patch2: vdr-1.7.21-pluginmissing.patch -Patch3: vdr-1.7.36-wareagle.patch -Patch4: vdr-2.2.0-dynamite.diff -Patch5: vdr-2.0.4-MainMenuHooks-v1_0_1.patch -Patch6: vdr-2.0.6-wareagle-fix.patch -Patch7: vdr-2.2.0-use-ncurses5.diff -Patch8: vdr-2.2.0-gcc7.diff +# from https://www.minidvblinux.de/git/?a=blob&p=vdr&h=6c20bf469703971cadd14f723265042968e38d24&n=16_vdr_wareagleicon.patch +# https://www.minidvblinux.de/git/?a=tree&p=vdr&h=d6462aa15f34fc9de0b74e4f7a4e9e84e56823e4&hb=d2650f877373711350e837aede55a0b0f87904e9 +Patch3: 16_vdr_wareagleicon.patch +#Patch4: vdr-2.2.0-dynamite.diff +Patch5: vdr-2.3.9-MainMenuHooks-v1_0_1.patch +Patch7: vdr-2.4.0-use-ncurses5.diff +Patch8: vdr-2.3.9-gcc7.diff +# "official" patches after release of tarball: +Patch101: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-01-fix-svdrp-modt-recflag.diff +Patch102: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-02-fix-invalid-locking-sequence.diff +Patch103: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-03-fix-locking-channel-display.diff +Patch104: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-04-fix-locking-channel-display-2.diff +Patch105: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-05-fix-shutdown.diff +Patch106: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-06-fix-channel-switch.diff +Patch107: ftp://ftp.tvdr.de/vdr/Developer/Patches/vdr-2.4/vdr-2.4.0-07-fix-disabling-mtd.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build -Provides: vdr-devel +BuildRequires: doxygen +BuildRequires: fdupes +BuildRequires: fontconfig-devel +BuildRequires: freetype2-devel +BuildRequires: gcc-c++ +BuildRequires: graphviz +BuildRequires: libcap-devel +BuildRequires: libjpeg-devel +BuildRequires: linux-glibc-devel +BuildRequires: ncurses-devel +%if 0%{?suse_version} >= 1330 +BuildRequires: ncurses5-devel +%endif +BuildRequires: pkg-config +BuildRequires: systemd-devel +Requires(pre): /usr/sbin/useradd Provides: vdr(abi) = %vdr_apiversion Obsoletes: vdr(abi) < %vdr_apiversion Provides: vdrapi = %vdr_apiversion @@ -80,14 +87,14 @@ %endif %package devel -Summary: Video Disk Recorder +Summary: Header files for the Video Disk Recorder Group: Hardware/TV -PreReq: vdr = %version +Requires: pkg-config +Requires: vdr = %version %package devel-doc -Summary: Video Disk Recorder +Summary: Developer documentation for the Video Disk Recorder Group: Hardware/TV -PreReq: vdr-devel = %version BuildArch: noarch %description @@ -106,12 +113,20 @@ %prep %setup -q -n vdr-%{version} # +# official patches are applied first... +%patch101 -p0 +%patch102 -p0 +%patch103 -p0 +%patch104 -p0 +%patch105 -p0 +%patch106 -p0 +%patch107 -p0 +# %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch4 -p1 +#patch4 -p1 %patch5 -p1 -%patch6 -p1 # ## hack to apply patch7 either in rpmbuild if ncurses6 or during "quilt setup" case "`rpm -q ncurses-devel`" in @@ -131,8 +146,8 @@ # cat > Make.config <<EOF ### The C compiler options: -CFLAGS = $RPM_OPT_FLAGS -pie -fPIE -fPIC -Wall -CXXFLAGS = $RPM_OPT_FLAGS -pie -fPIE -fPIC -Wall -Werror=overloaded-virtual -Wparentheses +CFLAGS = %{optflags} -pie -fPIE -fPIC -Wall +CXXFLAGS = %{optflags} -pie -fPIE -fPIC -Wall -Werror=overloaded-virtual -Wparentheses ### The directory environment: PREFIX = %{_prefix} BINDIR = %{_bindir} @@ -163,20 +178,14 @@ cp -a %{SOURCE42} . chmod 0755 msgmerge -# kernel 4.19+ does not have needed APIs / drivers anymore... -%if 0%{?suse_version} >= 1550 -rm -rf PLUGINS/src/dvbhddevice/ -%endif - %build # to use msgmerge script export PATH=`pwd`:$PATH make %{?jobs:-j%jobs} -make plugins -make srcdoc +make plugins srcdoc %install -%makeinstall +%make_install install -m 644 *.conf %{buildroot}%{vdr_sysconfdir} install -m 644 Make.config %{buildroot}%{vdr_includedir} install -d -m 755 %{buildroot}%{_localstatedir}/cache/vdr @@ -228,9 +237,13 @@ # # firewall config install -m 644 -D %{SOURCE11} %{buildroot}/%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/%{name} +# +# empty directory for plugins +install -m 0755 -d %{buildroot}%{vdr_sysconfdir}/plugins %pre -/usr/sbin/useradd -r -d %{vdr_videodir} -s /bin/false -c "Video Disk Recorder" -g video vdr 2> /dev/null || : +getent passwd vdr >/dev/null || /usr/sbin/useradd -r -d %{vdr_videodir} \ + -s /bin/false -c "Video Disk Recorder" -g video vdr %files %defattr(-,root,root) @@ -241,6 +254,7 @@ %license COPYING %attr(755,vdr,root) %dir %{vdr_videodir} %attr(755,vdr,root) %dir %{vdr_sysconfdir} +%attr(755,vdr,root) %dir %{vdr_sysconfdir}/plugins %attr(755,vdr,root) %dir %{_localstatedir}/cache/vdr %dir %{vdr_libdir} %dir %{_datadir}/vdr ++++++ 16_vdr_wareagleicon.patch ++++++ --- vdr-2.3.8.orig/config.c +++ vdr-2.3.8/config.c @@ -376,6 +376,7 @@ cSetup::cSetup(void) strcpy(OSDLanguage, ""); // default is taken from environment strcpy(OSDSkin, "lcars"); strcpy(OSDTheme, "default"); + WarEagleIcons = 1; PrimaryDVB = 1; ShowInfoOnChSwitch = 1; TimeoutRequChInfo = 1; @@ -608,6 +609,7 @@ bool cSetup::Parse(const char *Name, con if (!strcasecmp(Name, "OSDLanguage")) { strn0cpy(OSDLanguage, Value, sizeof(OSDLanguage)); I18nSetLocale(OSDLanguage); } else if (!strcasecmp(Name, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName); else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName); + else if (!strcasecmp(Name, "WarEagleIcons")) WarEagleIcons = atoi(Value); else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value); else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value); else if (!strcasecmp(Name, "TimeoutRequChInfo")) TimeoutRequChInfo = atoi(Value); @@ -744,6 +746,7 @@ bool cSetup::Save(void) Store("OSDLanguage", OSDLanguage); Store("OSDSkin", OSDSkin); Store("OSDTheme", OSDTheme); + Store("WarEagleIcons", WarEagleIcons); Store("PrimaryDVB", PrimaryDVB); Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch); Store("TimeoutRequChInfo", TimeoutRequChInfo); --- vdr-2.3.8.orig/config.h +++ vdr-2.3.8/config.h @@ -258,6 +258,7 @@ public: char OSDLanguage[I18N_MAX_LOCALE_LEN]; char OSDSkin[MaxSkinName]; char OSDTheme[MaxThemeName]; + int WarEagleIcons; int PrimaryDVB; int ShowInfoOnChSwitch; int TimeoutRequChInfo; --- /dev/null +++ vdr-2.3.8/iconpatch.c @@ -0,0 +1,28 @@ + +#include "iconpatch.h" + +#include <langinfo.h> +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +bool IsLangUtf8(void) +{ + char *CodeSet = NULL; + if (setlocale(LC_CTYPE, "")) + CodeSet = nl_langinfo(CODESET); + else { + char *LangEnv = getenv("LANG"); // last resort in case locale stuff isn't installed + if (LangEnv) { + CodeSet = strchr(LangEnv, '.'); + if (CodeSet) + CodeSet++; // skip the dot + } + } + + if (CodeSet && strcasestr(CodeSet, "UTF-8") != 0) + return true; + + return false; +} --- /dev/null +++ vdr-2.3.8/iconpatch.h @@ -0,0 +1,74 @@ +/* + * iconpatch.h: Information of iconpatch + * + * Diese Datei ist die Übersichtsdatei für den Iconpatch. + * Hier werden kleine Infos abgelegt. + * Der Iconpatch ändert die Dateien: + * iconpatch.h + * menu.c + * recording.c + * fontosd.c + * + */ + +// Iconpatch-Variablen - Anfang +#define ICON_NUMBERSIGN "\x23" +#define ICON_ASTERISK "\x2A" +#define ICON_GREATER "\x3E" +#define ICON_EXCLAM "\x21" +#define ICON_PLUSMINUS "\xB1" + +#define ICON_RESUME "\x80" +#define ICON_DVD "\x81" +#define ICON_FOLDER "\x82" +#define ICON_BLANK "\x83" +#define ICON_CUTTING "\x84" +#define ICON_MOVE_FILE "\x85" +#define ICON_MOVE_FOLDER "\x86" +#define ICON_BAR_START "\x87" +#define ICON_BAR_FILLED "\x88" +#define ICON_BAR_CLEAR "\x89" +#define ICON_BAR_END "\x8A" +#define ICON_REC "\x8B" +#define ICON_CLOCK "\x8C" +#define ICON_TV_CRYPTED "\x8D" +#define ICON_RADIO "\x8E" +#define ICON_TV "\x8F" +#define ICON_NEW "\x90" +#define ICON_ARROW "\x91" +#define ICON_RUNNING "\x92" +#define ICON_VPS "\x93" +#define ICON_CLOCK_UH "\x94" +#define ICON_CLOCK_LH "\x95" +#define ICON_TIMER_INACT "\x96" + +// UTF-8 Icons +#define ICON_RESUME_UTF8 "\uE000" +#define ICON_DVD_UTF8 "\uE001" +#define ICON_FOLDER_UTF8 "\uE002" +#define ICON_BLANK_UTF8 "\uE003" +#define ICON_CUTTING_UTF8 "\uE004" +#define ICON_MOVE_FILE_UTF8 "\uE005" +#define ICON_MOVE_FOLDER_UTF8 "\uE006" +#define ICON_BAR_START_UTF8 "\uE007" +#define ICON_BAR_FILLED_UTF8 "\uE008" +#define ICON_BAR_EMPTY_UTF8 "\uE009" +#define ICON_BAR_CLOSE_UTF8 "\uE00A" +#define ICON_REC_UTF8 "\uE00B" +#define ICON_CLOCK_UTF8 "\uE00C" +#define ICON_TV_CRYPTED_UTF8 "\uE00D" +#define ICON_RADIO_UTF8 "\uE00E" +#define ICON_TV_UTF8 "\uE00F" +#define ICON_NEW_UTF8 "\uE010" +#define ICON_ARROW_UTF8 "\uE011" +#define ICON_RUNNING_UTF8 "\uE012" +#define ICON_VPS_UTF8 "\uE013" +#define ICON_CLOCK_UH_UTF8 "\uE014" +#define ICON_CLOCK_LH_UTF8 "\uE015" +#define ICON_TIMER_INACT_UTF8 "\uE016" + +// Iconpatch-Variablen - Ende + +bool IsLangUtf8(void); + + --- vdr-2.3.8.orig/menu.c +++ vdr-2.3.8/menu.c @@ -8,6 +8,7 @@ */ #include "menu.h" +#include "iconpatch.h" #include <ctype.h> #include <limits.h> #include <math.h> @@ -331,6 +332,14 @@ void cMenuChannelItem::Set(void) const char *R = !channel->Vpid() && (*channel->Apids() || *channel->Dpids()) ? "R" : ""; if (sortMode == csmProvider) buffer = cString::sprintf("%d\t%s%s\t%s - %s", channel->Number(), X, R, channel->Provider(), channel->Name()); + else if (Setup.WarEagleIcons) { + if (channel->Vpid() == 1 || channel->Vpid() == 0) + buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_RADIO_UTF8 : ICON_RADIO, channel->Name()); + else if (channel->Ca() == 0) + buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_TV_UTF8 : ICON_TV, channel->Name()); + else + buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_TV_CRYPTED_UTF8 : ICON_TV_CRYPTED, channel->Name()); + } else buffer = cString::sprintf("%d\t%s%s\t%s", channel->Number(), X, R, channel->Name()); } @@ -1224,8 +1233,8 @@ void cMenuTimerItem::Set(void) File++; else File = timer->File(); - SetText(cString::sprintf("%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s%s", - !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>', + SetText(cString::sprintf("%s\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s%s", + !(timer->HasFlags(tfActive)) ? " " : timer->FirstDay() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_ARROW_UTF8 : ICON_ARROW : "!" : timer->Recording() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_REC_UTF8 : ICON_REC : "#" : Setup.WarEagleIcons ? IsLangUtf8() ? ICON_CLOCK_UTF8 : ICON_CLOCK : ">", timer->Channel()->Number(), *name, *name && **name ? " " : "", @@ -1552,7 +1561,15 @@ int cMenuScheduleItem::Compare(const cLi return r; } -static const char *TimerMatchChars = " tT iI"; +static const char *TimerMatchChars[18] = +{ + " ", "t", "T", + " ", "i", "I", + ICON_BLANK, ICON_CLOCK_UH, ICON_CLOCK, + ICON_BLANK, ICON_BLANK, ICON_TIMER_INACT, // Zeichen für leer, kleines i, grosses I + ICON_BLANK_UTF8, ICON_CLOCK_UH_UTF8, ICON_CLOCK_UTF8, + ICON_BLANK_UTF8, ICON_BLANK_UTF8, ICON_TIMER_INACT_UTF8 // Zeichen utf8 für leer, kleines i, grosses I +}; bool cMenuScheduleItem::Update(const cTimers *Timers, bool Force) { @@ -1562,17 +1579,17 @@ bool cMenuScheduleItem::Update(const cTi timerActive = Timer && Timer->HasFlags(tfActive); if (Force || timerMatch != OldTimerMatch || timerActive != OldTimerActive) { cString buffer; - char t = TimerMatchChars[timerMatch + (timerActive ? 0 : 3)]; - char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' '; - char r = event->SeenWithin(30) && event->IsRunning() ? '*' : ' '; + const char *t = Setup.WarEagleIcons ? IsLangUtf8() ? TimerMatchChars[timerMatch + (timerActive ? 12 : 15)] : TimerMatchChars[timerMatch + (timerActive ? 6 : 9)] : TimerMatchChars[timerMatch + (timerActive ? 0 : 3)]; + const char *v = event->Vps() && (event->Vps() - event->StartTime()) ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_VPS_UTF8 : ICON_VPS : "V" : " "; + const char *r = event->SeenWithin(30) && event->IsRunning() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_RUNNING_UTF8 : ICON_RUNNING : "*" : " "; const char *csn = channel ? channel->ShortName(true) : NULL; cString eds = event->GetDateString(); if (channel && withDate) - buffer = cString::sprintf("%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title()); + buffer = cString::sprintf("%d\t%.*s\t%.*s\t%s\t%s%s%s\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title()); else if (channel) - buffer = cString::sprintf("%d\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, *event->GetTimeString(), t, v, r, event->Title()); + buffer = cString::sprintf("%d\t%.*s\t%s\t%s%s%s\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, *event->GetTimeString(), t, v, r, event->Title()); else - buffer = cString::sprintf("%.*s\t%s\t%c%c%c\t%s", Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title()); + buffer = cString::sprintf("%.*s\t%s\t%s%s%s\t%s", Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title()); SetText(buffer); return true; } @@ -3406,6 +3423,7 @@ void cMenuSetupOSD::Set(void) Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"), &skinIndex, numSkins, skinDescriptions)); if (themes.NumThemes()) Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"), &themeIndex, themes.NumThemes(), themes.Descriptions())); + Add(new cMenuEditBoolItem(tr("Setup.OSD$WarEagle icons"), &data.WarEagleIcons)); Add(new cMenuEditPrcItem( tr("Setup.OSD$Left (%)"), &data.OSDLeftP, 0.0, 0.5)); Add(new cMenuEditPrcItem( tr("Setup.OSD$Top (%)"), &data.OSDTopP, 0.0, 0.5)); Add(new cMenuEditPrcItem( tr("Setup.OSD$Width (%)"), &data.OSDWidthP, 0.5, 1.0)); --- vdr-2.3.8.orig/recording.c +++ vdr-2.3.8/recording.c @@ -8,6 +8,7 @@ */ #include "recording.h" +#include "iconpatch.h" #include <ctype.h> #include <dirent.h> #include <errno.h> @@ -1065,7 +1066,7 @@ const char *cRecording::FileName(void) c const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) const { - char New = NewIndicator && IsNew() ? '*' : ' '; + const char *New = NewIndicator && IsNew() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_NEW_UTF8 : ICON_NEW : "*" : " "; free(titleBuffer); titleBuffer = NULL; if (Level < 0 || Level == HierarchyLevels()) { @@ -1085,7 +1086,7 @@ const char *cRecording::Title(char Delim Minutes % 60 ); } - titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%s%c%c%s", + titleBuffer = strdup(cString::sprintf("%02d.%02d.%02d%c%02d:%02d%s%s%c%s", t->tm_mday, t->tm_mon + 1, t->tm_year % 100, --- vdr-2.3.8.orig/Makefile +++ vdr-2.3.8/Makefile @@ -83,6 +83,8 @@ OBJS = args.o audio.o channels.o ci.o co skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\ timers.o tools.o transfer.o vdr.o videodir.o +OBJS += iconpatch.o + DEFINES += $(CDEFINES) INCLUDES += $(CINCLUDES) ++++++ vdr-2.0.4-MainMenuHooks-v1_0_1.patch -> vdr-2.3.9-MainMenuHooks-v1_0_1.patch ++++++ --- /work/SRC/openSUSE:Factory/vdr/vdr-2.0.4-MainMenuHooks-v1_0_1.patch 2014-04-22 17:09:21.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.vdr.new.28833/vdr-2.3.9-MainMenuHooks-v1_0_1.patch 2019-03-10 09:32:12.764222625 +0100 @@ -70,10 +70,11 @@ authors first or at least use a service id which differs in more than just the version number. -diff -ru vdr.orig/menu.c vdr/menu.c ---- vdr.orig/menu.c 2013-03-18 09:11:48.000000000 +0000 -+++ vdr/menu.c 2013-03-27 17:29:58.767375783 +0000 -@@ -3379,15 +3379,31 @@ +Index: b/menu.c +=================================================================== +--- a/menu.c ++++ b/menu.c +@@ -4391,15 +4391,31 @@ cMenuMain::cMenuMain(eOSState State, boo // Initial submenus: @@ -111,7 +112,7 @@ } cOsdObject *cMenuMain::PluginOsdObject(void) -@@ -3495,13 +3511,34 @@ +@@ -4507,13 +4523,34 @@ eOSState cMenuMain::ProcessKey(eKeys Key eOSState state = cOsdMenu::ProcessKey(Key); HadSubMenu |= HasSubMenu(); @@ -150,9 +151,9 @@ + case osSetup: menu = new cMenuSetup; break; + case osCommands: menu = new cMenuCommands(tr("Commands"), &Commands); break; case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) { - cOsdItem *item = Get(Current()); - if (item) { -@@ -3553,6 +3590,12 @@ + if (cOsdItem *item = Get(Current())) { + cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING))); +@@ -4564,6 +4601,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key default: break; } } @@ -165,9 +166,10 @@ if (!HasSubMenu() && Update(HadSubMenu)) Display(); if (Key != kNone) { -diff -ru vdr.orig/config.h vdr/config.h ---- vdr.orig/config.h 2013-03-16 15:12:14.000000000 +0000 -+++ vdr/config.h 2013-03-27 17:50:05.204415063 +0000 +Index: b/config.h +=================================================================== +--- a/config.h ++++ b/config.h @@ -36,6 +36,10 @@ // plugins to work with newer versions of the core VDR as long as no // VDR header files have changed. @@ -179,4 +181,3 @@ #define MAXPRIORITY 99 #define MINPRIORITY (-MAXPRIORITY) #define LIVEPRIORITY 0 // priority used when selecting a device for live viewing - ++++++ vdr-2.2.0-gcc7.diff -> vdr-2.3.9-gcc7.diff ++++++ --- /work/SRC/openSUSE:Factory/vdr/vdr-2.2.0-gcc7.diff 2017-06-07 09:55:10.480792044 +0200 +++ /work/SRC/openSUSE:Factory/.vdr.new.28833/vdr-2.3.9-gcc7.diff 2019-03-10 09:32:12.804222615 +0100 @@ -1,37 +1,8 @@ -Index: b/dvbdevice.c -=================================================================== ---- a/dvbdevice.c -+++ b/dvbdevice.c -@@ -819,13 +819,13 @@ bool cDvbTuner::SetFrontend(void) - - SETCMD(DTV_DELIVERY_SYSTEM, frontendType); - if (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) { -- unsigned int frequency = channel.Frequency(); -+ int frequency = channel.Frequency(); - if (Setup.DiSEqC) { - if (const cDiseqc *diseqc = Diseqcs.Get(device->CardIndex() + 1, channel.Source(), frequency, dtp.Polarization(), &scr)) { - frequency -= diseqc->Lof(); - if (diseqc != lastDiseqc || diseqc->IsScr() || diseqc->Position() >= 0 && channel.Source() != lastSource) { - if (IsBondedMaster()) { -- ExecuteDiseqc(diseqc, &frequency); -+ ExecuteDiseqc(diseqc, (unsigned int *)&frequency); - if (frequency == 0) - return false; - } -@@ -842,7 +842,7 @@ bool cDvbTuner::SetFrontend(void) - } - else { - int tone = SEC_TONE_OFF; -- if (frequency < (unsigned int)Setup.LnbSLOF) { -+ if (frequency < Setup.LnbSLOF) { - frequency -= Setup.LnbFrequLo; - tone = SEC_TONE_OFF; - } Index: b/osdbase.c =================================================================== --- a/osdbase.c +++ b/osdbase.c -@@ -506,7 +506,7 @@ eOSState cOsdMenu::HotKey(eKeys Key) +@@ -518,7 +518,7 @@ eOSState cOsdMenu::HotKey(eKeys Key) const char *s = item->Text(); i = 0; item_nr = 0; @@ -44,12 +15,12 @@ =================================================================== --- a/remux.c +++ b/remux.c -@@ -1552,11 +1552,11 @@ int cFrameDetector::Analyze(const uchar - uint32_t Delta = ptsValues[0] / Div; - // determine frame info: +@@ -1729,11 +1729,11 @@ int cFrameDetector::Analyze(const uchar if (isVideo) { -- if (abs(Delta - 3600) <= 1) -+ if (abs((int32_t)Delta - 3600) <= 1) + if (Delta == 3753) + framesPerSecond = 24.0 / 1.001; +- else if (abs(Delta - 3600) <= 1) ++ else if (abs((int32_t)Delta - 3600) <= 1) framesPerSecond = 25.0; else if (Delta % 3003 == 0) framesPerSecond = 30.0 / 1.001; ++++++ vdr-1.7.29-menuselection.patch -> vdr-2.3.9-menuselection.patch ++++++ --- /work/SRC/openSUSE:Factory/vdr/vdr-1.7.29-menuselection.patch 2014-04-22 17:09:21.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.vdr.new.28833/vdr-2.3.9-menuselection.patch 2019-03-10 09:32:12.852222604 +0100 @@ -1,7 +1,8 @@ -diff -Nru vdr-1.7.29-vanilla/osdbase.c vdr-1.7.29-menuselection/osdbase.c ---- vdr-1.7.29-vanilla/osdbase.c 2012-07-17 22:37:09.000000000 +0300 -+++ vdr-1.7.29-menuselection/osdbase.c 2012-07-17 22:44:15.000000000 +0300 -@@ -77,6 +77,7 @@ +Index: b/osdbase.c +=================================================================== +--- a/osdbase.c ++++ b/osdbase.c +@@ -83,6 +83,7 @@ cOsdMenu::cOsdMenu(const char *Title, in { isMenu = true; digit = 0; @@ -9,7 +10,7 @@ hasHotkeys = false; displayMenuItems = 0; title = NULL; -@@ -126,7 +127,7 @@ +@@ -142,7 +143,7 @@ const char *cOsdMenu::hk(const char *s) digit = -1; // prevents automatic hotkeys - input already has them if (digit >= 0) { digit++; @@ -18,7 +19,7 @@ s = buffer; } } -@@ -472,20 +473,60 @@ +@@ -496,20 +497,60 @@ void cOsdMenu::Mark(void) } } @@ -82,7 +83,7 @@ return osContinue; } -@@ -524,8 +565,8 @@ +@@ -550,8 +591,8 @@ eOSState cOsdMenu::ProcessKey(eKeys Key) } } switch (int(Key)) { @@ -91,12 +92,13 @@ + case kNone: + case k0...k9: return hasHotkeys ? HotKey(Key) : osUnknown; case kUp|k_Repeat: - case kUp: CursorUp(); break; + case kUp: if (menuOrientation == moHorizontal) PageUp(); else CursorUp(); break; case kDown|k_Repeat: -diff -Nru vdr-1.7.29-vanilla/osdbase.h vdr-1.7.29-menuselection/osdbase.h ---- vdr-1.7.29-vanilla/osdbase.h 2012-07-17 22:37:09.000000000 +0300 -+++ vdr-1.7.29-menuselection/osdbase.h 2012-07-17 22:44:15.000000000 +0300 -@@ -97,6 +97,8 @@ +Index: b/osdbase.h +=================================================================== +--- a/osdbase.h ++++ b/osdbase.h +@@ -101,6 +101,8 @@ private: char *status; int digit; bool hasHotkeys; ++++++ vdr-2.4.0-01-fix-svdrp-modt-recflag.diff ++++++ # This patch fixes a bug in handling the tfRecording flag in the SVDRP commands MODT # and UPDT. The tfRecording flag must only be handled by the VDR that actually hosts # and processes the timer. # --- svdrp.c 2018/03/19 12:16:33 5.0 +++ svdrp.c 2018/04/19 09:45:08 @@ -2036,6 +2036,7 @@ LOCK_TIMERS_WRITE; Timers->SetExplicitModify(); if (cTimer *Timer = Timers->GetById(Id)) { + bool IsRecording = Timer->HasFlags(tfRecording); cTimer t = *Timer; if (strcasecmp(tail, "ON") == 0) t.SetFlags(tfActive); @@ -2046,6 +2047,10 @@ return; } *Timer = t; + if (IsRecording) + Timer->SetFlags(tfRecording); + else + Timer->ClrFlags(tfRecording); Timers->SetModified(); isyslog("SVDRP %s < %s modified timer %s (%s)", Setup.SVDRPHostName, *clientName, *Timer->ToDescr(), Timer->HasFlags(tfActive) ? "active" : "inactive"); Reply(250, "%d %s", Timer->Id(), *Timer->ToText(true)); @@ -2478,12 +2483,18 @@ if (Timer->Parse(Option)) { LOCK_TIMERS_WRITE; if (cTimer *t = Timers->GetTimer(Timer)) { + bool IsRecording = t->HasFlags(tfRecording); t->Parse(Option); delete Timer; Timer = t; + if (IsRecording) + Timer->SetFlags(tfRecording); + else + Timer->ClrFlags(tfRecording); isyslog("SVDRP %s < %s updated timer %s", Setup.SVDRPHostName, *clientName, *Timer->ToDescr()); } else { + Timer->ClrFlags(tfRecording); Timers->Add(Timer); isyslog("SVDRP %s < %s added timer %s", Setup.SVDRPHostName, *clientName, *Timer->ToDescr()); } ++++++ vdr-2.4.0-02-fix-invalid-locking-sequence.diff ++++++ # This patch fixes a possible invalid locking sequence in case a remote timer handling error message # is displayed on the OSD and the skin tries to lock the Recordings or DeletedRecordings # list in its Flush() function (for instance by calling cVideoDiskUsage::HasChanged()). # To do this, the call to Skins.Message() in menu.c's HandleRemoteModifications() has # been changed to Skins.QueueMessage(), and cSkins::ProcessQueuedMessages() is now called # unconditionally in the main loop, and checks whether the current cSkinDisplay object # (if any) implements SetMessage(). # --- ./menu.c 2018/04/14 10:24:41 5.0 +++ ./menu.c 2018/04/28 12:09:45 @@ -1075,7 +1075,7 @@ { cString ErrorMessage; if (!HandleRemoteTimerModifications(NewTimer, OldTimer, &ErrorMessage)) { - Skins.Message(mtError, ErrorMessage); + Skins.QueueMessage(mtError, ErrorMessage); return false; } return true; --- ./skins.c 2013/08/18 12:07:22 5.0 +++ ./skins.c 2018/04/28 12:13:01 @@ -352,6 +352,14 @@ dsyslog("cSkins::ProcessQueuedMessages() called from background thread - ignored!"); return; } + // Check whether there is a cSkinDisplay object (if any) that implements SetMessage(): + if (cSkinDisplay *sd = cSkinDisplay::Current()) { + if (!(dynamic_cast<cSkinDisplayChannel *>(sd) || + dynamic_cast<cSkinDisplayMenu *>(sd) || + dynamic_cast<cSkinDisplayReplay *>(sd) || + dynamic_cast<cSkinDisplayMessage *>(sd))) + return; + } cSkinQueuedMessage *msg = NULL; // Get the first waiting message: queueMessageMutex.Lock(); --- ./vdr.c 2018/04/10 13:24:43 5.0 +++ ./vdr.c 2018/04/28 11:27:48 @@ -1176,8 +1176,7 @@ if (!Menu && !cOsd::IsOpen()) Menu = CamControl(); // Queued messages: - if (!Skins.IsOpen()) - Skins.ProcessQueuedMessages(); + Skins.ProcessQueuedMessages(); // User Input: cOsdObject *Interact = Menu ? Menu : cControl::Control(); eKeys key = Interface->GetKey(!Interact || !Interact->NeedsFastResponse()); ++++++ vdr-2.4.0-03-fix-locking-channel-display.diff ++++++ # Fixed locking the Channels list in cDisplayChannel, where the lock was still held # when Flush() was called. # --- menu.c 2018/04/28 12:09:45 5.1 +++ menu.c 2018/05/06 09:30:11 @@ -4626,14 +4626,17 @@ cOsdProvider::OsdSizeChanged(osdState); // just to get the current state positioner = NULL; channel = NULL; - LOCK_CHANNELS_READ; - channel = Channels->GetByNumber(Number); - lastPresent = lastFollowing = NULL; - if (channel) { - DisplayChannel(); - DisplayInfo(); + { + LOCK_CHANNELS_READ; + channel = Channels->GetByNumber(Number); + lastPresent = lastFollowing = NULL; + if (channel) { + DisplayChannel(); + DisplayInfo(); + } + } + if (channel) displayChannel->Flush(); - } lastTime.Set(); } @@ -4868,31 +4871,33 @@ } }; if (positioner || !timeout || lastTime.Elapsed() < (uint64_t)(Setup.ChannelInfoTime * 1000)) { - LOCK_CHANNELS_READ; - if (Key == kNone && !number && group < 0 && !NewChannel && channel && channel->Number() != cDevice::CurrentChannel()) { - // makes sure a channel switch through the SVDRP CHAN command is displayed - channel = Channels->GetByNumber(cDevice::CurrentChannel()); - Refresh(); - lastTime.Set(); - } - DisplayInfo(); - if (NewChannel) { - SetTrackDescriptions(NewChannel->Number()); // to make them immediately visible in the channel display - Channels->SwitchTo(NewChannel->Number()); - SetTrackDescriptions(NewChannel->Number()); // switching the channel has cleared them - channel = NewChannel; - } - const cPositioner *Positioner = cDevice::ActualDevice()->Positioner(); - bool PositionerMoving = Positioner && Positioner->IsMoving(); - SetNeedsFastResponse(PositionerMoving); - if (!PositionerMoving) { - if (positioner) - lastTime.Set(); // to keep the channel display up a few seconds after the target position has been reached - Positioner = NULL; - } - if (Positioner || positioner) // making sure we call SetPositioner(NULL) if there is a switch from "with" to "without" positioner - displayChannel->SetPositioner(Positioner); - positioner = Positioner; + { + LOCK_CHANNELS_READ; + if (Key == kNone && !number && group < 0 && !NewChannel && channel && channel->Number() != cDevice::CurrentChannel()) { + // makes sure a channel switch through the SVDRP CHAN command is displayed + channel = Channels->GetByNumber(cDevice::CurrentChannel()); + Refresh(); + lastTime.Set(); + } + DisplayInfo(); + if (NewChannel) { + SetTrackDescriptions(NewChannel->Number()); // to make them immediately visible in the channel display + Channels->SwitchTo(NewChannel->Number()); + SetTrackDescriptions(NewChannel->Number()); // switching the channel has cleared them + channel = NewChannel; + } + const cPositioner *Positioner = cDevice::ActualDevice()->Positioner(); + bool PositionerMoving = Positioner && Positioner->IsMoving(); + SetNeedsFastResponse(PositionerMoving); + if (!PositionerMoving) { + if (positioner) + lastTime.Set(); // to keep the channel display up a few seconds after the target position has been reached + Positioner = NULL; + } + if (Positioner || positioner) // making sure we call SetPositioner(NULL) if there is a switch from "with" to "without" positioner + displayChannel->SetPositioner(Positioner); + positioner = Positioner; + } displayChannel->Flush(); return osContinue; } ++++++ vdr-2.4.0-04-fix-locking-channel-display-2.diff ++++++ # Fixed locking the Channels list in cDisplayChannel, where the lock was still held # when Flush() was called (cont'd). # --- menu.c 2018/05/06 09:30:11 5.2 +++ menu.c 2018/05/27 09:51:56 5.3 @@ -4654,8 +4654,10 @@ displayChannel = Skins.Current()->DisplayChannel(withInfo); positioner = NULL; channel = NULL; - LOCK_CHANNELS_READ; - channel = Channels->GetByNumber(cDevice::CurrentChannel()); + { + LOCK_CHANNELS_READ; + channel = Channels->GetByNumber(cDevice::CurrentChannel()); + } ProcessKey(FirstKey); } ++++++ vdr-2.4.0-05-fix-shutdown.diff ++++++ # Fixed shutdown after user inactivity in case a plugin is keeping the OSD open. # --- vdr.c 2018/04/28 11:27:48 5.1 +++ vdr.c 2018/07/16 08:52:40 5.2 @@ -1514,9 +1514,7 @@ ShutdownHandler.countdown.Cancel(); } - if ((Now - LastInteract) > ACTIVITYTIMEOUT && !cRecordControls::Active() && !RecordingsHandler.Active() && (Now - cRemote::LastActivity()) > ACTIVITYTIMEOUT) { - // Handle housekeeping tasks - + if (!cRecordControls::Active() && !RecordingsHandler.Active() && (Now - cRemote::LastActivity()) > ACTIVITYTIMEOUT) { // Shutdown: // Check whether VDR will be ready for shutdown in SHUTDOWNWAIT seconds: time_t Soon = Now + SHUTDOWNWAIT; @@ -1535,7 +1533,8 @@ // Do this again a bit later: ShutdownHandler.SetRetry(SHUTDOWNRETRY); } - + // Handle housekeeping tasks + if ((Now - LastInteract) > ACTIVITYTIMEOUT) { // Disk housekeeping: RemoveDeletedRecordings(); ListGarbageCollector.Purge(); @@ -1543,6 +1542,7 @@ // Plugins housekeeping: PluginManager.Housekeeping(); } + } ReportEpgBugFixStats(); ++++++ vdr-2.4.0-06-fix-channel-switch.diff ++++++ # Fixed switching through encrypted channels with the Up/Down keys # --- device.c 2018/03/24 09:49:14 5.0 +++ device.c 2018/07/16 09:29:57 @@ -787,6 +787,7 @@ if (LiveView) { isyslog("switching to channel %d %s (%s)", Channel->Number(), *Channel->GetChannelID().ToString(), Channel->Name()); cControl::Shutdown(); // prevents old channel from being shown too long if GetDevice() takes longer + // and, if decrypted, this removes the now superflous PIDs from the CAM, too } for (int i = 3; i--;) { switch (SetChannel(Channel, LiveView)) { @@ -809,6 +810,7 @@ Direction = sgn(Direction); if (Direction) { cControl::Shutdown(); // prevents old channel from being shown too long if GetDevice() takes longer + // and, if decrypted, this removes the now superflous PIDs from the CAM, too int n = CurrentChannel() + Direction; int first = n; LOCK_CHANNELS_READ; --- menu.c 2018/05/27 09:51:56 5.3 +++ menu.c 2018/07/16 09:29:57 @@ -4704,6 +4704,8 @@ const cChannel *cDisplayChannel::NextAvailableChannel(const cChannel *Channel, int Direction) { if (Direction) { + cControl::Shutdown(); // prevents old channel from being shown too long if GetDevice() takes longer + // and, if decrypted, this removes the now superflous PIDs from the CAM, too LOCK_CHANNELS_READ; while (Channel) { Channel = Direction > 0 ? Channels->Next(Channel) : Channels->Prev(Channel); ++++++ vdr-2.4.0-07-fix-disabling-mtd.diff ++++++ # Now deactivating MTD support if a non MCD capable CAM is inserted after removing # a previously used CAM that is MCD capable. # --- ci.c 2018/03/19 16:37:03 5.0 +++ ci.c 2018/09/23 10:17:20 @@ -1213,6 +1213,7 @@ } else { dsyslog("CAM %d: doesn't reply to QUERY - only a single channel can be decrypted", CamSlot()->SlotNumber()); + CamSlot()->MtdActivate(false); state = 4; // normal operation } } ++++++ vdr-2.2.0-use-ncurses5.diff -> vdr-2.4.0-use-ncurses5.diff ++++++ --- /work/SRC/openSUSE:Factory/vdr/vdr-2.2.0-use-ncurses5.diff 2015-10-06 13:25:26.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.vdr.new.28833/vdr-2.4.0-use-ncurses5.diff 2019-03-10 09:32:13.272222498 +0100 @@ -3,7 +3,7 @@ --- a/PLUGINS/src/skincurses/skincurses.c +++ b/PLUGINS/src/skincurses/skincurses.c @@ -6,7 +6,7 @@ - * $Id: skincurses.c 3.3 2015/02/17 13:13:17 kls Exp $ + * $Id: skincurses.c 4.3 2018/04/10 13:01:00 kls Exp $ */ -#include <ncurses.h> ++++++ vdr-2.2.0.tar.bz2 -> vdr-2.4.0.tar.bz2 ++++++ ++++ 46679 lines of diff (skipped)
