summaryrefslogtreecommitdiff
path: root/src/commandmenunode.cpp
diff options
context:
space:
mode:
authorsvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2007-08-20 23:12:14 +0000
committersvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2007-08-20 23:12:14 +0000
commit4d10a530b28dc76f783315f204019fc09a574727 (patch)
tree914dce06fdb58116ecffc973a9b600a5e067cd9f /src/commandmenunode.cpp
parent7ee95418c543dd4f1c53facf937a043eb8dfc5f4 (diff)
downloadvdr-plugin-menuorg-4d10a530b28dc76f783315f204019fc09a574727.tar.gz
vdr-plugin-menuorg-4d10a530b28dc76f783315f204019fc09a574727.tar.bz2
added command handling
git-svn-id: file:///home/tobias/sandbox/vdr/--/vdr-pkg/vdr-pkg/submenu/trunk@5841 cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f
Diffstat (limited to 'src/commandmenunode.cpp')
-rw-r--r--src/commandmenunode.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/commandmenunode.cpp b/src/commandmenunode.cpp
new file mode 100644
index 0000000..ff44bef
--- /dev/null
+++ b/src/commandmenunode.cpp
@@ -0,0 +1,82 @@
+/*
+ * vdr-menuorg - A plugin for the Linux Video Disk Recorder
+ * Copyright (C) 2007 Thomas Creutz, Tobias Grimm
+ *
+ * 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
+ *
+ * $Id: submenunode.cpp 5835 2007-08-19 21:45:51Z svntcreutz $
+ *
+ */
+
+#include "commandmenunode.h"
+#include <vdr/osdbase.h>
+#include <vdr/interface.h>
+#include <vdr/menu.h>
+#include "osditemdefinition.h"
+
+using namespace std;
+
+CommandMenuNode::CommandMenuNode(string text, string command, bool confirm)
+{
+ _text = text;
+ _command = command;
+ _confirm = confirm;
+}
+
+IMenuItemDefinition* CommandMenuNode::CreateMenuItemDefinition()
+{
+ return new OsdItemDefinition(new cOsdItem(_text.c_str(), osUser2));
+}
+
+cOsdMenu* CommandMenuNode::Execute()
+{
+ bool confirmed = true;
+ if (_confirm)
+ {
+ confirmed = Interface->Confirm((_text + '?').c_str());
+ }
+ if (confirmed)
+ {
+ Skins.Message(mtStatus, (_text + "...").c_str());
+ string result = ExecuteCommand();
+ Skins.Message(mtStatus, NULL);
+ if (!result.empty())
+ {
+ return new cMenuText(_text.c_str(), result.c_str(), fontFix);
+ }
+ }
+ return NULL;
+}
+
+string CommandMenuNode::ExecuteCommand()
+{
+ string result;
+ dsyslog("executing command '%s'", _command.c_str());
+ cPipe pipe;
+ if (pipe.Open(_command.c_str(), "r"))
+ {
+ int c;
+ while ((c = fgetc(pipe)) != EOF)
+ {
+ result += (char) c;
+ }
+ pipe.Close();
+ }
+ else
+ {
+ esyslog("ERROR: can't open pipe for command '%s'", _command.c_str());
+ }
+ return result;
+}