mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
VDR version 2.2.0 is now available at ftp://ftp.tvdr.de/vdr/vdr-2.2.0.tar.bz2 A 'diff' against the previous developer version is available at ftp://ftp.tvdr.de/vdr/vdr-2.1.10-2.2.0.diff MD5 checksums: 8853f64c0fc3d41ffd3b4bfc6f0a14b7 vdr-2.2.0.tar.bz2 2d75806f90a4f1c8b3e30d7568891dc6 vdr-2.1.10-2.2.0.diff A summary of all the major changes since the last stable version 2.0.0 can be found at http://www.tvdr.de/changelog.htm When updating from an earlier version of VDR please make sure you read the INSTALL and MANUAL files that come with the VDR source _before_ doing so! Please make sure you have backup copies of all your configuration files, and verify carefully that your timers will be set to the correct channels after switching to this new version. Thanks to the many people who have contributed in the making, testing and debugging of this new version of VDR, and also to all users who have been enjoying VDR over the past 15 years! Please also visit the VDR homepage at http://www.tvdr.de and VDR's facebook page at https://www.facebook.com/VideoDiskRecorder Have fun! Klaus From the HISTORY file: - Updated the Lithuanian OSD texts (thanks to Valdemaras Pipiras). - Updated the Macedonian OSD texts (thanks to Dimitar Petrovski). - Updated the Romanian OSD texts (thanks to Lucian Muresan). - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - Updated the Italian OSD texts (thanks to Diego Pierotto and Nino Gerbino). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Updated the Swedish OSD texts (thanks to Magnus Sirwiö). - Updated the Hungarian OSD texts (thanks to István Füley and Albert Danis). - Modified the German translations of the OSD texts regarding "adaptive skipping". - Fixed pausing replay at the last editing mark (reported by Stefan Herdler). - Updated the Polish OSD texts (thanks to Tomasz Maciej Nowak). - Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk). - Fixed using the default sort mode in a video directory without a ".sort" file (reported by Stefan Herdler). - Improved the German translations of "EPG bugfix level"", "StreamId" and "T2SystemId" (thanks to Albert Danis). - Updated the Czech OSD texts (thanks to Ales Jurik). - Updated the Slovak OSD texts (thanks to Milan Hrala). - Updated sources.conf to reflect the fact that Thor 5/6 and Intelsat 10-02 are actually in two separate positions. - Updated the French OSD texts (thanks to Régis Bossut). - Updated the Spanish OSD texts (thanks to Gabriel Bonich). - Fixed leading/trailing/multiple blanks in the translation files. - Bumped all version numbers to 2.2.0. - Official release.
150 lines
4.2 KiB
C
150 lines
4.2 KiB
C
/*
|
|
* hello.c: A plugin for the Video Disk Recorder
|
|
*
|
|
* See the README file for copyright information and how to reach the author.
|
|
*
|
|
* $Id: hello.c 3.2 2015/02/17 13:12:26 kls Exp $
|
|
*/
|
|
|
|
#include <getopt.h>
|
|
#include <stdlib.h>
|
|
#include <vdr/i18n.h>
|
|
#include <vdr/interface.h>
|
|
#include <vdr/plugin.h>
|
|
|
|
static const char *VERSION = "2.2.0";
|
|
static const char *DESCRIPTION = trNOOP("A friendly greeting");
|
|
static const char *MAINMENUENTRY = trNOOP("Hello");
|
|
|
|
class cPluginHello : public cPlugin {
|
|
private:
|
|
// Add any member variables or functions you may need here.
|
|
const char *option_a;
|
|
bool option_b;
|
|
public:
|
|
cPluginHello(void);
|
|
virtual ~cPluginHello();
|
|
virtual const char *Version(void) { return VERSION; }
|
|
virtual const char *Description(void) { return tr(DESCRIPTION); }
|
|
virtual const char *CommandLineHelp(void);
|
|
virtual bool ProcessArgs(int argc, char *argv[]);
|
|
virtual bool Start(void);
|
|
virtual void Housekeeping(void);
|
|
virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }
|
|
virtual cOsdObject *MainMenuAction(void);
|
|
virtual cMenuSetupPage *SetupMenu(void);
|
|
virtual bool SetupParse(const char *Name, const char *Value);
|
|
};
|
|
|
|
// Global variables that control the overall behaviour:
|
|
|
|
int GreetingTime = 3;
|
|
int UseAlternateGreeting = false;
|
|
|
|
// --- cMenuSetupHello -------------------------------------------------------
|
|
|
|
class cMenuSetupHello : public cMenuSetupPage {
|
|
private:
|
|
int newGreetingTime;
|
|
int newUseAlternateGreeting;
|
|
protected:
|
|
virtual void Store(void);
|
|
public:
|
|
cMenuSetupHello(void);
|
|
};
|
|
|
|
cMenuSetupHello::cMenuSetupHello(void)
|
|
{
|
|
newGreetingTime = GreetingTime;
|
|
newUseAlternateGreeting = UseAlternateGreeting;
|
|
Add(new cMenuEditIntItem( tr("Greeting time (s)"), &newGreetingTime));
|
|
Add(new cMenuEditBoolItem(tr("Use alternate greeting"), &newUseAlternateGreeting));
|
|
}
|
|
|
|
void cMenuSetupHello::Store(void)
|
|
{
|
|
SetupStore("GreetingTime", GreetingTime = newGreetingTime);
|
|
SetupStore("UseAlternateGreeting", UseAlternateGreeting = newUseAlternateGreeting);
|
|
}
|
|
|
|
// --- cPluginHello ----------------------------------------------------------
|
|
|
|
cPluginHello::cPluginHello(void)
|
|
{
|
|
// Initialize any member variables here.
|
|
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
|
|
// VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
|
|
option_a = NULL;
|
|
option_b = false;
|
|
}
|
|
|
|
cPluginHello::~cPluginHello()
|
|
{
|
|
// Clean up after yourself!
|
|
}
|
|
|
|
const char *cPluginHello::CommandLineHelp(void)
|
|
{
|
|
// Return a string that describes all known command line options.
|
|
return " -a ABC, --aaa=ABC do something nice with ABC\n"
|
|
" -b, --bbb activate 'plan B'\n";
|
|
}
|
|
|
|
bool cPluginHello::ProcessArgs(int argc, char *argv[])
|
|
{
|
|
// Implement command line argument processing here if applicable.
|
|
static struct option long_options[] = {
|
|
{ "aaa", required_argument, NULL, 'a' },
|
|
{ "bbb", no_argument, NULL, 'b' },
|
|
{ NULL, no_argument, NULL, 0 }
|
|
};
|
|
|
|
int c;
|
|
while ((c = getopt_long(argc, argv, "a:b", long_options, NULL)) != -1) {
|
|
switch (c) {
|
|
case 'a': option_a = optarg;
|
|
break;
|
|
case 'b': option_b = true;
|
|
break;
|
|
default: return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool cPluginHello::Start(void)
|
|
{
|
|
// Start any background activities the plugin shall perform.
|
|
return true;
|
|
}
|
|
|
|
void cPluginHello::Housekeeping(void)
|
|
{
|
|
// Perform any cleanup or other regular tasks.
|
|
}
|
|
|
|
cOsdObject *cPluginHello::MainMenuAction(void)
|
|
{
|
|
// Perform the action when selected from the main VDR menu.
|
|
Interface->Confirm(UseAlternateGreeting ? tr("Howdy folks!") : tr("Hello world!"), GreetingTime);
|
|
return NULL;
|
|
}
|
|
|
|
cMenuSetupPage *cPluginHello::SetupMenu(void)
|
|
{
|
|
// Return a setup menu in case the plugin supports one.
|
|
return new cMenuSetupHello;
|
|
}
|
|
|
|
bool cPluginHello::SetupParse(const char *Name, const char *Value)
|
|
{
|
|
// Parse your own setup parameters and store their values.
|
|
if (!strcasecmp(Name, "GreetingTime")) GreetingTime = atoi(Value);
|
|
else if (!strcasecmp(Name, "UseAlternateGreeting")) UseAlternateGreeting = atoi(Value);
|
|
else
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
VDRPLUGINCREATOR(cPluginHello); // Don't touch this!
|