fix delayed shutdown

git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@723 e54a6e83-5905-42d5-8d5c-058d10e6a962


Origin commit data
------------------
Commit: e0403071de
Author: Jacek Jendrzej <overx300@gmail.com>
Date: 2010-08-15 (Sun, 15 Aug 2010)

Origin message was:
------------------
-fix delayed shutdown

git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@723 e54a6e83-5905-42d5-8d5c-058d10e6a962
This commit is contained in:
Jacek Jendrzej
2010-08-15 08:49:37 +00:00
parent 7570a20702
commit a45a5d721b
4 changed files with 62 additions and 62 deletions

View File

@@ -58,6 +58,7 @@
#include <global.h>
#include <neutrino.h>
#include <cs_api.h>
//const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir", "/dev/input/event0"};
const char * const RC_EVENT_DEVICE[NUMBER_OF_EVENT_DEVICES] = {"/dev/input/nevis_ir"};
@@ -1143,12 +1144,11 @@ printf("[neutrino] CSectionsdClient::EVT_GOT_CN_EPG\n");
if (ev.code == rc_last_key) {
/* only allow selected keys to be repeated */
/* (why?) */
if((trkey == RC_up) || (trkey == RC_down ) ||
if( (trkey == RC_up) || (trkey == RC_down ) ||
(trkey == RC_plus ) || (trkey == RC_minus ) ||
(trkey == RC_page_down ) || (trkey == RC_page_up ) ||
//(trkey == RC_standby) ||
((bAllowRepeatLR) && ((trkey == RC_left ) ||
(trkey == RC_right))))
((bAllowRepeatLR) && ((trkey == RC_left ) || (trkey == RC_right))) ||
((trkey == RC_standby) && (cs_get_revision() > 7)) )
{
#ifdef ENABLE_REPEAT_CHECK
if (rc_last_repeat_key != ev.code) {

View File

@@ -115,7 +115,7 @@ int CHDDMenuHandler::doMenu ()
int removable = 0;
printf("HDD: checking /sys/block/%s\n", namelist[i]->d_name);
sprintf(str, "/dev/%s", namelist[i]->d_name);
snprintf(str, sizeof(str), "/dev/%s", namelist[i]->d_name);
fd = open(str, O_RDONLY);
if(fd < 0) {
printf("Cant open %s\n", str);
@@ -127,7 +127,7 @@ int CHDDMenuHandler::doMenu ()
megabytes = bytes/1000000;
sprintf(str, "/sys/block/%s/device/vendor", namelist[i]->d_name);
snprintf(str, sizeof(str), "/sys/block/%s/device/vendor", namelist[i]->d_name);
f = fopen(str, "r");
if(!f) {
printf("Cant open %s\n", str);
@@ -136,7 +136,7 @@ int CHDDMenuHandler::doMenu ()
fscanf(f, "%s", vendor);
fclose(f);
sprintf(str, "/sys/block/%s/device/model", namelist[i]->d_name);
snprintf(str, sizeof(str), "/sys/block/%s/device/model", namelist[i]->d_name);
f = fopen(str, "r");
if(!f) {
printf("Cant open %s\n", str);
@@ -145,7 +145,7 @@ int CHDDMenuHandler::doMenu ()
fscanf(f, "%s", model);
fclose(f);
sprintf(str, "/sys/block/%s/removable", namelist[i]->d_name);
snprintf(str, sizeof(str), "/sys/block/%s/removable", namelist[i]->d_name);
f = fopen(str, "r");
if(!f) {
printf("Cant open %s\n", str);
@@ -154,7 +154,7 @@ int CHDDMenuHandler::doMenu ()
fscanf(f, "%d", &removable);
fclose(f);
sprintf(str, "%s %s (%s-%s %lld %s)\n", g_Locale->getText(LOCALE_HDD_MANAGE), namelist[i]->d_name, vendor, model, megabytes < 10000 ? megabytes : megabytes/1000, megabytes < 10000 ? "MB" : "GB");
snprintf(str, sizeof(str), "%s %s (%s-%s %lld %s)\n", g_Locale->getText(LOCALE_HDD_MANAGE), namelist[i]->d_name, vendor, model, megabytes < 10000 ? megabytes : megabytes/1000, megabytes < 10000 ? "MB" : "GB");
printf("HDD: %s\n", str);
CMenuWidget * tempMenu = new CMenuWidget(str, NEUTRINO_ICON_SETTINGS);
tempMenu->addItem( GenericMenuBack );
@@ -179,17 +179,17 @@ int CHDDDestExec::exec(CMenuTarget* /*parent*/, const std::string&)
printf("CHDDDestExec: noise %d sleep %d\n", g_settings.hdd_noise, g_settings.hdd_sleep);
//FIXME: atm we can have 2 hdd, sata and usb
sprintf(cmd, "hdparm -S%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_sleep);
snprintf(cmd, sizeof(cmd), "hdparm -S%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_sleep);
system(cmd);
sprintf(cmd, "hdparm -M%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_noise);
snprintf(cmd, sizeof(cmd), "hdparm -M%d /dev/sda >/dev/null 2>/dev/null", g_settings.hdd_noise);
system(cmd);
sprintf(cmd, "hdparm -S%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_sleep);
snprintf(cmd, sizeof(cmd), "hdparm -S%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_sleep);
system(cmd);
sprintf(cmd, "hdparm -M%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_noise);
snprintf(cmd, sizeof(cmd), "hdparm -M%d /dev/sdb >/dev/null 2>/dev/null", g_settings.hdd_noise);
system(cmd);
sprintf(cmd, "hdparm -K /dev/sda >/dev/null 2>/dev/null");
snprintf(cmd, sizeof(cmd), "hdparm -K /dev/sda >/dev/null 2>/dev/null");
system(cmd);
sprintf(cmd, "hdparm -K /dev/sdb >/dev/null 2>/dev/null");
snprintf(cmd, sizeof(cmd), "hdparm -K /dev/sdb >/dev/null 2>/dev/null");
system(cmd);
return 1;
}
@@ -222,8 +222,8 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key)
CProgressWindow * progress;
bool idone;
sprintf(src, "/dev/%s1", key.c_str());
sprintf(dst, "/media/%s1", key.c_str());
snprintf(src, sizeof(src), "/dev/%s1", key.c_str());
snprintf(dst, sizeof(dst), "/media/%s1", key.c_str());
printf("CHDDFmtExec: key %s\n", key.c_str());
@@ -257,7 +257,7 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key)
progress->showStatusMessageUTF("Executing fdisk");
progress->showGlobalStatus(0);
sprintf(cmd, "/sbin/sfdisk -f -uM /dev/%s", key.c_str());
snprintf(cmd, sizeof(cmd), "/sbin/sfdisk -f -uM /dev/%s", key.c_str());
printf("CHDDFmtExec: executing %s\n", cmd);
f=popen(cmd, "w");
if (!f) {
@@ -274,10 +274,10 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key)
switch(g_settings.hdd_fs) {
case 0:
sprintf(cmd, "/sbin/mkfs.ext3 -T largefile -m0 %s", src);
snprintf(cmd, sizeof(cmd), "/sbin/mkfs.ext3 -T largefile -m0 %s", src);
break;
case 1:
sprintf(cmd, "/sbin/mkreiserfs -f -f %s", src);
snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f -f %s", src);
break;
default:
return 0;
@@ -318,7 +318,7 @@ int CHDDFmtExec::exec(CMenuTarget* /*parent*/, const std::string& key)
progress->showGlobalStatus(100);
sleep(2);
sprintf(cmd, "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src);
snprintf(cmd, sizeof(cmd), "/sbin/tune2fs -r 0 -c 0 -i 0 %s", src);
printf("CHDDFmtExec: executing %s\n", cmd);
system(cmd);
@@ -343,13 +343,13 @@ _remount:
}
if(!res) {
sprintf(cmd, "%s/movies", dst);
snprintf(cmd, sizeof(cmd), "%s/movies", dst);
safe_mkdir((char *) cmd);
sprintf(cmd, "%s/pictures", dst);
snprintf(cmd, sizeof(cmd), "%s/pictures", dst);
safe_mkdir((char *) cmd);
sprintf(cmd, "%s/epg", dst);
snprintf(cmd, sizeof(cmd), "%s/epg", dst);
safe_mkdir((char *) cmd);
sprintf(cmd, "%s/music", dst);
snprintf(cmd, sizeof(cmd), "%s/music", dst);
safe_mkdir((char *) cmd);
sync();
}
@@ -369,8 +369,8 @@ int CHDDChkExec::exec(CMenuTarget* /*parent*/, const std::string& key)
int oldpass = 0, pass, step, total;
int percent = 0, opercent = 0;
sprintf(src, "/dev/%s1", key.c_str());
sprintf(dst, "/media/%s1", key.c_str());
snprintf(src, sizeof(src), "/dev/%s1", key.c_str());
snprintf(dst, sizeof(dst), "/media/%s1", key.c_str());
printf("CHDDChkExec: key %s\n", key.c_str());
@@ -389,10 +389,10 @@ printf("CHDDChkExec: key %s\n", key.c_str());
switch(g_settings.hdd_fs) {
case 0:
sprintf(cmd, "/sbin/fsck.ext3 -C 1 -f -y %s", src);
snprintf(cmd, sizeof(cmd), "/sbin/fsck.ext3 -C 1 -f -y %s", src);
break;
case 1:
sprintf(cmd, "/sbin/reiserfsck --fix-fixable %s", src);
snprintf(cmd, sizeof(cmd), "/sbin/reiserfsck --fix-fixable %s", src);
break;
default:
return 0;

View File

@@ -715,9 +715,9 @@ bool CMovieBrowser::loadSettings(MB_SETTINGS* settings)
char cfg_key[81];
for(int i = 0; i < MB_MAX_DIRS; i++)
{
sprintf(cfg_key, "mb_dir_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_dir_%d", i);
settings->storageDir[i] = configfile.getString( cfg_key, "" );
sprintf(cfg_key, "mb_dir_used%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_dir_used%d", i);
settings->storageDirUsed[i] = configfile.getInt32( cfg_key,false );
}
/* these variables are used for the listframes */
@@ -725,9 +725,9 @@ bool CMovieBrowser::loadSettings(MB_SETTINGS* settings)
settings->browserRowNr = configfile.getInt32("mb_browserRowNr", 0);
for(int i = 0; i < MB_MAX_ROWS && i < settings->browserRowNr; i++)
{
sprintf(cfg_key, "mb_browserRowItem_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowItem_%d", i);
settings->browserRowItem[i] = (MB_INFO_ITEM)configfile.getInt32(cfg_key, MB_INFO_MAX_NUMBER);
sprintf(cfg_key, "mb_browserRowWidth_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowWidth_%d", i);
settings->browserRowWidth[i] = configfile.getInt32(cfg_key, 50);
}
}
@@ -771,9 +771,9 @@ bool CMovieBrowser::saveSettings(MB_SETTINGS* settings)
char cfg_key[81];
for(int i = 0; i < MB_MAX_DIRS; i++)
{
sprintf(cfg_key, "mb_dir_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_dir_%d", i);
configfile.setString( cfg_key, settings->storageDir[i] );
sprintf(cfg_key, "mb_dir_used%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_dir_used%d", i);
configfile.setInt32( cfg_key, settings->storageDirUsed[i] ); // do not save this so far
}
/* these variables are used for the listframes */
@@ -781,9 +781,9 @@ bool CMovieBrowser::saveSettings(MB_SETTINGS* settings)
configfile.setInt32("mb_browserRowNr",settings->browserRowNr);
for(int i = 0; i < MB_MAX_ROWS && i < settings->browserRowNr; i++)
{
sprintf(cfg_key, "mb_browserRowItem_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowItem_%d", i);
configfile.setInt32(cfg_key, settings->browserRowItem[i]);
sprintf(cfg_key, "mb_browserRowWidth_%d", i);
snprintf(cfg_key, sizeof(cfg_key), "mb_browserRowWidth_%d", i);
configfile.setInt32(cfg_key, settings->browserRowWidth[i]);
}
@@ -2000,7 +2000,7 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler)
int i = 1;
char newpath[1024];
do {
sprintf(newpath, "%s.%03d", movieSelectionHandler.file.Name.c_str(), i);
snprintf(newpath, sizeof(newpath), "%s.%03d", movieSelectionHandler.file.Name.c_str(), i);
if(access(newpath, R_OK)) {
break;
} else {
@@ -3651,7 +3651,7 @@ void CDirMenu::show(void)
updateDirState();
for(unsigned int i = 0; i < dirList->size() && i < MAX_DIR; i++)
{
sprintf(tmp,"%d",i);
snprintf(tmp, sizeof(tmp),"%d",i);
tmp[1]=0;
dirMenu.addItem( new CMenuForwarderNonLocalized ( (*dirList)[i].name.c_str(), (dirState[i] != DIR_STATE_UNKNOWN), dirOptionText[i], this,tmp));
}
@@ -3670,7 +3670,7 @@ off64_t get_full_len(char * startname)
stat64(startname, &s);
do {
fulllength +=s.st_size;
sprintf(spart, "%s.%03d", startname, ++part);
snprintf(spart, sizeof(spart), "%s.%03d", startname, ++part);
} while (!stat64(spart, &s));
return fulllength;
}
@@ -3707,7 +3707,7 @@ static off64_t truncate_movie(MI_MOVIE_INFO * minfo)
off64_t newsize = secoffset;
//printf("truncate: name %s size %lld len %d sec truncate to %d sec, new size %lld\n", name, size, len, seconds, secoffset);
sprintf(spart, "%s", name);
snprintf(spart, sizeof(spart), "%s", name);
while (!stat64(spart, &s)) {
if(found) {
//printf("truncate: check part %d file %s - TO REMOVE\n", part, spart);
@@ -3720,13 +3720,13 @@ static off64_t truncate_movie(MI_MOVIE_INFO * minfo)
} else
secoffset -= s.st_size;
}
sprintf(spart, "%s.%03d", name, ++part);
snprintf(spart, sizeof(spart), "%s.%03d", name, ++part);
}
if(found) {
if(tpart)
sprintf(spart, "%s.%03d", name, tpart);
snprintf(spart, sizeof(spart), "%s.%03d", name, tpart);
else
sprintf(spart, "%s", name);
snprintf(spart, sizeof(spart), "%s", name);
printf("truncate: part %s to size %lld\n", spart, secoffset);
truncate(spart, secoffset);
minfo->file.Size = newsize;
@@ -3834,9 +3834,9 @@ static void find_new_part(char * npart, char * dpart)
{
struct stat64 s;
int dp = 0;
sprintf(dpart, "%s_%d.ts", npart, dp);
snprintf(dpart, sizeof(dpart), "%s_%d.ts", npart, dp);
while (!stat64(dpart, &s)) {
sprintf(dpart, "%s_%d.ts", npart, ++dp);
snprintf(dpart, sizeof(dpart), "%s_%d.ts", npart, ++dp);
}
}
@@ -3976,7 +3976,7 @@ printf("\n");
}
}
}
sprintf(npart, "%s", name);
snprintf(npart, sizeof(npart), "%s", name);
char * ptr = strstr(npart, ".ts");
if(ptr)
*ptr = 0;
@@ -3992,7 +3992,7 @@ printf("\n********* new file %s expected size %lld, start time %s", dpart, newsi
i = 0;
off64_t offset = 0;
spos = 0;
sprintf(spart, "%s", name);
snprintf(spart, sizeof(spart), "%s", name);
if(read_psi(spart, &psi[0])) {
perror(spart);
goto ret_err;
@@ -4104,7 +4104,7 @@ printf("cut: next bookmark pos: %lld abs %lld relative next file pos %lld cur fi
next_file:
tdone += s.st_size;
close(srcfd);
sprintf(spart, "%s.%03d", name, ++part);
snprintf(spart, sizeof(spart), "%s.%03d", name, ++part);
}
tt1 = time(0);
printf("********* total written %lld tooks %ld secs end time %s", spos, tt1-tt, ctime (&tt1));
@@ -4186,11 +4186,11 @@ printf("copy: jump bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, b
tt = time(0);
printf("********* %d boormarks, to %s file(s), expected size to copy %lld, start time %s", bcount, onefile ? "one" : "many", newsize, ctime (&tt));
sprintf(npart, "%s", name);
snprintf(npart, sizeof(npart), "%s", name);
char * ptr = strstr(npart, ".ts");
if(ptr)
*ptr = 0;
sprintf(spart, "%s", name);
snprintf(spart, sizeof(spart), "%s", name);
srcfd = open (spart, O_RDONLY | O_LARGEFILE);
if(read_psi(spart, &psi[0])) {
perror(spart);
@@ -4201,12 +4201,12 @@ printf("\ncopy: processing bookmark %d at %lld len %lld\n", i, books[i].pos, boo
off64_t bpos = books[i].pos;
off64_t bskip = books[i].len;
part = 0;
sprintf(spart, "%s", name);
snprintf(spart, sizeof(spart), "%s", name);
int sres;
while (!(sres = stat64(spart, &s))) {
if(bpos >= s.st_size) {
bpos -= s.st_size;
sprintf(spart, "%s.%03d", name, ++part);
snprintf(spart, sizeof(spart), "%s.%03d", name, ++part);
//printf("copy: check src part %s\n", spart);
continue;
}
@@ -4303,7 +4303,7 @@ if(buf[0] != 0x47) printf("copy: buffer not aligned at %lld\n", sdone);
printf("copy: -> next file, file pos %lld written %lld left %lld\n", sdone, spos, bskip);
bpos = 0;
close(srcfd);
sprintf(spart, "%s.%03d", name, ++part);
snprintf(spart, sizeof(spart), "%s.%03d", name, ++part);
goto next_file;
}
} /* while(sdone < until) */

View File

@@ -755,9 +755,9 @@ void CNeutrinoApp::InitMainMenu(CMenuWidget &mainMenu, CMenuWidget &mainSettings
audioPlayer = new CAudioPlayerGui();
media->addItem(new CMenuForwarder(LOCALE_MAINMENU_AUDIOPLAYER, true, NULL, audioPlayer, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED));
audioPlayer = new CAudioPlayerGui(true);
media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, audioPlayer, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE));
media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, &moviePlayer, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN));
media->addItem(new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW));
media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, audioPlayer, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN));
media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, &moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW));
media->addItem(new CMenuForwarder(LOCALE_MAINMENU_PICTUREVIEWER, true, NULL, new CPictureViewerGui(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE));
media->addItem(new CMenuForwarder(LOCALE_UPNPBROWSER_HEAD, true, NULL, new CUpnpBrowserGui(), NULL, CRCInput::convertDigitToKey(0)));
mainMenu.addItem(new CMenuForwarder(LOCALE_MAINMENU_MEDIA, true, NULL, media, NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE));
#else
@@ -853,9 +853,9 @@ void CNeutrinoApp::InitMainMenu(CMenuWidget &mainMenu, CMenuWidget &mainSettings
if (CVFD::getInstance()->has_lcd)
mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_LCD , true, NULL, &lcdSettings , NULL, CRCInput::convertDigitToKey(sett_count++)));
mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_KEYBINDING, true, NULL, &keySettings , NULL, CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE ));
mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_KEYBINDING, true, NULL, &keySettings , NULL, CRCInput::RC_green , NEUTRINO_ICON_BUTTON_GREEN ));
mainSettings.addItem(new CMenuForwarder(LOCALE_AUDIOPLAYERPICSETTINGS_GENERAL , true, NULL, &audiopl_picSettings , NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW));
mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_MISC , true, NULL, &miscSettings , NULL, CRCInput::RC_green , NEUTRINO_ICON_BUTTON_GREEN ));
mainSettings.addItem(new CMenuForwarder(LOCALE_MAINSETTINGS_MISC , true, NULL, &miscSettings , NULL, CRCInput::RC_blue , NEUTRINO_ICON_BUTTON_BLUE ));
mainSettings.addItem(new CMenuForwarder(LOCALE_HDD_SETTINGS, true, NULL, new CHDDMenuHandler()));
//mainSettings.addItem(new CMenuForwarder(LOCALE_CAM_SETTINGS, true, NULL, g_CamHandler));
@@ -1425,11 +1425,11 @@ void CNeutrinoApp::InitServiceSettings(CMenuWidget &service, CMenuWidget &_scanS
addMenueIntroItems(service);
service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_SCANTS , true, NULL, &_scanSettings, "savesettings", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED) );
// service.addItem(new CMenuForwarder(LOCALE_EXTRA_ZAPIT_MENU , true, NULL, zapit_menu, NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN));
service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_RELOAD , true, NULL, this, "reloadchannels", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW));
service.addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_NAME , true, NULL, new CBEBouquetWidget(), NULL, CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE ));
service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_RELOAD , true, NULL, this, "reloadchannels", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ));
service.addItem(new CMenuForwarder(LOCALE_BOUQUETEDITOR_NAME , true, NULL, new CBEBouquetWidget(), NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW ));
CDataResetNotifier * resetNotifier = new CDataResetNotifier();
service.addItem(new CMenuForwarder(LOCALE_RESET_CHANNELS , true, NULL, resetNotifier, "channels", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN ));
service.addItem(new CMenuForwarder(LOCALE_RESET_CHANNELS , true, NULL, resetNotifier, "channels", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE ));
service.addItem(new CMenuForwarder(LOCALE_SERVICEMENU_GETPLUGINS, true, NULL, this, "reloadplugins"));
service.addItem(GenericMenuSeparatorLine);