From e98cad99047d7694f45b6ee0b85bf672e2409f26 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Wed, 13 Feb 2013 23:31:12 +0100 Subject: [PATCH 01/55] channellist.cpp: Show channel list vertically centered Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/91d76a94871c3c6fbdfb088e7e7f6e6287567f81 Author: Michael Liebmann Date: 2013-02-13 (Wed, 13 Feb 2013) Origin message was: ------------------ * channellist.cpp: Show channel list vertically centered ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 34a01ff60..1967f4cce 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -512,6 +512,7 @@ void CChannelList::calcSize() listmaxshow = (height - theight - footerHeight -0)/fheight; height = theight + footerHeight + listmaxshow * fheight; info_height = 2*fheight + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 10; + y += (frameBuffer->getScreenHeight() - height - info_height) / 2; infozone_width = full_width - width; pig_width = infozone_width; From 8bd619017014b0ed2f6163ecd26451d4c20c561b Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 14 Feb 2013 19:06:43 +0100 Subject: [PATCH 02/55] infoviewer.cpp: change width of infobar.txt-field ... ... in dependency from g_settings.infobar_progressbar Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0986c3af8a7d9562021f33e9e7e547f685c9c41c Author: vanhofen Date: 2013-02-14 (Thu, 14 Feb 2013) Origin message was: ------------------ - infoviewer.cpp: change width of infobar.txt-field ... ... in dependency from g_settings.infobar_progressbar ------------------ This commit was generated by Migit --- src/gui/infoviewer.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 08d00c5d8..e6beea975 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1757,7 +1757,7 @@ void CInfoViewer::showInfoFile() /*if (recordModeActive) return;*/ char infotext[80]; - int fd, xStart, xOffset, yStart, width, height, tWidth, tIndent; + int fd, xStart, yStart, width, height, iOffset, oOffset, tWidth, tIndent, pb_w; ssize_t cnt; fd = open("/tmp/infobar.txt", O_RDONLY); //read textcontent from this file @@ -1773,14 +1773,16 @@ void CInfoViewer::showInfoFile() } infotext[cnt-1] = '\0'; - xStart = BoxStartX + ChanWidth + 140; //140px space for the little rec/ts-bar - xOffset = 5; //same value as the used RADIUS_SMALL + iOffset = RADIUS_SMALL; // inner left/right offset + oOffset = 140; // outer left/right offset + pb_w = 112; // same value as int pb_w in display_Info() + xStart = BoxStartX + ChanWidth + oOffset; yStart = BoxStartY; - width = BoxEndX - xStart - 225; //225px space for the progress-bar + width = BoxEndX - xStart - (g_settings.infobar_progressbar ? oOffset : oOffset + pb_w); height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight() + 2; tWidth = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth(infotext); - if (tWidth < (width - (xOffset * 2)) ) - tIndent = (width - (xOffset * 2) - tWidth) / 2; + if (tWidth < (width - (iOffset * 2)) ) + tIndent = (width - (iOffset * 2) - tWidth) / 2; else tIndent = 0; //shadow @@ -1789,7 +1791,7 @@ void CInfoViewer::showInfoFile() frameBuffer->paintBoxRel(xStart, yStart, width, height, COL_INFOBAR_PLUS_0, RADIUS_SMALL, CORNER_ALL); //content g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString( - xStart + xOffset + tIndent, yStart + height, width - xOffset, (std::string)infotext, COL_INFOBAR, height, false); + xStart + iOffset + tIndent, yStart + height, width - iOffset, (std::string)infotext, COL_INFOBAR, height, false); } void CInfoViewer::killTitle() From 2b9e5b9bd99ba6d889df67bd22afbc6b9429231a Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 14 Feb 2013 19:16:54 +0100 Subject: [PATCH 03/55] fix terrible typo Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/fe78bf05806bd52fce3e1a63d99d98be9d0cda02 Author: vanhofen Date: 2013-02-14 (Thu, 14 Feb 2013) Origin message was: ------------------ - fix terrible typo ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.h | 2 +- src/gui/pictureviewer.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index daba3d8a9..e4f0c6894 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -260,7 +260,7 @@ class CAudioPlayerGui : public CMenuTarget void stop(); bool playNext(bool allow_rotate = false); bool playPrev(bool allow_rotate = false); - int getAdioPayerM_currend() {return m_current;} + int getAudioPlayerM_current() {return m_current;} }; diff --git a/src/gui/pictureviewer.cpp b/src/gui/pictureviewer.cpp index 4dbd38422..44b4a8bcb 100644 --- a/src/gui/pictureviewer.cpp +++ b/src/gui/pictureviewer.cpp @@ -235,7 +235,7 @@ int CPictureViewerGui::show() bool update=true; if (audioplayer) - m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); while (loop) { @@ -563,17 +563,17 @@ int CPictureViewerGui::show() // control keys for audioplayer else if (audioplayer && msg==CRCInput::RC_pause) { - m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); m_audioPlayer->pause(); } else if (audioplayer && msg==CRCInput::RC_stop) { - m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); m_audioPlayer->stop(); } else if (audioplayer && msg==CRCInput::RC_play) { - m_currentTitle = m_audioPlayer->getAdioPayerM_currend(); + m_currentTitle = m_audioPlayer->getAudioPlayerM_current(); if (m_currentTitle > -1) m_audioPlayer->play((unsigned int)m_currentTitle); } From 72fd77bb5f11f62dafd9274ad7ce87eae627c898 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Fri, 15 Feb 2013 22:55:45 +0100 Subject: [PATCH 04/55] Revert "- channellist.cpp: enable to lock new_zap_mode" This reverts commit 8b1b3b1418e83e3982a43508b554de0eb831067b because the display of infobar while zapping is broken with this commit. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/fb892d18ff25d45c3757b007244a5592d57f351e Author: vanhofen Date: 2013-02-15 (Fri, 15 Feb 2013) ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 3 --- data/locale/english.locale | 3 --- src/gui/channellist.cpp | 26 ++++++++++---------------- src/gui/channellist.h | 3 ++- src/gui/miscsettings_menu.cpp | 9 +-------- src/system/locals.h | 3 --- src/system/locals_intern.h | 3 --- 7 files changed, 13 insertions(+), 37 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index abbe56b57..21aefc8db 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -225,9 +225,6 @@ channellist.make_hdlist Erzeuge Bouquet mit HD-Kanälen channellist.make_newlist Erzeuge Bouquet mit neuen Kanälen channellist.make_removedlist Erzeuge Bouquet mit gelöschten Kanälen channellist.new_zap_mode Quickzap in Liste -channellist.new_zap_mode_active aktiv -channellist.new_zap_mode_allow erlauben -channellist.new_zap_mode_off aus channellist.nonefound Es wurden keine Kanäle gefunden!\nFühren Sie bitte eine Kanalsuche durch\n(MENU-Taste -> Service) channellist.provs Anbieter channellist.recording_not_possible Aufnahme nicht möglich! diff --git a/data/locale/english.locale b/data/locale/english.locale index f4405d184..e731c32ba 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -225,9 +225,6 @@ channellist.make_hdlist Create list of HD channels channellist.make_newlist Create list of new channels channellist.make_removedlist Create list of removed channels channellist.new_zap_mode Quickzap in list -channellist.new_zap_mode_active active -channellist.new_zap_mode_allow allow -channellist.new_zap_mode_off off channellist.nonefound No channels were found!\nPlease execute a scan\n(MENU-key -> service) channellist.provs Providers channellist.recording_not_possible Recording not possible! diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 1967f4cce..76c77e4fa 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -96,7 +96,7 @@ extern cVideo * videoDecoder; #define ConnectLineBox_Width 16 -CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist) +CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist, bool ) { frameBuffer = CFrameBuffer::getInstance(); name = pName; @@ -108,6 +108,7 @@ CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vl this->historyMode = phistoryMode; vlist = _vlist; selected_chid = 0; + this->new_mode_active = false; footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //initial height value for buttonbar previous_channellist_additional = -1; eventFont = SNeutrinoSettings::FONT_TYPE_CHANNELLIST_EVENT; @@ -540,7 +541,7 @@ bool CChannelList::updateSelection(int newpos) showChannelLogo(); } - if((g_settings.channellist_new_zap_mode == 2 /* active */) && SameTP()) { + if(this->new_mode_active && SameTP()) { actzap = true; zapTo(selected); } @@ -564,6 +565,8 @@ int CChannelList::show() return res; } + this->new_mode_active = 0; + calcSize(); displayNext = false; @@ -776,17 +779,7 @@ int CChannelList::show() } else if (( msg == CRCInput::RC_spkr ) && g_settings.channellist_new_zap_mode ) { if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_ts) { - switch (g_settings.channellist_new_zap_mode) { - case 2: /* active */ - g_settings.channellist_new_zap_mode = 1; /* allow */ - break; - case 1: /* allow */ - g_settings.channellist_new_zap_mode = 2; /* active */ - break; - default: - break; - - } + this->new_mode_active = (this->new_mode_active ? 0 : 1); paintHead(); showChannelLogo(); } @@ -909,6 +902,7 @@ int CChannelList::show() res = bouquetList->exec(true); printf("CChannelList:: bouquetList->exec res %d\n", res); } + this->new_mode_active = 0; if(NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode()) return -1; @@ -1159,7 +1153,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) zapToChannel(chan); tuned = pos; - if(g_settings.channellist_new_zap_mode == 2 /* active */) + if(this->new_mode_active) selected_in_new_mode = pos; else selected = pos; @@ -1195,7 +1189,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel) g_RemoteControl->zapTo_ChannelID(channel->getChannelID(), channel->getName(), !channel->bAlwaysLocked); CNeutrinoApp::getInstance()->channelList->adjustToChannelID(channel->getChannelID()); } - if(g_settings.channellist_new_zap_mode != 2 /* not active */) { + if(!this->new_mode_active) { /* remove recordModeActive from infobar */ if(g_settings.auto_timeshift && !CNeutrinoApp::getInstance()->recordingstatus) { g_InfoViewer->handleMsg(NeutrinoMessages::EVT_RECORDMODE, 0); @@ -2002,7 +1996,7 @@ void CChannelList::paintHead() frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x + full_width - iw1 - 10, y, theight); //y+ 5 ); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, x + full_width - iw1 - iw2 - 14, y, theight);//y + 5); // icon for bouquet list button if (g_settings.channellist_new_zap_mode) - frameBuffer->paintIcon((g_settings.channellist_new_zap_mode == 2 /* active */) ? + frameBuffer->paintIcon(this->new_mode_active ? NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE : NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE, x + full_width - iw1 - iw2 - iw3 - 18, y, theight); diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 7fa9e8ed0..248f3c6cb 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -93,6 +93,7 @@ private: bool displayList; int info_height; + bool new_mode_active; int ChannelList_Rec; void paintDetails(int index); @@ -119,7 +120,7 @@ private: void processTextToArray(std::string text, int screening = 0); public: - CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false); + CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false, bool new_mode_active = false ); ~CChannelList(); void SetChannelList(ZapitChannelList* channels); diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 97f6b0214..9cb4d2692 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -134,13 +134,6 @@ const CMenuOptionChooser::keyval MISCSETTINGS_FILESYSTEM_IS_UTF8_OPTIONS[MISCSET { 1, LOCALE_FILESYSTEM_IS_UTF8_OPTION_UTF8 } }; -#define CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT 3 -const CMenuOptionChooser::keyval CHANNELLIST_NEW_ZAP_MODE_OPTIONS[CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT] = -{ - { 0, LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF }, - { 1, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW }, - { 2, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ACTIVE } -}; #ifdef CPU_FREQ #define CPU_FREQ_OPTION_COUNT 13 @@ -399,7 +392,7 @@ void CMiscMenue::showMiscSettingsMenuChanlist(CMenuWidget *ms_chanlist) mc->setHint("", LOCALE_MENU_HINT_ZAP_CYCLE); ms_chanlist->addItem(mc); - mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, CHANNELLIST_NEW_ZAP_MODE_OPTIONS, CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT, true ); + mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true ); mc->setHint("", LOCALE_MENU_HINT_NEW_ZAP_MODE); ms_chanlist->addItem(mc); } diff --git a/src/system/locals.h b/src/system/locals.h index 38203a667..48a6f1c1f 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -252,9 +252,6 @@ typedef enum LOCALE_CHANNELLIST_MAKE_NEWLIST, LOCALE_CHANNELLIST_MAKE_REMOVEDLIST, LOCALE_CHANNELLIST_NEW_ZAP_MODE, - LOCALE_CHANNELLIST_NEW_ZAP_MODE_ACTIVE, - LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW, - LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF, LOCALE_CHANNELLIST_NONEFOUND, LOCALE_CHANNELLIST_PROVS, LOCALE_CHANNELLIST_RECORDING_NOT_POSSIBLE, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index a712c50d2..ee4f87d9d 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -252,9 +252,6 @@ const char * locale_real_names[] = "channellist.make_newlist", "channellist.make_removedlist", "channellist.new_zap_mode", - "channellist.new_zap_mode_active", - "channellist.new_zap_mode_allow", - "channellist.new_zap_mode_off", "channellist.nonefound", "channellist.provs", "channellist.recording_not_possible", From 317d65f0f426ae4ef8f801a7feff0c49ad1dae78 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sat, 16 Feb 2013 10:28:38 +0100 Subject: [PATCH 05/55] icons: add missing hint_restart.png Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/fe3f4ce8630a3a72b4c8d91f3c06a05a234d5150 Author: vanhofen Date: 2013-02-16 (Sat, 16 Feb 2013) Origin message was: ------------------ - icons: add missing hint_restart.png ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/Makefile.am | 1 + data/icons/hint_restart.png | Bin 0 -> 2936 bytes 2 files changed, 1 insertion(+) create mode 100644 data/icons/hint_restart.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index b8b41539d..c09bb872c 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -110,6 +110,7 @@ install_DATA += \ hint_reboot.png \ hint_recording.png \ hint_reload.png \ + hint_restart.png \ hint_save.png \ hint_scan.png \ hint_scripts.png \ diff --git a/data/icons/hint_restart.png b/data/icons/hint_restart.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac75bd1bf285bf4f54b6cbf9413cd67b7f791e8 GIT binary patch literal 2936 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 i_1`LYYEk^e*Z%<|Z`=5TgFtuy0000 Date: Sat, 16 Feb 2013 13:14:50 +0100 Subject: [PATCH 06/55] icons: add missing multimedia.png Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/aa1d9ce4507024a270f1b9696e5f1363ddd077f2 Author: vanhofen Date: 2013-02-16 (Sat, 16 Feb 2013) Origin message was: ------------------ - icons: add missing multimedia.png ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/Makefile.am | 1 + data/icons/multimedia.png | Bin 0 -> 371 bytes 2 files changed, 1 insertion(+) create mode 100644 data/icons/multimedia.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index c09bb872c..ac3fbc5e7 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -163,6 +163,7 @@ install_DATA += \ mp3-5.jpg \ mp3-6.jpg \ mp3-7.jpg \ + multimedia.png \ mute.png \ mute_small.png \ mute_zap_gray.png \ diff --git a/data/icons/multimedia.png b/data/icons/multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..72ea0c77c5e3957c8a06a0468f1a95ff6c58b3ce GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wg8-ipS0D`p($dl_rYt%-IxMa% zto|%cPEM@RtSSi-(%BNm#oD%wrp3j@Q>IM0bL&p1&irhk2F8*gzhDN3XE)M7oFs2| z7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr6l5>)^mS#w%Ot?VZ7%gsg%2pS$J50zMB;LC zf&=@Sg$o%C$}-pmTAYqr|1!4PSL*P@$jWLT54Xcdy?btD;*+PubK{x)?>4P%H9M9jCid!82D>vuz*Q0;meHB_UZ=L_U zr%x69SSDkA`UZIx56TW(KatdV)fGZs_qp|NqyY z^Dt(x+|8}?HCytAea`O2gy%Xdj^7NMZ&|Fx5Z!Qqk>Qzooa*z6!lgieFnGH9xvX literal 0 HcmV?d00001 From 2a6783f83e596be8949b931545be16adcb030749 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sat, 16 Feb 2013 16:38:05 +0100 Subject: [PATCH 07/55] icons: remove unneeded radio.jpg Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/5357724b4c2709245d4fc8205a42eb20eb89b9dd Author: vanhofen Date: 2013-02-16 (Sat, 16 Feb 2013) Origin message was: ------------------ - icons: remove unneeded radio.jpg ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/radio.jpg | Bin 65088 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/icons/radio.jpg diff --git a/data/icons/radio.jpg b/data/icons/radio.jpg deleted file mode 100644 index 4a9072c536bee00993a2b6d8a3c7a380ea00ddeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65088 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 From 5d4baefb897cd6e6dfef91dcc045633888e0770f Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 16 Feb 2013 21:25:02 +0100 Subject: [PATCH 08/55] src/gui/infoviewer.cpp: fix div by zero Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0fc78c5738d5a4c9ccd8b76187cbc3f2b13cecaa Author: Jacek Jendrzej Date: 2013-02-16 (Sat, 16 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/infoviewer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index e6beea975..e9c3712c6 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -734,7 +734,10 @@ void CInfoViewer::showTitle (const int ChanNum, const std::string & Channel, con prov_name=prov_name.substr(prov_name.find_first_of("]")+1); int chname_width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getRenderWidth (ChannelName, true);// UTF-8 - chname_width += (chname_width/(ChannelName.size()-1)/2); + unsigned int chann_size = ChannelName.size(); + if(ChannelName.empty()) + chann_size = 1; + chname_width += (chname_width/chann_size/2); g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString( ChanNameX + 10 + ChanNumWidth + chname_width, ChanNameY + time_height -SHADOW_OFFSET/2, BoxEndX - (ChanNameX + 20) - time_width - LEFT_OFFSET - 5 - ChanNumWidth - chname_width, From 18c1d242d187870f00c3556ef8d31e9e7eef79aa Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sun, 17 Feb 2013 21:39:10 +0100 Subject: [PATCH 09/55] icons: remove unneeded ddfill.png Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b19bd8758015351507d75f79a556e275d684b3cf Author: vanhofen Date: 2013-02-17 (Sun, 17 Feb 2013) Origin message was: ------------------ - icons: remove unneeded ddfill.png ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/Makefile.am | 1 - data/icons/ddfill.png | Bin 136 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 data/icons/ddfill.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index ac3fbc5e7..6d2b7b202 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -69,7 +69,6 @@ install_DATA += \ dd.png \ dd_avail.png \ dd_gray.png \ - ddfill.png \ down.png \ error.png \ features.png \ diff --git a/data/icons/ddfill.png b/data/icons/ddfill.png deleted file mode 100644 index 88e3fc272211d1656ceffa5228024f8e9e9827f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)g$P6TnZ_d99WHFWm z`2{mLJiCzw Date: Sun, 17 Feb 2013 21:55:21 +0100 Subject: [PATCH 10/55] channellist.cpp: allow colored events (for time) in right eventlist Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ddbac1b248345b433e0fbd26b30f1625e8e91a4f Author: vanhofen Date: 2013-02-17 (Sun, 17 Feb 2013) Origin message was: ------------------ - channellist.cpp: allow colored events (for time) in right eventlist ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 76c77e4fa..bcedccc05 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2164,7 +2164,7 @@ void CChannelList::paint_events(int index) strftime(startTime, sizeof(startTime), "%H:%M", tmStartZeit ); //printf("%s %s\n", startTime, e->description.c_str()); startTimeWidth = eventStartTimeWidth; - g_Font[eventFont]->RenderString(x+ width+5, y+ theight+ pig_height + i*ffheight, startTimeWidth, startTime, COL_MENUCONTENTINACTIVE, 0, true); + g_Font[eventFont]->RenderString(x+ width+5, y+ theight+ pig_height + i*ffheight, startTimeWidth, startTime, (g_settings.colored_events_channellist == 2 /* next */) ? COL_COLORED_EVENTS_CHANNELLIST : COL_MENUCONTENTINACTIVE, 0, true); } g_Font[eventFont]->RenderString(x+ width+5+startTimeWidth, y+ theight+ pig_height + i*ffheight, infozone_width - startTimeWidth - 20, e->description, COL_MENUCONTENTDARK, 0, true); } From 119f0c82f6cbb95c1995d6460e16c94efb5ad729 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sun, 17 Feb 2013 22:55:28 +0100 Subject: [PATCH 11/55] Revert "Revert '- channellist.cpp: enable to lock new_zap_mode'" This reverts commit 72fd77bb5f11f62dafd9274ad7ce87eae627c898. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/505c4ba80dc4334fd6828a0ada9fd7b22ec5d66f Author: vanhofen Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 3 +++ data/locale/english.locale | 3 +++ src/gui/channellist.cpp | 26 ++++++++++++++++---------- src/gui/channellist.h | 3 +-- src/gui/miscsettings_menu.cpp | 9 ++++++++- src/system/locals.h | 3 +++ src/system/locals_intern.h | 3 +++ 7 files changed, 37 insertions(+), 13 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 21aefc8db..abbe56b57 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -225,6 +225,9 @@ channellist.make_hdlist Erzeuge Bouquet mit HD-Kanälen channellist.make_newlist Erzeuge Bouquet mit neuen Kanälen channellist.make_removedlist Erzeuge Bouquet mit gelöschten Kanälen channellist.new_zap_mode Quickzap in Liste +channellist.new_zap_mode_active aktiv +channellist.new_zap_mode_allow erlauben +channellist.new_zap_mode_off aus channellist.nonefound Es wurden keine Kanäle gefunden!\nFühren Sie bitte eine Kanalsuche durch\n(MENU-Taste -> Service) channellist.provs Anbieter channellist.recording_not_possible Aufnahme nicht möglich! diff --git a/data/locale/english.locale b/data/locale/english.locale index e731c32ba..f4405d184 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -225,6 +225,9 @@ channellist.make_hdlist Create list of HD channels channellist.make_newlist Create list of new channels channellist.make_removedlist Create list of removed channels channellist.new_zap_mode Quickzap in list +channellist.new_zap_mode_active active +channellist.new_zap_mode_allow allow +channellist.new_zap_mode_off off channellist.nonefound No channels were found!\nPlease execute a scan\n(MENU-key -> service) channellist.provs Providers channellist.recording_not_possible Recording not possible! diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index bcedccc05..543789098 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -96,7 +96,7 @@ extern cVideo * videoDecoder; #define ConnectLineBox_Width 16 -CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist, bool ) +CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist) { frameBuffer = CFrameBuffer::getInstance(); name = pName; @@ -108,7 +108,6 @@ CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vl this->historyMode = phistoryMode; vlist = _vlist; selected_chid = 0; - this->new_mode_active = false; footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //initial height value for buttonbar previous_channellist_additional = -1; eventFont = SNeutrinoSettings::FONT_TYPE_CHANNELLIST_EVENT; @@ -541,7 +540,7 @@ bool CChannelList::updateSelection(int newpos) showChannelLogo(); } - if(this->new_mode_active && SameTP()) { + if((g_settings.channellist_new_zap_mode == 2 /* active */) && SameTP()) { actzap = true; zapTo(selected); } @@ -565,8 +564,6 @@ int CChannelList::show() return res; } - this->new_mode_active = 0; - calcSize(); displayNext = false; @@ -779,7 +776,17 @@ int CChannelList::show() } else if (( msg == CRCInput::RC_spkr ) && g_settings.channellist_new_zap_mode ) { if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_ts) { - this->new_mode_active = (this->new_mode_active ? 0 : 1); + switch (g_settings.channellist_new_zap_mode) { + case 2: /* active */ + g_settings.channellist_new_zap_mode = 1; /* allow */ + break; + case 1: /* allow */ + g_settings.channellist_new_zap_mode = 2; /* active */ + break; + default: + break; + + } paintHead(); showChannelLogo(); } @@ -902,7 +909,6 @@ int CChannelList::show() res = bouquetList->exec(true); printf("CChannelList:: bouquetList->exec res %d\n", res); } - this->new_mode_active = 0; if(NeutrinoMessages::mode_ts == CNeutrinoApp::getInstance()->getMode()) return -1; @@ -1153,7 +1159,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) zapToChannel(chan); tuned = pos; - if(this->new_mode_active) + if(g_settings.channellist_new_zap_mode == 2 /* active */) selected_in_new_mode = pos; else selected = pos; @@ -1189,7 +1195,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel) g_RemoteControl->zapTo_ChannelID(channel->getChannelID(), channel->getName(), !channel->bAlwaysLocked); CNeutrinoApp::getInstance()->channelList->adjustToChannelID(channel->getChannelID()); } - if(!this->new_mode_active) { + if(g_settings.channellist_new_zap_mode != 2 /* not active */) { /* remove recordModeActive from infobar */ if(g_settings.auto_timeshift && !CNeutrinoApp::getInstance()->recordingstatus) { g_InfoViewer->handleMsg(NeutrinoMessages::EVT_RECORDMODE, 0); @@ -1996,7 +2002,7 @@ void CChannelList::paintHead() frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x + full_width - iw1 - 10, y, theight); //y+ 5 ); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, x + full_width - iw1 - iw2 - 14, y, theight);//y + 5); // icon for bouquet list button if (g_settings.channellist_new_zap_mode) - frameBuffer->paintIcon(this->new_mode_active ? + frameBuffer->paintIcon((g_settings.channellist_new_zap_mode == 2 /* active */) ? NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE : NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE, x + full_width - iw1 - iw2 - iw3 - 18, y, theight); diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 248f3c6cb..7fa9e8ed0 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -93,7 +93,6 @@ private: bool displayList; int info_height; - bool new_mode_active; int ChannelList_Rec; void paintDetails(int index); @@ -120,7 +119,7 @@ private: void processTextToArray(std::string text, int screening = 0); public: - CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false, bool new_mode_active = false ); + CChannelList(const char * const Name, bool historyMode = false, bool _vlist = false); ~CChannelList(); void SetChannelList(ZapitChannelList* channels); diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 9cb4d2692..97f6b0214 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -134,6 +134,13 @@ const CMenuOptionChooser::keyval MISCSETTINGS_FILESYSTEM_IS_UTF8_OPTIONS[MISCSET { 1, LOCALE_FILESYSTEM_IS_UTF8_OPTION_UTF8 } }; +#define CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT 3 +const CMenuOptionChooser::keyval CHANNELLIST_NEW_ZAP_MODE_OPTIONS[CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT] = +{ + { 0, LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF }, + { 1, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW }, + { 2, LOCALE_CHANNELLIST_NEW_ZAP_MODE_ACTIVE } +}; #ifdef CPU_FREQ #define CPU_FREQ_OPTION_COUNT 13 @@ -392,7 +399,7 @@ void CMiscMenue::showMiscSettingsMenuChanlist(CMenuWidget *ms_chanlist) mc->setHint("", LOCALE_MENU_HINT_ZAP_CYCLE); ms_chanlist->addItem(mc); - mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true ); + mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, CHANNELLIST_NEW_ZAP_MODE_OPTIONS, CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT, true ); mc->setHint("", LOCALE_MENU_HINT_NEW_ZAP_MODE); ms_chanlist->addItem(mc); } diff --git a/src/system/locals.h b/src/system/locals.h index 48a6f1c1f..38203a667 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -252,6 +252,9 @@ typedef enum LOCALE_CHANNELLIST_MAKE_NEWLIST, LOCALE_CHANNELLIST_MAKE_REMOVEDLIST, LOCALE_CHANNELLIST_NEW_ZAP_MODE, + LOCALE_CHANNELLIST_NEW_ZAP_MODE_ACTIVE, + LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW, + LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF, LOCALE_CHANNELLIST_NONEFOUND, LOCALE_CHANNELLIST_PROVS, LOCALE_CHANNELLIST_RECORDING_NOT_POSSIBLE, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index ee4f87d9d..a712c50d2 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -252,6 +252,9 @@ const char * locale_real_names[] = "channellist.make_newlist", "channellist.make_removedlist", "channellist.new_zap_mode", + "channellist.new_zap_mode_active", + "channellist.new_zap_mode_allow", + "channellist.new_zap_mode_off", "channellist.nonefound", "channellist.provs", "channellist.recording_not_possible", From 5cb52c38dd01b7f473ce890bf0b5f5991142e505 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sun, 17 Feb 2013 22:57:37 +0100 Subject: [PATCH 12/55] channellist.cpp: fix broken display of infobar while zapping Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/9632f3bad75b52e491a1b44e722490204c76facc Author: vanhofen Date: 2013-02-17 (Sun, 17 Feb 2013) Origin message was: ------------------ - channellist.cpp: fix broken display of infobar while zapping ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 33 ++++++++++++++++++++------------- src/gui/channellist.h | 1 + 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 543789098..2b01333cd 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -107,6 +107,7 @@ CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vl zapProtection = NULL; this->historyMode = phistoryMode; vlist = _vlist; + new_zap_mode = 0; selected_chid = 0; footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //initial height value for buttonbar previous_channellist_additional = -1; @@ -499,7 +500,7 @@ void CChannelList::calcSize() frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &icol_w, &icol_h); theight = std::max(theight, icol_h); - if(g_settings.channellist_new_zap_mode) + if(new_zap_mode) { frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, &icol_w, &icol_h); theight = std::max(theight, icol_h); @@ -540,7 +541,7 @@ bool CChannelList::updateSelection(int newpos) showChannelLogo(); } - if((g_settings.channellist_new_zap_mode == 2 /* active */) && SameTP()) { + if((new_zap_mode == 2 /* active */) && SameTP()) { actzap = true; zapTo(selected); } @@ -564,6 +565,8 @@ int CChannelList::show() return res; } + new_zap_mode = g_settings.channellist_new_zap_mode; + calcSize(); displayNext = false; @@ -774,14 +777,14 @@ int CChannelList::show() loop=false; } } - else if (( msg == CRCInput::RC_spkr ) && g_settings.channellist_new_zap_mode ) { + else if (( msg == CRCInput::RC_spkr ) && new_zap_mode ) { if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_ts) { - switch (g_settings.channellist_new_zap_mode) { + switch (new_zap_mode) { case 2: /* active */ - g_settings.channellist_new_zap_mode = 1; /* allow */ + new_zap_mode = 1; /* allow */ break; case 1: /* allow */ - g_settings.channellist_new_zap_mode = 2; /* active */ + new_zap_mode = 2; /* active */ break; default: break; @@ -901,6 +904,10 @@ int CChannelList::show() } } } + if (g_settings.channellist_new_zap_mode != new_zap_mode) + g_settings.channellist_new_zap_mode = new_zap_mode; + new_zap_mode = 0; + hide(); fader.Stop(); @@ -1159,7 +1166,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) zapToChannel(chan); tuned = pos; - if(g_settings.channellist_new_zap_mode == 2 /* active */) + if(new_zap_mode == 2 /* active */) selected_in_new_mode = pos; else selected = pos; @@ -1195,7 +1202,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel) g_RemoteControl->zapTo_ChannelID(channel->getChannelID(), channel->getName(), !channel->bAlwaysLocked); CNeutrinoApp::getInstance()->channelList->adjustToChannelID(channel->getChannelID()); } - if(g_settings.channellist_new_zap_mode != 2 /* not active */) { + if(new_zap_mode != 2 /* not active */) { /* remove recordModeActive from infobar */ if(g_settings.auto_timeshift && !CNeutrinoApp::getInstance()->recordingstatus) { g_InfoViewer->handleMsg(NeutrinoMessages::EVT_RECORDMODE, 0); @@ -1993,7 +2000,7 @@ void CChannelList::paintHead() int iw1, iw2, iw3, ih = 0; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_INFO, &iw1, &ih); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &iw2, &ih); - if (g_settings.channellist_new_zap_mode) + if (new_zap_mode) frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, &iw3, &ih); // head @@ -2001,20 +2008,20 @@ void CChannelList::paintHead() frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x + full_width - iw1 - 10, y, theight); //y+ 5 ); frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, x + full_width - iw1 - iw2 - 14, y, theight);//y + 5); // icon for bouquet list button - if (g_settings.channellist_new_zap_mode) - frameBuffer->paintIcon((g_settings.channellist_new_zap_mode == 2 /* active */) ? + if (new_zap_mode) + frameBuffer->paintIcon((new_zap_mode == 2 /* active */) ? NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE : NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE, x + full_width - iw1 - iw2 - iw3 - 18, y, theight); if (gotTime) { - int iw3x = (g_settings.channellist_new_zap_mode) ? iw3 : -4; + int iw3x = (new_zap_mode) ? iw3 : -4; g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x + full_width - iw1 - iw2 - iw3x - 28 -timestr_len, y+theight, timestr_len, timestr, COL_MENUHEAD, 0, true); // UTF-8 timestr_len += 4; } timestr_len += iw1 + iw2 + 12; - if (g_settings.channellist_new_zap_mode) + if (new_zap_mode) timestr_len += iw3 + 10; logo_off = timestr_len + 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, full_width - timestr_len, name, COL_MENUHEAD, 0, true); // UTF-8 diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 7fa9e8ed0..61bfed57a 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -64,6 +64,7 @@ private: unsigned int liststart; unsigned int listmaxshow; unsigned int numwidth; + int new_zap_mode; int fheight; // Fonthoehe Channellist-Inhalt int theight; // Fonthoehe Channellist-Titel int footerHeight; From 7add27227acf8da467abe5a9671792b1854dce16 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Sun, 17 Feb 2013 23:20:04 +0100 Subject: [PATCH 13/55] channellist.cpp: fix logo position if new_zap_mode is off Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/782c9f107c14da6b99fce724b55571e200be82d3 Author: vanhofen Date: 2013-02-17 (Sun, 17 Feb 2013) Origin message was: ------------------ - channellist.cpp: fix logo position if new_zap_mode is off ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 2b01333cd..442633615 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2014,7 +2014,7 @@ void CChannelList::paintHead() x + full_width - iw1 - iw2 - iw3 - 18, y, theight); if (gotTime) { - int iw3x = (new_zap_mode) ? iw3 : -4; + int iw3x = (new_zap_mode) ? iw3 : -10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x + full_width - iw1 - iw2 - iw3x - 28 -timestr_len, y+theight, timestr_len, timestr, COL_MENUHEAD, 0, true); // UTF-8 timestr_len += 4; From 544cec7f7ff03963b20d8bb6137d6f5df6b36606 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Mon, 18 Feb 2013 21:00:19 +0100 Subject: [PATCH 14/55] channellist.cpp: show pic instead of miniTV in radiomode Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/8a7687abe189f8db85b2930c6c593416dccc0296 Author: vanhofen Date: 2013-02-18 (Mon, 18 Feb 2013) Origin message was: ------------------ - channellist.cpp: show pic instead of miniTV in radiomode ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 442633615..a8f013829 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2032,7 +2032,12 @@ void CChannelList::paint() if (g_settings.channellist_additional == 2) // with miniTV { // 5px offset - same value as in list below - paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); + if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { + paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); + } + else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { + g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); + } } numwidth = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER]->getRenderWidth(MaxChanNr().c_str()); From 9bfda4ef8002f023f627d5f993d638c5ebb1373a Mon Sep 17 00:00:00 2001 From: vanhofen Date: Mon, 18 Feb 2013 21:54:52 +0100 Subject: [PATCH 15/55] channellist.cpp: change order of painting to be more liquid Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b307f4c8d4295e12305c8cc3b6e35cc3b696fedf Author: vanhofen Date: 2013-02-18 (Mon, 18 Feb 2013) Origin message was: ------------------ - channellist.cpp: change order of painting to be more liquid ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index a8f013829..5efe68fd9 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -573,11 +573,6 @@ int CChannelList::show() COSDFader fader(g_settings.menu_Content_alpha); fader.StartFadeIn(); - if (g_settings.channellist_additional) - { - frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,pig_height+infozone_height,COL_MENUCONTENT_PLUS_0); - } - paintHead(); paint(); @@ -2029,23 +2024,17 @@ void CChannelList::paintHead() void CChannelList::paint() { - if (g_settings.channellist_additional == 2) // with miniTV - { - // 5px offset - same value as in list below - if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { - paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); - } - else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { - g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); - } - } - numwidth = g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_NUMBER]->getRenderWidth(MaxChanNr().c_str()); liststart = (selected/listmaxshow)*listmaxshow; updateEvents(this->historyMode ? 0:liststart, this->historyMode ? 0:(liststart + listmaxshow)); - frameBuffer->paintBoxRel(x, y+theight, width, height-footerHeight-theight, COL_MENUCONTENT_PLUS_0, 0, CORNER_BOTTOM); + // paint background for main box + frameBuffer->paintBoxRel(x, y+theight, width, height-footerHeight-theight, COL_MENUCONTENT_PLUS_0); + if (g_settings.channellist_additional) + // paint background for right box + frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,pig_height+infozone_height,COL_MENUCONTENT_PLUS_0); + for(unsigned int count = 0; count < listmaxshow; count++) { paintItem(count); } @@ -2058,6 +2047,19 @@ void CChannelList::paint() frameBuffer->paintBoxRel(x+ width- 13, ypos+ 2+ sbs*(sb-4)/sbc, 11, (sb-4)/sbc, COL_MENUCONTENT_PLUS_3); showChannelLogo(); + + if (g_settings.channellist_additional == 2) // with miniTV + { + // paint box for miniTV again - important! + frameBuffer->paintBoxRel(x+width, y+theight , pig_width, pig_height, COL_MENUCONTENT_PLUS_0); + // 5px offset - same value as in list below + if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { + paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); + } + else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { + g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); + } + } } bool CChannelList::isEmpty() const @@ -2127,7 +2129,7 @@ std::string CChannelList::MaxChanNr() void CChannelList::paint_pig (int _x, int _y, int w, int h) { frameBuffer->paintBackgroundBoxRel (_x, _y, w, h); - printf("CChannelList::paint_pig x %d y %d w %d h %d osd_w %d osd_w %d\n", _x, _y, w, h, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); + //printf("CChannelList::paint_pig x %d y %d w %d h %d osd_w %d osd_w %d\n", _x, _y, w, h, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); videoDecoder->Pig(_x, _y, w, h, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); } From 2800b5617882ac0d10effb778991cb613e87e45e Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 19 Feb 2013 00:11:12 +0100 Subject: [PATCH 16/55] audioplayer.cpp: restore correct background when leaving screensaver and remove background-pic from screensaver-loop Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/6e828fa0a4a96a51b36367a47ad254b81f7fff59 Author: vanhofen Date: 2013-02-19 (Tue, 19 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: restore correct background when leaving screensaver and remove background-pic from screensaver-loop ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 13f2184df..bded5bdfc 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -420,8 +420,6 @@ int CAudioPlayerGui::show() videoDecoder->ShowPicture(fname); } else if (pic_index) { pic_index = 0; - videoDecoder->StopPicture(); - videoDecoder->ShowPicture(DATADIR "/neutrino/icons/mp3.jpg"); } } else pic_index = 0; @@ -2330,11 +2328,8 @@ void CAudioPlayerGui::screensaver(bool on) { g_RCInput->killTimer(stimer); m_screensaver = false; -#if 0 - m_frameBuffer->loadPal("radiomode.pal", 18, COL_MAXFREE); - m_frameBuffer->useBackground(m_frameBuffer->loadBackground(NEUTRINO_ICON_RADIOMODE));// set useBackground true or false - m_frameBuffer->paintBackground(); -#endif + videoDecoder->StopPicture(); + videoDecoder->ShowPicture(DATADIR "/neutrino/icons/mp3.jpg"); paint(); m_idletime = time(NULL); } From 58bfc8e31e7f3a59f008c5d822942f075a8e0f01 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 19 Feb 2013 11:11:58 +0100 Subject: [PATCH 17/55] audioplayer.cpp: fix cursor-background with round borders Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/59642214f77a9d43badd45d03db7b2ee34bf07f9 Author: vanhofen Date: 2013-02-19 (Tue, 19 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: fix cursor-background with round borders ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index bded5bdfc..e8bd6ba24 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1588,6 +1588,7 @@ void CAudioPlayerGui::paintItem(int pos) c_rad_small = 0; } + m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, COL_MENUCONTENT_PLUS_0); m_frameBuffer->paintBoxRel(m_x, ypos, m_width - 15, m_fheight, bgcolor, c_rad_small); if ((pos + m_liststart) < m_playlist.size()) From 2b4cf29743dbe713da85f862a83a373538bc5967 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 19 Feb 2013 11:27:46 +0100 Subject: [PATCH 18/55] CComponents: move class into its own source directory The components could over time become quite large, so it makes more sense, coming features to split into multiple files and to do it in a separate directory. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0a961a4cf6446378b7af2e0a0f476ae9885bd749 Author: Thilo Graf Date: 2013-02-19 (Tue, 19 Feb 2013) ------------------ This commit was generated by Migit --- configure.ac | 1 + src/Makefile.am | 1 + src/gui/Makefile.am | 2 +- src/gui/audioplayer.h | 2 +- src/gui/bedit/bouqueteditor_channels.h | 2 +- src/gui/bedit/bouqueteditor_chanselect.h | 2 +- src/gui/channellist.cpp | 2 +- src/gui/components/Makefile.am | 20 +++++++++++++++++++ .../{widget/components.h => components/cc.h} | 8 ++++---- src/gui/{widget => components}/components.cpp | 11 +++++----- src/gui/widget/Makefile.am | 1 - src/gui/widget/menue.h | 2 +- 12 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 src/gui/components/Makefile.am rename src/gui/{widget/components.h => components/cc.h} (94%) rename src/gui/{widget => components}/components.cpp (96%) diff --git a/configure.ac b/configure.ac index f5e82089c..0e7a39895 100644 --- a/configure.ac +++ b/configure.ac @@ -176,6 +176,7 @@ src/driver/audiodec/Makefile src/driver/Makefile src/gui/Makefile src/gui/bedit/Makefile +src/gui/components/Makefile src/gui/widget/Makefile src/system/Makefile data/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 93560a0cb..dd1b2ebed 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -48,6 +48,7 @@ endif neutrino_LDADD = \ daemonc/libneutrino_daemonc.a \ gui/bedit/libneutrino_gui_bedit.a \ + gui/components/libneutrino_gui_components.a \ gui/libtimerlist.a \ gui/libneutrino_gui.a \ gui/widget/libneutrino_gui_widget.a \ diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 4f084a469..4da8fc6a1 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -18,7 +18,7 @@ noinst_HEADERS = git_version.h .PHONY: makeversion -SUBDIRS = widget bedit +SUBDIRS = bedit components widget INCLUDES = \ -I$(top_builddir) \ diff --git a/src/gui/audioplayer.h b/src/gui/audioplayer.h index e4f0c6894..74284ed4a 100644 --- a/src/gui/audioplayer.h +++ b/src/gui/audioplayer.h @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/gui/bedit/bouqueteditor_channels.h b/src/gui/bedit/bouqueteditor_channels.h index bcc653e74..d3132af0d 100644 --- a/src/gui/bedit/bouqueteditor_channels.h +++ b/src/gui/bedit/bouqueteditor_channels.h @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include diff --git a/src/gui/bedit/bouqueteditor_chanselect.h b/src/gui/bedit/bouqueteditor_chanselect.h index 963862550..58ad2ebf3 100644 --- a/src/gui/bedit/bouqueteditor_chanselect.h +++ b/src/gui/bedit/bouqueteditor_chanselect.h @@ -34,7 +34,7 @@ #include #include -#include +#include #include #include diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 5efe68fd9..7e78f77a4 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -55,7 +55,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/gui/components/Makefile.am b/src/gui/components/Makefile.am new file mode 100644 index 000000000..5765a440c --- /dev/null +++ b/src/gui/components/Makefile.am @@ -0,0 +1,20 @@ +AM_CPPFLAGS = -fno-rtti -fno-exceptions + +INCLUDES = \ + -I$(top_builddir) \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/zapit/include \ + -I$(top_srcdir)/lib \ + -I$(top_srcdir)/lib/libeventserver \ + -I$(top_srcdir)/lib/libconfigfile \ + -I$(top_srcdir)/lib/libcoolstream \ + -I$(top_srcdir)/lib/xmltree \ + @FREETYPE_CFLAGS@ + + +noinst_LIBRARIES = libneutrino_gui_components.a + + +libneutrino_gui_components_a_SOURCES = \ + components.cpp diff --git a/src/gui/widget/components.h b/src/gui/components/cc.h similarity index 94% rename from src/gui/widget/components.h rename to src/gui/components/cc.h index c7ec2586a..522146dfc 100644 --- a/src/gui/widget/components.h +++ b/src/gui/components/cc.h @@ -1,9 +1,9 @@ /* - GUI window component classes - Neutrino-GUI + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' - Copyright(C) 2012, Thilo Graf (dbt) - - This class contains generic components for GUI-related parts. + Classes for generic for GUI-related components. + Copyright (C) 2012, 2013, Thilo Graf 'dbt' License: GPL diff --git a/src/gui/widget/components.cpp b/src/gui/components/components.cpp similarity index 96% rename from src/gui/widget/components.cpp rename to src/gui/components/components.cpp index be43e39b5..63893826f 100644 --- a/src/gui/widget/components.cpp +++ b/src/gui/components/components.cpp @@ -1,9 +1,10 @@ /* - GUI window component classes - Neutrino-GUI + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' - Copyright(C) 2012, Thilo Graf (dbt) - - This class contains generic components for GUI-related parts. + Classes for generic for GUI-related components. + Copyright (C) 2012, 2013, Thilo Graf 'dbt' + Copyright (C) 2012, Michael Liebmann 'micha-bbg' License: GPL @@ -29,7 +30,7 @@ #include #include -#include +#include "cc.h" diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 4b12dbb6a..6cdfee1fe 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -22,7 +22,6 @@ noinst_LIBRARIES = libneutrino_gui_widget.a libneutrino_gui_widget2.a libneutrino_gui_widget_a_SOURCES = \ buttons.cpp \ colorchooser.cpp \ - components.cpp \ drawable.cpp \ helpbox.cpp \ hintbox.cpp \ diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 1d694afa9..d5d33db33 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include From 76d3e3f7b13e77318d5d7683e81a1acfce1abcdc Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 19 Feb 2013 12:07:29 +0100 Subject: [PATCH 19/55] yweb: return to /bin/fbshot for osd-only screenshots the internal screenshot function seems paralyzed sometimes. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/bf56c88ee40471043b7f4676726886588e1ce9d3 Author: vanhofen Date: 2013-02-19 (Tue, 19 Feb 2013) Origin message was: ------------------ - yweb: return to /bin/fbshot for osd-only screenshots the internal screenshot function seems paralyzed sometimes. ------------------ This commit was generated by Migit --- src/nhttpd/web/Y_Tools_Screenshot.yhtm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/nhttpd/web/Y_Tools_Screenshot.yhtm b/src/nhttpd/web/Y_Tools_Screenshot.yhtm index 165f4fb95..2d6c836cc 100644 --- a/src/nhttpd/web/Y_Tools_Screenshot.yhtm +++ b/src/nhttpd/web/Y_Tools_Screenshot.yhtm @@ -1,3 +1,5 @@ +{=var-set:fbshot={=if-file-exists:/bin/fbshot~true~{=if-file-exists:/var/bin/fbshot~true~false=}=}=} + {=include-block:Y_Blocks.txt;head=} @@ -41,8 +43,12 @@ function do_snapshot() { filename = id("filename").value; } - var _null = loadSyncURL("/control/screenshot?name="+filename+"&osd="+enableOSD+"&video="+enableVideo); - window.setTimeout("do_showshot('"+filename+"');", (enableVideo == 1) ? 3500 : 1500); + if ({=var-get:fbshot=} == true && enableVideo == 0) + dbox_exec_tools("fbshot fb /tmp/"+filename+".png"); + else + loadSyncURL("/control/screenshot?name="+filename+"&osd="+enableOSD+"&video="+enableVideo); + + window.setTimeout("do_showshot('"+filename+"');", (enableVideo == 1) ? 6500 : 3000); } function do_showshot(_filename) { if (_filename == "") @@ -102,7 +108,7 @@ function do_zoomshot(){ {=include-block:Y_Blocks.txt;remote=} - + From 0d6d5afd3e7585b6d5f7d3b10d310217b2933eb6 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 19 Feb 2013 22:09:47 +0100 Subject: [PATCH 20/55] audioplayer.cpp: ignore first keypress when screensaver is on just quit the screensaver and return to loop Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/95b51f699314122b7040a18575bf3f56546fe22f Author: vanhofen Date: 2013-02-19 (Tue, 19 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: ignore first keypress when screensaver is on just quit the screensaver and return to loop ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index e8bd6ba24..19fe0fcc5 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -432,6 +432,11 @@ int CAudioPlayerGui::show() if (m_screensaver) { screensaver(false); + if (msg < CRCInput::RC_MaxRC) { + // ignore first keypress - just quit the screensaver + g_RCInput->clearRCMsg(); + continue; + } } } From 8e93ba0e33ca6f788988c0d90b3502f303471816 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 20 Feb 2013 00:59:39 +0100 Subject: [PATCH 21/55] audioplayer.cpp: remove not working code with mute-icon handling Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ed52353607f44b77d986fdfd9bcc7ebb6f475d81 Author: vanhofen Date: 2013-02-20 (Wed, 20 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: remove not working code with mute-icon handling ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 19fe0fcc5..883584a1a 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -360,6 +360,9 @@ int CAudioPlayerGui::show() int ret = menu_return::RETURN_REPAINT; + // clear whole screen + m_frameBuffer->paintBackground(); + CVFD::getInstance()->setMode(CVFD::MODE_AUDIO); paintLCD(); @@ -898,9 +901,6 @@ int CAudioPlayerGui::show() ret = menu_return::RETURN_EXIT_ALL; loop = false; } - // update mute icon - //paintHead(); - //paintLCD(); } } hide(); @@ -1669,20 +1669,6 @@ void CAudioPlayerGui::paintHead() } //m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MENU, m_x + m_width - 30, ypos); #endif -#if 1 - if ( CNeutrinoApp::getInstance()->isMuted() ) - { -#if 0 - int xpos = m_x + m_width - 75; - ypos = m_y + m_title_height; - if (m_theight > 32) - ypos = (m_theight - 32) / 2 + m_y + m_title_height; - m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MUTE, xpos, ypos); -#endif - m_frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE, &iw, &ih); - m_frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_MUTE, xpos - iw, ypos, m_theight); - } -#endif } //------------------------------------------------------------------------ From ff7b56035d4ee396726a1c49448b8252c5ecb7db Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 20 Feb 2013 02:09:26 +0100 Subject: [PATCH 22/55] audioplayer: don't paint something if screensaver is active Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/178ec028cbc8b9e6f684a5fdd117ce20484b6f38 Author: vanhofen Date: 2013-02-20 (Wed, 20 Feb 2013) Origin message was: ------------------ - audioplayer: don't paint something if screensaver is active ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 883584a1a..ca8ae6c22 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1721,7 +1721,9 @@ const struct button_label AudioPlayerButtons[][4] = void CAudioPlayerGui::paintFoot() { - // printf("paintFoot{\n"); + if (m_screensaver) + return; + const struct button_label ScondLineButtons[3] = { { NEUTRINO_ICON_BUTTON_OKAY , LOCALE_AUDIOPLAYER_PLAY }, @@ -1786,6 +1788,9 @@ const struct button_label ScondLineButtons[3] = //------------------------------------------------------------------------ void CAudioPlayerGui::paintInfo() { + if (m_screensaver) + return; + int c_rad_mid = RADIUS_MID; if (m_state == CAudioPlayerGui::STOP && m_show_playlist) m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width, m_title_height); @@ -1882,8 +1887,8 @@ void CAudioPlayerGui::paint() m_frameBuffer->paintBoxRel(m_x + m_width - 13, ypos + 2 + sbs*(sb-4)/sbc , 11, (sb-4)/sbc, COL_MENUCONTENT_PLUS_3, RADIUS_SMALL); } - paintFoot(); paintInfo(); + paintFoot(); m_visible = true; } @@ -2099,11 +2104,9 @@ void CAudioPlayerGui::play(unsigned int pos) //LCD paintLCD(); // Display - if (!m_screensaver) - paintInfo(); + paintInfo(); m_key_level = 1; - if (!m_screensaver) - paintFoot(); + paintFoot(); } } //------------------------------------------------------------------------ From d37d693cc83f05b1df8839a0bac8ba7fd5e78550 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 20 Feb 2013 03:00:09 +0100 Subject: [PATCH 23/55] audioplayer.cpp: fix display of buttons and round corners in footer Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/92e6d383bd8c76580e5d405039be807482f4b48b Author: vanhofen Date: 2013-02-20 (Wed, 20 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: fix display of buttons and round corners in footer ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index ca8ae6c22..ab701f6cb 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -1739,49 +1739,49 @@ const struct button_label ScondLineButtons[3] = top = m_y + (m_height - 2 * m_buttonHeight); int ButtonWidth = (m_width - 20) / 5; - //int ButtonWidth2 = (m_width - 50) / 2; - m_frameBuffer->paintBoxRel(m_x, top, m_width, 2 * m_buttonHeight, COL_INFOBAR_SHADOW_PLUS_1, c_rad_mid, CORNER_BOTTOM); - m_frameBuffer->paintHLine(m_x, m_x + m_width, top, COL_INFOBAR_SHADOW_PLUS_1); + + m_frameBuffer->paintBoxRel(m_x, top, m_width, 2 * m_buttonHeight, COL_INFOBAR_SHADOW_PLUS_1, c_rad_mid, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); + // why? m_frameBuffer->paintHLine(m_x, m_x + m_width, top, COL_INFOBAR_SHADOW_PLUS_1); if (!m_playlist.empty()) - ::paintButtons(m_x, top+m_buttonHeight, m_width, 3, ScondLineButtons, m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top+m_buttonHeight, m_width - (2*c_rad_mid), 3, ScondLineButtons, m_buttonHeight, ButtonWidth); if (m_key_level == 0) { if (m_playlist.empty()) { if (m_inetmode) - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[7], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[7], m_buttonHeight, ButtonWidth); else - ::paintButtons(m_x, top, m_width, 1, &(AudioPlayerButtons[7][0]), m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 1, &(AudioPlayerButtons[7][0]), m_buttonHeight, ButtonWidth); } else if (m_inetmode) - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[8], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 4, AudioPlayerButtons[8], m_buttonHeight, ButtonWidth); else - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[1], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 4, AudioPlayerButtons[1], m_buttonHeight, ButtonWidth); } else if (m_key_level == 1) { if (m_curr_audiofile.FileType != CFile::STREAM_AUDIO) - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[0], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 4, AudioPlayerButtons[0], m_buttonHeight, ButtonWidth); else - ::paintButtons( m_x, top, m_width, 2, AudioPlayerButtons[6], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[6], m_buttonHeight, ButtonWidth); } else { // key_level == 2 if (m_state == CAudioPlayerGui::STOP) { if (m_select_title_by_name) - ::paintButtons(m_x /*+ ButtonWidth*/, top, m_width, 2, AudioPlayerButtons[5], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[5], m_buttonHeight, ButtonWidth); else - ::paintButtons(m_x/* + ButtonWidth*/, top, m_width, 2, AudioPlayerButtons[4], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[4], m_buttonHeight, ButtonWidth); } else { if (m_select_title_by_name) - ::paintButtons(m_x/* + ButtonWidth*/, top, m_width, 2, AudioPlayerButtons[3], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[3], m_buttonHeight, ButtonWidth); else - ::paintButtons(m_x/* + ButtonWidth*/, top, m_width, 2, AudioPlayerButtons[2], m_buttonHeight, ButtonWidth); + ::paintButtons(m_x + c_rad_mid, top, m_width - (2*c_rad_mid), 2, AudioPlayerButtons[2], m_buttonHeight, ButtonWidth); } } } From 19857a55216931b4a7a5d6d3d2b0b4ee5e8d567a Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Wed, 20 Feb 2013 15:20:55 +0100 Subject: [PATCH 24/55] my_popen: close filedescriptors before exec Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/3064107b907d8f564044841a2f1fd393cef3b4b7 Author: Stefan Seyfried Date: 2013-02-20 (Wed, 20 Feb 2013) ------------------ This commit was generated by Migit --- src/system/helpers.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 16ca36bd0..998dcabaa 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -129,6 +129,9 @@ FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type) close(pfd[0]); } } + int maxfd = getdtablesize(); + for(int i = 3; i < maxfd; i++) + close(i); execl("/bin/sh", "sh", "-c", cmdstring, (char *)0); exit(0); } From 50b512e21b4226318c5b13fde788e65424551f7e Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 19:10:49 +0100 Subject: [PATCH 25/55] infoviewer_bb: limit text width to available space only use the available space to draw the button texts Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ab191b1c76eaa5faa6f0ad01c4c692bad23346b3 Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/gui/infoviewer_bb.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 62c3bca74..0ef15bf1c 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -347,12 +347,21 @@ void CInfoViewerBB::showBBButtons(const int modus) } if (paint) { + int last_x = minX; frameBuffer->paintBoxRel(g_InfoViewer->ChanInfoX, BBarY, minX - g_InfoViewer->ChanInfoX, InfoHeightY_Info, COL_INFOBAR_BUTTONS_BACKGROUND, RADIUS_SMALL, CORNER_BOTTOM); //round - for (i = 0; i < CInfoViewerBB::BUTTON_MAX; i++) { + for (i = BUTTON_MAX; i > 0;) { + --i; if ((bbButtonInfo[i].x <= g_InfoViewer->ChanInfoX) || (bbButtonInfo[i].x >= g_InfoViewer->BoxEndX) || (!bbButtonInfo[i].paint)) continue; - if ((bbButtonInfo[i].x > 0) && ((bbButtonInfo[i].x + bbButtonInfo[i].w) <= minX)) { - + if (bbButtonInfo[i].x > 0) { + if (bbButtonInfo[i].x + bbButtonInfo[i].w > last_x) /* text too long */ + bbButtonInfo[i].w = last_x - bbButtonInfo[i].x; + last_x = bbButtonInfo[i].x; + if (bbButtonInfo[i].w - bbButtonInfo[i].cx <= 0) { + printf("[infoviewer_bb:%d cannot paint icon %d (not enough space)\n", + __LINE__, i); + continue; + } frameBuffer->paintIcon(bbButtonInfo[i].icon, bbButtonInfo[i].x, BBarY, InfoHeightY_Info); g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(bbButtonInfo[i].x + bbButtonInfo[i].cx, BBarFontY, From c6a4da54f62a9e752243c1b2d9d316066c0f71ae Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 19:07:55 +0100 Subject: [PATCH 26/55] infoviewer_bb: smarter use of available space for buttons of a button is not going to be painted, the space can be used for other buttons which might otherwise have their text cut off Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0042ad1e7fc5e3104cb637ae5edf2668fa3cf940 Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/gui/infoviewer_bb.cpp | 49 ++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 0ef15bf1c..e57ca7231 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -4,13 +4,7 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Homepage: http://dbox.cyberphoria.org/ - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - + Copyright (C) 2012-2013 Stefan Seyfried License: GPL @@ -276,7 +270,7 @@ void CInfoViewerBB::getBBButtonInfo() minX = std::min(bbIconMinX, g_InfoViewer->ChanInfoX + (((g_InfoViewer->BoxEndX - g_InfoViewer->ChanInfoX) * 75) / 100)); int MaxBr = minX - (g_InfoViewer->ChanInfoX + 10); bbButtonMaxX = g_InfoViewer->ChanInfoX + 10; - int br = 0; + int br = 0, count = 0; for (int i = 0; i < CInfoViewerBB::BUTTON_MAX; i++) { if ((i == CInfoViewerBB::BUTTON_SUBS) && (g_RemoteControl->subChannels.empty())) { // no subchannels bbButtonInfo[i].paint = false; @@ -284,15 +278,17 @@ void CInfoViewerBB::getBBButtonInfo() // continue; } else + { + count++; bbButtonInfo[i].paint = true; - br += bbButtonInfo[i].w; - bbButtonInfo[i].x = bbButtonMaxX; - bbButtonMaxX += bbButtonInfo[i].w; - bbButtonMaxW = std::max(bbButtonMaxW, bbButtonInfo[i].w); - } - if (br > MaxBr) { // TODO: Cut to long strings - printf("[infoviewer.cpp - %s, line #%d] width ColorButtons (%d) > MaxBr (%d)\n", __FUNCTION__, __LINE__, br, MaxBr); + br += bbButtonInfo[i].w; + bbButtonInfo[i].x = bbButtonMaxX; + bbButtonMaxX += bbButtonInfo[i].w; + bbButtonMaxW = std::max(bbButtonMaxW, bbButtonInfo[i].w); + } } + if (br > MaxBr) + printf("[infoviewer_bb:%s#%d] width br (%d) > MaxBr (%d) count %d\n", __func__, __LINE__, br, MaxBr, count); #if 0 int Btns = 0; // counting buttons @@ -321,14 +317,25 @@ void CInfoViewerBB::getBBButtonInfo() bbButtonInfo[CInfoViewerBB::BUTTON_AUDIO].w + rest; } #endif -#if 1 bbButtonMaxX = g_InfoViewer->ChanInfoX + 10; int step = MaxBr / 4; - bbButtonInfo[CInfoViewerBB::BUTTON_EPG].x = bbButtonMaxX; - bbButtonInfo[CInfoViewerBB::BUTTON_AUDIO].x = bbButtonMaxX + step; - bbButtonInfo[CInfoViewerBB::BUTTON_SUBS].x = bbButtonMaxX + 2*step; - bbButtonInfo[CInfoViewerBB::BUTTON_FEAT].x = bbButtonMaxX + 3*step; -#endif + if (count > 0) { /* avoid div-by-zero :-) */ + step = MaxBr / count; + count = 0; + for (int i = 0; i < BUTTON_MAX; i++) { + if (!bbButtonInfo[i].paint) + continue; + bbButtonInfo[i].x = bbButtonMaxX + step * count; + // printf("%s: i = %d count = %d b.x = %d\n", __func__, i, count, bbButtonInfo[i].x); + count++; + } + } else { + printf("[infoviewer_bb:%s#%d: count <= 0???\n", __func__, __LINE__); + bbButtonInfo[BUTTON_EPG].x = bbButtonMaxX; + bbButtonInfo[BUTTON_AUDIO].x = bbButtonMaxX + step; + bbButtonInfo[BUTTON_SUBS].x = bbButtonMaxX + 2*step; + bbButtonInfo[BUTTON_FEAT].x = bbButtonMaxX + 3*step; + } } void CInfoViewerBB::showBBButtons(const int modus) From 6b2332d31c1bfcde3585221a69c6046b4fd4538a Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 18:06:29 +0100 Subject: [PATCH 27/55] infoviewer_bb: don't start HDD percent thread once per second Only start the HDD percent determination once per infobar display Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d78bb41e3ba7dd8e0d8140e0a78db3094219b8b8 Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/gui/infoviewer_bb.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index e57ca7231..5ac2f1970 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -108,6 +108,13 @@ void CInfoViewerBB::Init() tmp_bbButtonInfoText[i] = ""; } + // get HDD info in a separate thread + if (g_settings.infobar_show_sysfs_hdd && !hddperTflag) { + hddperTflag=true; + pthread_create(&hddperT, NULL, hddperThread, (void*) this); + pthread_detach(hddperT); + } + InfoHeightY_Info = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() + 5; setBBOffset(); @@ -614,13 +621,6 @@ void CInfoViewerBB::showSysfsHdd() percent = (u * 100ULL) / t; showBarSys(percent); - //HDD info in a seperate thread - if(!hddperTflag) { - hddperTflag=true; - pthread_create(&hddperT, NULL, hddperThread, (void*) this); - pthread_detach(hddperT); - } - if (check_dir(g_settings.network_nfs_recordingdir) == 0) showBarHdd(hddpercent); else From 01982a3c4accd0250ce0c449a4db384a01c7910d Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 18:04:11 +0100 Subject: [PATCH 28/55] infoviewer_bb: fix flickering HDD bar display Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/de6e94cb9d36627e45ca4525ee1d2b2a232ff15d Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/gui/infoviewer_bb.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 5ac2f1970..82f53c622 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -631,12 +631,11 @@ void CInfoViewerBB::showSysfsHdd() void* CInfoViewerBB::hddperThread(void *arg) { CInfoViewerBB *infoViewerBB = (CInfoViewerBB*) arg; - - infoViewerBB->hddpercent = 0; long t, u; if (get_fs_usage(g_settings.network_nfs_recordingdir, t, u)) infoViewerBB->hddpercent = (u * 100ULL) / t; - + else + infoViewerBB->hddpercent = 0; infoViewerBB->hddperTflag=false; pthread_exit(NULL); } From 1e9d977728f28615eb3bc573c4af9221deac3460 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 17:36:19 +0100 Subject: [PATCH 29/55] sectionsd: retry getting eit_version Sometimes at first start, the cn thread does not fetch the EIT version and thus automatic updates don't work. The cause of this is not 100% clear, for now let's add a workaround to try a bit longer fetching it. Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/a0cefea55a4e57ea38c9c273f4df29320c8b85c5 Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/eitd.h | 2 ++ src/eitd/sectionsd.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/eitd/eitd.h b/src/eitd/eitd.h index 31858afe2..e0aead9c3 100644 --- a/src/eitd/eitd.h +++ b/src/eitd/eitd.h @@ -244,6 +244,7 @@ class CCNThread : public CEventsThread private: /* overloaded hooks */ void addFilters(); + bool shouldSleep(); void beforeSleep(); void beforeWait(); void afterWait(); @@ -254,6 +255,7 @@ class CCNThread : public CEventsThread OpenThreads::Mutex update_mutex; bool updating; cDemux * eitDmx; + int eit_retry; void sendCNEvent(); public: diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index fe421da58..7a81ff341 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -1575,6 +1575,23 @@ bool CEventsThread::addEvents() return true; } +bool CCNThread::shouldSleep() +{ + if (!scanning || channel_is_blacklisted) + return true; + if (!sendToSleepNow) + return false; + if (eit_version != 0xff) + return true; + + if (++eit_retry > 1) { + xprintf("%s::%s eit_retry > 1 (%d) -> going to sleep\n", name.c_str(), __func__, eit_retry); + return true; + } + sendToSleepNow = false; + return false; +} + /* default check if thread should go to sleep */ bool CEventsThread::shouldSleep() { @@ -1648,6 +1665,7 @@ CCNThread::CCNThread() updating = false; eitDmx = new cDemux(0); + eit_retry = 0; } /* CN thread hooks */ @@ -1713,6 +1731,7 @@ void CCNThread::beforeSleep() /* send a "no epg" event anyway before going to sleep */ sendCNEvent(); } + eit_retry = 0; } void CCNThread::processSection() From 1bacbc64e2606a83d935786644cfae1b3bb1dda6 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 17:35:35 +0100 Subject: [PATCH 30/55] sectionsd: silence debug spam disable some debug messages, remove unneeded newlines from other messages Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/e7dd3083e6fcd5151da7314d3c66694e05659e7d Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 7a81ff341..e8697f118 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -55,7 +55,7 @@ //#define ENABLE_SDT //FIXME //#define DEBUG_SDT_THREAD -#define DEBUG_TIME_THREAD +//#define DEBUG_TIME_THREAD #define DEBUG_SECTION_THREADS #define DEBUG_CN_THREAD @@ -884,7 +884,7 @@ static void commandserviceChanged(int connfd, char *data, const unsigned dataLen t_channel_id uniqueServiceKey = (((sectionsd::commandSetServiceChanged *)data)->channel_id); - xprintf("[sectionsd] commandserviceChanged: Service change to " PRINTF_CHANNEL_ID_TYPE "\n\n", uniqueServiceKey); + xprintf("[sectionsd] commandserviceChanged: Service change to " PRINTF_CHANNEL_ID_TYPE "\n", uniqueServiceKey); static t_channel_id time_trigger_last = 0; @@ -927,7 +927,7 @@ static void commandserviceChanged(int connfd, char *data, const unsigned dataLen else dprintf("[sectionsd] commandserviceChanged: no change...\n"); - xprintf("[sectionsd] commandserviceChanged: Service changed to " PRINTF_CHANNEL_ID_TYPE "\n\n", uniqueServiceKey); + dprintf("[sectionsd] commandserviceChanged: Service changed to " PRINTF_CHANNEL_ID_TYPE "\n", uniqueServiceKey); } static void commandGetIsScanningActive(int connfd, char* /*data*/, const unsigned /*dataLength*/) @@ -1426,7 +1426,7 @@ int CSectionThread::Sleep() TIMEVAL_TO_TIMESPEC(&now, &abs_wait); abs_wait.tv_sec += sleep_time; } - xprintf("%s: going to sleep for %d seconds...\n", name.c_str(), sleep_time); + dprintf("%s: going to sleep for %d seconds...\n", name.c_str(), sleep_time); pthread_mutex_lock(&start_stop_mutex); beforeWait(); @@ -1474,7 +1474,7 @@ void CSectionThread::run() real_pause(); rs = Sleep(); #ifdef DEBUG_SECTION_THREADS - xprintf("%s: wakeup, running %d scanning %d blacklisted %d reason %d\n\n", + xprintf("%s: wakeup, running %d scanning %d blacklisted %d reason %d\n", name.c_str(), running, scanning, channel_is_blacklisted, rs); #endif } while (checkSleep()); @@ -1749,7 +1749,7 @@ void CCNThread::processSection() unlockMessaging(); #ifdef DEBUG_CN_THREAD - xprintf("%s: have CN: timeoutsDMX %d messaging_have_CN %x messaging_got_CN %x\n\n", + xprintf("%s: have CN: timeoutsDMX %d messaging_have_CN %x messaging_got_CN %x\n", name.c_str(), timeoutsDMX, messaging_have_CN, messaging_got_CN); #endif dprintf("[cnThread] got current_next (0x%x) - sending event!\n", messaging_have_CN); From d8072117aea1d1892b0929666d4477e81c57b3c9 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 16:55:33 +0100 Subject: [PATCH 31/55] sectionsd: remove newline from SIsectionTIME message Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/f8cd0ac2f7cee8ddb21b827692bc2c4a19469f33 Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/SIsections.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/eitd/SIsections.cpp b/src/eitd/SIsections.cpp index 04ad15596..102c560ef 100644 --- a/src/eitd/SIsections.cpp +++ b/src/eitd/SIsections.cpp @@ -174,12 +174,18 @@ void SIsectionTIME::parse(uint8_t *buf) if(tdt.getSectionLength() < 5) return; dvbtime = parseDVBtime(tdt.getUtcTimeMjd(), tdt.getUtcTimeBcd()); - xcprintf("SIsectionTIME::parse: TDT time: %s", ctime(&dvbtime)); + char *ct = ctime(&dvbtime); + /* ctime() appends a useless \n... */ + ct[strlen(ct) - 1] = 0; + /* ...and xcprintf adds another \n... */ + xcprintf("SIsectionTIME::parse: TDT time: %s", ct); parsed = true; } else { TimeOffsetSection tot(buf); dvbtime = parseDVBtime(tot.getUtcTimeMjd(), tot.getUtcTimeBcd()); - xcprintf("SIsectionTIME::parse: TOT time: %s", ctime(&dvbtime)); + char *ct = ctime(&dvbtime); + ct[strlen(ct) - 1] = 0; + xcprintf("SIsectionTIME::parse: TOT time: %s", ct); const DescriptorList &dlist = *tot.getDescriptors(); for (DescriptorConstIterator dit = dlist.begin(); dit != dlist.end(); ++dit) { uint8_t dtype = (*dit)->getTag(); From a6df33802b36e4bddbc47c56cbd19ca56228b7b5 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 17 Feb 2013 15:34:27 +0100 Subject: [PATCH 32/55] sectionsd: only step time if difference is > 2min in order to avoid unnecessary system time jumps, only step time if the difference is bigger than 120 seconds, else use adjtime Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c5ef1bf14c76e2ea8eeb9a04f10142abf7629bca Author: Stefan Seyfried Date: 2013-02-17 (Sun, 17 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index e8697f118..68aa1bf2a 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -1279,7 +1279,8 @@ void CTimeThread::sendTimeEvent(bool ntp, time_t tim) eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &actTime, sizeof(actTime) ); #endif if(ntp || tim) {} - eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &timediff, sizeof(timediff)); + if (timediff) + eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &timediff, sizeof(timediff)); setTimeSet(); } @@ -1313,11 +1314,26 @@ void CTimeThread::setSystemTime(time_t tim) tmTime->tm_mday, tmTime->tm_mon+1, tmTime->tm_year+1900, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec, ctime(&tim)); +#if 0 /* if new time less than current for less than 1 second, ignore */ if(timediff < 0 && timediff > (int64_t) -1000000) { timediff = 0; return; } +#endif + if (timediff == 0) /* very unlikely... :-) */ + return; + if (abs(timediff) < 120000000LL) { + struct timeval oldd; + tv.tv_sec = timediff / 1000000LL; + tv.tv_usec = timediff % 1000000LL; + if (adjtime(&tv, &oldd)) + perror("adjtime"); + xprintf("difference is < 120s, using adjtime(%d, %d). oldd(%d, %d)\n", + (int)tv.tv_sec, (int)tv.tv_usec, (int)oldd.tv_sec, (int)oldd.tv_usec); + timediff = 0; + return; + } tv.tv_sec = tim; tv.tv_usec = 0; From 857fb1d1b3cec4d64961776291e167b4b932c621 Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Wed, 20 Feb 2013 21:13:52 +0100 Subject: [PATCH 33/55] src/eitd/sectionsd.cpp fix compil unused variable 'rs' Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/1df14bd8af186c19a9d3720b4222e1eb701a8a69 Author: Jacek Jendrzej Date: 2013-02-20 (Wed, 20 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 68aa1bf2a..24edbaac0 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -1365,8 +1365,8 @@ void CTimeThread::run() if(!scanning) sleep_time = 0; real_pause(); - int rs = Sleep(); #ifdef DEBUG_TIME_THREAD + int rs = Sleep(); xprintf("%s: wakeup, running %d scanning %d channel %llx reason %d\n", name.c_str(), running, scanning, current_service, rs); #endif From b082afd1e2dfc346a78719366ecb374c08bee3d4 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Tue, 5 Feb 2013 19:39:20 +0100 Subject: [PATCH 34/55] sectionsd: on-disk epg data has lower priority than on-air data Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/0a366a4ae4dca12868e9a11e53c122c47596e89f Author: Stefan Seyfried Date: 2013-02-05 (Tue, 05 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/xmlutil.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/eitd/xmlutil.cpp b/src/eitd/xmlutil.cpp index b700011f3..44dd9c033 100644 --- a/src/eitd/xmlutil.cpp +++ b/src/eitd/xmlutil.cpp @@ -1,6 +1,6 @@ /* * (C) 2001 by fnbrd, - * Copyright (C) 2008, 2009 Stefan Seyfried + * Copyright (C) 2008-2009, 2012-2013 Stefan Seyfried * * Copyright (C) 2011-2012 CoolStream International Ltd * @@ -321,6 +321,7 @@ void *insertEventsfromFile(void * data) uint8_t tid = xmlGetNumericAttribute(event, "tid", 16); if(tid) e.table_id = tid; + e.table_id |= 0x80; /* make sure on-air data has a lower table_id */ node = event->xmlChildrenNode; From 626db78811ad1a0410b08b679f1688fff79768cd Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 20 Feb 2013 23:52:30 +0100 Subject: [PATCH 35/55] audioplayer.cpp: center horizontally Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ac3e482cca532c449a6d42f24de94c793efb83bb Author: vanhofen Date: 2013-02-20 (Wed, 20 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: center horizontally ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index ab701f6cb..2e36d2076 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -275,7 +275,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) m_current = 0; m_selected = 0; - m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - ConnectLineBox_Width - 5; + m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - 2*ConnectLineBox_Width - 5; m_height = (g_settings.screen_EndY - g_settings.screen_StartY - 5); m_sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); @@ -293,7 +293,9 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) m_listmaxshow = (m_height - m_info_height - m_title_height - m_theight - 2*m_buttonHeight) / (m_fheight); m_height = m_theight + m_info_height + m_title_height + 2*m_buttonHeight + m_listmaxshow * m_fheight; // recalc height - m_x = getScreenStartX( m_width + ConnectLineBox_Width ) + ConnectLineBox_Width; + m_x = getScreenStartX( m_width ); + if (m_x < ConnectLineBox_Width) + m_x = ConnectLineBox_Width; m_y = getScreenStartY( m_height ); m_idletime=time(NULL); From a8bb955813b33891155b01810a3a8d758b0a3fbc Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 20 Feb 2013 23:53:55 +0100 Subject: [PATCH 36/55] upnpbrowser.cpp: center horizontally Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/5a4722ab84843fb093ba46cb778db05e2b1bd42e Author: vanhofen Date: 2013-02-20 (Wed, 20 Feb 2013) Origin message was: ------------------ - upnpbrowser.cpp: center horizontally ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/upnpbrowser.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/upnpbrowser.cpp b/src/gui/upnpbrowser.cpp index f88f9a49c..be46fe341 100644 --- a/src/gui/upnpbrowser.cpp +++ b/src/gui/upnpbrowser.cpp @@ -127,7 +127,7 @@ int CUpnpBrowserGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/ #endif m_LastMode=(CNeutrinoApp::getInstance()->getLastMode()); - m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - ConnectLineBox_Width; + m_width=(g_settings.screen_EndX - g_settings.screen_StartX) - 2*ConnectLineBox_Width; m_height = (g_settings.screen_EndY - g_settings.screen_StartY); m_sheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); @@ -140,7 +140,9 @@ int CUpnpBrowserGui::exec(CMenuTarget* parent, const std::string & /*actionKey*/ m_listmaxshow = (m_height - m_info_height - m_title_height - m_theight - 2*m_buttonHeight) / (m_fheight); m_height = m_theight + m_info_height + m_title_height + 2*m_buttonHeight + m_listmaxshow * m_fheight; // recalc height - m_x=getScreenStartX( m_width + ConnectLineBox_Width ) + ConnectLineBox_Width; + m_x=getScreenStartX( m_width ); + if (m_x < ConnectLineBox_Width) + m_x = ConnectLineBox_Width; m_y=getScreenStartY( m_height ); // Stop sectionsd From 85eb0ab46b3bc00426d56e7954d1d0a53a7d7cef Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Thu, 21 Feb 2013 06:12:23 +0100 Subject: [PATCH 37/55] src/eitd/sectionsd.cpp: Calling function 'Sleep()' restored Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/9be5730183afa4bdc346dd986248b80f9ccfff99 Author: Michael Liebmann Date: 2013-02-21 (Thu, 21 Feb 2013) Origin message was: ------------------ * src/eitd/sectionsd.cpp: Calling function 'Sleep()' restored ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 24edbaac0..bfa5ac087 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -1365,7 +1365,9 @@ void CTimeThread::run() if(!scanning) sleep_time = 0; real_pause(); -#ifdef DEBUG_TIME_THREAD +#ifndef DEBUG_TIME_THREAD + Sleep(); +#else int rs = Sleep(); xprintf("%s: wakeup, running %d scanning %d channel %llx reason %d\n", name.c_str(), running, scanning, current_service, rs); From 0e01a7b32c3689e04a6246c362d020cd87d4fefe Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 3 Nov 2012 13:56:26 +0100 Subject: [PATCH 38/55] neutrino: fix 32<->64bit format string warnings use portable C99 format string macros for 64bit types to fix many warnings when compiling for 64bit architectures, add some (int) casts for size_t Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4dbeb3a31e7357a03b5a4e43000adc1c56719124 Author: Stefan Seyfried Date: 2012-11-03 (Sat, 03 Nov 2012) ------------------ This commit was generated by Migit --- src/Makefile.am | 2 +- src/daemonc/Makefile.am | 2 +- src/daemonc/remotecontrol.cpp | 2 +- src/driver/Makefile.am | 2 +- src/driver/netfile.cpp | 4 +- src/driver/rcinput.cpp | 10 +-- src/driver/record.cpp | 44 +++++------ src/eitd/Makefile.am | 2 +- src/eitd/SIevents.cpp | 3 +- src/eitd/dmx.cpp | 3 +- src/eitd/sectionsd.cpp | 48 ++++++------ src/eitd/xmlutil.cpp | 4 +- src/gui/Makefile.am | 2 +- src/gui/cam_menu.cpp | 1 + src/gui/channellist.cpp | 8 +- src/gui/epgview.cpp | 10 +-- src/gui/filebrowser.cpp | 12 +-- src/gui/hdd_menu.cpp | 12 +-- src/gui/moviebrowser.cpp | 85 +++++++++------------ src/gui/movieinfo.cpp | 14 ++-- src/gui/scan.cpp | 10 +-- src/gui/scan_setup.cpp | 2 +- src/gui/zapit_setup.cpp | 6 +- src/neutrino.cpp | 18 ++--- src/nhttpd/tuxboxapi/coolstream/Makefile.am | 2 +- src/system/helpers.cpp | 2 +- src/timerd/Makefile.am | 2 +- src/timerd/timermanager.cpp | 10 ++- src/zapit/include/zapit/types.h | 8 +- src/zapit/src/Makefile.am | 2 +- src/zapit/src/bouquets.cpp | 2 +- src/zapit/src/capmt.cpp | 5 +- src/zapit/src/femanager.cpp | 9 ++- src/zapit/src/frontend.cpp | 6 +- src/zapit/src/getservices.cpp | 12 +-- src/zapit/src/pzapit.cpp | 10 +-- src/zapit/src/scan.cpp | 12 +-- src/zapit/src/scanbat.cpp | 6 +- src/zapit/src/transponder.cpp | 5 +- src/zapit/src/zapit.cpp | 24 +++--- 40 files changed, 198 insertions(+), 225 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index dd1b2ebed..2ddf170c6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -AM_CXXFLAGS = -fno-rtti -fno-exceptions +AM_CXXFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS SUBDIRS = zapit gui daemonc driver system eitd timerd nhttpd diff --git a/src/daemonc/Makefile.am b/src/daemonc/Makefile.am index 076234a8e..e917cea61 100644 --- a/src/daemonc/Makefile.am +++ b/src/daemonc/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS INCLUDES = \ -I$(top_builddir) \ diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp index 11e5373f9..dae21cb4d 100644 --- a/src/daemonc/remotecontrol.cpp +++ b/src/daemonc/remotecontrol.cpp @@ -344,7 +344,7 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data #endif else if (msg == NeutrinoMessages::EVT_TUNE_COMPLETE) { t_channel_id chid = *(t_channel_id *)data; -printf("CRemoteControl::handleMsg: EVT_TUNE_COMPLETE (%016llx)\n", chid); +printf("CRemoteControl::handleMsg: EVT_TUNE_COMPLETE (%016" PRIx64 ")\n", chid); if(chid) g_Sectionsd->setServiceChanged( chid, true ); else diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index 1216726f1..d2202e20e 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -1,4 +1,4 @@ -AM_CXXFLAGS = -fno-rtti -fno-exceptions +AM_CXXFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS SUBDIRS = pictureviewer audiodec diff --git a/src/driver/netfile.cpp b/src/driver/netfile.cpp index 3a235e3fa..ae92ff3ef 100644 --- a/src/driver/netfile.cpp +++ b/src/driver/netfile.cpp @@ -2,6 +2,8 @@ | Neutrino-GUI - DBoxII-Project | | Copyright (C) 2004 by Sanaia +| Copyright (C) 2010-2012 Stefan Seyfried +| | netfile - remote file access mapper | | @@ -400,7 +402,7 @@ int request_file(URL *url) /* if we have a entity, announce it to the server */ if(url->entity[0]) { - snprintf(str, sizeof(str)-1, "Content-Length: %d\r\n", strlen(url->entity)); + snprintf(str, sizeof(str)-1, "Content-Length: %d\r\n", (int)strlen(url->entity)); dprintf(stderr, "> %s", str); send(url->fd, str, strlen(str), 0); } diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 270afb8d2..990886912 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -4,13 +4,7 @@ Copyright (C) 2001 Steffen Hehn 'McClean' 2003 thegoodguy - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - + Copyright (C) 2008-2012 Stefan Seyfried License: GPL @@ -895,7 +889,7 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 p = new unsigned char[sizeof(int64_t)]; *(int64_t*) p = timeNew - timeOld; #endif - printf("[neutrino] CSectionsdClient::EVT_TIMESET: timediff %lld\n", *(int64_t*) p); + printf("[neutrino] CSectionsdClient::EVT_TIMESET: timediff %" PRId64 "\n", *(int64_t*) p); /* FIXME what this code really do ? */ if ((int64_t)last_keypress > *(int64_t*)p) last_keypress += *(int64_t *)p; diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 86baeec8e..2db21c4c0 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -222,7 +222,7 @@ bool CRecordInstance::Stop(bool remove_event) CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, rec_stop_msg.c_str()); hintBox.paint(); - printf("%s: channel %llx recording_id %d\n", __FUNCTION__, channel_id, recording_id); + printf("%s: channel %" PRIx64 " recording_id %d\n", __func__, channel_id, recording_id); SaveXml(); /* Stop do close fd - if started */ record->Stop(); @@ -257,7 +257,7 @@ bool CRecordInstance::Update() CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); if(channel == NULL) { - printf("%s: channel %llx not found!\n", __FUNCTION__, channel_id); + printf("%s: channel %" PRIx64 " not found!\n", __func__, channel_id); return false; } @@ -385,10 +385,10 @@ record_error_msg_t CRecordInstance::Record() { APIDList apid_list; - printf("%s: channel %llx recording_id %d\n", __FUNCTION__, channel_id, recording_id); + printf("%s: channel %" PRIx64 " recording_id %d\n", __func__, channel_id, recording_id); CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); if(channel == NULL) { - printf("%s: channel %llx not found!\n", __FUNCTION__, channel_id); + printf("%s: channel %" PRIx64 " not found!\n", __func__, channel_id); return RECORD_INVALID_CHANNEL; } @@ -416,7 +416,7 @@ record_error_msg_t CRecordInstance::Record() } } recording_id = g_Timerd->addImmediateRecordTimerEvent(channel_id, now, record_end, epgid, epg_time, apidmode); - printf("%s: channel %llx -> timer eventID %d\n", __FUNCTION__, channel_id, recording_id); + printf("%s: channel %" PRIx64 " -> timer eventID %d\n", __func__, channel_id, recording_id); } return ret; } @@ -648,7 +648,7 @@ void CRecordInstance::GetRecordString(std::string &str) { CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); if(channel == NULL) { - printf("%s: channel %llx not found!\n", __FUNCTION__, channel_id); + printf("%s: channel %" PRIx64 " not found!\n", __func__, channel_id); str = "Unknown channel : " + GetEpgTitle(); return; } @@ -840,7 +840,7 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons * neutrino check if this channel_id already recording, may be not needed */ bool direct_record = timeshift || strlen(eventinfo->recordingDir) == 0; - printf("%s channel_id %llx epg: %llx, apidmode 0x%X\n", __FUNCTION__, + printf("%s channel_id %" PRIx64 " epg: %" PRIx64 ", apidmode 0x%X\n", __func__, eventinfo->channel_id, eventinfo->epgID, eventinfo->apids); #if 0 @@ -898,7 +898,7 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons } } else if(!direct_record) { CTimerd::RecordingInfo * evt = new CTimerd::RecordingInfo(*eventinfo); - printf("%s add %llx : %s to pending\n", __FUNCTION__, evt->channel_id, evt->epgTitle); + printf("%s add %" PRIx64 " : %s to pending\n", __func__, evt->channel_id, evt->epgTitle); nextmap.push_back((CTimerd::RecordingInfo *)evt); } } else @@ -979,7 +979,7 @@ bool CRecordManager::CheckRecording(const CTimerd::RecordingInfo * const eventin void CRecordManager::StartNextRecording() { CTimerd::RecordingInfo * eventinfo = NULL; - printf("%s: pending count %d\n", __FUNCTION__, nextmap.size()); + printf("%s: pending count %d\n", __func__, (int)nextmap.size()); for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) { eventinfo = *it; @@ -1080,7 +1080,7 @@ void CRecordManager::StopInstance(CRecordInstance * inst, bool remove_event) bool CRecordManager::Stop(const t_channel_id channel_id) { - printf("%s: %llx\n", __FUNCTION__, channel_id); + printf("%s: %" PRIx64 "\n", __func__, channel_id); mutex.lock(); @@ -1089,7 +1089,7 @@ bool CRecordManager::Stop(const t_channel_id channel_id) if(inst != NULL) StopInstance(inst); else - printf("%s: channel %llx not recording\n", __FUNCTION__, channel_id); + printf("%s: channel %" PRIx64 " not recording\n", __func__, channel_id); mutex.unlock(); @@ -1106,7 +1106,7 @@ bool CRecordManager::IsRecording(const CTimerd::RecordingStopInfo * recinfo) if(inst != NULL && recinfo->eventID == inst->GetRecordingId()) ret = true; mutex.unlock(); - printf("[%s] eventID: %d, channel_id: 0x%llx, ret: %d\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id, ret); + printf("[%s] eventID: %d, channel_id: 0x%" PRIx64 ", ret: %d\n", __func__, recinfo->eventID, recinfo->channel_id, ret); return ret; } @@ -1114,7 +1114,7 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) { bool ret = false; - printf("%s: eventID %d channel_id %llx\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id); + printf("%s: eventID %d channel_id %" PRIx64 "\n", __func__, recinfo->eventID, recinfo->channel_id); mutex.lock(); @@ -1125,7 +1125,7 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) } else { for(nextmap_iterator_t it = nextmap.begin(); it != nextmap.end(); it++) { if((*it)->eventID == recinfo->eventID) { - printf("%s: removing pending eventID %d channel_id %llx\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id); + printf("%s: removing pending eventID %d channel_id %" PRIx64 "\n", __func__, recinfo->eventID, recinfo->channel_id); /* Note: CTimerd::RecordingInfo is a class! => typecast to avoid destructor call */ delete[] (unsigned char *) (*it); nextmap.erase(it); @@ -1135,7 +1135,7 @@ bool CRecordManager::Stop(const CTimerd::RecordingStopInfo * recinfo) } } if(!ret) - printf("%s: eventID %d channel_id %llx : not found\n", __FUNCTION__, recinfo->eventID, recinfo->channel_id); + printf("%s: eventID %d channel_id %" PRIx64 " : not found\n", __func__, recinfo->eventID, recinfo->channel_id); mutex.unlock(); @@ -1161,7 +1161,7 @@ bool CRecordManager::Update(const t_channel_id channel_id) if(inst != NULL) inst->Update(); else - printf("%s: channel %llx not recording\n", __FUNCTION__, channel_id); + printf("%s: channel %" PRIx64 " not recording\n", __func__, channel_id); mutex.unlock(); return (inst != NULL); @@ -1325,7 +1325,7 @@ int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) snprintf(rec_msg, sizeof(rec_msg)-1, rec_msg1, records-i, records); inst->SetStopMessage(rec_msg); - printf("CRecordManager::exec(ExitAll line %d) found channel %llx recording_id %d\n", __LINE__, channel_id, inst->GetRecordingId()); + printf("CRecordManager::exec(ExitAll line %d) found channel %" PRIx64 " recording_id %d\n", __LINE__, channel_id, inst->GetRecordingId()); g_Timerd->stopTimerEvent(inst->GetRecordingId()); i++; } @@ -1463,7 +1463,7 @@ bool CRecordManager::ShowMenu(void) mutex.lock(); CRecordInstance * inst = FindInstanceID(recording_ids[select]); if(inst == NULL || recording_ids[select] != inst->GetRecordingId()) { - printf("%s: channel %llx event id %d not found\n", __FUNCTION__, channel_ids[select], recording_ids[select]); + printf("%s: channel %" PRIx64 " event id %d not found\n", __func__, channel_ids[select], recording_ids[select]); mutex.unlock(); return false; } @@ -1560,7 +1560,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * int mode = channel->getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE ? NeutrinoMessages::mode_tv : NeutrinoMessages::mode_radio; - printf("%s channel_id %llx mode %d\n", __FUNCTION__, channel_id, mode); + printf("%s channel_id %" PRIx64 " mode %d\n", __func__, channel_id, mode); last_mode = CNeutrinoApp::getInstance()->getMode(); if(last_mode == NeutrinoMessages::mode_standby && recmap.empty()) { @@ -1595,7 +1595,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * /* stop stream for this channel */ CStreamManager::getInstance()->StopStream(channel_id); ret = g_Zapit->zapTo_record(channel_id) > 0; - printf("%s found same tp, zapTo_record channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); + printf("%s found same tp, zapTo_record channel_id %" PRIx64 " result %d\n", __func__, channel_id, ret); } else { printf("%s mode %d last_mode %d getLastMode %d\n", __FUNCTION__, mode, last_mode, CNeutrinoApp::getInstance()->getLastMode()); @@ -1608,7 +1608,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * } ret = g_Zapit->zapTo_serviceID(channel_id) > 0; - printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); + printf("%s zapTo_serviceID channel_id %" PRIx64 " result %d\n", __func__, channel_id, ret); } if (unlock) CFEManager::getInstance()->unlockFrontend(live_fe); @@ -1634,7 +1634,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * } else if(!ret && mode_changed /*mode != last_mode*/) CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , last_mode); - printf("%s channel_id %llx mode %d : result %s\n", __FUNCTION__, channel_id, mode, ret ? "OK" : "BAD"); + printf("%s channel_id %" PRIx64 " mode %d : result %s\n", __func__, channel_id, mode, ret ? "OK" : "BAD"); return ret; } diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am index c151cd6b2..35d3a70ae 100644 --- a/src/eitd/Makefile.am +++ b/src/eitd/Makefile.am @@ -17,7 +17,7 @@ INCLUDES += -I$(top_srcdir)/lib/libtriple endif #AM_CPPFLAGS = -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS noinst_LIBRARIES = libsectionsd.a libsectionsd_a_SOURCES = \ diff --git a/src/eitd/SIevents.cpp b/src/eitd/SIevents.cpp index f4849c03d..05ad13523 100644 --- a/src/eitd/SIevents.cpp +++ b/src/eitd/SIevents.cpp @@ -5,6 +5,7 @@ * Homepage: http://dbox2.elxsi.de * * Copyright (C) 2011-2012 CoolStream International Ltd + * Copyright (C) 2008, 2012 Stefan Seyfried * * License: GPLv2 * @@ -529,7 +530,7 @@ int SIevent::saveXML2(FILE *file) const void SIevent::dump(void) const { - printf("Unique key: %llx\n", uniqueKey()); + printf("Unique key: %" PRIx64 "\n", uniqueKey()); if(original_network_id) printf("Original-Network-ID: %hu\n", original_network_id); if (service_id) diff --git a/src/eitd/dmx.cpp b/src/eitd/dmx.cpp index 6097b0691..ee75a6e05 100644 --- a/src/eitd/dmx.cpp +++ b/src/eitd/dmx.cpp @@ -5,6 +5,7 @@ * 2003 by thegoodguy * * Copyright (C) 2011-2012 CoolStream International Ltd + * Copyright (C) 2007-2009, 2011-2012 Stefan Seyfried * * License: GPLv2 * @@ -239,7 +240,7 @@ printf(" [%s cache] old section for table 0x%02x sid 0x%04x section 0x%02x last #endif if(seenSections == calcedSections) { #ifdef DEBUG_COMPLETE - xcprintf(" %s cache %02x complete: %d", name.c_str(), filters[filter_index].filter, seenSections.size()); + xcprintf(" %s cache %02x complete: %d", name.c_str(), filters[filter_index].filter, (int)seenSections.size()); #endif /* FIXME this algo fail sometimes: * [cnThread cache] new section for table 0x4e sid 0x0a39 section 0x00 last 0x00 slast 0x00 seen 1 calc 1 diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index bfa5ac087..3b1e799f6 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -255,12 +255,12 @@ static bool deleteEvent(const event_id_t uniqueKey) } if (cn) { // current-next => fill current or next event... -//xprintf("addEvent: current %016llx event %016llx messaging_got_CN %d\n", messaging_current_servicekey, evt.get_channel_id(), messaging_got_CN); +//xprintf("addEvent: current %016" PRIx64 " event %016" PRIx64 " messaging_got_CN %d\n", messaging_current_servicekey, evt.get_channel_id(), messaging_got_CN); readLockMessaging(); // only if it is the current channel... and if we don't have them already. if (evt.get_channel_id() == messaging_current_servicekey && (messaging_got_CN != 0x03)) { -xprintf("addEvent: current %016llx event %016llx running %d messaging_got_CN %d\n", messaging_current_servicekey, evt.get_channel_id(), evt.runningStatus(), messaging_got_CN); +xprintf("addEvent: current %016" PRIx64 " event %016" PRIx64 " running %d messaging_got_CN %d\n", messaging_current_servicekey, evt.get_channel_id(), evt.runningStatus(), messaging_got_CN); unlockMessaging(); writeLockEvents(); @@ -318,7 +318,7 @@ xprintf("addEvent: current %016llx event %016llx running %d messaging_got_CN %d\ { /* if the new event has a lower (== more recent) table ID, replace the old one */ already_exists = false; - dprintf("replacing event %016llx:%02x with %04x:%02x '%.40s'\n", si->second->uniqueKey(), + dprintf("replacing event %016" PRIx64 ":%02x with %04x:%02x '%.40s'\n", si->second->uniqueKey(), si->second->table_id, evt.eventID, evt.table_id, evt.getName().c_str()); } else if (already_exists && ( (evt.table_id == 0x51 || evt.table_id == 0x50 || evt.table_id == 0x4e) && evt.table_id == si->second->table_id && evt.version != si->second->version )) @@ -419,7 +419,7 @@ xprintf("addEvent: current %016llx event %016llx running %d messaging_got_CN %d\ if ((*x)->times.begin()->startzeit + (long)(*x)->times.begin()->dauer <= start_time) break; /* here we have an overlapping event */ - dprintf("%s: delete 0x%016llx.%02x time = 0x%016llx.%02x\n", __func__, + dprintf("%s: delete 0x%016" PRIx64 ".%02x time = 0x%016" PRIx64 ".%02x\n", __func__, x_key, (*x)->table_id, e_key, e->table_id); to_delete.push_back(x_key); } @@ -1310,7 +1310,7 @@ void CTimeThread::setSystemTime(time_t tim) gettimeofday(&tv, NULL); timediff = (int64_t)tim * (int64_t)1000000 - (tv.tv_usec + tv.tv_sec * (int64_t)1000000); - xprintf("%s: timediff %lld, current: %02d.%02d.%04d %02d:%02d:%02d, dvb: %s", name.c_str(), timediff, + xprintf("%s: timediff %" PRId64 ", current: %02d.%02d.%04d %02d:%02d:%02d, dvb: %s", name.c_str(), timediff, tmTime->tm_mday, tmTime->tm_mon+1, tmTime->tm_year+1900, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec, ctime(&tim)); @@ -1369,7 +1369,7 @@ void CTimeThread::run() Sleep(); #else int rs = Sleep(); - xprintf("%s: wakeup, running %d scanning %d channel %llx reason %d\n", + xprintf("%s: wakeup, running %d scanning %d channel %" PRIx64 " reason %d\n", name.c_str(), running, scanning, current_service, rs); #endif } while (running && !scanning); @@ -1516,7 +1516,7 @@ void CSectionThread::run() if (timeoutsDMX < 0 || timeoutsDMX >= skipTimeouts) { #ifdef DEBUG_SECTION_THREADS xprintf("%s: skipping to next filter %d from %d (timeouts %d)\n", - name.c_str(), filter_index+1, filters.size(), timeoutsDMX); + name.c_str(), filter_index+1, (int)filters.size(), timeoutsDMX); #endif timeoutsDMX = 0; need_change = true; @@ -1524,7 +1524,7 @@ void CSectionThread::run() if (zeit > lastChanged + skipTime) { #ifdef DEBUG_SECTION_THREADS xprintf("%s: skipping to next filter %d from %d (seconds %d)\n", - name.c_str(), filter_index+1, filters.size(), (int) (zeit - lastChanged)); + name.c_str(), filter_index+1, (int)filters.size(), (int)(zeit - lastChanged)); #endif need_change = true; } @@ -1550,7 +1550,7 @@ bool CEventsThread::addEvents() if (!eit.is_parsed()) return false; - dprintf("[%s] adding %d events (begin)\n", name.c_str(), eit.events().size()); + dprintf("[%s] adding %d events (begin)\n", name.c_str(), (int)eit.events().size()); time_t zeit = time(NULL); for (SIevents::const_iterator e = eit.events().begin(); e != eit.events().end(); ++e) { @@ -1699,7 +1699,7 @@ void CCNThread::addFilters() void CCNThread::beforeWait() { - xprintf("%s: set eit update filter, service = 0x%016llx, current version 0x%x got events %d (%s)\n", + xprintf("%s: set eit update filter, service = 0x%016" PRIx64 ", current version 0x%x got events %d (%s)\n", name.c_str(), messaging_current_servicekey, eit_version, messaging_have_CN, updating ? "active" : "not active"); @@ -1996,11 +1996,11 @@ static void *houseKeepingThread(void *) removeOldEvents(oldEventsAre); // alte Events dprintf("after removeoldevents\n"); readLockEvents(); - printf("[sectionsd] Removed %d old events (%d left).\n", anzEventsAlt - mySIeventsOrderUniqueKey.size(), mySIeventsOrderUniqueKey.size()); + printf("[sectionsd] Removed %d old events (%d left).\n", (int)(anzEventsAlt - mySIeventsOrderUniqueKey.size()), (int)mySIeventsOrderUniqueKey.size()); if (mySIeventsOrderUniqueKey.size() != anzEventsAlt) { print_meminfo(); - dprintf("Removed %d old events.\n", anzEventsAlt - mySIeventsOrderUniqueKey.size()); + dprintf("Removed %d old events.\n", (int)(anzEventsAlt - mySIeventsOrderUniqueKey.size())); } anzEventsAlt = mySIeventsOrderUniqueKey.size(); unlockEvents(); @@ -2009,14 +2009,14 @@ static void *houseKeepingThread(void *) if (mySIeventsOrderUniqueKey.size() != anzEventsAlt) { print_meminfo(); - dprintf("Removed %d waste events.\n", anzEventsAlt - mySIeventsOrderUniqueKey.size()); + dprintf("Removed %d waste events.\n", (int)(anzEventsAlt - mySIeventsOrderUniqueKey.size())); } - dprintf("Number of sptr events (event-ID): %u\n", mySIeventsOrderUniqueKey.size()); - dprintf("Number of sptr events (service-id, start time, event-id): %u\n", mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.size()); - dprintf("Number of sptr events (end time, service-id, event-id): %u\n", mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.size()); - dprintf("Number of sptr nvod events (event-ID): %u\n", mySIeventsNVODorderUniqueKey.size()); - dprintf("Number of cached meta-services: %u\n", mySIeventUniqueKeysMetaOrderServiceUniqueKey.size()); + dprintf("Number of sptr events (event-ID): %u\n", (unsigned)mySIeventsOrderUniqueKey.size()); + dprintf("Number of sptr events (service-id, start time, event-id): %u\n", (unsigned)mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.size()); + dprintf("Number of sptr events (end time, service-id, event-id): %u\n", (unsigned)mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.size()); + dprintf("Number of sptr nvod events (event-ID): %u\n", (unsigned)mySIeventsNVODorderUniqueKey.size()); + dprintf("Number of cached meta-services: %u\n", (unsigned)mySIeventUniqueKeysMetaOrderServiceUniqueKey.size()); unlockEvents(); @@ -2097,7 +2097,7 @@ void CEitManager::run() int rc; xprintf("[sectionsd] starting\n"); -printf("SIevent size: %d\n", sizeof(SIevent)); +printf("SIevent size: %d\n", (int)sizeof(SIevent)); /* "export NO_SLOW_ADDEVENT=true" to disable this */ slow_addevent = (getenv("NO_SLOW_ADDEVENT") == NULL); @@ -2476,7 +2476,7 @@ void CEitManager::getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSecti bool CEitManager::getEPGidShort(event_id_t epgID, CShortEPGData * epgdata) { bool ret = false; - dprintf("Request of current EPG for 0x%llx\n", epgID); + dprintf("Request of current EPG for 0x%" PRIx64 "\n", epgID); readLockEvents(); @@ -2501,7 +2501,7 @@ bool CEitManager::getEPGidShort(event_id_t epgID, CShortEPGData * epgdata) bool CEitManager::getEPGid(const event_id_t epgID, const time_t startzeit, CEPGData * epgdata) { bool ret = false; - dprintf("Request of actual EPG for 0x%llx 0x%lx\n", epgID, startzeit); + dprintf("Request of actual EPG for 0x%" PRIx64 " 0x%lx\n", epgID, startzeit); const SIevent& evt = findSIeventForEventUniqueKey(epgID); @@ -2672,7 +2672,7 @@ showProfiling("sectionsd_getChannelEvents end"); bool CEitManager::getComponentTagsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::ComponentTagList& tags) { bool ret = false; - dprintf("Request of ComponentTags for 0x%llx\n", uniqueKey); + dprintf("Request of ComponentTags for 0x%" PRIx64 "\n", uniqueKey); tags.clear(); @@ -2702,7 +2702,7 @@ bool CEitManager::getComponentTagsUniqueKey(const event_id_t uniqueKey, CSection bool CEitManager::getLinkageDescriptorsUniqueKey(const event_id_t uniqueKey, CSectionsdClient::LinkageDescriptorList& descriptors) { bool ret = false; - dprintf("Request of LinkageDescriptors for 0x%llx\n", uniqueKey); + dprintf("Request of LinkageDescriptors for 0x%" PRIx64 "\n", uniqueKey); descriptors.clear(); readLockEvents(); @@ -2744,7 +2744,7 @@ bool CEitManager::getNVODTimesServiceKey(const t_channel_id channel_id, CSection MySIservicesNVODorderUniqueKey::iterator si = mySIservicesNVODorderUniqueKey.find(uniqueServiceKey); if (si != mySIservicesNVODorderUniqueKey.end()) { - dprintf("NVODServices: %u\n", si->second->nvods.size()); + dprintf("NVODServices: %u\n", (unsigned)si->second->nvods.size()); if (!si->second->nvods.empty()) { for (SInvodReferences::iterator ni = si->second->nvods.begin(); ni != si->second->nvods.end(); ++ni) { diff --git a/src/eitd/xmlutil.cpp b/src/eitd/xmlutil.cpp index 44dd9c033..0f3e25e49 100644 --- a/src/eitd/xmlutil.cpp +++ b/src/eitd/xmlutil.cpp @@ -149,7 +149,7 @@ static void addBlacklist(t_original_network_id onid, t_transport_stream_id tsid, ); if (!checkBlacklist(channel_id)) { - xprintf("Add Channel Blacklist for channel 0x%012llx, mask 0x%012llx\n", channel_id, mask); + xprintf("Add Channel Blacklist for channel 0x%012" PRIx64 ", mask 0x%012" PRIx64 "\n", channel_id, mask); ChannelBlacklist *node = new ChannelBlacklist; node->chan = channel_id; node->mask = mask; @@ -168,7 +168,7 @@ static void addNoDVBTimelist(t_original_network_id onid, t_transport_stream_id t ); if (!checkNoDVBTimelist(channel_id)) { - xprintf("Add channel 0x%012llx, mask 0x%012llx to NoDVBTimelist\n", channel_id, mask); + xprintf("Add channel 0x%012" PRIx64 ", mask 0x%012" PRIx64 " to NoDVBTimelist\n", channel_id, mask); ChannelNoDVBTimelist *node = new ChannelNoDVBTimelist; node->chan = channel_id; node->mask = mask; diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 4da8fc6a1..e4b46ab81 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS #AM_CPPFLAGS = -fno-rtti BUILT_SOURCES = git_version.h git_version.h: makeversion diff --git a/src/gui/cam_menu.cpp b/src/gui/cam_menu.cpp index 7a8317d4d..67d31ff0e 100644 --- a/src/gui/cam_menu.cpp +++ b/src/gui/cam_menu.cpp @@ -1,6 +1,7 @@ /* Neutrino-GUI - DBoxII-Project + Copyright (C) 2010, 2012 Stefan Seyfried Copyright (C) 2011 CoolStream International Ltd License: GPLv2 diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 7e78f77a4..cf2cd0994 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -1034,7 +1034,7 @@ bool CChannelList::adjustToChannelID(const t_channel_id channel_id, bool bToo) unsigned int i; selected_chid = channel_id; - printf("CChannelList::adjustToChannelID me %p [%s] list size %d channel_id %llx\n", this, getName(), chanlist.size(), channel_id); + printf("CChannelList::adjustToChannelID me %p [%s] list size %d channel_id %" PRIx64 "\n", this, getName(), (int)chanlist.size(), channel_id); fflush(stdout); for (i = 0; i < chanlist.size(); i++) { if(chanlist[i] == NULL) { @@ -1128,7 +1128,7 @@ void CChannelList::setSelected( int nChannelNr) // -- Zap to channel with channel_id bool CChannelList::zapTo_ChannelID(const t_channel_id channel_id) { - printf("**************************** CChannelList::zapTo_ChannelID %llx\n", channel_id); + printf("**************************** CChannelList::zapTo_ChannelID %" PRIx64 "\n", channel_id); for (unsigned int i = 0; i < chanlist.size(); i++) { if (chanlist[i]->channel_id == channel_id) { zapTo(i); @@ -1182,7 +1182,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel) if (tuned < chanlist.size() && chanlist[tuned]->last_unlocked_time != 0) chanlist[tuned]->last_unlocked_time = time_monotonic(); - printf("**************************** CChannelList::zapToChannel me %p %s tuned %d new %s -> %llx\n", this, name.c_str(), tuned, channel->getName().c_str(), channel->channel_id); + printf("**************************** CChannelList::zapToChannel me %p %s tuned %d new %s -> %" PRIx64 "\n", this, name.c_str(), tuned, channel->getName().c_str(), channel->channel_id); if(tuned < chanlist.size()) selected_chid = chanlist[tuned]->getChannelID(); @@ -1385,7 +1385,7 @@ CZapitChannel* CChannelList::getPrevNextChannel(int key, unsigned int &sl) if(!g_settings.zap_cycle && bsize > 1) { size_t cactive = sl; - printf("CChannelList::getPrevNextChannel: selected %d total %d active bouquet %d total %d\n", cactive, chanlist.size(), bactive, bsize); + printf("CChannelList::getPrevNextChannel: selected %d total %d active bouquet %d total %d\n", (int)cactive, (int)chanlist.size(), bactive, bsize); if ((key == g_settings.key_quickzap_down) || (key == CRCInput::RC_left)) { if(cactive == 0) { if(bactive == 0) diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index c0d7750f8..1a7eafcd9 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -2,15 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - + Copyright (C) 2007-2012 Stefan Seyfried License: GPL diff --git a/src/gui/filebrowser.cpp b/src/gui/filebrowser.cpp index 09cef99fa..ef4fd9801 100644 --- a/src/gui/filebrowser.cpp +++ b/src/gui/filebrowser.cpp @@ -2,15 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - + Copyright (C) 2007-2009, 2011-2012 Stefan Seyfried License: GPL @@ -686,7 +678,7 @@ and add to neutrino playlist if (!answer.empty() && httpres == 0) { -printf("CFileBrowser::readDir_sc: read done, size %d\n", answer.size()); +printf("CFileBrowser::readDir_sc: read done, size %d\n", (int)answer.size()); xmlDocPtr answer_parser = parseXml(answer.c_str()); if (answer_parser != NULL) { diff --git a/src/gui/hdd_menu.cpp b/src/gui/hdd_menu.cpp index 910506fe0..0609f067c 100644 --- a/src/gui/hdd_menu.cpp +++ b/src/gui/hdd_menu.cpp @@ -2,15 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2001 Steffen Hehn 'McClean' - Homepage: http://dbox.cyberphoria.org/ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - + Copyright (C) 2010-2012 Stefan Seyfried License: GPL @@ -227,7 +219,7 @@ int CHDDMenuHandler::doMenu () bool enabled = !CNeutrinoApp::getInstance()->recordingstatus && !removable && !isroot; - snprintf(str, sizeof(str), "%s %s %lld %s", vendor, model, megabytes < 10000 ? megabytes : megabytes/1000, megabytes < 10000 ? "MB" : "GB"); + snprintf(str, sizeof(str), "%s %s %ld %s", vendor, model, (long)(megabytes < 10000 ? megabytes : megabytes/1000), megabytes < 10000 ? "MB" : "GB"); printf("HDD: %s\n", str); tmp_str[i]=str; tempMenu[i] = new CMenuWidget(str, NEUTRINO_ICON_SETTINGS); diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 8ed92f2a4..8f482b622 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -1,18 +1,6 @@ /*************************************************************************** Neutrino-GUI - DBoxII-Project - Homepage: http://dbox.cyberphoria.org/ - - $Id: moviebrowser.cpp,v 1.10 2006/09/11 21:11:35 guenther Exp $ - - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - License: GPL This program is free software; you can redistribute it and/or modify @@ -41,6 +29,9 @@ Author: Günther@tuxbox.berlios.org based on code of Steffen Hehn 'McClean' + + (C) 2009-2012 Stefan Seyfried + ****************************************************************************/ #ifdef HAVE_CONFIG_H @@ -2129,7 +2120,7 @@ void CMovieBrowser::onDeleteFile(MI_MOVIE_INFO& movieSelectionHandler, bool skip g_RCInput->clearRCMsg(); m_vMovieInfo.erase( (std::vector::iterator)&movieSelectionHandler); - TRACE("List size: %d\n", m_vMovieInfo.size()); + TRACE("List size: %d\n", (int)m_vMovieInfo.size()); //if(m_vMovieInfo.empty()) fileInfoStale(); //if(m_vMovieInfo.empty()) onSetGUIWindow(m_settings.gui); updateSerienames(); @@ -2441,7 +2432,7 @@ void CMovieBrowser::loadAllTsFileNamesFromStorage(void) loadTsFileNamesFromDir(m_dir[i].name); } - TRACE("[mb] Dir%d, Files:%d \r\n",m_dirNames.size(),m_vMovieInfo.size()); + TRACE("[mb] Dir%d, Files:%d\n", (int)m_dirNames.size(), (int)m_vMovieInfo.size()); /* if(m_vMovieInfo.empty()) { @@ -2927,8 +2918,8 @@ int CMovieBrowser::showMovieInfoMenu(MI_MOVIE_INFO* movie_info) if(movie_info != NULL) { - strncpy(dirItNr, m_dirNames[movie_info->dirItNr].c_str(),BUFFER_SIZE-1); - snprintf(size,BUFFER_SIZE,"%5llu",movie_info->file.Size>>20); + strncpy(dirItNr, m_dirNames[movie_info->dirItNr].c_str(),BUFFER_SIZE-1); + snprintf(size,BUFFER_SIZE,"%5" PRIu64 "",movie_info->file.Size>>20); } CStringInputSMS titelUserInput(LOCALE_MOVIEBROWSER_INFO_TITLE, &movie_info->epgTitle, (movie_info->epgTitle.empty() || (movie_info->epgTitle.size() < MAX_STRING)) ? MAX_STRING:movie_info->epgTitle.size(), NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "abcdefghijklmnopqrstuvwxyz0123456789-.: "); @@ -3332,7 +3323,7 @@ bool CMovieBrowser::getMovieInfoItem(MI_MOVIE_INFO& movie_info, MB_INFO_ITEM ite #if 1 // MB_INFO_AUDIO test // we just return the number of audiopids char ltext[10]; - snprintf(ltext, 8,"%d",movie_info.audioPids.size()); + snprintf(ltext, 8,"%d", (int)movie_info.audioPids.size()); ltext[9] = 0; // just to make sure string is terminated *item_string = ltext; #else // MB_INFO_AUDIO test @@ -3409,7 +3400,7 @@ bool CMovieBrowser::getMovieInfoItem(MI_MOVIE_INFO& movie_info, MB_INFO_ITEM ite *item_string = str_tmp; break; case MB_INFO_SIZE: // = 19, - snprintf(str_tmp,MAX_STR_TMP,"%4llu",movie_info.file.Size>>20); + snprintf(str_tmp,MAX_STR_TMP,"%4" PRIu64 "",movie_info.file.Size>>20); *item_string = str_tmp; break; case MB_INFO_MAX_NUMBER: // = 20 @@ -3443,7 +3434,7 @@ void CMovieBrowser::updateSerienames(void) m_vHandleSerienames.push_back(&m_vMovieInfo[i]); } } - TRACE("[mb]->updateSerienames: %d\r\n",m_vHandleSerienames.size()); + TRACE("[mb]->updateSerienames: %d\n", (int)m_vHandleSerienames.size()); // TODO sort(m_serienames.begin(), m_serienames.end(), my_alphasort); m_seriename_stale = false; } @@ -3831,7 +3822,7 @@ static off64_t truncate_movie(MI_MOVIE_INFO * minfo) snprintf(spart, sizeof(spart), "%s.%03d", name, tpart); else snprintf(spart, sizeof(spart), "%s", name); -printf("truncate: part %s to size %lld\n", spart, secoffset); +printf("truncate: part %s to size %" PRId64 "\n", spart, secoffset); truncate(spart, secoffset); minfo->file.Size = newsize; minfo->length = minfo->bookmarks.end/60; @@ -4035,7 +4026,7 @@ static off64_t cut_movie(MI_MOVIE_INFO * minfo, CMovieInfo * cmovie) if(books[bcount].len > SAFE_GOP) books[bcount].len -= SAFE_GOP; books[bcount].ok = 1; -printf("cut: start bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, books[bcount].len); +printf("cut: start bookmark %d at %" PRId64 " len %" PRId64 "\n", bcount, books[bcount].pos, books[bcount].len); bcount++; } for(int book_nr = 0; book_nr < MI_MOVIE_BOOK_USER_MAX; book_nr++) { @@ -4045,7 +4036,7 @@ printf("cut: start bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, b if(books[bcount].len > SAFE_GOP) books[bcount].len -= SAFE_GOP; books[bcount].ok = 1; -printf("cut: jump bookmark %d at %lld len %lld -> skip to %lld\n", bcount, books[bcount].pos, books[bcount].len, books[bcount].pos+books[bcount].len); +printf("cut: jump bookmark %d at %" PRId64 " len %" PRId64 " -> skip to %" PRId64 "\n", bcount, books[bcount].pos, books[bcount].len, books[bcount].pos+books[bcount].len); bcount++; } } @@ -4055,7 +4046,7 @@ printf("cut: jump bookmark %d at %lld len %lld -> skip to %lld\n", bcount, books //if(books[bcount].pos > SAFE_GOP) // books[bcount].pos -= SAFE_GOP; books[bcount].ok = 1; -printf("cut: end bookmark %d at %lld\n", bcount, books[bcount].pos); +printf("cut: end bookmark %d at %" PRId64 "\n", bcount, books[bcount].pos); bcount++; } printf("\n"); @@ -4066,18 +4057,18 @@ printf("\n"); qsort(books, bcount, sizeof(struct mybook), compare_book); for(i = 0; i < bcount; i++) { if(books[i].ok) { - printf("cut: bookmark %d at %lld len %lld -> skip to %lld\n", i, books[i].pos, books[i].len, books[i].pos+books[i].len); + printf("cut: bookmark %d at %" PRId64 " len %" PRId64 " -> skip to %" PRId64 "\n", i, books[i].pos, books[i].len, books[i].pos+books[i].len); newsize -= books[i].len; off64_t curend = books[i].pos + books[i].len; for(int j = i + 1; j < bcount; j++) { if((books[j].pos > books[i].pos) && (books[j].pos < curend)) { off64_t newend = books[j].pos + books[j].len; if(newend > curend) { - printf("cut: bad bookmark %d, position %lld len %lld, ajusting..\n", j, books[j].pos, books[j].len); + printf("cut: bad bookmark %d, position %" PRId64 " len %" PRId64 ", ajusting..\n", j, books[j].pos, books[j].len); books[j].pos = curend; books[j].len = newend - curend; } else { - printf("cut: bad bookmark %d, position %lld len %lld, skipping..\n", j, books[j].pos, books[j].len); + printf("cut: bad bookmark %d, position %" PRId64 " len %" PRId64 ", skipping..\n", j, books[j].pos, books[j].len); books[j].ok = 0; } } @@ -4090,7 +4081,7 @@ printf("\n"); *ptr = 0; find_new_part(npart, dpart, sizeof(dpart) ); tt = time(0); -printf("\n********* new file %s expected size %lld, start time %s", dpart, newsize, ctime (&tt)); +printf("\n********* new file %s expected size %" PRId64 ", start time %s", dpart, newsize, ctime (&tt)); dstfd = open (dpart, O_CREAT|O_WRONLY|O_TRUNC| O_LARGEFILE, 0644); if(dstfd < 0) { perror(dpart); @@ -4110,7 +4101,7 @@ printf("\n********* new file %s expected size %lld, start time %s", dpart, newsi bpos = books[i].pos; bskip = books[i].len; while (!stat64(spart, &s)) { -printf("cut: open part %d file %s size %lld offset %lld book pos %lld\n", part, spart, s.st_size, offset, bpos); +printf("cut: open part %d file %s size %" PRId64 " offset %" PRId64 " book pos %" PRId64 "\n", part, spart, s.st_size, offset, bpos); srcfd = open (spart, O_RDONLY | O_LARGEFILE); if(srcfd < 0) { perror(spart); @@ -4125,7 +4116,7 @@ printf("cut: open part %d file %s size %lld offset %lld book pos %lld\n", part, sdone = offset; while(true) { off64_t until = bpos; -printf("\ncut: reading from %lld to %lld (%lld) want gop %d\n", sdone, until, until - sdone, need_gop); +printf("\ncut: reading from %" PRId64 " to %" PRId64 " (%" PRId64 ") want gop %d\n", sdone, until, until - sdone, need_gop); while(sdone < until) { bool stop; int msg = get_input(&stop); @@ -4150,11 +4141,11 @@ printf("\ncut: reading from %lld to %lld (%lld) want gop %d\n", sdone, until, un int wptr = 0; // FIXME: TEST if(r != BUF_SIZE) printf("****** short read ? %d\n", r); -if(buf[0] != 0x47) printf("cut: buffer not aligned at %lld\n", sdone); +if(buf[0] != 0x47) printf("cut: buffer not aligned at %" PRId64 "\n", sdone); if(need_gop) { int gop = find_gop(buf, r); if(gop >= 0) { - printf("cut: GOP found at %lld offset %d\n", (off64_t)(sdone+gop), gop); + printf("cut: GOP found at %" PRId64 " offset %d\n", (off64_t)(sdone+gop), gop); newsize -= gop; wptr = gop; } else @@ -4179,13 +4170,13 @@ if(buf[0] != 0x47) printf("cut: buffer not aligned at %lld\n", sdone); perror(spart); goto ret_err; } else { -printf("cut: next file -> sdone %lld spos %lld bpos %lld\n", sdone, spos, bpos); +printf("cut: next file -> sdone %" PRId64 " spos %" PRId64 " bpos %" PRId64 "\n", sdone, spos, bpos); offset = 0; bpos -= sdone; goto next_file; } } -printf("cut: current file pos %lld write pos %lld book pos %lld still to read %lld\n", sdone, spos, bpos, sdone - bpos); +printf("cut: current file pos %" PRId64 " write pos %" PRId64 " book pos %" PRId64 " still to read %" PRId64 "\n", sdone, spos, bpos, sdone - bpos); need_gop = 1; offset = bpos + bskip; i++; @@ -4200,7 +4191,7 @@ printf("cut: current file pos %lld write pos %lld book pos %lld still to read %l bskip = books[i].len; } else bpos = size; -printf("cut: next bookmark pos: %lld abs %lld relative next file pos %lld cur file size %lld\n", bpos, bpos - tdone, offset, s.st_size); +printf("cut: next bookmark pos: %" PRId64 " abs %" PRId64 " relative next file pos %" PRId64 " cur file size %" PRId64 "\n", bpos, bpos - tdone, offset, s.st_size); bpos -= tdone; /* all books from 0, converting to 0 + total size skipped */ if(offset >= s.st_size) { offset -= s.st_size; @@ -4216,7 +4207,7 @@ next_file: 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)); +printf("********* total written %" PRId64 " tooks %ld secs end time %s", spos, tt1-tt, ctime (&tt1)); save_info(cmovie, minfo, dpart, spos, secsize); retval = 1; @@ -4266,7 +4257,7 @@ static off64_t copy_movie(MI_MOVIE_INFO * minfo, CMovieInfo * cmovie, bool onefi minuteoffset = MINUTEOFFSET; off64_t secsize = minuteoffset/60; //off64_t secsize = len ? size/len/60 : 511040; -printf("copy: len %d minute %lld second %lld\n", len, len ? size/len : 511040*60, secsize); +printf("copy: len %d minute %" PRId64 " second %" PRId64 "\n", len, len ? size/len : 511040*60, secsize); CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); if (! timescale) @@ -4285,7 +4276,7 @@ printf("copy: len %d minute %lld second %lld\n", len, len ? size/len : 511040*60 books[bcount].pos -= SAFE_GOP; books[bcount].len = (minfo->bookmarks.user[book_nr].length * secsize)/188 * 188; books[bcount].ok = 1; -printf("copy: jump bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, books[bcount].len); +printf("copy: jump bookmark %d at %" PRId64 " len %" PRId64 "\n", bcount, books[bcount].pos, books[bcount].len); newsize += books[bcount].len; bcount++; } @@ -4295,7 +4286,7 @@ printf("copy: jump bookmark %d at %lld len %lld\n", bcount, books[bcount].pos, b return 0; } 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)); +printf("********* %d boormarks, to %s file(s), expected size to copy %" PRId64 ", start time %s", bcount, onefile ? "one" : "many", newsize, ctime (&tt)); snprintf(npart, sizeof(npart), "%s", name); char * ptr = strstr(npart, ".ts"); if(ptr) @@ -4307,7 +4298,7 @@ printf("********* %d boormarks, to %s file(s), expected size to copy %lld, start goto ret_err; } for(i = 0; i < bcount; i++) { -printf("\ncopy: processing bookmark %d at %lld len %lld\n", i, books[i].pos, books[i].len); +printf("\ncopy: processing bookmark %d at %" PRId64 " len %" PRId64 "\n", i, books[i].pos, books[i].len); off64_t bpos = books[i].pos; off64_t bskip = books[i].len; part = 0; @@ -4323,7 +4314,7 @@ printf("\ncopy: processing bookmark %d at %lld len %lld\n", i, books[i].pos, boo break; } if(sres != 0) { - printf("file for bookmark %d with offset %lld not found\n", i, books[i].pos); + printf("file for bookmark %d with offset %" PRId64 " not found\n", i, books[i].pos); continue; } if(!dst_done || !onefile) { @@ -4341,7 +4332,7 @@ printf("copy: new file %s fd %d\n", dpart, dstfd); need_gop = 1; next_file: stat64(spart, &s); -printf("copy: open part %d file %s size %lld offset %lld\n", part, spart, s.st_size, bpos); +printf("copy: open part %d file %s size %" PRId64 " offset %" PRId64 "\n", part, spart, s.st_size, bpos); srcfd = open (spart, O_RDONLY | O_LARGEFILE); if(srcfd < 0) { printf("failed to open %s\n", spart); @@ -4351,7 +4342,7 @@ printf("copy: open part %d file %s size %lld offset %lld\n", part, spart, s.st_s lseek64 (srcfd, bpos, SEEK_SET); sdone = bpos; off64_t until = bpos + bskip; -printf("copy: read from %lld to %lld read size %d want gop %d\n", bpos, until, BUF_SIZE, need_gop); +printf("copy: read from %" PRId64 " to %" PRId64 " read size %d want gop %d\n", bpos, until, BUF_SIZE, need_gop); while(sdone < until) { size_t toread = (until-sdone) > BUF_SIZE ? BUF_SIZE : until - sdone; bool stop; @@ -4377,11 +4368,11 @@ printf("copy: read from %lld to %lld read size %d want gop %d\n", bpos, until, B int wptr = 0; // FIXME: TEST if(r != BUF_SIZE) printf("****** short read ? %d\n", r); -if(buf[0] != 0x47) printf("copy: buffer not aligned at %lld\n", sdone); +if(buf[0] != 0x47) printf("copy: buffer not aligned at %" PRId64 "\n", sdone); if(need_gop) { int gop = find_gop(buf, r); if(gop >= 0) { - printf("cut: GOP found at %lld offset %d\n", (off64_t)(sdone+gop), gop); + printf("cut: GOP found at %" PRId64 " offset %d\n", (off64_t)(sdone+gop), gop); newsize -= gop; wptr = gop; } else @@ -4410,7 +4401,7 @@ if(buf[0] != 0x47) printf("copy: buffer not aligned at %lld\n", sdone); close(dstfd); goto ret_err; } else { -printf("copy: -> next file, file pos %lld written %lld left %lld\n", sdone, spos, bskip); +printf("copy: -> next file, file pos %" PRId64 " written %" PRId64 " left %" PRId64 "\n", sdone, spos, bskip); bpos = 0; close(srcfd); snprintf(spart, sizeof(spart), "%s.%03d", name, ++part); @@ -4423,14 +4414,14 @@ printf("copy: -> next file, file pos %lld written %lld left %lld\n", sdone, spos close(dstfd); save_info(cmovie, minfo, dpart, spos, secsize); time_t tt1 = time(0); -printf("copy: ********* %s: total written %lld took %ld secs\n", dpart, spos, tt1-tt); +printf("copy: ********* %s: total written %" PRId64 " took %ld secs\n", dpart, spos, tt1-tt); } } /* for all books */ if(onefile) { close(dstfd); save_info(cmovie, minfo, dpart, spos, secsize); time_t tt1 = time(0); -printf("copy: ********* %s: total written %lld took %ld secs\n", dpart, spos, tt1-tt); +printf("copy: ********* %s: total written %" PRId64 " took %ld secs\n", dpart, spos, tt1-tt); } retval = 1; ret_err: diff --git a/src/gui/movieinfo.cpp b/src/gui/movieinfo.cpp index 188464d89..684d9babd 100644 --- a/src/gui/movieinfo.cpp +++ b/src/gui/movieinfo.cpp @@ -37,9 +37,7 @@ Author: Günther@tuxbox.berlios.org - Revision History: - Date Author Change Description - Nov 2005 Günther initial start + Copyright(C) 2009, 2012 Stefan Seyfried ****************************************************************************/ #ifdef HAVE_CONFIG_H @@ -135,7 +133,7 @@ bool CMovieInfo::convertTs2XmlName(std::string * filename) #define XML_ADD_TAG_LONG(_xml_text_,_tag_name_,_tag_content_){\ _xml_text_ += "\t\t<"_tag_name_">";\ char _tmp_[50];\ - sprintf(_tmp_, "%llu", _tag_content_);\ + sprintf(_tmp_, "%" PRIu64 "", (uint64_t)_tag_content_);\ _xml_text_ += _tmp_;\ _xml_text_ += "\n";} @@ -501,7 +499,7 @@ void CMovieInfo::showMovieInfo(MI_MOVIE_INFO & movie_info) print_buffer += g_Locale->getText(LOCALE_MOVIEBROWSER_INFO_SIZE); print_buffer += ": "; //snprintf(date_char, 12,"%4llu",movie_info.file.Size>>20); - sprintf(date_char, "%llu", movie_info.file.Size >> 20); + sprintf(date_char, "%" PRIu64 "", movie_info.file.Size >> 20); print_buffer += date_char; //print_buffer += "\n"; } @@ -619,9 +617,9 @@ int find_next_char(char to_find, char *text, int start_pos, int end_pos) void strReplace(std::string & orig, const char *fstr, const std::string rstr) { // replace all occurrence of fstr with rstr and, and returns a reference to itself - unsigned int index = 0; - unsigned int fstrlen = strlen(fstr); - int rstrlen = rstr.size(); + size_t index = 0; + size_t fstrlen = strlen(fstr); + size_t rstrlen = rstr.size(); while ((index = orig.find(fstr, index)) != std::string::npos) { orig.replace(index, fstrlen, rstr); diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index e3b50c908..58510e924 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -352,7 +352,7 @@ int CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) break; case NeutrinoMessages::EVT_SCAN_NUM_TRANSPONDERS: - sprintf(buffer, "%d", data); + sprintf(buffer, "%u", data); paintLine(xpos2, ypos_transponder, w - (8*fw), buffer); total = data; snprintf(str, sizeof(buffer), "scan: %d/%d", done, total); @@ -398,22 +398,22 @@ int CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) break; case NeutrinoMessages::EVT_SCAN_NUM_CHANNELS: - sprintf(buffer, " = %d", data); + sprintf(buffer, " = %u", data); paintLine(xpos1 + 3 * (6*fw), ypos_service_numbers + mheight, width - 3 * (6*fw) - 10, buffer); break; case NeutrinoMessages::EVT_SCAN_FOUND_TV_CHAN: - sprintf(buffer, "%d", data); + sprintf(buffer, "%u", data); paintLine(xpos1, ypos_service_numbers + mheight, (6*fw), buffer); break; case NeutrinoMessages::EVT_SCAN_FOUND_RADIO_CHAN: - sprintf(buffer, "%d", data); + sprintf(buffer, "%u", data); paintLine(xpos1 + (6*fw), ypos_service_numbers + mheight, (6*fw), buffer); break; case NeutrinoMessages::EVT_SCAN_FOUND_DATA_CHAN: - sprintf(buffer, "%d", data); + sprintf(buffer, "%u", data); paintLine(xpos1 + 2 * (6*fw), ypos_service_numbers + mheight, (6*fw), buffer); break; diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index 274686480..528cfc97d 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -660,7 +660,7 @@ int CScanSetup::showScanMenuLnbSetup() sat_setup->addIntroItems(); satellite_map_t & satmap = fe->getSatellites(); - INFO("satmap size = %d", satmap.size()); + INFO("satmap size = %d", (int)satmap.size()); CMenuWidget *tmp[satmap.size()]; for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) diff --git a/src/gui/zapit_setup.cpp b/src/gui/zapit_setup.cpp index 245af0c4e..db105e7c7 100644 --- a/src/gui/zapit_setup.cpp +++ b/src/gui/zapit_setup.cpp @@ -6,6 +6,8 @@ Homepage: http://dbox.cyberphoria.org/ License: GPL + Copyright (C) 2011-2012 Stefan Seyfried + 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 @@ -125,7 +127,7 @@ int CSelectChannelWidget::exec(CMenuTarget* parent, const std::string& actionKey { unsigned int cnr = 0; t_channel_id channel_id = 0; - sscanf(&(actionKey[4]),"%u|%llx", &cnr,&channel_id); + sscanf(&(actionKey[4]),"%u|%" SCNx64 "", &cnr, &channel_id); if (strncmp(actionKey.c_str(), "ZCT:", 4) == 0)//...tv { @@ -161,7 +163,7 @@ void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mod for(int j = 0; j < (int) channels.size(); j++) { CZapitChannel * channel = channels[j]; char cChannelId[60] = {0}; - snprintf(cChannelId,sizeof(cChannelId),"ZC%c:%d|%llx#",(mode==CZapitClient::MODE_TV)?'T':'R',channel->number,channel->channel_id); + snprintf(cChannelId, sizeof(cChannelId), "ZC%c:%d|%" PRIx64 "#", (mode==CZapitClient::MODE_TV)?'T':'R', channel->number, channel->channel_id); CMenuForwarderNonLocalized * chan_item = new CMenuForwarderNonLocalized(channel->getName().c_str(), true, NULL, this, (std::string(cChannelId) + channel->getName()).c_str(), CRCInput::RC_nokey, NULL, channel->scrambled ?NEUTRINO_ICON_SCRAMBLED:NULL); chan_item->setItemButton(NEUTRINO_ICON_BUTTON_OKAY, true); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 744d2ab71..15711c80e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -1273,14 +1273,14 @@ void CNeutrinoApp::channelsInit(bool bOnly) CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); - printf("[neutrino] got %d new TV channels\n", zapitList.size()); fflush(stdout); + printf("[neutrino] got %d new TV channels\n", (int)zapitList.size()); fflush(stdout); } CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::NEW); if (!zapitList.empty()) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); - printf("[neutrino] got %d new RADIO channels\n", zapitList.size()); fflush(stdout); + printf("[neutrino] got %d new RADIO channels\n", (int)zapitList.size()); fflush(stdout); } } if (g_settings.make_removed_list) { @@ -1289,14 +1289,14 @@ void CNeutrinoApp::channelsInit(bool bOnly) CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); - printf("[neutrino] got %d removed TV channels\n", zapitList.size()); fflush(stdout); + printf("[neutrino] got %d removed TV channels\n", (int)zapitList.size()); fflush(stdout); } CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::REMOVED); if (!zapitList.empty()) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); - printf("[neutrino] got %d removed RADIO channels\n", zapitList.size()); fflush(stdout); + printf("[neutrino] got %d removed RADIO channels\n", (int)zapitList.size()); fflush(stdout); } } TIMER_STOP("[neutrino] sats took"); @@ -1327,7 +1327,7 @@ void CNeutrinoApp::channelsInit(bool bOnly) hdBouquet->channelList->SetChannelList(&zapitList); hdBouquet->channelList->SortSat(); TVfavList->Bouquets.push_back(hdBouquet); - printf("[neutrino] got %d HD channels\n", zapitList.size()); fflush(stdout); + printf("[neutrino] got %d HD channels\n", (int)zapitList.size()); fflush(stdout); } } TIMER_STOP("[neutrino] tv took"); @@ -1412,7 +1412,7 @@ void CNeutrinoApp::SetChannelMode(int newmode) INFO("newmode %d sort old %d new %d", newmode, sortmode[newmode], g_settings.channellist_sort_mode); if(newmode != LIST_MODE_FAV && sortmode[newmode] != g_settings.channellist_sort_mode && g_settings.channellist_sort_mode < CChannelList::SORT_MAX) { sortmode[newmode] = g_settings.channellist_sort_mode; - INFO("sorting, mode %d, %d bouquets\n", g_settings.channellist_sort_mode, bouquetList->Bouquets.size()); + INFO("sorting, mode %d, %d bouquets\n", g_settings.channellist_sort_mode, (int)bouquetList->Bouquets.size()); for (uint32_t i = 0; i < bouquetList->Bouquets.size(); i++) { if(g_settings.channellist_sort_mode == CChannelList::SORT_ALPHA) bouquetList->Bouquets[i]->channelList->SortAlpha(); @@ -2316,7 +2316,7 @@ _show: int old_b = bouquetList->getActiveBouquetNumber(); //int old_mode = g_settings.channel_mode; int old_mode = GetChannelMode(); - printf("************************* ZAP START: bouquetList %p size %d old_b %d\n", bouquetList, bouquetList->Bouquets.size(), old_b);fflush(stdout); + printf("************************* ZAP START: bouquetList %p size %d old_b %d\n", bouquetList, (int)bouquetList->Bouquets.size(), old_b);fflush(stdout); if(!bouquetList->Bouquets.empty()) { old_num = bouquetList->Bouquets[old_b]->channelList->getSelected(); @@ -2352,7 +2352,7 @@ _repeat: StartSubtitles(mode == mode_tv); } else if(nNewChannel == -3) { // list mode changed - printf("************************* ZAP NEW MODE: bouquetList %p size %d\n", bouquetList, bouquetList->Bouquets.size());fflush(stdout); + printf("************************* ZAP NEW MODE: bouquetList %p size %d\n", bouquetList, (int)bouquetList->Bouquets.size());fflush(stdout); nNewChannel = bouquetList->exec(true); goto _repeat; } @@ -2601,7 +2601,7 @@ _repeat: } else if( msg == NeutrinoMessages::RECORD_STOP) { CTimerd::RecordingStopInfo* recinfo = (CTimerd::RecordingStopInfo*)data; - printf("NeutrinoMessages::RECORD_STOP: eventID %d channel_id %llx\n", recinfo->eventID, recinfo->channel_id); + printf("NeutrinoMessages::RECORD_STOP: eventID %d channel_id %" PRIx64 "\n", recinfo->eventID, recinfo->channel_id); CRecordManager::getInstance()->Stop(recinfo); autoshift = CRecordManager::getInstance()->TimeshiftOnly(); diff --git a/src/nhttpd/tuxboxapi/coolstream/Makefile.am b/src/nhttpd/tuxboxapi/coolstream/Makefile.am index f26f6d934..064cb60bb 100644 --- a/src/nhttpd/tuxboxapi/coolstream/Makefile.am +++ b/src/nhttpd/tuxboxapi/coolstream/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS INCLUDES = \ -I$(top_builddir) \ diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 998dcabaa..c61f7e3c1 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -189,7 +189,7 @@ int check_dir(const char * dir) ret = 0; break; //ok default: - fprintf(stderr, "%s Unknow File system type: %i\n" ,dir ,s.f_type); + fprintf(stderr, "%s Unknown filesystem type: 0x%x\n", dir, (int)s.f_type); break; // error } } diff --git a/src/timerd/Makefile.am b/src/timerd/Makefile.am index 76c1954c4..716ce2a95 100644 --- a/src/timerd/Makefile.am +++ b/src/timerd/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS INCLUDES = \ -I$(top_builddir) \ diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index 917f1e003..583ec2211 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -4,6 +4,8 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Homepage: http://dbox.cyberphoria.org/ + Copyright (C) 2011-2012 Stefan Seyfried + $Id: timermanager.cpp,v 1.86 2006/03/04 09:51:47 zwen Exp $ License: GPL @@ -419,7 +421,7 @@ void CTimerManager::loadEventsFromConfig() { std::vector savedIDs; savedIDs = config.getInt32Vector ("IDS"); - dprintf("%d timer(s) in config\n",savedIDs.size()); + dprintf("%d timer(s) in config\n", (int)savedIDs.size()); for(unsigned int i=0; i < savedIDs.size(); i++) { std::stringstream ostr; @@ -640,7 +642,7 @@ void CTimerManager::saveEventsToConfig() // Sperren !!! CConfigFile config(','); config.clear(); - dprintf("save %d events to config ...\n", events.size()); + dprintf("save %d events to config ...\n", (int)events.size()); CTimerEventMap::iterator pos = events.begin(); for(;pos != events.end();++pos) { @@ -950,7 +952,7 @@ void CTimerEvent::printEvent(void) case CTimerd::TIMER_ZAPTO : dprintf(" Zapto: " PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS - " epg: %s (%llx)\n", + " epg: %s (%" PRIx64 ")\n", static_cast(this)->eventInfo.channel_id, static_cast(this)->epgTitle.c_str(), static_cast(this)->eventInfo.epgID); @@ -959,7 +961,7 @@ void CTimerEvent::printEvent(void) case CTimerd::TIMER_RECORD : dprintf(" Record: " PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS - " epg: %s(%llx) apids: 0x%X\n dir: %s\n", + " epg: %s(%" PRIx64 ") apids: 0x%X\n dir: %s\n", static_cast(this)->eventInfo.channel_id, static_cast(this)->epgTitle.c_str(), static_cast(this)->eventInfo.epgID, diff --git a/src/zapit/include/zapit/types.h b/src/zapit/include/zapit/types.h index 118ea8a2d..10fe5a60a 100644 --- a/src/zapit/include/zapit/types.h +++ b/src/zapit/include/zapit/types.h @@ -47,9 +47,9 @@ typedef uint64_t t_channel_id; #define CREATE_CHANNEL_ID(service_id,original_network_id,transport_stream_id) ((((t_channel_id)transport_stream_id) << 32) | (((t_channel_id)original_network_id) << 16) | (t_channel_id)service_id) #define CREATE_CHANNEL_ID64 (((uint64_t)(satellitePosition+freq*4) << 48) | ((uint64_t) transport_stream_id << 32) | ((uint64_t)original_network_id << 16) | (uint64_t)service_id) -#define PRINTF_CHANNEL_ID_TYPE "%16llx" -#define PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "%llx" -#define SCANF_CHANNEL_ID_TYPE "%llx" +#define PRINTF_CHANNEL_ID_TYPE "%16" PRIx64 +#define PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "%" PRIx64 +#define SCANF_CHANNEL_ID_TYPE "%" SCNx64 typedef uint64_t transponder_id_t; #if 0 @@ -65,7 +65,7 @@ typedef uint64_t transponder_id_t; #define SAME_TRANSPONDER(id1, id2) ((id1 >> 16) == (id2 >> 16)) -#define PRINTF_TRANSPONDER_ID_TYPE "%12llx" +#define PRINTF_TRANSPONDER_ID_TYPE "%12" PRIx64 #define TRANSPONDER_ID_NOT_TUNED 0 #define GET_ORIGINAL_NETWORK_ID_FROM_TRANSPONDER_ID(transponder_id) ((t_original_network_id)(transponder_id )) #define GET_TRANSPORT_STREAM_ID_FROM_TRANSPONDER_ID(transponder_id) ((t_transport_stream_id)(transponder_id >> 16)) diff --git a/src/zapit/src/Makefile.am b/src/zapit/src/Makefile.am index b63a0641f..2806c96f3 100644 --- a/src/zapit/src/Makefile.am +++ b/src/zapit/src/Makefile.am @@ -1,4 +1,4 @@ -AM_CPPFLAGS = -fno-rtti -fno-exceptions +AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS INCLUDES = \ -I$(top_builddir) \ diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index f6f40259d..2467a68d9 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -389,7 +389,7 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) newBouquet->sortBouquet(); search = search->xmlNextNode; } - INFO("total: %d bouquets", Bouquets.size()); + INFO("total: %d bouquets", (int)Bouquets.size()); } xmlFreeDoc(parser); } diff --git a/src/zapit/src/capmt.cpp b/src/zapit/src/capmt.cpp index 1514cd184..c5f08f7de 100644 --- a/src/zapit/src/capmt.cpp +++ b/src/zapit/src/capmt.cpp @@ -3,6 +3,7 @@ * thegoodguy * * Copyright (C) 2011-2012 CoolStream International Ltd + * Copyright (C) 2012 Stefan Seyfried * * 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 @@ -187,7 +188,7 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); if(channel == NULL) { - printf("CCamManager: channel %llx not found\n", channel_id); + printf("CCamManager: channel %" PRIx64 " not found\n", channel_id); return false; } //INFO("channel %llx [%s] mode %d %s update %d", channel_id, channel->getName().c_str(), mode, start ? "START" : "STOP", force_update); @@ -228,7 +229,7 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start if(cam->getSource() > 0) source = cam->getSource(); - INFO("channel %llx [%s] mode %d %s src %d mask %d -> %d update %d", channel_id, channel->getName().c_str(), + INFO("channel %" PRIx64 " [%s] mode %d %s src %d mask %d -> %d update %d", channel_id, channel->getName().c_str(), mode, start ? "START" : "STOP", source, oldmask, newmask, force_update); //INFO("source %d old mask %d new mask %d force update %s", source, oldmask, newmask, force_update ? "yes" : "no"); if((oldmask != newmask) || force_update) { diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index f8fa390f2..20e8f0b8d 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -2,6 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2011 CoolStream International Ltd + Copyright (C) 2012 Stefan Seyfried License: GPLv2 @@ -68,7 +69,7 @@ bool CFEManager::Init() delete fe; } } - INFO("found %d frontends\n", femap.size()); + INFO("found %d frontends\n", (int)femap.size()); if( femap.empty() ) return false; #if 0 @@ -346,7 +347,7 @@ CFrontend * CFEManager::findFrontend(CZapitChannel * channel) for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; - INFO("Check fe%d: locked %d TP %llx - channel TP %llx", fe->fenumber, fe->Locked(), fe->getTsidOnid(), channel_tid); + INFO("Check fe%d: locked %d TP %" PRIx64 " - channel TP %" PRIx64 "", fe->fenumber, fe->Locked(), fe->getTsidOnid(), channel_tid); if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { same_tid_fe = fe; break; @@ -396,7 +397,7 @@ CFrontend * CFEManager::getLoopFE(CZapitChannel * channel) /* check is there any locked fe, remember fe with same transponder */ for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; - INFO("Check fe%d: locked %d freq %d TP %llx - channel freq %d TP %llx", fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); + INFO("Check fe%d: locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64 "", fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); #if 0 if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { same_tid_fe = fe; // first with same tp id @@ -432,7 +433,7 @@ CFrontend * CFEManager::getIndependentFE(CZapitChannel * channel) satellite_map_t & satmap = fe->getSatellites(); sat_iterator_t sit = satmap.find(satellitePosition); bool configured = ((sit != satmap.end()) && sit->second.configured); - INFO("Check fe%d: locked %d freq %d TP %llx - channel freq %d TP %llx has sat %d: %s", + INFO("Check fe%d: locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64 " has sat %d: %s", fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId(), satellitePosition, configured ? "yes" : "no"); if(!configured) diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index d7a948d45..e137c641f 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -256,14 +256,14 @@ void CFrontend::reset(void) void CFrontend::Lock() { usecount++; - INFO("[fe%d] usecount %d tp %llx\n", fenumber, usecount, getTsidOnid()); + INFO("[fe%d] usecount %d tp %" PRIx64 "\n", fenumber, usecount, getTsidOnid()); } void CFrontend::Unlock() { if(usecount > 0) usecount--; - INFO("[fe%d] usecount %d tp %llx\n", fenumber, usecount, getTsidOnid()); + INFO("[fe%d] usecount %d tp %" PRIx64 "\n", fenumber, usecount, getTsidOnid()); } fe_code_rate_t CFrontend::getCFEC() @@ -964,7 +964,7 @@ bool CFrontend::setInput(CZapitChannel * channel, bool nvod) tpI = transponders.find(channel->getTransponderId()); if (tpI == transponders.end()) { - printf("Transponder %llx for channel %llx not found\n", ct, channel->getChannelID()); + printf("Transponder %" PRIx64 " for channel %" PRIx64 " not found\n", ct, channel->getChannelID()); return false; } diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index db97238a1..b879869ba 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -424,7 +424,7 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id have_numbers = true; service_number_map_t::iterator it = channel_numbers->find(number); if(it != channel_numbers->end()) { - printf("[zapit] duplicate channel number %d: %s id %llx freq %d\n", number, + printf("[zapit] duplicate channel number %d: %s id %" PRIx64 " freq %d\n", number, name.c_str(), chid, freq); number = 0; dup_numbers = true; // force save after loading @@ -435,7 +435,7 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id bool ret = AddChannel(channel); //printf("INS CHANNEL %s %x\n", name.c_str(), (int) &ret.first->second); if(ret == false) { - printf("[zapit] duplicate channel %s id %llx freq %d (old %s at %d)\n", + printf("[zapit] duplicate channel %s id %" PRIx64 " freq %d (old %s at %d)\n", name.c_str(), chid, freq, channel->getName().c_str(), channel->getFreqId()); } else { service_count++; @@ -623,7 +623,7 @@ bool CServiceManager::LoadServices(bool only_current) xmlDocPtr parser; static bool satcleared = 0;//clear only once, because menu is static service_count = 0; - printf("[zapit] Loading services, channel size %d ..\n", sizeof(CZapitChannel)); + printf("[zapit] Loading services, channel size %d ..\n", (int)sizeof(CZapitChannel)); frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; if(only_current) @@ -684,13 +684,13 @@ bool CServiceManager::LoadServices(bool only_current) } LoadProviderMap(); - printf("[zapit] %d services loaded (%d)...\n", service_count, allchans.size()); + printf("[zapit] %d services loaded (%d)...\n", service_count, (int)allchans.size()); TIMER_STOP("[zapit] service loading took"); if(zapit_debug) {//FIXME sat_iterator_t sit; for(sit = satellitePositions.begin(); sit != satellitePositions.end(); ++sit) - printf("satelliteName = %s (%d), satellitePosition = %d motor position = %d usals %d\n", sit->second.name.c_str(), sit->second.name.size(), sit->first, sit->second.motor_position, sit->second.use_usals); + printf("satelliteName = %s (%d), satellitePosition = %d motor position = %d usals %d\n", sit->second.name.c_str(), (int)sit->second.name.size(), sit->first, sit->second.motor_position, sit->second.use_usals); } /* reset flag after loading services.xml */ services_changed = false; @@ -759,7 +759,7 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed) #ifdef SAVE_DEBUG set chans_processed; #endif - printf("CServiceManager::SaveServices: total channels: %d\n", allchans.size()); + printf("CServiceManager::SaveServices: total channels: %d\n", (int)allchans.size()); FILE * fd = fopen(SERVICES_TMP, "w"); if(!fd) { perror(SERVICES_TMP); diff --git a/src/zapit/src/pzapit.cpp b/src/zapit/src/pzapit.cpp index 73e06d5d9..269283171 100644 --- a/src/zapit/src/pzapit.cpp +++ b/src/zapit/src/pzapit.cpp @@ -273,7 +273,7 @@ int main (int argc, char** argv) { if (i < argc - 2) { - sscanf(argv[++i], "%lld", &satmask); + sscanf(argv[++i], "%" SCNd64 "", &satmask); sscanf(argv[++i], "%d", &diseqc[0]); /* diseqc[0] = strlen(argv[i+1]); @@ -347,7 +347,7 @@ int main (int argc, char** argv) { if (i < argc - 1) { - sscanf(argv[++i], "%llx", &zapsid); + sscanf(argv[++i], "%" SCNx64 "", &zapsid); continue; } } @@ -509,7 +509,7 @@ int main (int argc, char** argv) std::vector::const_iterator rI; for ( ii = 0, rI = satelliteList.begin(); rI != satelliteList.end(); ii++, rI++) - printf("%lld : %s %d\n", ii, rI->satName, rI->satPosition); + printf("%" PRId64 " : %s %d\n", ii, rI->satName, rI->satPosition); //std::cout << (1 << ii) << ": " << rI->satName << std::endl; return 0; @@ -577,7 +577,7 @@ int main (int argc, char** argv) if (getchannel) { t_channel_id channelid = zapit.getCurrentServiceID(); - printf("%llx (%s)\n", channelid, (zapit.getChannelName(channelid)).c_str()); + printf("%" PRIx64 " (%s)\n", channelid, (zapit.getChannelName(channelid)).c_str()); return 0; } @@ -587,7 +587,7 @@ int main (int argc, char** argv) if (zapsid > 0) { - printf("Zapping to: %llx (%s) ", zapsid, (zapit.getChannelName(zapsid)).c_str()); + printf("Zapping to: %" PRIx64 " (%s) ", zapsid, (zapit.getChannelName(zapsid)).c_str()); tmp = zapit.zapTo_serviceID(zapsid); if (!tmp) printf("failed"); diff --git a/src/zapit/src/scan.cpp b/src/zapit/src/scan.cpp index 82172882e..ba0137b44 100644 --- a/src/zapit/src/scan.cpp +++ b/src/zapit/src/scan.cpp @@ -3,6 +3,8 @@ * * (C) 2002-2003 Andreas Oberritter * + * (C) 2009, 2001-2012 Stefan Seyfried + * * 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 @@ -206,7 +208,7 @@ bool CServiceScan::AddFromNit() } } nittransponders.clear(); - printf("\n\n[scan] found %d additional transponders from nit\n", scantransponders.size()); + printf("\n\n[scan] found %d additional transponders from nit\n", (int)scantransponders.size()); return !scantransponders.empty(); } @@ -297,7 +299,7 @@ _repeat: bouquet_map_t & tmp = bat.getBouquets(); for(bouquet_map_t::iterator it = tmp.begin(); it != tmp.end(); ++it) { bouquet_map[it->first].insert(it->second.begin(), it->second.end()); - printf("########### CServiceScan::ReadNitSdt: bouquet_map [%s] size %d ###########\n", it->first.c_str(), bouquet_map[it->first].size()); + printf("########### CServiceScan::ReadNitSdt: bouquet_map [%s] size %d ###########\n", it->first.c_str(), (int)bouquet_map[it->first].size()); } channel_number_map_t &lcn = bat.getLogicalMap(); logical_map.insert(lcn.begin(), lcn.end()); @@ -316,14 +318,14 @@ _repeat: transponder t2(frontendType, TsidOnid, tI->second.feparams, tI->second.polarization); transponders.insert(transponder_pair_t(TsidOnid, t2)); } - printf("[scan] tpid ready: %llx\n", TsidOnid); + printf("[scan] tpid ready: %" PRIx64 "\n", TsidOnid); } if((flags & SCAN_NIT) && AddFromNit()) goto _repeat; if ((flags & SCAN_LOGICAL_NUMBERS /*(SCAN_NIT|SCAN_LOGICAL_NUMBERS)*/) && !nit_logical_map.empty()) { std::string pname = networkName; - INFO("network [%s] %d logical channels (%d hd)\n", pname.c_str(), nit_logical_map.size(), nit_hd_logical_map.size()); + INFO("network [%s] %d logical channels (%d hd)\n", pname.c_str(), (int)nit_logical_map.size(), (int)nit_hd_logical_map.size()); g_bouquetManager->loadBouquets(true); CServiceManager::getInstance()->ResetChannelNumbers(true, true); CZapitBouquet* bouquet; @@ -375,7 +377,7 @@ _repeat: CZapitBouquet* bouquet; std::string pname = it->first; int bouquetId = g_bouquetManager->existsUBouquet(pname.c_str()); - printf("########### CServiceScan::ReadNitSdt: bouquet [%s] size %d id %d ###########\n", it->first.c_str(), bouquet_map[it->first].size(), bouquetId); + printf("########### CServiceScan::ReadNitSdt: bouquet [%s] size %d id %d ###########\n", it->first.c_str(), (int)bouquet_map[it->first].size(), bouquetId); if (bouquetId == -1) bouquet = g_bouquetManager->addBouquet(pname, true); else diff --git a/src/zapit/src/scanbat.cpp b/src/zapit/src/scanbat.cpp index c02fa0951..bf5b2a26e 100644 --- a/src/zapit/src/scanbat.cpp +++ b/src/zapit/src/scanbat.cpp @@ -162,7 +162,7 @@ bool CBat::Parse() const DescriptorList * dlist = bat->getDescriptors(); DescriptorConstIterator dit; #ifdef DEBUG_BAT - printf("BAT: section %d, %d descriptors\n", bat->getSectionNumber(), dlist->size()); + printf("BAT: section %d, %d descriptors\n", bat->getSectionNumber(), (int)dlist->size()); #endif unsigned int pdsd = 0; for (dit = dlist->begin(); dit != dlist->end(); ++dit) { @@ -220,7 +220,7 @@ bool CBat::Parse() dlist = b->getDescriptors(); #if 1 printf("BAT: bouquet_id %04x tsid %04x onid %04x %d descriptors\n", bouquet_id, b->getTransportStreamId(), - b->getOriginalNetworkId(), dlist->size()); + b->getOriginalNetworkId(), (int)dlist->size()); #endif for (dit = dlist->begin(); dit != dlist->end(); ++dit) { Descriptor * d = *dit; @@ -322,7 +322,7 @@ bool CBat::ParseLogicalChannels(LogicalChannelDescriptor * ld, BouquetAssociatio CZapitChannel * chan = CServiceManager::getInstance()->FindChannel48(channel_id); if(chan) name = chan->getName(); - printf("BAT: logical channel %05d: tsid %04x onid %04x %016llx [%s] visible %d\n", lcn, transport_stream_id, original_network_id, channel_id, name.c_str(), (*it)->getVisibleServiceFlag()); + printf("BAT: logical channel %05d: tsid %04x onid %04x %016" PRIx64 " [%s] visible %d\n", lcn, transport_stream_id, original_network_id, channel_id, name.c_str(), (*it)->getVisibleServiceFlag()); #endif } return true; diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index aa51be576..630af0978 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 CoolStream International Ltd + * Copyright (C) 2012 Stefan Seyfried * * License: GPLv2 * @@ -112,11 +113,11 @@ void transponder::dump(std::string label) struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; if (type == FE_QAM) - printf("%s tp-id %016llx freq %d rate %d fec %d mod %d\n", label.c_str(), + printf("%s tp-id %016" PRIx64 " freq %d rate %d fec %d mod %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation); else - printf("%s tp-id %016llx freq %d rate %d fec %d pol %d\n", label.c_str(), + printf("%s tp-id %016" PRIx64 " freq %d rate %d fec %d pol %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.qpsk.symbol_rate, dvb_feparams->u.qpsk.fec_inner, polarization); } diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index a10ce3817..64cd74c13 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -212,7 +212,7 @@ void CZapit::LoadAudioMap() int volume = 0; char s[1000]; while (fgets(s, 1000, audio_config_file)) { - sscanf(s, "%llx %d %d %d %d %d %d", &chan, &apid, &mode, &volume, &subpid, &ttxpid, &ttxpage); + sscanf(s, "%" SCNx64 " %d %d %d %d %d %d", &chan, &apid, &mode, &volume, &subpid, &ttxpid, &ttxpage); audio_map[chan].apid = apid; audio_map[chan].subpid = subpid; audio_map[chan].mode = mode; @@ -231,7 +231,7 @@ void CZapit::SaveAudioMap() return; } for (audio_map_iterator_t audio_map_it = audio_map.begin(); audio_map_it != audio_map.end(); audio_map_it++) { - fprintf(audio_config_file, "%llx %d %d %d %d %d %d\n", (uint64_t) audio_map_it->first, + fprintf(audio_config_file, "%" PRIx64 " %d %d %d %d %d %d\n", (uint64_t) audio_map_it->first, (int) audio_map_it->second.apid, (int) audio_map_it->second.mode, (int) audio_map_it->second.volume, (int) audio_map_it->second.subpid, (int) audio_map_it->second.ttxpid, (int) audio_map_it->second.ttxpage); } @@ -252,7 +252,7 @@ void CZapit::LoadVolumeMap() int volume = 0; char s[1000]; while (fgets(s, 1000, volume_config_file)) { - if (sscanf(s, "%llx %d %d", &chan, &apid, &volume) == 3) + if (sscanf(s, "%" SCNx64 " %d %d", &chan, &apid, &volume) == 3) vol_map.insert(volume_pair_t(chan, pid_pair_t(apid, volume))); } fclose(volume_config_file); @@ -266,7 +266,7 @@ void CZapit::SaveVolumeMap() return; } for (volume_map_iterator_t it = vol_map.begin(); it != vol_map.end(); ++it) - fprintf(volume_config_file, "%llx %d %d\n", (uint64_t) it->first, it->second.first, it->second.second); + fprintf(volume_config_file, "%" PRIx64 " %d %d\n", (uint64_t) it->first, it->second.first, it->second.second); fdatasync(fileno(volume_config_file)); fclose(volume_config_file); @@ -472,7 +472,7 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay return false; } - INFO("[zapit] zap to %s (%llx tp %llx)", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); + INFO("[zapit] zap to %s (%" PRIx64 " tp %" PRIx64 ")", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); CFrontend * fe = CFEManager::getInstance()->allocateFE(newchannel); if(fe == NULL) { @@ -557,7 +557,7 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id) printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); return false; } - printf("%s: %s (%llx)\n", __FUNCTION__, newchannel->getName().c_str(), channel_id); + printf("%s: %s (%" PRIx64 ")\n", __FUNCTION__, newchannel->getName().c_str(), channel_id); CFrontend * frontend = CFEManager::getInstance()->allocateFE(newchannel); if(frontend == NULL) { @@ -582,7 +582,7 @@ void CZapit::SetPidVolume(t_channel_id channel_id, int pid, int percent) if (!pid && (channel_id == live_channel_id) && current_channel) pid = current_channel->getAudioPid(); -INFO("############################### channel %llx pid %x map size %d percent %d", channel_id, pid, vol_map.size(), percent); +INFO("############################### channel %" PRIx64 " pid %x map size %d percent %d", channel_id, pid, (int)vol_map.size(), percent); volume_map_range_t pids = vol_map.equal_range(channel_id); for (volume_map_iterator_t it = pids.first; it != pids.second; ++it) { if (it->second.first == pid) { @@ -623,7 +623,7 @@ int CZapit::GetPidVolume(t_channel_id channel_id, int pid, bool ac3) } } } - DBG("channel %llx pid %x map size %d percent %d", channel_id, pid, vol_map.size(), percent); + DBG("channel %" PRIx64 " pid %x map size %d percent %d", channel_id, pid, (int)vol_map.size(), percent); return percent; } @@ -1984,20 +1984,20 @@ unsigned int CZapit::ZapTo(t_channel_id channel_id, bool isSubService) unsigned int result = 0; if (!ZapIt(channel_id)) { - DBG("[zapit] zapit failed, chid %llx\n", channel_id); + DBG("[zapit] zapit failed, chid %" PRIx64 "\n", channel_id); SendEvent((isSubService ? CZapitClient::EVT_ZAP_SUB_FAILED : CZapitClient::EVT_ZAP_FAILED), &channel_id, sizeof(channel_id)); return result; } result |= CZapitClient::ZAP_OK; - DBG("[zapit] zapit OK, chid %llx\n", channel_id); + DBG("[zapit] zapit OK, chid %" PRIx64 "\n", channel_id); if (isSubService) { - DBG("[zapit] isSubService chid %llx\n", channel_id); + DBG("[zapit] isSubService chid %" PRIx64 "\n", channel_id); SendEvent(CZapitClient::EVT_ZAP_SUB_COMPLETE, &channel_id, sizeof(channel_id)); } else if (current_is_nvod) { - DBG("[zapit] NVOD chid %llx\n", channel_id); + DBG("[zapit] NVOD chid %" PRIx64 "\n", channel_id); SendEvent(CZapitClient::EVT_ZAP_COMPLETE_IS_NVOD, &channel_id, sizeof(channel_id)); result |= CZapitClient::ZAP_IS_NVOD; } From c16f636011d3ab15642fc764af0384460f877313 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Tue, 5 Feb 2013 19:08:54 +0100 Subject: [PATCH 39/55] sectionsd: consider the table_id when inserting events Signed-off-by: Jacek Jendrzej Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/5db16ee2ffd774d51163f81cdc259dcd885e3d02 Author: Stefan Seyfried Date: 2013-02-05 (Tue, 05 Feb 2013) ------------------ This commit was generated by Migit --- src/eitd/sectionsd.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 3b1e799f6..909378a27 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -5,7 +5,7 @@ * Copyright (C) 2001 by fnbrd (fnbrd@gmx.de) * Homepage: http://dbox2.elxsi.de * - * Copyright (C) 2008, 2009 Stefan Seyfried + * Copyright (C) 2008-2013 Stefan Seyfried * * Copyright (C) 2011-2012 CoolStream International Ltd * @@ -408,9 +408,16 @@ xprintf("addEvent: current %016" PRIx64 " event %016" PRIx64 " running %d messag else { event_id_t x_key = (*x)->uniqueKey(); - /* do we need this check? */ if (x_key == e_key) - continue; + { + /* the present event has a higher table_id than the new one + * => delete and insert the new one */ + if ((*x)->table_id >= e->table_id) + continue; + /* else: keep the old event with the lower table_id */ + unlockEvents(); + return; + } if ((*x)->times.begin()->startzeit >= end_time) continue; /* iterating backwards: if the endtime of the stored events @@ -418,6 +425,14 @@ xprintf("addEvent: current %016" PRIx64 " event %016" PRIx64 " running %d messag * find an identical one => bail out */ if ((*x)->times.begin()->startzeit + (long)(*x)->times.begin()->dauer <= start_time) break; + if ((*x)->table_id < e->table_id) + { + /* don't add the higher table_id */ + dprintf("%s: don't replace 0x%016" PRIx64 ".%02x with 0x%016" PRIx64 ".%02x\n", + __func__, x_key, (*x)->table_id, e_key, e->table_id); + unlockEvents(); + return; + } /* here we have an overlapping event */ dprintf("%s: delete 0x%016" PRIx64 ".%02x time = 0x%016" PRIx64 ".%02x\n", __func__, x_key, (*x)->table_id, e_key, e->table_id); From e633da346a5d49827c19bda2da6024e25b22859d Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Fri, 22 Feb 2013 09:23:33 +0100 Subject: [PATCH 40/55] CChannelList: fix position of minitv, small cleanups This is only a provisionally fix. A rework of initialisation for many member variables seems to be necessary. Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/f90395b81d9c7677f19a5424a56bb44546d3bdae Author: Thilo Graf Date: 2013-02-22 (Fri, 22 Feb 2013) ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 14 ++++++++++---- src/gui/channellist.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index cf2cd0994..d70859c64 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -99,6 +99,8 @@ extern cVideo * videoDecoder; CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vlist) { frameBuffer = CFrameBuffer::getInstance(); + x = y = 0; + info_height = 0; name = pName; selected = 0; selected_in_new_mode = 0; @@ -110,6 +112,7 @@ CChannelList::CChannelList(const char * const pName, bool phistoryMode, bool _vl new_zap_mode = 0; selected_chid = 0; footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //initial height value for buttonbar + theight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); previous_channellist_additional = -1; eventFont = SNeutrinoSettings::FONT_TYPE_CHANNELLIST_EVENT; //printf("************ NEW LIST %s : %x\n", name.c_str(), (int) this);fflush(stdout); @@ -513,7 +516,10 @@ void CChannelList::calcSize() listmaxshow = (height - theight - footerHeight -0)/fheight; height = theight + footerHeight + listmaxshow * fheight; info_height = 2*fheight + g_Font[SNeutrinoSettings::FONT_TYPE_CHANNELLIST_DESCR]->getHeight() + 10; - y += (frameBuffer->getScreenHeight() - height - info_height) / 2; + + int sh = frameBuffer->getScreenHeight(); + int ytmp = (sh - height - info_height) / 2; + y += ytmp; infozone_width = full_width - width; pig_width = infozone_width; @@ -1618,10 +1624,10 @@ void CChannelList::paintDetails(int index) void CChannelList::clearItem2DetailsLine() { - paintItem2DetailsLine (-1, 0); + paintItem2DetailsLine (-1); } -void CChannelList::paintItem2DetailsLine (int pos, int /*ch_index*/) +void CChannelList::paintItem2DetailsLine (int pos) { int xpos = x - ConnectLineBox_Width; int ypos1 = y + theight+0 + pos*fheight; @@ -1782,7 +1788,7 @@ void CChannelList::paintItem(int pos) if (curr == selected) { color = COL_MENUCONTENTSELECTED; bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; - paintItem2DetailsLine (pos, curr); + paintItem2DetailsLine (pos); paintDetails(curr); frameBuffer->paintBoxRel(x,ypos, width- 15, fheight, bgcolor, RADIUS_LARGE); paintbuttons = true; diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 61bfed57a..ea9688cec 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -98,7 +98,7 @@ private: void paintDetails(int index); void clearItem2DetailsLine (); - void paintItem2DetailsLine (int pos, int ch_index); + void paintItem2DetailsLine (int pos); void paintItem(int pos); bool updateSelection(int newpos); void paint(); From aedcc54a000bcad94c439cc0cc7706b7fe25f0db Mon Sep 17 00:00:00 2001 From: Jacek Jendrzej Date: Sat, 23 Feb 2013 17:34:12 +0100 Subject: [PATCH 41/55] src/gui/infoviewer.cpp: fix paint progressbar opt 1 Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/662955f9e7089d4d479e4b5cf6b9d71546304884 Author: Jacek Jendrzej Date: 2013-02-23 (Sat, 23 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/infoviewer.cpp | 4 ++-- src/gui/widget/progressbar.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index e9c3712c6..d4d1b0b76 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -1474,12 +1474,12 @@ void CInfoViewer::display_Info(const char *current, const char *next, pb_starty = CurrInfoY - ((pb_h * 2) + (pb_h / 6)) ; pb_h = (pb_h/3); - pb_color = COL_INFOBAR_SHADOW_PLUS_0; + pb_color = 0; break; case 2: pb_starty = CurrInfoY - ((pb_h * 2) + (pb_h / 5)) ; pb_h = (pb_h/5); - pb_color = COL_INFOBAR_SHADOW_PLUS_0; + pb_color = 0; break; case 3: pb_starty = CurrInfoY + ((pb_h / 3)-(pb_h/5)) ; diff --git a/src/gui/widget/progressbar.cpp b/src/gui/widget/progressbar.cpp index d8e42b441..e99ad763b 100644 --- a/src/gui/widget/progressbar.cpp +++ b/src/gui/widget/progressbar.cpp @@ -191,10 +191,8 @@ void CProgressBar::realpaint(const int pos_x, const int pos_y, int maxi = active_pb_width / ITEMW; /* how many POINTs is the active bar */ int total = width / ITEMW; /* total number of POINTs */ - int i, j; uint32_t rgb; fb_pixel_t color; - int b = 0; if (last_width == -1 && backgroundbar_col != 0) /* first paint */ { @@ -206,6 +204,8 @@ void CProgressBar::realpaint(const int pos_x, const int pos_y, if (active_pb_width != last_width) { int step; + int i, j; + int b = 0; if (active_pb_width > last_width) { for (i = 0; (i < rd) && (i < maxi); i++) { step = 255 / rd; From 3f900c5587dd21b4c6bc825fbd3b67a6bca6475d Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Fri, 22 Feb 2013 17:16:43 +0100 Subject: [PATCH 42/55] channellist: initialize values to satisfy valgrind Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/b0c7ca94a7ab4ff32334da58c09cc86abe66bd37 Author: Stefan Seyfried Date: 2013-02-22 (Fri, 22 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/channellist.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index d70859c64..f8437f611 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -2158,6 +2158,7 @@ void CChannelList::paint_events(int index) evt.description = g_Locale->getText(LOCALE_EPGLIST_NOEVENTS); evt.eventID = 0; + evt.startTime = 0; evtlist.push_back(evt); } @@ -2218,6 +2219,7 @@ void CChannelList::readEvents(const t_channel_id channel_id) CChannelEvent evt; evt.description = g_Locale->getText(LOCALE_EPGLIST_NOEVENTS); evt.eventID = 0; + evt.startTime = 0; evtlist.push_back(evt); } else From 32b4ee678f319e90354001728460c1dc9cc3c639 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Fri, 22 Feb 2013 17:17:05 +0100 Subject: [PATCH 43/55] infoviewer_bb: initialize values to satisfy valgrind Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/a410dabcdb3b2ace2c91e611a6fe9de678b112ea Author: Stefan Seyfried Date: 2013-02-22 (Fri, 22 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/infoviewer_bb.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index 82f53c622..131c0a506 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -106,6 +106,7 @@ void CInfoViewerBB::Init() for (int i = 0; i < CInfoViewerBB::BUTTON_MAX; i++) { tmp_bbButtonInfoText[i] = ""; + bbButtonInfo[i].x = -1; } // get HDD info in a separate thread From c63da7e9a9d9867cb235f27984623392355d3553 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Feb 2013 15:34:47 +0100 Subject: [PATCH 44/55] configfile: set the modified flag correctly on set*Vector methods Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/07a8027b4d99f3dda11944dcdc226a7a6cb3adfd Author: Stefan Seyfried Date: 2013-02-23 (Sat, 23 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- lib/libconfigfile/configfile.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/libconfigfile/configfile.cpp b/lib/libconfigfile/configfile.cpp index 52830b3c0..67848ead5 100644 --- a/lib/libconfigfile/configfile.cpp +++ b/lib/libconfigfile/configfile.cpp @@ -387,6 +387,9 @@ void CConfigFile::setString(const std::string & key, const std::string & val) void CConfigFile::setInt32Vector(const std::string & key, const std::vector vec) { + bool tmpUnknownKeyQueryedFlag = unknownKeyQueryedFlag; + unknownKeyQueryedFlag = false; + std::string oldVal = getString(key); std::stringstream s; for (std::vector::const_iterator it = vec.begin(); ; ) @@ -399,21 +402,35 @@ void CConfigFile::setInt32Vector(const std::string & key, const std::vector> configData[key]; + if (oldVal != s.str() || unknownKeyQueryedFlag) + { + modifiedFlag = true; + configData[key] = s.str(); + } + unknownKeyQueryedFlag = tmpUnknownKeyQueryedFlag; } void CConfigFile::setStringVector(const std::string & key, const std::vector vec) { - configData[key] = ""; + bool tmpUnknownKeyQueryedFlag = unknownKeyQueryedFlag; + unknownKeyQueryedFlag = false; + std::string oldVal = getString(key); + std::string newVal = ""; for (std::vector::const_iterator it = vec.begin(); ; ) { if (it == vec.end()) break; - configData[key] += *it; + newVal += *it; ++it; if (it == vec.end()) break; - configData[key] += delimiter; + newVal += delimiter; } + if (oldVal != newVal || unknownKeyQueryedFlag) + { + modifiedFlag = true; + configData[key] = newVal; + } + unknownKeyQueryedFlag = tmpUnknownKeyQueryedFlag; } From 6a1032441798cf5d50d77beb11be459df3345072 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Feb 2013 15:36:02 +0100 Subject: [PATCH 45/55] configfile: reset modified flag after saving Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/809db6211e0509903e2d50bcd86483cc8a395b18 Author: Stefan Seyfried Date: 2013-02-23 (Sat, 23 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- lib/libconfigfile/configfile.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/libconfigfile/configfile.cpp b/lib/libconfigfile/configfile.cpp index 67848ead5..4c303cde7 100644 --- a/lib/libconfigfile/configfile.cpp +++ b/lib/libconfigfile/configfile.cpp @@ -105,6 +105,7 @@ bool CConfigFile::saveConfig(const char * const filename) chmod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + modifiedFlag = false; return true; } else From 66a4c73f2d5295a551dc795494811f8391e86df2 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Feb 2013 15:42:22 +0100 Subject: [PATCH 46/55] configfile: don't do a full sync() after saving Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/804bed4e733d3f000228f86cec2646dae7b7543f Author: Stefan Seyfried Date: 2013-02-23 (Sat, 23 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- lib/libconfigfile/configfile.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/libconfigfile/configfile.cpp b/lib/libconfigfile/configfile.cpp index 4c303cde7..4814cdda9 100644 --- a/lib/libconfigfile/configfile.cpp +++ b/lib/libconfigfile/configfile.cpp @@ -91,17 +91,18 @@ bool CConfigFile::loadConfig(const std::string & filename) bool CConfigFile::saveConfig(const char * const filename) { - std::ofstream configFile(filename); + std::fstream configFile(filename); if (configFile != NULL) { + std::cout << "[ConfigFile] saving " << filename << std::endl; for (ConfigDataMap::const_iterator it = configData.begin(); it != configData.end(); ++it) { configFile << it->first << "=" << it->second << std::endl; } + configFile.sync(); configFile.close(); - sync(); chmod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); From ef0196c06d36e7add8f98336fc8f436ba3646d07 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sat, 23 Feb 2013 15:49:06 +0100 Subject: [PATCH 47/55] femanager: remove workaround after libconfigfile fix Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/05fdc3c08dc19362577edb50da09d7c9668a867f Author: Stefan Seyfried Date: 2013-02-23 (Sat, 23 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/zapit/src/femanager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 20e8f0b8d..468edb6c6 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -263,8 +263,7 @@ void CFEManager::saveSettings(bool write) sprintf(cfg_key, "fe%d_satellites", fe->fenumber); configfile.setInt32Vector(cfg_key, satList); } - //setInt32Vector dont set modified flag ! - if (write /*&& configfile.getModifiedFlag()*/) { + if (write && configfile.getModifiedFlag()) { config_exist = configfile.saveConfig(FECONFIGFILE); //configfile.setModifiedFlag(false); } From 59e394a0e739b60c222fa02036704505a4cf4e81 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 26 Feb 2013 13:07:20 +0100 Subject: [PATCH 48/55] locale: clean screenshot-locale from unnecessary ballast Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/e72d3685f00db01bf5d8baeb72afa5312f5765e6 Author: vanhofen Date: 2013-02-26 (Tue, 26 Feb 2013) Origin message was: ------------------ - locale: clean screenshot-locale from unnecessary ballast ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/locale/deutsch.locale | 16 ++++++++-------- data/locale/english.locale | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index abbe56b57..3c287c12b 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1627,17 +1627,17 @@ scants.transponders Transponder: scrambled_channel Verschlüsselung aktiv screensetup.lowerright grün = Bildrand unten, rechts screensetup.upperleft rot = Bildrand oben, links -screenshot.count Screenshot Anzahl +screenshot.count Anzahl screenshot.cover Erzeuge Filmcover für Moviebrowser -screenshot.defdir Screenshot Verzeichnis -screenshot.format Screenshot Format +screenshot.defdir Ziel-Verzeichnis +screenshot.format Format screenshot.info Screenshot Taste ist nicht belegt screenshot.menu Screenshot -screenshot.osd OSD Auflösung -screenshot.res Screenshot Auflösung -screenshot.scale Screenshot Skalierung -screenshot.tv TV Auflösung -screenshot.video Screenshot mit Video Hintergrund +screenshot.osd OSD-Auflösung +screenshot.res Auflösung +screenshot.scale Skalierung +screenshot.tv TV-Auflösung +screenshot.video Video im Hintergrund servicemenu.getplugins Plugins neu laden servicemenu.getplugins_hint Plugins werden neu geladen,\nbitte warten... servicemenu.head Service diff --git a/data/locale/english.locale b/data/locale/english.locale index f4405d184..20a81614e 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1627,17 +1627,17 @@ scants.transponders Transponders: scrambled_channel Scrambled channel screensetup.lowerright green = setup lower right screensetup.upperleft red = setup upper left -screenshot.count Screenshot count +screenshot.count Count screenshot.cover Create Moviecover for Moviebrowser -screenshot.defdir Screenshot directory -screenshot.format Screenshot format +screenshot.defdir Destination directory +screenshot.format Format screenshot.info Screenshot key is unused screenshot.menu Screenshot screenshot.osd OSD resolution -screenshot.res Screenshot resolution -screenshot.scale Screenshot scale +screenshot.res Resolution +screenshot.scale Scale screenshot.tv TV resolution -screenshot.video Screenshot with video background +screenshot.video Video in the background servicemenu.getplugins Reload plugins servicemenu.getplugins_hint Reloading plugins,\nplease be patient. servicemenu.head Service From 5fa09e19d5fb5bf9ab9f795faa8ce044dd813f4a Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 26 Feb 2013 13:10:17 +0100 Subject: [PATCH 49/55] osd_setup.cpp: move dest-dir for screenshots to top of menu Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/d4370304cd6175d34335d50ed34af982aa08e215 Author: vanhofen Date: 2013-02-26 (Tue, 26 Feb 2013) Origin message was: ------------------ - osd_setup.cpp: move dest-dir for screenshots to top of menu ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/osd_setup.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index 874dbf1f1..3774b6054 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -988,6 +988,10 @@ void COsdSetup::showOsdScreenShotSetup(CMenuWidget *menu_screenshot) if((uint)g_settings.key_screenshot == CRCInput::RC_nokey) menu_screenshot->addItem( new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCREENSHOT_INFO)); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCREENSHOT_DEFDIR, true, g_settings.screenshot_dir, this, "screenshot_dir"); + mf->setHint("", LOCALE_MENU_HINT_SCREENSHOT_DIR); + menu_screenshot->addItem(mf); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_SCREENSHOT_COUNT, &g_settings.screenshot_count, true, 1, 5, NULL); nc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_COUNT); menu_screenshot->addItem(nc); @@ -996,10 +1000,6 @@ void COsdSetup::showOsdScreenShotSetup(CMenuWidget *menu_screenshot) mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_FORMAT); menu_screenshot->addItem(mc); - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCREENSHOT_DEFDIR, true, g_settings.screenshot_dir, this, "screenshot_dir"); - mf->setHint("", LOCALE_MENU_HINT_SCREENSHOT_DIR); - menu_screenshot->addItem(mf); - mc = new CMenuOptionChooser(LOCALE_SCREENSHOT_RES, &g_settings.screenshot_mode, SCREENSHOT_OPTIONS, SCREENSHOT_OPTION_COUNT, true); mc->setHint("", LOCALE_MENU_HINT_SCREENSHOT_RES); menu_screenshot->addItem(mc); From f4f452585b84c92853d671a40305dc91ba1db2dc Mon Sep 17 00:00:00 2001 From: vanhofen Date: Tue, 26 Feb 2013 13:30:13 +0100 Subject: [PATCH 50/55] icons: add missing hint_a_pic.png Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/365300c8301f5b5a8e76ab51e185f9c811767b7b Author: vanhofen Date: 2013-02-26 (Tue, 26 Feb 2013) Origin message was: ------------------ - icons: add missing hint_a_pic.png ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/Makefile.am | 1 + data/icons/hint_a_pic.png | Bin 0 -> 3147 bytes 2 files changed, 1 insertion(+) create mode 100644 data/icons/hint_a_pic.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 6d2b7b202..0bd766ee4 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -80,6 +80,7 @@ install_DATA += \ help.png \ help_small.png \ hidden.png \ + hint_a_pic.png \ hint_aplay.png \ hint_audio.png \ hint_back.png \ diff --git a/data/icons/hint_a_pic.png b/data/icons/hint_a_pic.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed6dfd2b0f33b96aa2c6a9a958b7c329ccda3ee GIT binary patch literal 3147 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 Date: Tue, 26 Feb 2013 13:53:07 +0100 Subject: [PATCH 51/55] moviebrowser: only save settings if modified Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/3ece169f9bc1abe46980dbb0f6e754f64bd1b10b Author: Gaucho316 Date: 2013-02-26 (Tue, 26 Feb 2013) Origin message was: ------------------ - moviebrowser: only save settings if modified ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/moviebrowser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index 8f482b622..7ef9bfef9 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -806,7 +806,8 @@ bool CMovieBrowser::saveSettings(MB_SETTINGS* settings) configfile.setInt32(cfg_key, settings->browserRowWidth[i]); } - configfile.saveConfig(MOVIEBROWSER_SETTINGS_FILE); + if (configfile.getModifiedFlag()) + configfile.saveConfig(MOVIEBROWSER_SETTINGS_FILE); return (result); } From f9d64f5a4a5f74b5f0b5eaef7495d21813855df2 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 24 Feb 2013 17:45:51 +0100 Subject: [PATCH 52/55] zapit: fix order of stopping playback and selecting live FE Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/4f3561104e5ab647fd86034cb66e8feb1e041d5b Author: Stefan Seyfried Date: 2013-02-24 (Sun, 24 Feb 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/zapit/src/zapit.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 64cd74c13..8158dc9bf 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -479,9 +479,6 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay ERROR("Cannot get frontend\n"); return false; } - live_fe = fe; - CFEManager::getInstance()->setLiveFE(live_fe); - sig_delay = 2; if (!firstzap && current_channel) SaveChannelPids(current_channel); @@ -491,8 +488,13 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay pmt_stop_update_filter(&pmt_update_fd); + /* stop playback on the old frontend... */ StopPlayBack(!forupdate); + /* then select the new one... */ + live_fe = fe; + CFEManager::getInstance()->setLiveFE(live_fe); + if(!forupdate && current_channel) current_channel->resetPids(); From 8d6438b44cd5443e9153fc0d2c274e4279444881 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Wed, 27 Feb 2013 21:23:15 +0100 Subject: [PATCH 53/55] audioplayer.cpp: reducing console spam Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/57317aae31097ec8e2ee127b3463c6822b387838 Author: vanhofen Date: 2013-02-27 (Wed, 27 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: reducing console spam ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 2e36d2076..0a3281788 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -325,7 +325,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) puts("[audioplayer.cpp] executing " AUDIOPLAYER_START_SCRIPT "."); if (my_system(AUDIOPLAYER_START_SCRIPT) != 0) - perror("Datei " AUDIOPLAYER_START_SCRIPT " fehlt.Bitte erstellen, wenn gebraucht.\nFile " AUDIOPLAYER_START_SCRIPT " not found. Please create if needed.\n"); + perror(AUDIOPLAYER_START_SCRIPT " failed"); int res = show(); @@ -337,7 +337,7 @@ int CAudioPlayerGui::exec(CMenuTarget* parent, const std::string &actionKey) puts("[audioplayer.cpp] executing " AUDIOPLAYER_END_SCRIPT "."); if (my_system(AUDIOPLAYER_END_SCRIPT) != 0) - perror("Datei " AUDIOPLAYER_END_SCRIPT " fehlt. Bitte erstellen, wenn gebraucht.\nFile " AUDIOPLAYER_END_SCRIPT " not found. Please create if needed.\n"); + perror(AUDIOPLAYER_END_SCRIPT " failed"); g_Zapit->unlockPlayBack(); // Start Sectionsd From ad0c5ba0861575dbd96c29001b3084da0932f223 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 28 Feb 2013 09:49:27 +0100 Subject: [PATCH 54/55] icons: remove unneeded movieplayer.raw Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/c0959cc5f56b9cc65cd9c79969a070417af46237 Author: vanhofen Date: 2013-02-28 (Thu, 28 Feb 2013) Origin message was: ------------------ - icons: remove unneeded movieplayer.raw ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- data/icons/movieplayer.raw | Bin 80657 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/icons/movieplayer.raw diff --git a/data/icons/movieplayer.raw b/data/icons/movieplayer.raw deleted file mode 100644 index c8788f5bf1c0347d32acf902c1ab6b8a262850a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80657 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 From 4787badcc41523d02c73e285a2e4b3727fb17bb5 Mon Sep 17 00:00:00 2001 From: vanhofen Date: Thu, 28 Feb 2013 10:02:59 +0100 Subject: [PATCH 55/55] audioplayer.cpp: fix comparison operator Origin commit data ------------------ Branch: ni/coolstream Commit: https://github.com/neutrino-images/ni-neutrino/commit/ca8f8251ed32e2833d6fb030a3f14f115986e3e4 Author: vanhofen Date: 2013-02-28 (Thu, 28 Feb 2013) Origin message was: ------------------ - audioplayer.cpp: fix comparison operator ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- src/gui/audioplayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 0a3281788..12644aa42 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -437,7 +437,7 @@ int CAudioPlayerGui::show() if (m_screensaver) { screensaver(false); - if (msg < CRCInput::RC_MaxRC) { + if (msg <= CRCInput::RC_MaxRC) { // ignore first keypress - just quit the screensaver g_RCInput->clearRCMsg(); continue;