diff --git a/HISTORY b/HISTORY index 07cfc82..a89386f 100644 --- a/HISTORY +++ b/HISTORY @@ -329,5 +329,6 @@ Version 0.4.5 Version 0.4.6 - added token {startsin} in displaymenuschedules +- added viewelement in main menu diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd index 30b34da..670ef67 100644 --- a/dtd/displaymenu.dtd +++ b/dtd/displaymenu.dtd @@ -175,6 +175,20 @@ condition CDATA #IMPLIED > + + + ${OUTPUTFLDR}/vdrcpu + +# vdr memory usage, is 11th element in "top" list +top -n 1 | grep " vdr " | awk -F " " '{ print $11;}' > ${OUTPUTFLDR}/vdrmem diff --git a/skinskeleton/xmlfiles/displaymenumain.xml b/skinskeleton/xmlfiles/displaymenumain.xml index ee5373f..0eeb538 100644 --- a/skinskeleton/xmlfiles/displaymenumain.xml +++ b/skinskeleton/xmlfiles/displaymenumain.xml @@ -17,7 +17,7 @@ {timers[channellogoexists]} true if channel logo exists {timers[isremotetimer]} true if timer is a remote timer from remotetimers plugin --> - + - + - + - + - + - + + + + + - + - + - + - + diff --git a/views/displaymenuview.c b/views/displaymenuview.c index a7e840d..d76095c 100644 --- a/views/displaymenuview.c +++ b/views/displaymenuview.c @@ -299,9 +299,10 @@ void cDisplayMenuMainView::DrawStaticViewElements(void) { bool cDisplayMenuMainView::DrawDynamicViewElements(void) { bool loadChanged = DrawLoad(); bool memChanged = DrawMemory(); + bool vdrChanged = DrawVdrStats(); bool devicesChanged = DrawDevices(); initial = false; - return loadChanged || memChanged || devicesChanged; + return loadChanged || memChanged || vdrChanged || devicesChanged; } @@ -445,6 +446,35 @@ bool cDisplayMenuMainView::DrawMemory(void) { return changed; } +bool cDisplayMenuMainView::DrawVdrStats(void) { + if (!ExecuteViewElement(veVDRStats)) { + return false; + } + bool changed = false; + if (DetachViewElement(veVDRStats)) { + cViewElement *viewElement = GetViewElement(veVDRStats); + if (!viewElement) { + viewElement = new cViewElement(tmplView->GetViewElement(veVDRStats), this); + viewElement->SetCallback(veVDRStats, &cDisplayMenuMainView::SetVDRStats); + AddViewElement(veVDRStats, viewElement); + viewElement->Start(); + changed = true; + } else { + if (!viewElement->Starting()) + changed = viewElement->Render(); + } + } else { + map < string, string > stringTokens; + map < string, int > intTokens; + changed = SetVDRStats(false, stringTokens, intTokens); + if (changed) { + ClearViewElement(veVDRStats); + DrawViewElement(veVDRStats, &stringTokens, &intTokens); + } + } + return changed; +} + void cDisplayMenuMainView::DrawTemperatures(void) { if (!ExecuteViewElement(veTemperatures)) { return; diff --git a/views/displaymenuview.h b/views/displaymenuview.h index acd4512..60a859e 100644 --- a/views/displaymenuview.h +++ b/views/displaymenuview.h @@ -57,6 +57,7 @@ private: void DrawDiscUsage(void); bool DrawLoad(void); bool DrawMemory(void); + bool DrawVdrStats(void); void DrawTemperatures(void); bool DrawDevices(void); void DrawCurrentSchedule(void); diff --git a/views/viewhelpers.c b/views/viewhelpers.c index c43a068..9163282 100644 --- a/views/viewhelpers.c +++ b/views/viewhelpers.c @@ -26,6 +26,8 @@ cViewHelpers::cViewHelpers(void) { lastEcmInfo.caid = -1; lastEcmInfo.pid = -1; lastEcmInfo.prid = -1; + lastVdrCPU = "undefined"; + lastVdrMEM = "undefined"; } cViewHelpers::~cViewHelpers() { @@ -257,6 +259,42 @@ bool cViewHelpers::SetSystemTemperatures(bool forced, stringmap &stringTokens, i return true; } +bool cViewHelpers::SetVDRStats(bool forced, stringmap &stringTokens, intmap &intTokens) { + cString execCommand = cString::sprintf("cd \"%s/\"; \"%s/vdrstats\"", SCRIPTFOLDER, SCRIPTFOLDER); + system(*execCommand); + + string vdrCPU = ""; + string vdrMEM = ""; + + cString itemFilename = cString::sprintf("%s/vdrcpu", SCRIPTOUTPUTPATH ); + ifstream file(*itemFilename, ifstream::in); + if( file.is_open() ) { + std::getline(file, vdrCPU); + file.close(); + } + + itemFilename = cString::sprintf("%s/vdrmem", SCRIPTOUTPUTPATH ); + ifstream file2(*itemFilename, ifstream::in); + if( file2.is_open() ) { + std::getline(file2, vdrMEM); + file2.close(); + } + + if (vdrCPU.size() == 0 || vdrMEM.size() == 0) + return false; + + if (!lastVdrCPU.compare(vdrCPU) && !lastVdrMEM.compare(vdrMEM)) { + return false; + } + lastVdrCPU = vdrCPU; + lastVdrMEM = vdrMEM; + + stringTokens.insert(pair("vdrcpu", vdrCPU)); + stringTokens.insert(pair("vdrmem", vdrMEM)); + return true; +} + + bool cViewHelpers::SetDummy(bool forced, stringmap &stringTokens, intmap &intTokens) { return true; } diff --git a/views/viewhelpers.h b/views/viewhelpers.h index 2ef4980..9640406 100644 --- a/views/viewhelpers.h +++ b/views/viewhelpers.h @@ -20,6 +20,8 @@ private: int lastMinute; double lastSystemLoad; int lastMemUsage; + string lastVdrCPU; + string lastVdrMEM; sDVBAPIEcmInfo lastEcmInfo; void RecName(string &path, string &name, string &folder); void RecPoster(const cRecording *rec, int &posterWidth, int &posterHeight, string &path, bool &hasPoster); @@ -49,6 +51,7 @@ public: bool SetSystemLoad (bool forced, stringmap &stringTokens, intmap &intTokens); bool SetSystemMemory (bool forced, stringmap &stringTokens, intmap &intTokens); bool SetSystemTemperatures (bool forced, stringmap &stringTokens, intmap &intTokens); + bool SetVDRStats (bool forced, stringmap &stringTokens, intmap &intTokens); bool SetDummy (bool forced, stringmap &stringTokens, intmap &intTokens); };