diff options
Diffstat (limited to 'osm.c')
-rw-r--r-- | osm.c | 119 |
1 files changed, 119 insertions, 0 deletions
@@ -0,0 +1,119 @@ +/* + * osm.c: On Screen Menu for the Video Disk Recorder + * + * Copyright (C) 2000 Klaus Schmidinger + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * The author can be reached at kls@cadsoft.de + * + * The project's page is at http://www.cadsoft.de/people/kls/vdr + * + * $Id: osm.c 1.1 2000/02/19 13:36:48 kls Exp $ + */ + +#include "config.h" +#include "dvbapi.h" +#include "interface.h" +#include "menu.h" +#include "tools.h" + +#ifdef DEBUG_REMOTE +#define KEYS_CONF "keys-pc.conf" +#else +#define KEYS_CONF "keys.conf" +#endif + +int main(int argc, char *argv[]) +{ + openlog("vdr", LOG_PID | LOG_CONS, LOG_USER); + isyslog(LOG_INFO, "started"); + + Channels.Load("channels.conf"); + Timers.Load("timers.conf"); + if (!Keys.Load(KEYS_CONF)) + Interface.LearnKeys(); + Interface.Init(); + + cChannel::SwitchTo(CurrentChannel); + + cMenuMain *Menu = NULL; + cTimer *Timer = NULL; + cDvbRecorder *Recorder = NULL; + + for (;;) { + //TODO check for free disk space and delete files if necessary/possible + // in case there is an ongoing recording + if (!Timer && (Timer = cTimer::GetMatch()) != NULL) { + // switch to channel: + isyslog(LOG_INFO, "timer %d start", Timer->Index() + 1); + delete Menu; + Menu = NULL; + cChannel::SwitchTo(Timer->channel - 1); + ChannelLocked = true; + // start recording: + delete Recorder; + Recorder = new cDvbRecorder; + //TODO special filename handling!!! + if (!Recorder->Record(Timer->file, Timer->quality)) { + delete Recorder; + Recorder = NULL; + } + } + if (Timer) { + if (!Timer->Matches()) { + // stop recording: + if (Recorder) + Recorder->Stop(); + // end timer: + ChannelLocked = false; + isyslog(LOG_INFO, "timer %d stop", Timer->Index() + 1); + Timer = NULL; + //TODO switch back to the previous channel??? + //TODO clear single event timer??? + } + } + eKeys key = Interface.GetKey(); + if (Menu) { + switch (Menu->ProcessKey(key)) { + default: if (key != kMenu) + break; + case osBack: + case osEnd: delete Menu; + Menu = NULL; + break; + } + } + else { + switch (key) { + case kMenu: Menu = new cMenuMain; + Menu->Display(); + break; + case kUp: + case kDown: { + int n = CurrentChannel + (key == kUp ? 1 : -1); + cChannel *channel = Channels.Get(n); + if (channel) + channel->Switch(); + } + break; + default: break; + } + } + } + closelog(); + return 1; +} |