mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-09-08 06:08:36 +02:00
Merge branch 'dvbsi++' of coolstreamtech.de:cst-private-neutrino into neutrino-apollo
This commit is contained in:
@@ -1648,6 +1648,8 @@ streaminfo.resolution Resolution
|
|||||||
streaminfo.signal Receipt signal
|
streaminfo.signal Receipt signal
|
||||||
streaming.busy One or several recording processes are active.\nIf you encounter this message and no recording is active, please restart Neutrino-HD.
|
streaming.busy One or several recording processes are active.\nIf you encounter this message and no recording is active, please restart Neutrino-HD.
|
||||||
streaming.dir_not_writable The recording directory is not writable.\nRecording will not work.
|
streaming.dir_not_writable The recording directory is not writable.\nRecording will not work.
|
||||||
|
streaming.overflow Record buffer overflow, consider to stop some records
|
||||||
|
streaming.slow System/hdd too slow, consider to stop some records
|
||||||
streaming.write_error The recording was aborted,\nsince an error occured during the writing process.
|
streaming.write_error The recording was aborted,\nsince an error occured during the writing process.
|
||||||
stringinput.caps caps / no caps
|
stringinput.caps caps / no caps
|
||||||
stringinput.clear clear all
|
stringinput.clear clear all
|
||||||
@@ -1797,6 +1799,8 @@ videomenu.videoformat_149 14:9
|
|||||||
videomenu.videoformat_169 16:9
|
videomenu.videoformat_169 16:9
|
||||||
videomenu.videoformat_43 4:3
|
videomenu.videoformat_43 4:3
|
||||||
videomenu.videomode Digital video mode
|
videomenu.videomode Digital video mode
|
||||||
|
wizard.initial_settings Initial settings found
|
||||||
|
wizard.install_settings Do you want to install channels for Astra 19.2°E ?
|
||||||
wizard.welcome_head Welcome to the Setup Wizard
|
wizard.welcome_head Welcome to the Setup Wizard
|
||||||
wizard.welcome_text Next steps will guide you through initial installation of the device.\nImportant: Your CoolStream set-top box can be conveniently controlled\nwith the web interface for timer management or live TV on the Web browser.\nDo not make it accessible to untrusted networks!\nDo you want to continue?
|
wizard.welcome_text Next steps will guide you through initial installation of the device.\nImportant: Your CoolStream set-top box can be conveniently controlled\nwith the web interface for timer management or live TV on the Web browser.\nDo not make it accessible to untrusted networks!\nDo you want to continue?
|
||||||
word.from from
|
word.from from
|
||||||
|
@@ -129,6 +129,13 @@ void CRecordInstance::WaitRecMsg(time_t StartTime, time_t WaitTime)
|
|||||||
usleep(100000);
|
usleep(100000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CRecordInstance::GetStatus()
|
||||||
|
{
|
||||||
|
if (record)
|
||||||
|
return record->GetStatus();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
record_error_msg_t CRecordInstance::Start(CZapitChannel * channel)
|
record_error_msg_t CRecordInstance::Start(CZapitChannel * channel)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
@@ -642,8 +649,9 @@ void CRecordInstance::GetRecordString(std::string &str)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char stime[15];
|
char stime[15];
|
||||||
|
int err = GetStatus();
|
||||||
strftime(stime, sizeof(stime), "%H:%M:%S ", localtime(&start_time));
|
strftime(stime, sizeof(stime), "%H:%M:%S ", localtime(&start_time));
|
||||||
str = stime + channel->getName() + ": " + GetEpgTitle();
|
str = stime + channel->getName() + ": " + GetEpgTitle() + ((err & REC_STATUS_OVERFLOW) ? " [!]" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
@@ -660,6 +668,9 @@ CRecordManager::CRecordManager()
|
|||||||
nextmap.clear();
|
nextmap.clear();
|
||||||
autoshift = false;
|
autoshift = false;
|
||||||
shift_timer = 0;
|
shift_timer = 0;
|
||||||
|
check_timer = 0;
|
||||||
|
error_display = true;
|
||||||
|
warn_display = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CRecordManager::~CRecordManager()
|
CRecordManager::~CRecordManager()
|
||||||
@@ -891,8 +902,15 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons
|
|||||||
|
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
|
|
||||||
if (error_msg == RECORD_OK)
|
if (error_msg == RECORD_OK) {
|
||||||
|
if (check_timer == 0)
|
||||||
|
check_timer = g_RCInput->addTimer(5*1000*1000, false);
|
||||||
|
|
||||||
|
/* set flag to show record error if any */
|
||||||
|
error_display = true;
|
||||||
|
warn_display = true;
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
printf("[recordmanager] %s: error code: %d\n", __FUNCTION__, error_msg);
|
printf("[recordmanager] %s: error code: %d\n", __FUNCTION__, error_msg);
|
||||||
/* RestoreNeutrino must be called always if record start failed */
|
/* RestoreNeutrino must be called always if record start failed */
|
||||||
@@ -1115,6 +1133,8 @@ void CRecordManager::StopPostProcess()
|
|||||||
RestoreNeutrino();
|
RestoreNeutrino();
|
||||||
StartNextRecording();
|
StartNextRecording();
|
||||||
RunStopScript();
|
RunStopScript();
|
||||||
|
if(!RecordingStatus())
|
||||||
|
g_RCInput->killTimer(check_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CRecordManager::Update(const t_channel_id channel_id)
|
bool CRecordManager::Update(const t_channel_id channel_id)
|
||||||
@@ -1147,6 +1167,27 @@ int CRecordManager::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data
|
|||||||
StartAutoRecord();
|
StartAutoRecord();
|
||||||
return messages_return::handled;
|
return messages_return::handled;
|
||||||
}
|
}
|
||||||
|
else if(data == check_timer) {
|
||||||
|
if(CNeutrinoApp::getInstance()->getMode() != NeutrinoMessages::mode_standby) {
|
||||||
|
mutex.lock();
|
||||||
|
int have_err = 0;
|
||||||
|
for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++)
|
||||||
|
have_err |= it->second->GetStatus();
|
||||||
|
mutex.unlock();
|
||||||
|
//printf("%s: check status: show err %d warn %d have_err %d\n", __FUNCTION__, error_display, warn_display, have_err); //FIXME
|
||||||
|
if (have_err) {
|
||||||
|
if ((have_err & REC_STATUS_OVERFLOW) && error_display) {
|
||||||
|
error_display = false;
|
||||||
|
warn_display = false;
|
||||||
|
DisplayErrorMessage(g_Locale->getText(LOCALE_STREAMING_OVERFLOW));
|
||||||
|
} else if (warn_display) {
|
||||||
|
warn_display = false;
|
||||||
|
DisplayErrorMessage(g_Locale->getText(LOCALE_STREAMING_SLOW));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return messages_return::handled;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return messages_return::unhandled;
|
return messages_return::unhandled;
|
||||||
}
|
}
|
||||||
@@ -1418,7 +1459,7 @@ bool CRecordManager::ShowMenu(void)
|
|||||||
|
|
||||||
bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid)
|
bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid)
|
||||||
{
|
{
|
||||||
int recording_id = 0;
|
//int recording_id = 0;
|
||||||
std::string title;
|
std::string title;
|
||||||
CRecordInstance * inst;
|
CRecordInstance * inst;
|
||||||
|
|
||||||
@@ -1429,7 +1470,7 @@ bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid)
|
|||||||
inst = FindInstance(channel_id);
|
inst = FindInstance(channel_id);
|
||||||
|
|
||||||
if(inst) {
|
if(inst) {
|
||||||
recording_id = inst->GetRecordingId();
|
//recording_id = inst->GetRecordingId();
|
||||||
inst->GetRecordString(title);
|
inst->GetRecordString(title);
|
||||||
}
|
}
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
@@ -1438,7 +1479,17 @@ bool CRecordManager::AskToStop(const t_channel_id channel_id, const int recid)
|
|||||||
|
|
||||||
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, title.c_str(),
|
if(ShowMsgUTF(LOCALE_SHUTDOWN_RECODING_QUERY, title.c_str(),
|
||||||
CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) {
|
CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) {
|
||||||
|
#if 0
|
||||||
g_Timerd->stopTimerEvent(recording_id);
|
g_Timerd->stopTimerEvent(recording_id);
|
||||||
|
#endif
|
||||||
|
mutex.lock();
|
||||||
|
if (recid)
|
||||||
|
inst = FindInstanceID(recid);
|
||||||
|
else
|
||||||
|
inst = FindInstance(channel_id);
|
||||||
|
if (inst)
|
||||||
|
StopInstance(inst);
|
||||||
|
mutex.unlock();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@@ -124,6 +124,7 @@ class CRecordInstance
|
|||||||
bool Timeshift() { return autoshift; };
|
bool Timeshift() { return autoshift; };
|
||||||
int tshift_mode;
|
int tshift_mode;
|
||||||
void SetStopMessage(const char* text) {rec_stop_msg = text;} ;
|
void SetStopMessage(const char* text) {rec_stop_msg = text;} ;
|
||||||
|
int GetStatus();
|
||||||
|
|
||||||
CFrontend * frontend;
|
CFrontend * frontend;
|
||||||
};
|
};
|
||||||
@@ -150,6 +151,9 @@ class CRecordManager : public CMenuTarget /*, public CChangeObserver*/
|
|||||||
int last_mode;
|
int last_mode;
|
||||||
bool autoshift;
|
bool autoshift;
|
||||||
uint32_t shift_timer;
|
uint32_t shift_timer;
|
||||||
|
uint32_t check_timer;
|
||||||
|
bool error_display;
|
||||||
|
bool warn_display;
|
||||||
|
|
||||||
OpenThreads::Mutex mutex;
|
OpenThreads::Mutex mutex;
|
||||||
static OpenThreads::Mutex sm;
|
static OpenThreads::Mutex sm;
|
||||||
|
@@ -393,6 +393,7 @@ bool CMovieInfo::parseXmlTree(char */*text*/, MI_MOVIE_INFO * /*movie_info*/)
|
|||||||
XML_GET_DATA_STRING(xam1, MI_XML_TAG_PRODUCT_COUNTRY, movie_info->productionCountry);
|
XML_GET_DATA_STRING(xam1, MI_XML_TAG_PRODUCT_COUNTRY, movie_info->productionCountry);
|
||||||
//if(!strcmp(xam1->GetType(), MI_XML_TAG_PRODUCT_COUNTRY)) if(xam1->GetData() != NULL)strncpy(movie_info->productionCountry, xam1->GetData(),4);
|
//if(!strcmp(xam1->GetType(), MI_XML_TAG_PRODUCT_COUNTRY)) if(xam1->GetData() != NULL)strncpy(movie_info->productionCountry, xam1->GetData(),4);
|
||||||
XML_GET_DATA_INT(xam1, MI_XML_TAG_PRODUCT_DATE, movie_info->productionDate);
|
XML_GET_DATA_INT(xam1, MI_XML_TAG_PRODUCT_DATE, movie_info->productionDate);
|
||||||
|
XML_GET_DATA_INT(xam1, MI_XML_TAG_QUALITIY, movie_info->quality);
|
||||||
XML_GET_DATA_INT(xam1, MI_XML_TAG_QUALITY, movie_info->quality);
|
XML_GET_DATA_INT(xam1, MI_XML_TAG_QUALITY, movie_info->quality);
|
||||||
XML_GET_DATA_INT(xam1, MI_XML_TAG_PARENTAL_LOCKAGE, movie_info->parentalLockAge);
|
XML_GET_DATA_INT(xam1, MI_XML_TAG_PARENTAL_LOCKAGE, movie_info->parentalLockAge);
|
||||||
XML_GET_DATA_INT(xam1, MI_XML_TAG_DATE_OF_LAST_PLAY, movie_info->dateOfLastPlay);
|
XML_GET_DATA_INT(xam1, MI_XML_TAG_DATE_OF_LAST_PLAY, movie_info->dateOfLastPlay);
|
||||||
@@ -673,6 +674,7 @@ bool CMovieInfo::parseXmlQuickFix(char *text, MI_MOVIE_INFO * movie_info)
|
|||||||
GET_XML_DATA_STRING(text, pos, MI_XML_TAG_PRODUCT_COUNTRY, movie_info->productionCountry)
|
GET_XML_DATA_STRING(text, pos, MI_XML_TAG_PRODUCT_COUNTRY, movie_info->productionCountry)
|
||||||
GET_XML_DATA_INT(text, pos, MI_XML_TAG_PRODUCT_DATE, movie_info->productionDate)
|
GET_XML_DATA_INT(text, pos, MI_XML_TAG_PRODUCT_DATE, movie_info->productionDate)
|
||||||
GET_XML_DATA_INT(text, pos, MI_XML_TAG_PARENTAL_LOCKAGE, movie_info->parentalLockAge)
|
GET_XML_DATA_INT(text, pos, MI_XML_TAG_PARENTAL_LOCKAGE, movie_info->parentalLockAge)
|
||||||
|
GET_XML_DATA_INT(text, pos, MI_XML_TAG_QUALITIY, movie_info->quality)
|
||||||
GET_XML_DATA_INT(text, pos, MI_XML_TAG_QUALITY, movie_info->quality)
|
GET_XML_DATA_INT(text, pos, MI_XML_TAG_QUALITY, movie_info->quality)
|
||||||
GET_XML_DATA_INT(text, pos, MI_XML_TAG_DATE_OF_LAST_PLAY, movie_info->dateOfLastPlay)
|
GET_XML_DATA_INT(text, pos, MI_XML_TAG_DATE_OF_LAST_PLAY, movie_info->dateOfLastPlay)
|
||||||
if (strncmp(&text[pos], MI_XML_TAG_AUDIOPIDS, sizeof(MI_XML_TAG_AUDIOPIDS) - 1) == 0)
|
if (strncmp(&text[pos], MI_XML_TAG_AUDIOPIDS, sizeof(MI_XML_TAG_AUDIOPIDS) - 1) == 0)
|
||||||
|
@@ -86,7 +86,8 @@
|
|||||||
#define MI_XML_TAG_LENGTH "length"
|
#define MI_XML_TAG_LENGTH "length"
|
||||||
#define MI_XML_TAG_PRODUCT_COUNTRY "productioncountry"
|
#define MI_XML_TAG_PRODUCT_COUNTRY "productioncountry"
|
||||||
#define MI_XML_TAG_PRODUCT_DATE "productiondate"
|
#define MI_XML_TAG_PRODUCT_DATE "productiondate"
|
||||||
#define MI_XML_TAG_QUALITY "qualitiy"
|
#define MI_XML_TAG_QUALITY "quality"
|
||||||
|
#define MI_XML_TAG_QUALITIY "qualitiy" // just to keep compatibility to older xml-files
|
||||||
#define MI_XML_TAG_PARENTAL_LOCKAGE "parentallockage"
|
#define MI_XML_TAG_PARENTAL_LOCKAGE "parentallockage"
|
||||||
#define MI_XML_TAG_BOOKMARK "bookmark"
|
#define MI_XML_TAG_BOOKMARK "bookmark"
|
||||||
#define MI_XML_TAG_BOOKMARK_START "bookmarkstart"
|
#define MI_XML_TAG_BOOKMARK_START "bookmarkstart"
|
||||||
|
@@ -46,6 +46,8 @@
|
|||||||
#include "osd_setup.h"
|
#include "osd_setup.h"
|
||||||
#include "osdlang_setup.h"
|
#include "osdlang_setup.h"
|
||||||
#include "scan_setup.h"
|
#include "scan_setup.h"
|
||||||
|
#include <zapit/zapit.h>
|
||||||
|
#include <system/helpers.h>
|
||||||
|
|
||||||
#include <gui/widget/messagebox.h>
|
#include <gui/widget/messagebox.h>
|
||||||
|
|
||||||
@@ -103,6 +105,17 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/)
|
|||||||
res = CScanSetup::getInstance()->exec(NULL, "");
|
res = CScanSetup::getInstance()->exec(NULL, "");
|
||||||
CScanSetup::getInstance()->setWizardMode(CScanSetup::SCAN_SETUP_MODE_WIZARD_NO);
|
CScanSetup::getInstance()->setWizardMode(CScanSetup::SCAN_SETUP_MODE_WIZARD_NO);
|
||||||
}
|
}
|
||||||
|
bool init_settings = file_exists("/var/tuxbox/config/initial/");
|
||||||
|
if(init_settings && (res != menu_return::RETURN_EXIT_ALL))
|
||||||
|
{
|
||||||
|
if (ShowMsgUTF(LOCALE_WIZARD_INITIAL_SETTINGS, g_Locale->getText(LOCALE_WIZARD_INSTALL_SETTINGS),
|
||||||
|
CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) {
|
||||||
|
system("/bin/cp /var/tuxbox/config/initial/* /var/tuxbox/config/zapit/");
|
||||||
|
CFEManager::getInstance()->loadSettings();
|
||||||
|
CFEManager::getInstance()->saveSettings();
|
||||||
|
CZapit::getInstance()->PrepareChannels();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1675,6 +1675,8 @@ typedef enum
|
|||||||
LOCALE_STREAMINFO_SIGNAL,
|
LOCALE_STREAMINFO_SIGNAL,
|
||||||
LOCALE_STREAMING_BUSY,
|
LOCALE_STREAMING_BUSY,
|
||||||
LOCALE_STREAMING_DIR_NOT_WRITABLE,
|
LOCALE_STREAMING_DIR_NOT_WRITABLE,
|
||||||
|
LOCALE_STREAMING_OVERFLOW,
|
||||||
|
LOCALE_STREAMING_SLOW,
|
||||||
LOCALE_STREAMING_WRITE_ERROR,
|
LOCALE_STREAMING_WRITE_ERROR,
|
||||||
LOCALE_STRINGINPUT_CAPS,
|
LOCALE_STRINGINPUT_CAPS,
|
||||||
LOCALE_STRINGINPUT_CLEAR,
|
LOCALE_STRINGINPUT_CLEAR,
|
||||||
@@ -1824,6 +1826,8 @@ typedef enum
|
|||||||
LOCALE_VIDEOMENU_VIDEOFORMAT_169,
|
LOCALE_VIDEOMENU_VIDEOFORMAT_169,
|
||||||
LOCALE_VIDEOMENU_VIDEOFORMAT_43,
|
LOCALE_VIDEOMENU_VIDEOFORMAT_43,
|
||||||
LOCALE_VIDEOMENU_VIDEOMODE,
|
LOCALE_VIDEOMENU_VIDEOMODE,
|
||||||
|
LOCALE_WIZARD_INITIAL_SETTINGS,
|
||||||
|
LOCALE_WIZARD_INSTALL_SETTINGS,
|
||||||
LOCALE_WIZARD_WELCOME_HEAD,
|
LOCALE_WIZARD_WELCOME_HEAD,
|
||||||
LOCALE_WIZARD_WELCOME_TEXT,
|
LOCALE_WIZARD_WELCOME_TEXT,
|
||||||
LOCALE_WORD_FROM,
|
LOCALE_WORD_FROM,
|
||||||
|
@@ -1675,6 +1675,8 @@ const char * locale_real_names[] =
|
|||||||
"streaminfo.signal",
|
"streaminfo.signal",
|
||||||
"streaming.busy",
|
"streaming.busy",
|
||||||
"streaming.dir_not_writable",
|
"streaming.dir_not_writable",
|
||||||
|
"streaming.overflow",
|
||||||
|
"streaming.slow",
|
||||||
"streaming.write_error",
|
"streaming.write_error",
|
||||||
"stringinput.caps",
|
"stringinput.caps",
|
||||||
"stringinput.clear",
|
"stringinput.clear",
|
||||||
@@ -1824,6 +1826,8 @@ const char * locale_real_names[] =
|
|||||||
"videomenu.videoformat_169",
|
"videomenu.videoformat_169",
|
||||||
"videomenu.videoformat_43",
|
"videomenu.videoformat_43",
|
||||||
"videomenu.videomode",
|
"videomenu.videomode",
|
||||||
|
"wizard.initial_settings",
|
||||||
|
"wizard.install_settings",
|
||||||
"wizard.welcome_head",
|
"wizard.welcome_head",
|
||||||
"wizard.welcome_text",
|
"wizard.welcome_text",
|
||||||
"word.from",
|
"word.from",
|
||||||
|
@@ -2048,6 +2048,8 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg)
|
|||||||
|
|
||||||
videoDecoder->SetAudioHandle(audioDecoder->GetHandle());
|
videoDecoder->SetAudioHandle(audioDecoder->GetHandle());
|
||||||
|
|
||||||
|
/* set initial volume with 100% */
|
||||||
|
SetVolumePercent(100);
|
||||||
#ifdef USE_VBI
|
#ifdef USE_VBI
|
||||||
videoDecoder->OpenVBI(1);
|
videoDecoder->OpenVBI(1);
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user