mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Made the config directory available to plugins
This commit is contained in:
parent
bbddf7e2db
commit
49fcbf19fa
@ -136,6 +136,7 @@ Stefan Huelswitt <huels@iname.com>
|
|||||||
for suggesting to add 'insert' capabilities to cList
|
for suggesting to add 'insert' capabilities to cList
|
||||||
for suggesting to make 'package' target in the plugin's Makefile produce a package that
|
for suggesting to make 'package' target in the plugin's Makefile produce a package that
|
||||||
expands to a directory with just the plugin name and version number
|
expands to a directory with just the plugin name and version number
|
||||||
|
for suggesting to make the config directory available to plugins
|
||||||
|
|
||||||
Ulrich Röder <roeder@efr-net.de>
|
Ulrich Röder <roeder@efr-net.de>
|
||||||
for pointing out that there are channels that have a symbol rate higher than
|
for pointing out that there are channels that have a symbol rate higher than
|
||||||
|
4
HISTORY
4
HISTORY
@ -1270,7 +1270,7 @@ Video Disk Recorder Revision History
|
|||||||
- Rearranged cleanup sequence at the end of the main program.
|
- Rearranged cleanup sequence at the end of the main program.
|
||||||
- Adapted PLUGINS.html to use the actual code examples from the 'hello' plugin.
|
- Adapted PLUGINS.html to use the actual code examples from the 'hello' plugin.
|
||||||
|
|
||||||
2002-05-12: Version 1.1.2
|
2002-05-13: Version 1.1.2
|
||||||
|
|
||||||
- Changed the cPlugin::Start() function to return a boolean value that indicates
|
- Changed the cPlugin::Start() function to return a boolean value that indicates
|
||||||
if the plugin will not be able to perform its task (suggested by Stefan Huelswitt).
|
if the plugin will not be able to perform its task (suggested by Stefan Huelswitt).
|
||||||
@ -1280,3 +1280,5 @@ Video Disk Recorder Revision History
|
|||||||
- Changed the 'package' target in the plugin's Makefile to produce a package that
|
- Changed the 'package' target in the plugin's Makefile to produce a package that
|
||||||
expands to a directory with just the plugin name and version number (suggested
|
expands to a directory with just the plugin name and version number (suggested
|
||||||
by Stefan Huelswitt).
|
by Stefan Huelswitt).
|
||||||
|
- Made the config directory available to plugins (suggested by Stefan Huelswitt).
|
||||||
|
See PLUGINS.html, section "Configuration files" for details.
|
||||||
|
59
PLUGINS.html
59
PLUGINS.html
@ -513,7 +513,7 @@ the plugin should launch a separate thread to do this.
|
|||||||
</b>
|
</b>
|
||||||
<!--X1.1.2--></td></tr></table>
|
<!--X1.1.2--></td></tr></table>
|
||||||
|
|
||||||
<hr><h2>Setup parameters</h2>
|
<a name="Setup parameters"><hr><h2>Setup parameters</h2>
|
||||||
|
|
||||||
<center><i><b>Remember me...</b></i></center><p>
|
<center><i><b>Remember me...</b></i></center><p>
|
||||||
|
|
||||||
@ -648,6 +648,63 @@ your setup parameters and use that one to copy all parameters with one single st
|
|||||||
(like VDR does with its cSetup class).
|
(like VDR does with its cSetup class).
|
||||||
<!--X1.1.1--></td></tr></table>
|
<!--X1.1.1--></td></tr></table>
|
||||||
|
|
||||||
|
<!--X1.1.2--><table width=100%><tr><td bgcolor=red> </td><td width=100%>
|
||||||
|
<hr><h2>Configuration files</h2>
|
||||||
|
|
||||||
|
<center><i><b>I want my own stuff!</b></i></center><p>
|
||||||
|
|
||||||
|
There may be situations where a plugin requires configuration files of its own, maybe
|
||||||
|
for data that can't be stored in the simple <a href="#Setup parameters">setup parameters</a>
|
||||||
|
of VDR, or maybe because it needs to launch other programs that simply need a separate
|
||||||
|
configuration file. While the plugin is free to store such files anywhere it
|
||||||
|
sees fit, it might be a good idea to put them in a common place, preferably
|
||||||
|
where other configuration data already exists. VDR provides the function
|
||||||
|
|
||||||
|
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
|
||||||
|
const char *ConfigDirectory(const char *PluginName = NULL);
|
||||||
|
</pre></td></tr></table><p>
|
||||||
|
|
||||||
|
which returns a string containing the directory that VDR uses for its own configuration
|
||||||
|
files (defined through the <tt><b>-c</b></tt> option in the call to VDR), extended by
|
||||||
|
<tt>"/plugins"</tt>. So assuming the VDR configuration directory is <tt>/video</tt>
|
||||||
|
(the default if no <tt><b>-c</b></tt> or <tt><b>-v</b></tt> option is given),
|
||||||
|
a call to <tt>ConfigDirectory()</tt> will return <tt>/video/plugins</tt>. The first
|
||||||
|
call to <tt>ConfigDirectory()</tt> will automatically make sure that the <tt>plugins</tt>
|
||||||
|
subdirectory will exist. If, for some reason, this cannot be achieved, <tt>NULL</tt>
|
||||||
|
will be returned.
|
||||||
|
<p>
|
||||||
|
The additional <tt>plugins</tt> directory is used to keep files from plugins apart
|
||||||
|
from those of VDR itself, making sure there will be no name clashes. If a plugin
|
||||||
|
needs only one extra configuration file, it is suggested that this file be named
|
||||||
|
<tt>name.conf</tt>, where <i>name</i> shall be the name of the plugin.
|
||||||
|
<p>
|
||||||
|
If a plugin needs more than one such file, it is suggested that the plugin stores
|
||||||
|
these in a subdirectory of its own, named after the plugin. To easily get such a name
|
||||||
|
the <tt>ConfigDirectory()</tt> function can be given an additional string that will
|
||||||
|
be appended to the returned directory name, as in
|
||||||
|
|
||||||
|
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
|
||||||
|
const char *MyConfigDir = ConfigDirectory(Name());
|
||||||
|
</pre></td></tr></table><p>
|
||||||
|
|
||||||
|
where <tt>Name()</tt> is the member function of the plugin class that returns the
|
||||||
|
plugin's name. Again, VDR will make sure that the requested directory will exist
|
||||||
|
(or return <tt>NULL</tt> in case of an error).
|
||||||
|
<p>
|
||||||
|
<b>
|
||||||
|
The returned string is statically allocated and will be overwritten by subsequent
|
||||||
|
calls to ConfigDirectory()!
|
||||||
|
</b>
|
||||||
|
<p>
|
||||||
|
The <tt>ConfigDirectory()</tt> function is a static member function of the <tt>cPlugin</tt>
|
||||||
|
class. This allows it to be called even from outside any member function of the derived
|
||||||
|
plugin class, by writing
|
||||||
|
|
||||||
|
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
|
||||||
|
const char *MyConfigDir = cPlugin::ConfigDirectory();
|
||||||
|
</pre></td></tr></table><p>
|
||||||
|
<!--X1.1.2--></td></tr></table>
|
||||||
|
|
||||||
<a name="Internationalization"><hr><h2>Internationalization</h2>
|
<a name="Internationalization"><hr><h2>Internationalization</h2>
|
||||||
|
|
||||||
<center><i><b>Welcome to Babylon!</b></i></center><p>
|
<center><i><b>Welcome to Babylon!</b></i></center><p>
|
||||||
|
17
plugin.c
17
plugin.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: plugin.c 1.3 2002/05/12 10:10:38 kls Exp $
|
* $Id: plugin.c 1.4 2002/05/13 16:08:22 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
// --- cPlugin ---------------------------------------------------------------
|
// --- cPlugin ---------------------------------------------------------------
|
||||||
|
|
||||||
|
char *cPlugin::configDirectory = NULL;
|
||||||
|
|
||||||
cPlugin::cPlugin(void)
|
cPlugin::cPlugin(void)
|
||||||
{
|
{
|
||||||
name = NULL;
|
name = NULL;
|
||||||
@ -91,6 +93,19 @@ void cPlugin::RegisterI18n(const tI18nPhrase * const Phrases)
|
|||||||
I18nRegister(Phrases, Name());
|
I18nRegister(Phrases, Name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cPlugin::SetConfigDirectory(const char *Dir)
|
||||||
|
{
|
||||||
|
configDirectory = strdup(Dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *cPlugin::ConfigDirectory(const char *PluginName)
|
||||||
|
{
|
||||||
|
static char *buffer = NULL;
|
||||||
|
delete buffer;
|
||||||
|
asprintf(&buffer, "%s/plugins%s%s", configDirectory, PluginName ? "/" : "", PluginName ? PluginName : "");
|
||||||
|
return MakeDirs(buffer, true) ? buffer : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cDll ------------------------------------------------------------------
|
// --- cDll ------------------------------------------------------------------
|
||||||
|
|
||||||
cDll::cDll(const char *FileName, const char *Args)
|
cDll::cDll(const char *FileName, const char *Args)
|
||||||
|
6
plugin.h
6
plugin.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: plugin.h 1.3 2002/05/12 09:58:54 kls Exp $
|
* $Id: plugin.h 1.4 2002/05/13 15:32:14 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PLUGIN_H
|
#ifndef __PLUGIN_H
|
||||||
@ -20,6 +20,7 @@
|
|||||||
class cPlugin {
|
class cPlugin {
|
||||||
friend class cDll;
|
friend class cDll;
|
||||||
private:
|
private:
|
||||||
|
static char *configDirectory;
|
||||||
const char *name;
|
const char *name;
|
||||||
void SetName(const char *s);
|
void SetName(const char *s);
|
||||||
public:
|
public:
|
||||||
@ -44,6 +45,9 @@ public:
|
|||||||
void SetupStore(const char *Name, int Value);
|
void SetupStore(const char *Name, int Value);
|
||||||
|
|
||||||
void RegisterI18n(const tI18nPhrase * const Phrases);
|
void RegisterI18n(const tI18nPhrase * const Phrases);
|
||||||
|
|
||||||
|
static void SetConfigDirectory(const char *Dir);
|
||||||
|
static const char *ConfigDirectory(const char *PluginName = NULL);
|
||||||
};
|
};
|
||||||
|
|
||||||
class cDll : public cListObject {
|
class cDll : public cListObject {
|
||||||
|
4
vdr.c
4
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.107 2002/05/12 10:11:08 kls Exp $
|
* $Id: vdr.c 1.108 2002/05/13 16:09:06 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -301,6 +301,8 @@ int main(int argc, char *argv[])
|
|||||||
if (!ConfigDirectory)
|
if (!ConfigDirectory)
|
||||||
ConfigDirectory = VideoDirectory;
|
ConfigDirectory = VideoDirectory;
|
||||||
|
|
||||||
|
cPlugin::SetConfigDirectory(ConfigDirectory);
|
||||||
|
|
||||||
Setup.Load(AddDirectory(ConfigDirectory, "setup.conf"));
|
Setup.Load(AddDirectory(ConfigDirectory, "setup.conf"));
|
||||||
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"));
|
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"));
|
||||||
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
||||||
|
Loading…
Reference in New Issue
Block a user