From c1427281310c31280a6bc8056f864f4e90a09b82 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 4 Aug 2022 16:05:15 -0400 Subject: [PATCH] 2022-08-04 Fred Gleason * Added a 'Router' column to the event list in rdcatch(1). Signed-off-by: Fred Gleason --- ChangeLog | 2 + rdcatch/recordlistmodel.cpp | 191 ++++++++++++++++++++---------------- rdcatch/recordlistmodel.h | 1 + 3 files changed, 112 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index 12c97c24..d754e0b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23223,3 +23223,5 @@ 2022-08-04 Fred Gleason * Added interlock logic to the 'Edit Switcher Event' dialog in rdcatch(1) to prevent creation of events containing null endpoints. +2022-08-04 Fred Gleason + * Added a 'Router' column to the event list in rdcatch(1). diff --git a/rdcatch/recordlistmodel.cpp b/rdcatch/recordlistmodel.cpp index 0856828f..ec33dc72 100644 --- a/rdcatch/recordlistmodel.cpp +++ b/rdcatch/recordlistmodel.cpp @@ -48,88 +48,91 @@ RecordListModel::RecordListModel(QObject *parent) d_headers.push_back(tr("End")); // 03 d_alignments.push_back(left); - d_headers.push_back(tr("Source")); // 04 + d_headers.push_back(tr("Router")); // 04 d_alignments.push_back(left); - d_headers.push_back(tr("Destination")); // 05 + d_headers.push_back(tr("Source")); // 05 d_alignments.push_back(left); - d_headers.push_back(tr("Su")); // 06 + d_headers.push_back(tr("Destination")); // 06 d_alignments.push_back(left); - d_headers.push_back(tr("Mo")); // 07 + d_headers.push_back(tr("Su")); // 07 d_alignments.push_back(left); - d_headers.push_back(tr("Tu")); // 08 + d_headers.push_back(tr("Mo")); // 08 d_alignments.push_back(left); - d_headers.push_back(tr("We")); // 09 + d_headers.push_back(tr("Tu")); // 09 d_alignments.push_back(left); - d_headers.push_back(tr("Th")); // 10 + d_headers.push_back(tr("We")); // 10 + d_alignments.push_back(left); + + d_headers.push_back(tr("Th")); // 11 d_alignments.push_back(center); - d_headers.push_back(tr("Fr")); // 11 + d_headers.push_back(tr("Fr")); // 12 d_alignments.push_back(center); - d_headers.push_back(tr("Sa")); // 12 + d_headers.push_back(tr("Sa")); // 13 d_alignments.push_back(left); - d_headers.push_back(tr("RSS Feed")); // 13 + d_headers.push_back(tr("RSS Feed")); // 14 d_alignments.push_back(left); - d_headers.push_back(tr("Origin")); // 14 + d_headers.push_back(tr("Origin")); // 15 d_alignments.push_back(left); - d_headers.push_back(tr("One Shot")); // 15 + d_headers.push_back(tr("One Shot")); // 16 d_alignments.push_back(left); - d_headers.push_back(tr("Trim Threshold")); // 16 + d_headers.push_back(tr("Trim Threshold")); // 17 d_alignments.push_back(left); - d_headers.push_back(tr("StartDate Offset")); // 17 + d_headers.push_back(tr("StartDate Offset")); // 18 d_alignments.push_back(left); - d_headers.push_back(tr("EndDate Offset")); // 18 + d_headers.push_back(tr("EndDate Offset")); // 19 d_alignments.push_back(left); - d_headers.push_back(tr("Format")); // 19 + d_headers.push_back(tr("Format")); // 20 d_alignments.push_back(left); - d_headers.push_back(tr("Channels")); // 20 + d_headers.push_back(tr("Channels")); // 21 d_alignments.push_back(left); - d_headers.push_back(tr("Sample Rate")); // 21 + d_headers.push_back(tr("Sample Rate")); // 22 d_alignments.push_back(left); - d_headers.push_back(tr("Bit Rate")); // 22 + d_headers.push_back(tr("Bit Rate")); // 23 d_alignments.push_back(left); - d_headers.push_back(tr("Host")); // 23 + d_headers.push_back(tr("Host")); // 24 d_alignments.push_back(left); - d_headers.push_back(tr("Deck")); // 24 + d_headers.push_back(tr("Deck")); // 25 d_alignments.push_back(left); - d_headers.push_back(tr("Cut")); // 25 + d_headers.push_back(tr("Cut")); // 26 d_alignments.push_back(left); - d_headers.push_back(tr("Cart")); // 26 + d_headers.push_back(tr("Cart")); // 27 d_alignments.push_back(left); - d_headers.push_back(tr("ID")); // 27 + d_headers.push_back(tr("ID")); // 28 d_alignments.push_back(left); - d_headers.push_back(tr("Type")); // 28 + d_headers.push_back(tr("Type")); // 29 d_alignments.push_back(left); - d_headers.push_back(tr("Status")); // 29 + d_headers.push_back(tr("Status")); // 30 d_alignments.push_back(left); - d_headers.push_back(tr("Exit Code")); // 30 + d_headers.push_back(tr("Exit Code")); // 31 d_alignments.push_back(left); - d_headers.push_back(tr("State")); // 31 + d_headers.push_back(tr("State")); // 32 d_alignments.push_back(left); updateModel(); @@ -493,9 +496,29 @@ void RecordListModel::updateModel() { QList texts; QList icons; - + QString sql; RDSqlQuery *q=NULL; - QString sql=sqlFields()+ + + // + // Load Router Table + // + d_router_names.clear(); + sql=QString("select ")+ + "`STATION_NAME`,"+ // 00 + "`MATRIX`,"+ // 01 + "`NAME` "+ // 02 + "from `MATRICES`"; + q=new RDSqlQuery(sql); + while(q->next()) { + d_router_names[q->value(0).toString()][q->value(1).toInt()]= + q->value(2).toString(); + } + delete q; + + // + // Load Model Rows + // + sql=sqlFields()+ d_filter_sql+ "order by `RECORDINGS`.`START_TIME` "; beginResetModel(); @@ -545,6 +568,7 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) QString sql; RDSqlQuery *q1=NULL; RDCut *cut=NULL; + QMap names; // // Event Values @@ -587,25 +611,25 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) } texts[0]=q->value(1); // Description if(q->value(7).toString()=="Y") { // Sun - texts[6]=tr("Su"); + texts[7]=tr("Su"); } if(q->value(8).toString()=="Y") { // Mon - texts[7]=tr("Mo"); + texts[8]=tr("Mo"); } if(q->value(9).toString()=="Y") { // Tue - texts[8]=tr("Tu"); + texts[9]=tr("Tu"); } if(q->value(10).toString()=="Y") { // Wed - texts[9]=tr("We"); + texts[10]=tr("We"); } if(q->value(11).toString()=="Y") { // Thu - texts[10]=tr("Th"); + texts[11]=tr("Th"); } if(q->value(12).toString()=="Y") { // Fri - texts[11]=tr("Fr"); + texts[12]=tr("Fr"); } if(q->value(13).toString()=="Y") { // Sat - texts[12]=tr("Sa"); + texts[13]=tr("Sa"); } switch((RDRecording::Type)q->value(26).toInt()) { @@ -613,27 +637,27 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) case RDRecording::Playout: case RDRecording::Download: case RDRecording::Upload: - texts[14]=q->value(40).toString()+" - "+q->value(41).toDateTime(). + texts[15]=q->value(40).toString()+" - "+q->value(41).toDateTime(). toString("M/dd/yyyy hh:mm:ss"); break; default: break; } - texts[15]=q->value(29).toString(); // One Shot - texts[16]=QString::asprintf("%d ", // Trim Threshold + texts[16]=q->value(29).toString(); // One Shot + texts[17]=QString::asprintf("%d ", // Trim Threshold -q->value(17).toInt())+tr("dB"); - texts[17]=q->value(18).toString(); // Startdate Offset - texts[18]=q->value(19).toString(); // Enddate Offset - texts[23]=q->value(3).toString(); // Station - texts[24]=q->value(24).toString(); // Deck - texts[25]=q->value(6).toString(); // Cut Name + texts[18]=q->value(18).toString(); // Startdate Offset + texts[19]=q->value(19).toString(); // Enddate Offset + texts[24]=q->value(3).toString(); // Station + texts[25]=q->value(24).toString(); // Deck + texts[26]=q->value(6).toString(); // Cut Name if(q->value(24).toInt()>=0) { - texts[26]=q->value(25).toString(); // Macro Cart + texts[27]=q->value(25).toString(); // Macro Cart } - texts[27]=q->value(0).toString(); // Id - texts[28]=q->value(26).toString(); // Type - texts[31]=QString::asprintf("%u",RDDeck::Idle); + texts[28]=q->value(0).toString(); // Id + texts[29]=q->value(26).toString(); // Type + texts[32]=QString::asprintf("%u",RDDeck::Idle); switch((RDRecording::Type)q->value(26).toInt()) { case RDRecording::Recording: @@ -668,7 +692,8 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) q->value(39).toInt()); break; } - texts[5]=tr("Cut")+" "+q->value(6).toString(); + + texts[6]=tr("Cut")+" "+q->value(6).toString(); sql=QString("select ")+ "`SWITCH_STATION`,"+ // 00 "`SWITCH_MATRIX` "+ // 01 @@ -677,43 +702,43 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) QString::asprintf("(`CHANNEL`=%d)",q->value(24).toInt()); q1=new RDSqlQuery(sql); if(q1->first()) { // Source - texts[4]=GetSourceName(q1->value(0).toString(),q1->value(1).toInt(), + texts[5]=GetSourceName(q1->value(0).toString(),q1->value(1).toInt(), q->value(14).toInt()); } delete q1; switch((RDSettings::Format)q->value(20).toInt()) { // Format case RDSettings::Pcm16: - texts[19]=tr("PCM16"); + texts[20]=tr("PCM16"); break; case RDSettings::Pcm24: - texts[19]=tr("PCM24"); + texts[20]=tr("PCM24"); break; case RDSettings::MpegL1: - texts[19]=tr("MPEG Layer 1"); + texts[20]=tr("MPEG Layer 1"); break; case RDSettings::MpegL2: case RDSettings::MpegL2Wav: - texts[19]=tr("MPEG Layer 2"); + texts[20]=tr("MPEG Layer 2"); break; case RDSettings::MpegL3: - texts[19]=tr("MPEG Layer 3"); + texts[20]=tr("MPEG Layer 3"); break; case RDSettings::Flac: - texts[19]=tr("FLAC"); + texts[20]=tr("FLAC"); break; case RDSettings::OggVorbis: - texts[19]=tr("OggVorbis"); + texts[20]=tr("OggVorbis"); break; } - texts[20]=q->value(21).toString(); // Channels - texts[21]=q->value(22).toString(); // Sample Rate - texts[22]=q->value(23).toString(); // Bit Rate + texts[21]=q->value(21).toString(); // Channels + texts[22]=q->value(22).toString(); // Sample Rate + texts[23]=q->value(23).toString(); // Bit Rate break; case RDRecording::Playout: @@ -725,23 +750,25 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) texts[3]=tr("Len")+": "+RDGetTimeLength(cut->length(),false,false); } delete cut; - texts[4]=tr("Cut")+" "+q->value(6).toString(); + texts[5]=tr("Cut")+" "+q->value(6).toString(); break; case RDRecording::MacroEvent: texts[1]=q->value(3).toString(); texts[2]=tr("Hard")+": "+q->value(4).toTime(). toString(QString::asprintf("hh:mm:ss")); - texts[4]=tr("Cart")+QString::asprintf(" %06d",q->value(25).toInt()); + texts[5]=tr("Cart")+QString::asprintf(" %06d",q->value(25).toInt()); break; case RDRecording::SwitchEvent: texts[1]=q->value(3).toString(); texts[2]=tr("Hard")+": "+rda->timeString(q->value(4).toTime()); - texts[4]=GetSourceName(q->value(3).toString(), // Source + texts[4]= + d_router_names.value(q->value(3).toString()).value(q->value(24).toInt()); + texts[5]=GetSourceName(q->value(3).toString(), // Source q->value(24).toInt(), q->value(14).toInt()); - texts[5]=GetDestinationName(q->value(3).toString(), // Dest + texts[6]=GetDestinationName(q->value(3).toString(), // Dest q->value(24).toInt(), q->value(27).toInt()); break; @@ -749,58 +776,58 @@ void RecordListModel::updateRow(int row,RDSqlQuery *q) case RDRecording::Download: texts[1]=q->value(3).toString(); texts[2]=tr("Hard")+": "+rda->timeString(q->value(4).toTime()); - texts[4]=q->value(42).toString(); - texts[5]=tr("Cut")+" "+q->value(6).toString(); + texts[5]=q->value(42).toString(); + texts[6]=tr("Cut")+" "+q->value(6).toString(); break; case RDRecording::Upload: texts[1]=q->value(3).toString(); texts[2]=tr("Hard")+": "+rda->timeString(q->value(4).toTime()); - texts[4]=tr("Cut")+" "+q->value(6).toString(); - texts[5]=q->value(42).toString(); + texts[5]=tr("Cut")+" "+q->value(6).toString(); + texts[6]=q->value(42).toString(); switch((RDSettings::Format)q->value(20).toInt()) { // Format case RDSettings::Pcm16: - texts[19]=tr("PCM16"); + texts[20]=tr("PCM16"); break; case RDSettings::Pcm24: - texts[19]=tr("PCM24"); + texts[20]=tr("PCM24"); break; case RDSettings::MpegL1: - texts[19]=tr("MPEG Layer 1"); + texts[20]=tr("MPEG Layer 1"); break; case RDSettings::MpegL2: case RDSettings::MpegL2Wav: - texts[19]=tr("MPEG Layer 2"); + texts[20]=tr("MPEG Layer 2"); break; case RDSettings::MpegL3: - texts[19]=tr("MPEG Layer 3"); + texts[20]=tr("MPEG Layer 3"); break; case RDSettings::Flac: - texts[19]=tr("FLAC"); + texts[20]=tr("FLAC"); break; case RDSettings::OggVorbis: - texts[19]=tr("OggVorbis"); + texts[20]=tr("OggVorbis"); break; } if(q->value(44).toString().isEmpty()) { - texts[13]=tr("[none]"); + texts[14]=tr("[none]"); } else { - texts[13]=q->value(44).toString(); // Feed Key Name + texts[14]=q->value(44).toString(); // Feed Key Name } - texts[20]=q->value(21).toString(); // Channels - texts[21]=q->value(22).toString(); // Sample Rate + texts[22]=q->value(21).toString(); // Channels + texts[23]=q->value(22).toString(); // Sample Rate if(q->value(23).toInt()==0) { // Bit Rate/Quality - texts[22]=QString::asprintf("Qual %d",q->value(43).toInt()); + texts[23]=QString::asprintf("Qual %d",q->value(43).toInt()); } else { - texts[22]=QString::asprintf("%d kb/sec",q->value(23).toInt()/1000); + texts[23]=QString::asprintf("%d kb/sec",q->value(23).toInt()/1000); } break; diff --git a/rdcatch/recordlistmodel.h b/rdcatch/recordlistmodel.h index 601ab281..455e4406 100644 --- a/rdcatch/recordlistmodel.h +++ b/rdcatch/recordlistmodel.h @@ -96,6 +96,7 @@ class RecordListModel : public QAbstractTableModel QList d_is_nexts; QList d_statuses; QList > d_icons; + QMap > d_router_names; QString d_filter_sql; };