Fix event loading glitch, and 0.0 smiley resmed glitch

This commit is contained in:
Mark Watkins 2014-09-17 16:12:38 +10:00
parent 239c3096d7
commit 3558b69065
17 changed files with 78 additions and 52 deletions

View File

@ -306,7 +306,7 @@ void gFlagsLine::paint(QPainter &painter, gGraph &w, const QRegion &region)
continue; continue;
} }
drift = ((*s)->machine()->type() == MT_CPAP) ? clockdrift : 0; drift = ((*s)->type() == MT_CPAP) ? clockdrift : 0;
cei = (*s)->eventlist.find(m_code); cei = (*s)->eventlist.find(m_code);

View File

@ -545,8 +545,11 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
dot.visible = false; dot.visible = false;
} }
Session * sess = nullptr;
ChannelID code;
for (int gi = 0; gi < m_codes.size(); gi++) { for (int gi = 0; gi < m_codes.size(); gi++) {
ChannelID code = m_codes[gi]; code = m_codes[gi];
schema::Channel &chan = schema::channel[code]; schema::Channel &chan = schema::channel[code];
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -579,14 +582,14 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
// For each session... // For each session...
int daysize = m_day->size(); int daysize = m_day->size();
for (int svi = 0; svi < daysize; svi++) { for (int svi = 0; svi < daysize; svi++) {
Session *sess = (*m_day)[svi]; sess = (*m_day)[svi];
if (!sess) { if (!sess) {
qWarning() << "gLineChart::Plot() nullptr Session Record.. This should not happen"; qWarning() << "gLineChart::Plot() nullptr Session Record.. This should not happen";
continue; continue;
} }
drift = (sess->machine()->type() == MT_CPAP) ? clockdrift : 0; drift = (sess->type() == MT_CPAP) ? clockdrift : 0;
if (!sess->enabled()) { continue; } if (!sess->enabled()) { continue; }
@ -1042,7 +1045,7 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
for (int i=0; i < dotlinesize; i++) { for (int i=0; i < dotlinesize; i++) {
DottedLine & dot = m_dotlines[i]; DottedLine & dot = m_dotlines[i];
if (!dot.visible) continue; if (!dot.visible) continue;
ChannelID code = dot.code; code = dot.code;
schema::Channel &chan = schema::channel[code]; schema::Channel &chan = schema::channel[code];
int linewidth = (10 * ratioX); int linewidth = (10 * ratioX);
QRectF rec(0, rect.top()-3, 0,0); QRectF rec(0, rect.top()-3, 0,0);
@ -1084,8 +1087,8 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
// Calculate the CPAP session time. // Calculate the CPAP session time.
for (QList<Session *>::iterator s = m_day->begin(); s != m_day->end(); s++) { for (QList<Session *>::iterator s = m_day->begin(); s != m_day->end(); s++) {
Session * sess = *s; sess = *s;
if (!sess->enabled() || (sess->machine()->type() != MT_CPAP)) continue; if (!sess->enabled() || (sess->type() != MT_CPAP)) continue;
first = sess->first(); first = sess->first();
last = sess->last(); last = sess->last();
@ -1127,10 +1130,7 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
bool blockhover = false; bool blockhover = false;
for (fit = flags.begin(); fit != flags.end(); ++fit) { for (fit = flags.begin(); fit != flags.end(); ++fit) {
ChannelID code = fit.key(); code = fit.key();
if (code == 4098) {
int i=5; Q_UNUSED(i);
}
if ((!m_flags_enabled[code]) || (!m_day->channelExists(code))) continue; if ((!m_flags_enabled[code]) || (!m_day->channelExists(code))) continue;
gLineOverlayBar * lob = fit.value(); gLineOverlayBar * lob = fit.value();
lob->setBlockHover(blockhover); lob->setBlockHover(blockhover);
@ -1143,8 +1143,8 @@ void gLineChart::paint(QPainter &painter, gGraph &w, const QRegion &region)
} }
} }
} }
if (m_codes[0] == OXI_SPO2Drop) { // if (m_codes[0] == OXI_SPO2Drop) {
} // }
if (m_codes[0] == CPAP_FlowRate) { if (m_codes[0] == CPAP_FlowRate) {
float hours = time / 3600.0; float hours = time / 3600.0;
int h = time / 3600; int h = time / 3600;

View File

@ -96,7 +96,7 @@ void gLineOverlayBar::paint(QPainter &painter, gGraph &w, const QRegion &region)
if (evlist.size() == 0) { continue; } if (evlist.size() == 0) { continue; }
drift = ((*s)->machine()->type() == MT_CPAP) ? clockdrift : 0; drift = ((*s)->type() == MT_CPAP) ? clockdrift : 0;
// Could loop through here, but nowhere uses more than one yet.. // Could loop through here, but nowhere uses more than one yet..
for (int k = 0; k < evlist.size(); k++) { for (int k = 0; k < evlist.size(); k++) {

View File

@ -870,7 +870,7 @@ void gSessionTimesChart::paint(QPainter &painter, gGraph &graph, const QRegion &
for (si = day->begin(); si != day->end(); ++si) { for (si = day->begin(); si != day->end(); ++si) {
Session *sess = (*si); Session *sess = (*si);
if (!sess->enabled() || (sess->machine()->type() != m_machtype)) continue; if (!sess->enabled() || (sess->type() != m_machtype)) continue;
// Look at mask on/off slices... // Look at mask on/off slices...
int slize = sess->m_slices.size(); int slize = sess->m_slices.size();

View File

@ -861,7 +861,7 @@ void FlowParser::flagEvents()
void calcRespRate(Session *session, FlowParser *flowparser) void calcRespRate(Session *session, FlowParser *flowparser)
{ {
if (session->machine()->type() != MT_CPAP) { return; } if (session->type() != MT_CPAP) { return; }
// if (session->machine()->loaderName() != STR_MACH_PRS1) return; // if (session->machine()->loaderName() != STR_MACH_PRS1) return;
@ -1001,7 +1001,7 @@ int calcAHIGraph(Session *session)
bool zeroreset = p_profile->cpap->AHIReset(); bool zeroreset = p_profile->cpap->AHIReset();
if (session->machine()->type() != MT_CPAP) { return 0; } if (session->type() != MT_CPAP) { return 0; }
bool hasahi = session->eventlist.contains(CPAP_AHI); bool hasahi = session->eventlist.contains(CPAP_AHI);
bool hasrdi = session->eventlist.contains(CPAP_RDI); bool hasrdi = session->eventlist.contains(CPAP_RDI);
@ -1746,7 +1746,7 @@ bool mmaskFirst = true;
int calcLeaks(Session *session) int calcLeaks(Session *session)
{ {
if (session->machine()->type() != MT_CPAP) { return 0; } if (session->type() != MT_CPAP) { return 0; }
if (session->eventlist.contains(CPAP_Leak)) { return 0; } // abort if already there if (session->eventlist.contains(CPAP_Leak)) { return 0; } // abort if already there

View File

@ -51,7 +51,7 @@ Session * Day::firstSession(MachineType type)
for (int i=0; i<sessions.size(); i++) { for (int i=0; i<sessions.size(); i++) {
Session * sess = sessions.at(i); Session * sess = sessions.at(i);
if (!sess->enabled()) continue; if (!sess->enabled()) continue;
if (sess->machine()->type() == type) { if (sess->type() == type) {
return sess; return sess;
} }
} }
@ -86,7 +86,7 @@ QList<Session *> Day::getSessions(MachineType type, bool ignore_enabled)
if (!ignore_enabled && !(*it)->enabled()) if (!ignore_enabled && !(*it)->enabled())
continue; continue;
if ((*it)->machine()->type() == type) if ((*it)->type() == type)
newlist.append((*it)); newlist.append((*it));
} }
@ -109,7 +109,7 @@ void Day::addSession(Session *s)
{ {
invalidate(); invalidate();
Q_ASSERT(s!=nullptr); Q_ASSERT(s!=nullptr);
QHash<MachineType, Machine *>::iterator mi = machines.find(s->machine()->type()); QHash<MachineType, Machine *>::iterator mi = machines.find(s->type());
if (mi != machines.end()) { if (mi != machines.end()) {
if (mi.value() != s->machine()) { if (mi.value() != s->machine()) {
@ -117,7 +117,7 @@ void Day::addSession(Session *s)
return; return;
} }
} else { } else {
machines[s->machine()->type()] = s->machine(); machines[s->type()] = s->machine();
} }
sessions.push_back(s); sessions.push_back(s);
@ -717,7 +717,7 @@ qint64 Day::total_time()
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session &sess = *(*it); Session &sess = *(*it);
if (sess.enabled() && (sess.machine()->type() != MT_JOURNAL)) { if (sess.enabled() && (sess.type() != MT_JOURNAL)) {
first = sess.first(); first = sess.first();
last = sess.last(); last = sess.last();
@ -778,7 +778,7 @@ qint64 Day::total_time(MachineType type)
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session &sess = *(*it); Session &sess = *(*it);
if ((sess.machine()->type() == type) && sess.enabled()) { if ((sess.type() == type) && sess.enabled()) {
first = sess.first(); first = sess.first();
last = sess.last(); last = sess.last();
@ -844,7 +844,7 @@ bool Day::hasEnabledSessions(MachineType type)
QList<Session *>::iterator end = sessions.end(); QList<Session *>::iterator end = sessions.end();
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
if (((*it)->machine()->type() == type) && (*it)->enabled()) { if (((*it)->type() == type) && (*it)->enabled()) {
return true; return true;
} }
} }
@ -979,7 +979,7 @@ bool Day::hasData(ChannelID code, SummaryType type)
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session & sess = *(*it); Session & sess = *(*it);
if (sess.machine()->type() == MT_JOURNAL) continue; if (sess.type() == MT_JOURNAL) continue;
if (sess.enabled()) { if (sess.enabled()) {
switch (type) { switch (type) {
@ -1218,16 +1218,17 @@ bool Day::channelHasData(ChannelID id)
Session & sess = *(*it); Session & sess = *(*it);
if (sess.enabled()) { if (sess.enabled()) {
if (sess.channelExists(id)) { if (sess.m_cnt.contains(id)) {
return true;
}
if (sess.eventlist.contains(id)) {
return true; return true;
} }
if (sess.m_valuesummary.contains(id)) { if (sess.m_valuesummary.contains(id)) {
return true; return true;
} }
if (sess.m_cnt.contains(id)) {
return true;
}
} }
} }
@ -1236,10 +1237,10 @@ bool Day::channelHasData(ChannelID id)
void Day::OpenEvents() void Day::OpenEvents()
{ {
if (d_events_open) // if (d_events_open)
return; // return;
Q_FOREACH(Session * session, sessions) { Q_FOREACH(Session * session, sessions) {
if (session->machine()->type() != MT_JOURNAL) if (session->type() != MT_JOURNAL)
session->OpenEvents(); session->OpenEvents();
} }
d_events_open = true; d_events_open = true;
@ -1325,7 +1326,7 @@ qint64 Day::first(MachineType type)
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session & sess = *(*it); Session & sess = *(*it);
if ((sess.machine()->type() == type) && sess.enabled()) { if ((sess.type() == type) && sess.enabled()) {
tmp = sess.first(); tmp = sess.first();
if (!tmp) { continue; } if (!tmp) { continue; }
@ -1349,7 +1350,7 @@ qint64 Day::first()
QList<Session *>::iterator end = sessions.end(); QList<Session *>::iterator end = sessions.end();
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session & sess = *(*it); Session & sess = *(*it);
if (sess.machine()->type() == MT_JOURNAL) continue; if (sess.type() == MT_JOURNAL) continue;
if (sess.enabled()) { if (sess.enabled()) {
tmp = sess.first(); tmp = sess.first();
@ -1376,7 +1377,7 @@ qint64 Day::last()
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session & sess = *(*it); Session & sess = *(*it);
if (sess.machine()->type() == MT_JOURNAL) continue; if (sess.type() == MT_JOURNAL) continue;
if (sess.enabled()) { if (sess.enabled()) {
tmp = sess.last(); tmp = sess.last();
@ -1405,7 +1406,7 @@ qint64 Day::last(MachineType type)
for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) { for (QList<Session *>::iterator it = sessions.begin(); it != end; ++it) {
Session & sess = *(*it); Session & sess = *(*it);
if ((sess.machine()->type() == type) && sess.enabled()) { if ((sess.type() == type) && sess.enabled()) {
tmp = sess.last(); tmp = sess.last();
if (!tmp) { continue; } if (!tmp) { continue; }

View File

@ -739,6 +739,7 @@ bool FPIconLoader::OpenSummary(Machine *mach, QString filename)
sess->settings[CPAP_HumidSetting] = x2; sess->settings[CPAP_HumidSetting] = x2;
//sess->settings[CPAP_PresReliefType]=PR_SENSAWAKE; //sess->settings[CPAP_PresReliefType]=PR_SENSAWAKE;
Sessions[ts] = sess; Sessions[ts] = sess;
addSession(sess); addSession(sess);
} }
} while (!in.atEnd()); } while (!in.atEnd());

View File

@ -555,8 +555,8 @@ int IntellipapLoader::Open(QString path)
sess->settings[CPAP_RampPressure] = ramp_pressure; sess->settings[CPAP_RampPressure] = ramp_pressure;
sess->settings[CPAP_RampTime] = ramp_time; sess->settings[CPAP_RampTime] = ramp_time;
sess->UpdateSummaries(); sess->UpdateSummaries();
addSession(sess); addSession(sess);
} else { } else {
delete sess; delete sess;

View File

@ -757,11 +757,21 @@ void ResmedImport::run()
Q_FOREACH(QString file, files[EDF_CSL]) { Q_FOREACH(QString file, files[EDF_CSL]) {
// loader->LoadCSL(sess, file); // loader->LoadCSL(sess, file);
} }
bool haveeve = false;
Q_FOREACH(QString file, files[EDF_EVE]) { Q_FOREACH(QString file, files[EDF_EVE]) {
loader->LoadEVE(sess, file); loader->LoadEVE(sess, file);
#ifdef SESSION_DEBUG #ifdef SESSION_DEBUG
sess->session_files.append(file); sess->session_files.append(file);
#endif #endif
haveeve = true;
}
if (!haveeve) {
sess->AddEventList(CPAP_Obstructive, EVL_Event);
sess->AddEventList(CPAP_ClearAirway, EVL_Event);
sess->AddEventList(CPAP_Apnea, EVL_Event);
sess->AddEventList(CPAP_Hypopnea, EVL_Event);
} }
@ -924,6 +934,7 @@ void ResmedImportStage2::run()
// Claim this record for future imports // Claim this record for future imports
sess->settings[RMS9_MaskOnTime] = R.maskon; sess->settings[RMS9_MaskOnTime] = R.maskon;
sess->setSummaryOnly(true); sess->setSummaryOnly(true);
#ifdef SESSION_DEBUG #ifdef SESSION_DEBUG
sess->session_files.append("STR.edf"); sess->session_files.append("STR.edf");
#endif #endif

View File

@ -162,6 +162,7 @@ int SomnoposeLoader::OpenFile(QString filename)
sess->really_set_last(time); sess->really_set_last(time);
sess->SetChanged(true); sess->SetChanged(true);
mach->AddSession(sess); mach->AddSession(sess);
mach->Save(); mach->Save();

View File

@ -459,13 +459,8 @@ int WeinmannLoader::Open(QString path)
p += 6; p += 6;
} }
sess->UpdateSummaries(); sess->UpdateSummaries();
mach->AddSession(sess); mach->AddSession(sess);
} }
delete [] data; delete [] data;
delete [] st; delete [] st;

View File

@ -672,7 +672,7 @@ Day *Profile::GetGoodDay(QDate date, MachineType type)
// For a machine match, find at least one enabled Session. // For a machine match, find at least one enabled Session.
for (int i = 0; i < day->size(); ++i) { for (int i = 0; i < day->size(); ++i) {
Session * sess = (*day)[i]; Session * sess = (*day)[i];
if (((type == MT_UNKNOWN) || (sess->machine()->type() == type)) && sess->enabled()) { if (((type == MT_UNKNOWN) || (sess->type() == type)) && sess->enabled()) {
day->OpenSummary(); day->OpenSummary();
return day; return day;
@ -692,7 +692,7 @@ Day *Profile::FindGoodDay(QDate date, MachineType type)
// For a machine match, find at least one enabled Session. // For a machine match, find at least one enabled Session.
for (int i = 0; i < day->size(); ++i) { for (int i = 0; i < day->size(); ++i) {
Session * sess = (*day)[i]; Session * sess = (*day)[i];
if (((type == MT_UNKNOWN) || (sess->machine()->type() == type)) && sess->enabled()) { if (((type == MT_UNKNOWN) || (sess->type() == type)) && sess->enabled()) {
return day; return day;
} }
} }

View File

@ -35,6 +35,7 @@ Session::Session(Machine *m, SessionID session)
} }
s_machine = m; s_machine = m;
s_machtype = m->type();
s_session = session; s_session = session;
s_changed = false; s_changed = false;
s_events_loaded = false; s_events_loaded = false;

View File

@ -361,6 +361,11 @@ class Session
s_summaryOnly = b; s_summaryOnly = b;
} }
void setOpened(bool b = true) {
s_events_loaded = b;
s_summary_loaded = b;
}
//! \brief Completely purges Session from memory and disk. //! \brief Completely purges Session from memory and disk.
bool Destroy(); bool Destroy();
@ -375,6 +380,10 @@ class Session
QString eventFile() const; QString eventFile() const;
MachineType type() { return s_machtype; }
#if defined(SESSION_DEBUG) #if defined(SESSION_DEBUG)
QStringList session_files; QStringList session_files;
#endif #endif
@ -397,6 +406,7 @@ protected:
// for debugging // for debugging
bool destroyed; bool destroyed;
MachineType s_machtype;
}; };
QDataStream & operator<<(QDataStream & out, const Session & session); QDataStream & operator<<(QDataStream & out, const Session & session);

View File

@ -530,7 +530,7 @@ void Daily::ReloadGraphs()
if (previous_date.isValid()) { if (previous_date.isValid()) {
d=previous_date; d=previous_date;
// Unload(d); //Unload(d);
} }
d=p_profile->LastDay(); d=p_profile->LastDay();
if (!d.isValid()) { if (!d.isValid()) {
@ -598,7 +598,7 @@ void Daily::UpdateEventsTree(QTreeWidget *tree,Day *day)
m = sess->eventlist.find(code); m = sess->eventlist.find(code);
if (m == sess->eventlist.end()) continue; if (m == sess->eventlist.end()) continue;
drift=(sess->machine()->type() == MT_CPAP) ? clockdrift : 0; drift=(sess->type() == MT_CPAP) ? clockdrift : 0;
QTreeWidgetItem *mcr; QTreeWidgetItem *mcr;
if (mcroot.find(code)==mcroot.end()) { if (mcroot.find(code)==mcroot.end()) {
@ -892,7 +892,7 @@ QString Daily::getSessionInformation(Day * day)
QList<Session *> sesslist = day->getSessions(mi.key(), true); QList<Session *> sesslist = day->getSessions(mi.key(), true);
for (QList<Session *>::iterator s=sesslist.begin(); s != sesslist.end(); ++s) { for (QList<Session *>::iterator s=sesslist.begin(); s != sesslist.end(); ++s) {
if (((*s)->machine()->type() == MT_CPAP) && if (((*s)->type() == MT_CPAP) &&
((*s)->settings.find(CPAP_BrokenWaveform) != (*s)->settings.end())) ((*s)->settings.find(CPAP_BrokenWaveform) != (*s)->settings.end()))
corrupted_waveform=true; corrupted_waveform=true;
@ -1631,7 +1631,7 @@ void Daily::Load(QDate date)
for (i=day->begin();i!=day->end();++i) { for (i=day->begin();i!=day->end();++i) {
Session * s=*i; Session * s=*i;
if ((*s).machine()->type() == MT_CPAP) if ((*s).type() == MT_CPAP)
sessbar->add(s, cols[c % maxcolors]); sessbar->add(s, cols[c % maxcolors]);
c++; c++;
} }

View File

@ -708,7 +708,7 @@ int MainWindow::importCPAP(ImportPath import, const QString &message)
void MainWindow::finishCPAPImport() void MainWindow::finishCPAPImport()
{ {
p_profile->Save(); p_profile->StoreMachines();
GenerateStatistics(); GenerateStatistics();
if (overview) { overview->ReloadGraphs(); } if (overview) { overview->ReloadGraphs(); }
@ -2082,11 +2082,12 @@ void MainWindow::on_actionRebuildCPAP(QAction *action)
} }
if (overview) overview->ReloadGraphs(); if (overview) overview->ReloadGraphs();
if (daily) { if (daily) {
daily->Unload();
daily->clearLastDay(); // otherwise Daily will crash daily->clearLastDay(); // otherwise Daily will crash
daily->ReloadGraphs(); daily->ReloadGraphs();
} }
GenerateStatistics(); GenerateStatistics();
p_profile->Save(); p_profile->StoreMachines();
} }
void MainWindow::on_actionPurgeMachine(QAction *action) void MainWindow::on_actionPurgeMachine(QAction *action)

View File

@ -454,6 +454,8 @@ void OximeterImport::on_liveImportButton_clicked()
ELplethy->setFirst(start_ti); ELplethy->setFirst(start_ti);
session->really_set_first(start_ti); session->really_set_first(start_ti);
session->setOpened(true);
dummyday->addSession(session); dummyday->addSession(session);
plethyChart->setMinX(start_ti); plethyChart->setMinX(start_ti);
@ -822,7 +824,8 @@ void OximeterImport::on_saveButton_clicked()
qint64 step = (importMode == IM_LIVE) ? oximodule->liveResolution() : oximodule->importResolution(); qint64 step = (importMode == IM_LIVE) ? oximodule->liveResolution() : oximodule->importResolution();
int size = oxirec->size(); int size = oxirec->size();
for (int i=1; i < size; ++i) { // why was I skipping the first sample? not priming it anymore..
for (int i=0; i < size; ++i) {
OxiRecord * rec = &(*oxirec)[i]; OxiRecord * rec = &(*oxirec)[i];
if (rec->pulse > 0) { if (rec->pulse > 0) {
@ -953,6 +956,8 @@ void OximeterImport::on_saveButton_clicked()
session->really_set_last(ti); session->really_set_last(ti);
session->SetChanged(true); session->SetChanged(true);
session->setOpened(true);
mach->AddSession(session); mach->AddSession(session);
mach->Save(); mach->Save();
mach->SaveSummary(); mach->SaveSummary();