diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2007-04-30 21:39:35 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2007-04-30 21:39:35 +0000 |
| commit | fa458113395a4b8da3954b656dbe6c55b30f224a (patch) | |
| tree | ab535494fa74ba597a83053c2619711d7d263b7a | |
| parent | 46f28210d3fc839f621900e932f650e197688ce5 (diff) | |
| download | enigma2-fa458113395a4b8da3954b656dbe6c55b30f224a.tar.gz enigma2-fa458113395a4b8da3954b656dbe6c55b30f224a.zip | |
send write error messages down to service events
| -rw-r--r-- | lib/base/filepush.cpp | 2 | ||||
| -rw-r--r-- | lib/dvb/demux.cpp | 11 | ||||
| -rw-r--r-- | lib/dvb/demux.h | 1 | ||||
| -rw-r--r-- | lib/service/iservice.h | 4 | ||||
| -rw-r--r-- | lib/service/servicedvbrecord.cpp | 15 | ||||
| -rw-r--r-- | lib/service/servicedvbrecord.h | 4 |
6 files changed, 35 insertions, 2 deletions
diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 92c580c2..76e01ea0 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -61,6 +61,8 @@ void eFilePushThread::thread() { if (errno == EINTR) continue; + eDebug("eFilePushThread WRITE ERROR"); + sendEvent(evtWriteError); break; // ... we would stop the thread } diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 0fbd6fbd..22b09ffe 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -443,6 +443,7 @@ eDVBTSRecorder::eDVBTSRecorder(eDVBDemux *demux): m_demux(demux) m_running = 0; m_target_fd = -1; m_thread = new eDVBRecordFileThread(); + CONNECT(m_thread->m_event, eDVBTSRecorder::filepushEvent); #ifndef HAVE_ADD_PID m_demux->m_dvr_busy = 1; #endif @@ -648,3 +649,13 @@ void eDVBTSRecorder::stopPID(int pid) #endif m_pids[pid] = -1; } + +void eDVBTSRecorder::filepushEvent(int event) +{ + switch (event) + { + case eFilePushThread::evtWriteError: + m_event(eventWriteError); + break; + } +} diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index ee731ef8..e3759331 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -109,6 +109,7 @@ private: void stopPID(int pid); eDVBRecordFileThread *m_thread; + void filepushEvent(int event); std::map<int,int> m_pids; Signal1<void,int> m_event; diff --git a/lib/service/iservice.h b/lib/service/iservice.h index df4e302f..b0042735 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -768,8 +768,8 @@ public: evRecordRunning, evRecordStopped, evNewProgramInfo, - evRecordFailed - /*evDiskFull*/ + evRecordFailed, + evRecordWriteError }; enum { NoError=0, diff --git a/lib/service/servicedvbrecord.cpp b/lib/service/servicedvbrecord.cpp index acd4a823..b34dad10 100644 --- a/lib/service/servicedvbrecord.cpp +++ b/lib/service/servicedvbrecord.cpp @@ -207,6 +207,8 @@ int eDVBServiceRecord::doRecord() } m_record->setTargetFD(fd); m_record->setTargetFilename(m_filename.c_str()); + m_record->connectEvent(slot(*this, &eDVBServiceRecord::recordEvent), m_con_record_event); + m_target_fd = fd; } @@ -374,3 +376,16 @@ PyObject *eDVBServiceRecord::getStreamingData() return r; } +void eDVBServiceRecord::recordEvent(int event) +{ + switch (event) + { + case iDVBTSRecorder::eventWriteError: + eWarning("[eDVBServiceRecord] record write error"); + stop(); + m_event((iRecordableService*)this, evRecordWriteError); + return; + default: + eDebug("unhandled record event %d", event); + } +} diff --git a/lib/service/servicedvbrecord.h b/lib/service/servicedvbrecord.h index 018e83f9..dcce3388 100644 --- a/lib/service/servicedvbrecord.h +++ b/lib/service/servicedvbrecord.h @@ -38,6 +38,7 @@ private: eServiceReferenceDVB m_ref; ePtr<iDVBTSRecorder> m_record; + ePtr<eConnection> m_con_record_event; int m_recording, m_tuned, m_error; std::set<int> m_pids_active; @@ -51,6 +52,9 @@ private: /* events */ void serviceEvent(int event); Signal2<void,iRecordableService*,int> m_event; + + /* recorder events */ + void recordEvent(int event); }; #endif |
