diff options
Diffstat (limited to 'weatherforecast.c')
-rw-r--r-- | weatherforecast.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/weatherforecast.c b/weatherforecast.c new file mode 100644 index 0000000..49c01ee --- /dev/null +++ b/weatherforecast.c @@ -0,0 +1,161 @@ +/* + * weatherforecast.c: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id$ + */ + +#include <vdr/plugin.h> +#include "config.h" +#include "setup.h" +#include "libforecastio/forecastio.h" +#include "libforecastio/locator.h" +#include "libskindesigner/services.h" +#include "weatherosd.h" +#include "services.h" + +//*************************************************************************** +// Constants +//*************************************************************************** +static const char *VERSION = "0.0.1"; +static const char *DESCRIPTION = "Weatherforecast based on forecast.io"; +static const char *MAINMENUENTRY = "WeatherForecast"; + +//*************************************************************************** +// Globals +//*************************************************************************** +cWeatherforecastConfig weatherConfig; + +//*************************************************************************** +// cPluginWeatherforecast +//*************************************************************************** +class cPluginWeatherforecast : public cPlugin { +private: + cForecastIO *forecastIO; +public: + cPluginWeatherforecast(void); + virtual ~cPluginWeatherforecast(); + virtual const char *Version(void) { return VERSION; } + virtual const char *Description(void) { return DESCRIPTION; } + virtual const char *CommandLineHelp(void); + virtual bool ProcessArgs(int argc, char *argv[]); + virtual bool Initialize(void); + virtual bool Start(void); + virtual void Stop(void); + virtual void Housekeeping(void); + virtual void MainThreadHook(void); + virtual cString Active(void); + virtual time_t WakeupTime(void); + virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; } + virtual cOsdObject *MainMenuAction(void); + virtual cMenuSetupPage *SetupMenu(void); + virtual bool SetupParse(const char *Name, const char *Value); + virtual bool Service(const char *Id, void *Data = NULL); + virtual const char **SVDRPHelpPages(void); + virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); +}; + +cPluginWeatherforecast::cPluginWeatherforecast(void) { + forecastIO = NULL; +} + +cPluginWeatherforecast::~cPluginWeatherforecast() { + if (forecastIO) + delete forecastIO; +} + +const char *cPluginWeatherforecast::CommandLineHelp(void) { + return NULL; +} + +bool cPluginWeatherforecast::ProcessArgs(int argc, char *argv[]) { + return true; +} + +bool cPluginWeatherforecast::Initialize(void) { + //check geolocation on first start + if (weatherConfig.city.size() == 0) { + dsyslog("weatherforecast: location not set, setting from own public IP"); + cForecastLocator locator; + if (locator.ReadLocationByIP()) { + locator.WriteToSetup(this); + } + dsyslog("weatherforecast: location wrote to setup"); + } + return true; +} + +bool cPluginWeatherforecast::Start(void) { + string cacheDir = cPlugin::CacheDirectory(PLUGIN_NAME_I18N); + forecastIO = new cForecastIO(cacheDir); + forecastIO->Start(); + + RegisterPlugin reg; + reg.name = "weatherforecast"; + reg.SetMenu(meRoot, "weatherforecast.xml"); + reg.SetMenu(meDetailCurrent, "weatherforecastdetailcurrent.xml"); + reg.SetMenu(meDetailHourly, "weatherforecastdetailhourly.xml"); + reg.SetMenu(meDetailDaily, "weatherforecastdetaildaily.xml"); + static cPlugin *pSkinDesigner = cPluginManager::GetPlugin("skindesigner"); + if (pSkinDesigner) { + pSkinDesigner->Service("RegisterPlugin", ®); + } else { + esyslog("weatherforecast: skindesigner not available"); + } + + return true; +} + +void cPluginWeatherforecast::Stop(void) { + +} + +void cPluginWeatherforecast::Housekeeping(void) { + +} + +void cPluginWeatherforecast::MainThreadHook(void) { + +} + +cString cPluginWeatherforecast::Active(void) { + return NULL; +} + +time_t cPluginWeatherforecast::WakeupTime(void) { + return 0; +} + +cOsdObject *cPluginWeatherforecast::MainMenuAction(void) { + cOsdObject *menu = new cWeatherOsd(forecastIO); + return menu; +} + +cMenuSetupPage *cPluginWeatherforecast::SetupMenu(void) { + return new cWeatherforecastSetup(); +} + +bool cPluginWeatherforecast::SetupParse(const char *Name, const char *Value) { + return weatherConfig.SetupParse(Name, Value); +} + +bool cPluginWeatherforecast::Service(const char *Id, void *Data) { + if (Data == NULL) + return false; + if (strcmp(Id, "GetCurrentWeather") == 0) { + cServiceCurrentWeather* call = (cServiceCurrentWeather*) Data; + return forecastIO->SetCurrentWeather(call); + } + return false; +} + +const char **cPluginWeatherforecast::SVDRPHelpPages(void) { + return NULL; +} + +cString cPluginWeatherforecast::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) { + return NULL; +} + +VDRPLUGINCREATOR(cPluginWeatherforecast); // Don't touch this! |