Conflicts:
	configure.ac
	data/locale/deutsch.locale
	data/locale/english.locale
	src/gui/info_menue.cpp
	src/gui/widget/menue.cpp
	src/nhttpd/yconfig.h
	src/system/helpers.h


Origin commit data
------------------
Branch: ni/coolstream
Commit: 9152c228ed
Author: vanhofen <vanhofen@gmx.de>
Date: 2017-09-14 (Thu, 14 Sep 2017)



------------------
This commit was generated by Migit
This commit is contained in:
vanhofen
2017-09-14 16:23:15 +02:00
21 changed files with 50104 additions and 74 deletions

49965
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -40,7 +40,6 @@ class cDvbSubtitleBitmaps : public cListObject
{
private:
int64_t pts;
int timeout;
AVSubtitle sub;
public:
cDvbSubtitleBitmaps(int64_t Pts);

View File

@@ -48,8 +48,6 @@
class CFile
{
private:
mutable int Type;
public:
enum FileType
{

View File

@@ -393,7 +393,7 @@ bool CScreenShot::SaveJpg()
int xres2 = xres1+2;
for (int x = 0; x < xres; x++) {
int x2 = x*3;
memcpy(pixel_data + x2 + xres1, pixel_data + x*4 + y*xres*4, 3);
memmove(pixel_data + x2 + xres1, pixel_data + x*4 + y*xres*4, 3);
SWAP(pixel_data[x2 + xres1], pixel_data[x2 + xres2]);
}
}

View File

@@ -93,7 +93,7 @@ const CMenuOptionChooser::keyval AUDIOMENU_ANALOGOUT_OPTIONS[AUDIOMENU_ANALOGOUT
{ 1, LOCALE_AUDIOMENU_MONOLEFT },
{ 2, LOCALE_AUDIOMENU_MONORIGHT }
};
#if HAVE_COOL_HARDWARE
#ifdef BOXMODEL_CS_HD2
#define AUDIOMENU_SRS_OPTION_COUNT 3
#else
@@ -107,6 +107,7 @@ const CMenuOptionChooser::keyval AUDIOMENU_SRS_OPTIONS[AUDIOMENU_SRS_OPTION_COUN
{ 2 , LOCALE_AUDIO_SRS_ALGO_HEAVY }
#endif
};
#endif
#define AUDIOMENU_AVSYNC_OPTION_COUNT 3
const CMenuOptionChooser::keyval AUDIOMENU_AVSYNC_OPTIONS[AUDIOMENU_AVSYNC_OPTION_COUNT] =

View File

@@ -43,11 +43,11 @@ CComponentsTimer::CComponentsTimer(const int& interval, bool is_nano)
tm_thread = 0;
tm_interval = interval;
tm_enable_nano = is_nano;
tm_enable = false;
sl_stop_timer = sigc::mem_fun(*this, &CComponentsTimer::stopTimer);
if (interval > 0)
startTimer();
tm_enable = startTimer();
}
CComponentsTimer::~CComponentsTimer()
@@ -132,12 +132,11 @@ void CComponentsTimer::stopThread()
bool CComponentsTimer::startTimer()
{
tm_enable = true;
initThread();
if(tm_thread)
return true;
tm_enable = true;
return false;
return tm_enable;
}
bool CComponentsTimer::stopTimer()

View File

@@ -43,7 +43,6 @@
class CFollowScreenings : public CMenuTarget
{
private:
CEPGData *epgData;
CChannelEventList *evtlist;
CChannelEventList followlist;
CTimerdClient Timer;

View File

@@ -104,14 +104,12 @@ int CInfoMenu::showMenu()
mf = new CMenuForwarder(LOCALE_STREAMINFO_HEAD, !CNeutrinoApp::getInstance()->channelList->isEmpty(), NULL, &streaminfo, NULL, CRCInput::RC_yellow);
mf->setHint(NEUTRINO_ICON_HINT_STREAMINFO, LOCALE_MENU_HINT_STREAMINFO);
info->addItem(mf);
#if 0
CBuildInfo buildinfo;
mf = new CMenuForwarder(LOCALE_BUILDINFO_MENU, true, NULL, &buildinfo, NULL, CRCInput::RC_blue);
mf->setHint(NEUTRINO_ICON_HINT_IMAGEINFO, LOCALE_MENU_HINT_BUILDINFO);
info->addItem(mf);
#endif
//NI
mf = new CMenuForwarder(LOCALE_HDD_INFO_HEAD, true, NULL, &hddinfo, NULL, CRCInput::RC_blue);
mf->setHint(NEUTRINO_ICON_HINT_HDD_INFO, LOCALE_MENU_HINT_HDD_INFO);

View File

@@ -363,13 +363,6 @@ void CMiscMenue::showMiscSettingsMenuGeneral(CMenuWidget *ms_general)
ms_general->addItem(md);
}
#define VIDEOMENU_HDMI_CEC_MODE_OPTION_COUNT 2
const CMenuOptionChooser::keyval VIDEOMENU_HDMI_CEC_MODE_OPTIONS[VIDEOMENU_HDMI_CEC_MODE_OPTION_COUNT] =
{
{ VIDEO_HDMI_CEC_MODE_OFF , LOCALE_OPTIONS_OFF },
{ VIDEO_HDMI_CEC_MODE_TUNER , LOCALE_OPTIONS_ON }
};
//energy and shutdown settings
int CMiscMenue::showMiscSettingsMenuEnergy()
{

View File

@@ -291,14 +291,6 @@ const CMenuOptionChooser::keyval OPTIONS_EAST0_WEST1_OPTIONS[OPTIONS_EAST0_WEST1
{ 1, LOCALE_EXTRA_WEST }
};
#define SECTIONSD_SCAN_OPTIONS_COUNT 3
const CMenuOptionChooser::keyval SECTIONSD_SCAN_OPTIONS[SECTIONSD_SCAN_OPTIONS_COUNT] =
{
{ 0, LOCALE_OPTIONS_OFF },
{ 1, LOCALE_OPTIONS_ON },
{ 2, LOCALE_OPTIONS_ON_WITHOUT_MESSAGES }
};
#define DISEQC_ORDER_OPTION_COUNT 2
const CMenuOptionChooser::keyval DISEQC_ORDER_OPTIONS[DISEQC_ORDER_OPTION_COUNT] =
{

View File

@@ -67,11 +67,13 @@ CStartUpWizard::~CStartUpWizard()
{
}
#ifdef ENABLE_FASTSCAN
const CMenuOptionChooser::keyval WIZARD_SETUP_TYPE[] =
{
{ 0, LOCALE_WIZARD_SETUP_EASY },
{ 1, LOCALE_WIZARD_SETUP_ADVANCED },
};
#endif
int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/)
{

View File

@@ -83,7 +83,6 @@ class CStreamInfo2 : public CMenuTarget
int doSignalStrengthLoop();
int dvrfd, dmxfd;
struct timeval tv, last_tv, first_tv;
uint64_t bit_s;
uint64_t abit_s;

View File

@@ -60,13 +60,6 @@ CUpdateSettings::~CUpdateSettings()
#endif
}
#define FLASHUPDATE_UPDATEMODE_OPTION_COUNT 2
const CMenuOptionChooser::keyval FLASHUPDATE_UPDATEMODE_OPTIONS[FLASHUPDATE_UPDATEMODE_OPTION_COUNT] =
{
{ 0, LOCALE_FLASHUPDATE_UPDATEMODE_MANUAL },
{ 1, LOCALE_FLASHUPDATE_UPDATEMODE_INTERNET }
};
#define SOFTUPDATE_NAME_MODE1_OPTION_COUNT 3
const CMenuOptionChooser::keyval SOFTUPDATE_NAME_MODE1_OPTIONS[SOFTUPDATE_NAME_MODE1_OPTION_COUNT] =
{

View File

@@ -69,7 +69,6 @@ class CUpnpBrowserGui : public CMenuTarget, public CListHelpers
UPnPEntry m_playing_entry;
CUPnPSocket * m_socket;
CFrameBuffer * m_frameBuffer;
bool m_vol_ost;
int m_LastMode;
int m_width;
int m_height;

View File

@@ -593,8 +593,8 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c
hint_height = 0;
fbutton_count = 0;
fbutton_labels = NULL;
fbutton_width = 0;
fbutton_height = 0;
footer_width = 0;
footer_height = 0;
saveScreen_width = 0;
saveScreen_height = 0;
@@ -603,6 +603,7 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c
details_line = NULL;
info_box = NULL;
header = NULL;
footer = NULL;
frameBuffer = CFrameBuffer::getInstance();
mglobal = CMenuGlobal::getInstance(); //create CMenuGlobal instance only here
@@ -664,6 +665,11 @@ void CMenuWidget::ResetModules()
delete info_box;
info_box = NULL;
}
if (footer){
footer->kill();
delete footer;
footer = NULL;
}
}
void CMenuWidget::addItem(CMenuItem* menuItem, const bool defaultselected)
@@ -1093,7 +1099,7 @@ void CMenuWidget::hide()
info_box->kill();
if (details_line)
details_line->hide();
frameBuffer->paintBackgroundBoxRel(x, y, full_width, full_height);
frameBuffer->paintBackgroundBoxRel(x, y, full_width, full_height + footer_height);
//paintHint(-1);
}
paintHint(-1);
@@ -1164,7 +1170,7 @@ void CMenuWidget::calcSize()
}
/* set the max height to 9/10 of usable screen height
debatable, if the callers need a possibility to set this */
height = (frameBuffer->getScreenHeight() - hint_height) / 20 * 18; /* make sure its a multiple of 2 */
height = (frameBuffer->getScreenHeight() - footer_height - hint_height) / 20 * 18; /* make sure its a multiple of 2 */
if (height > ((int)frameBuffer->getScreenHeight() - 2*OFFSET_INNER_MID))
height = frameBuffer->getScreenHeight() - 2*OFFSET_INNER_MID;
@@ -1209,7 +1215,7 @@ void CMenuWidget::calcSize()
width += iconOffset;
if (fbutton_count)
width = std::max(width, fbutton_width);
width = std::max(width, footer_width);
if (width > (int)frameBuffer->getScreenWidth())
width = frameBuffer->getScreenWidth();
@@ -1229,7 +1235,7 @@ void CMenuWidget::calcSize()
scrollbar_width = SCROLLBAR_WIDTH;
full_width = width + scrollbar_width + OFFSET_SHADOW;
full_height = height + fbutton_height + OFFSET_SHADOW + OFFSET_INTER; // hintbox is handled separately
full_height = height + footer_height + OFFSET_SHADOW/* + OFFSET_INTER*/; // hintbox is handled separately
/* + DETAILSLINE_WIDTH for the hintbox connection line
* + center_offset for symmetry
@@ -1273,6 +1279,12 @@ void CMenuWidget::paint()
calcSize();
CVFD::getInstance()->setMode(CVFD::MODE_MENU_UTF8 /*, nameString.c_str()*/);
/* prepare footer:
* We must prepare footer, to get current footer dimensions,
* otherwise footer will paint on wrong position
*/
setFooter(fbutton_labels, fbutton_count);
OnBeforePaint();
// paint head
@@ -1288,16 +1300,17 @@ void CMenuWidget::paint()
header->enableGradientBgCleanUp(savescreen);
header->paint(CC_SAVE_SCREEN_NO);
// paint body and footer shadow
frameBuffer->paintBoxRel(x + OFFSET_SHADOW, y + hheight + OFFSET_SHADOW, width + scrollbar_width, height - hheight + fbutton_height, COL_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM);
// paint body background
frameBuffer->paintBoxRel(x, y + hheight, width + scrollbar_width, height - hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, (fbutton_count ? CORNER_NONE : CORNER_BOTTOM));
PaintBoxRel(x, y+hheight, width + scrollbar_width, height-hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE,
(fbutton_count ? CORNER_NONE : CORNER_BOTTOM), footer && fbutton_count ? CC_SHADOW_RIGHT_CORNER_ALL : CC_SHADOW_ON);
item_start_y = y+hheight;
paintItems();
washidden = false;
if (fbutton_count)
::paintButtons(x, y + height, width + scrollbar_width, fbutton_count, fbutton_labels, width, fbutton_height);
// Finally paint footer if buttons are defined.
if (footer && fbutton_count)
footer->paint(CC_SAVE_SCREEN_NO);
}
void CMenuWidget::setMenuPos(const int& menu_width)
@@ -1306,7 +1319,7 @@ void CMenuWidget::setMenuPos(const int& menu_width)
int scr_y = frameBuffer->getScreenY();
int scr_w = frameBuffer->getScreenWidth();
int scr_h = frameBuffer->getScreenHeight();
int real_h = full_height + hint_height;
int real_h = full_height + footer_height + hint_height;
int x_old = x;
int y_old = y;
//configured positions
@@ -1426,7 +1439,7 @@ void CMenuWidget::saveScreen()
return;
delete[] background;
saveScreen_height = full_height;
saveScreen_height = full_height+footer_height;
saveScreen_width = full_width;
saveScreen_y = y;
saveScreen_x = x;
@@ -1496,7 +1509,7 @@ void CMenuWidget::paintHint(int pos)
int iheight = item->getHeight();
int xpos = x - DETAILSLINE_WIDTH;
int ypos2 = y + full_height;
int ypos2 = y + height + footer_height + OFFSET_SHADOW + OFFSET_INTER;
int iwidth = width + scrollbar_width;
//init details line and infobox dimensions
@@ -1554,10 +1567,21 @@ void CMenuWidget::setFooter(const struct button_label *_fbutton_labels, const in
fbutton_count = _fbutton_count;
fbutton_labels = _fbutton_labels;
fbutton_width = 0;
fbutton_height = 0;
if (fbutton_count)
paintButtons(fbutton_labels, fbutton_count, 0, 0, 0, 0, 0, false, &fbutton_width, &fbutton_height);
if (fbutton_count){
if (!footer)
footer = new CComponentsFooter(x, y + height, width + scrollbar_width, 0, 0, NULL, CC_SHADOW_ON);
footer->setWidth(width + scrollbar_width);
footer->setButtonLabels(fbutton_labels, fbutton_count, 0, width/fbutton_count);
footer_height = footer->getHeight();
footer_width = footer->getWidth();
}else{
if (footer){
delete footer; footer = NULL;
}
footer_width = 0;
footer_height = 0;
}
if (repaint)
paint();
}

View File

@@ -528,6 +528,7 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals
CComponentsInfoBox *info_box;
int hint_height;
CComponentsHeader *header;
CComponentsFooter *footer;
unsigned int saveScreen_width ;
unsigned int saveScreen_height;
unsigned int saveScreen_y;
@@ -561,8 +562,8 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals
bool brief_hints;
bool hint_painted; // is hint painted
int fbutton_width;
int fbutton_height;
int footer_width;
int footer_height;
int fbutton_count;
const struct button_label *fbutton_labels;

View File

@@ -27,7 +27,7 @@
//-----------------------------------------------------------------------------
// General central Definitions <configure!>
//-----------------------------------------------------------------------------
#define HTTPD_VERSION "3.4.0" // Webserver version (can be overloaded)
#define HTTPD_VERSION "3.4.1" // Webserver version (can be overloaded)
#define YHTTPD_VERSION "1.3.2" // Webserver version (Version of yhttpd-core!)
#define IADDR_LOCAL "127.0.0.1" // local IP
#define HTTPD_NAME "yhttpd" // Webserver name (can be overloaded)

View File

@@ -50,6 +50,8 @@
//#include <driver/framebuffer.h>
#include <system/helpers.h>
#include <gui/update_ext.h>
#include <libmd5sum.h>
#define MD5_DIGEST_LENGTH 16
using namespace std;
//NI
@@ -650,6 +652,61 @@ std::string& str_replace(const std::string &search, const std::string &replace,
return text;
}
/*
* ported from:
* https://stackoverflow.com/questions/779875/what-is-the-function-to-replace-string-in-c
*
* You must delete the result if result is non-NULL
*/
const char *cstr_replace(const char *search, const char *replace, const char *text)
{
const char *result; // the return string
const char *ins; // the next insert point
char *tmp; // varies
int len_search; // length of search (the string to remove)
int len_replace; // length of replace (the string to replace search with)
int len_front; // distance between search and end of last search
int count; // number of replacements
// sanity checks and initialization
if (!text || !search)
return NULL;
len_search = strlen(search);
if (len_search == 0)
return NULL; // empty search causes infinite loop during count
if (!replace)
replace = "";
len_replace = strlen(replace);
// count the number of replacements needed
ins = text;
for (count = 0; (tmp = (char*)strstr(ins, search)); ++count)
ins = tmp + len_search;
int len_tmp = strlen(text) + (len_replace - len_search) * count + 1;
tmp = new char[len_tmp];
memset(tmp, '\0', len_tmp);
result = (const char*)tmp;
if (!result)
return NULL;
// first time through the loop, all the variable are set correctly
// from here on,
// tmp points to the end of the result string
// ins points to the next occurrence of search in text
// text points to the remainder of text after "end of search"
while (count--) {
ins = strstr(text, search);
len_front = ins - text;
tmp = strncpy(tmp, text, len_front) + len_front;
tmp = strncpy(tmp, replace, len_replace) + len_replace;
text += len_front + len_search; // move to next "end of search"
}
strncpy(tmp, text, strlen(text));
return result;
}
std::string& htmlEntityDecode(std::string& text)
{
struct decode_table {
@@ -1402,17 +1459,6 @@ std::string Lang2ISO639_1(std::string& lang)
return ret;
}
string readLink(string lnk)
{
char buf[PATH_MAX];
memset(buf, 0, sizeof(buf)-1);
if (readlink(lnk.c_str(), buf, sizeof(buf)-1) != -1)
return (string)buf;
return "";
}
//NI
// returns the pid of the first process found in /proc
int getpidof(const char *process)
{
@@ -1505,6 +1551,20 @@ std::string filehash(const char *file)
return os.str();
}
std::string get_path(const char *path)
{
if(path[0] == '/' && strstr(path,"/var") == 0)
{
std::string varc = "/var";
varc += path;
if(file_exists(varc.c_str()))
return varc;
}
return path;
}
std::string check_var(const char *file)
{
std::string var = "/var";
@@ -1518,3 +1578,13 @@ std::string check_var(const char *file)
return file;
}
string readLink(string lnk)
{
char buf[PATH_MAX];
memset(buf, 0, sizeof(buf)-1);
if (readlink(lnk.c_str(), buf, sizeof(buf)-1) != -1)
return (string)buf;
return "";
}

View File

@@ -70,6 +70,7 @@ std::string cutString(const std::string str, int msgFont, const int width);
std::string strftime(const char *format, const struct tm *tm);
std::string strftime(const char *format, time_t when, bool gm = false);
time_t toEpoch(std::string &date);
const char *cstr_replace(const char *search, const char *replace, const char *text);
std::string& str_replace(const std::string &search, const std::string &replace, std::string &text);
std::string& htmlEntityDecode(std::string& text);
@@ -148,9 +149,9 @@ std::string getJFFS2MountPoint(int mtdPos);
std::string Lang2ISO639_1(std::string& lang);
std::string readLink(std::string lnk);
//NI
int getpidof(const char *process);
std::string filehash(const char * file);
std::string get_path(const char * path);
std::string check_var(const char * file);
inline bool file_exists(const std::string file) { return file_exists(file.c_str()); }

View File

@@ -78,8 +78,6 @@ class CServiceScan : public OpenThreads::Thread
uint32_t failed_transponders;
unsigned short cable_nid;
short curr_sat;
transponder_list_t scantransponders; // list to scan
transponder_list_t scanedtransponders; // successfully scanned
transponder_list_t failedtransponders; // failed to tune

View File

@@ -38,7 +38,6 @@ class CBat : public OpenThreads::Thread
{
private:
int dmxnum;
bool cable;
t_satellite_position satellitePosition;
freq_id_t freq_id;