aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2007-04-30 21:39:35 +0000
committerFelix Domke <tmbinc@elitedvb.net>2007-04-30 21:39:35 +0000
commitfa458113395a4b8da3954b656dbe6c55b30f224a (patch)
treeab535494fa74ba597a83053c2619711d7d263b7a
parent46f28210d3fc839f621900e932f650e197688ce5 (diff)
downloadenigma2-fa458113395a4b8da3954b656dbe6c55b30f224a.tar.gz
enigma2-fa458113395a4b8da3954b656dbe6c55b30f224a.zip
send write error messages down to service events
-rw-r--r--lib/base/filepush.cpp2
-rw-r--r--lib/dvb/demux.cpp11
-rw-r--r--lib/dvb/demux.h1
-rw-r--r--lib/service/iservice.h4
-rw-r--r--lib/service/servicedvbrecord.cpp15
-rw-r--r--lib/service/servicedvbrecord.h4
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