bool RDReport::ExportMusicPlayout(const QDate &startdate,const QDate &enddate, const QString &mixtable) { QString sql; RDSqlQuery *q; FILE *f; QString cut; QString str; QString cart_fmt; QString cart_num; #ifdef WIN32 QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate); #else QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate); #endif QFile file(filename); if((f=fopen((const char *)filename,"w"))==NULL) { report_error_code=RDReport::ErrorCantOpen; return false; } if(useLeadingZeros()) { cart_fmt=QString().sprintf("%%0%uu",cartDigits()); } else { cart_fmt="%6u"; } sql=QString("select ")+ "`"+mixtable+"_SRT`.LENGTH,"+ // 00 "`"+mixtable+"_SRT`.CART_NUMBER,"+ // 01 "`"+mixtable+"%s_SRT`.EVENT_DATETIME,"+ // 02 "`"+mixtable+"_SRT`.EXT_EVENT_ID,"+ // 03 "`"+mixtable+"_SRT`.TITLE,"+ // 04 "`"+mixtable+"_SRT`.CUT_NUMBER,"+ // 05 "`"+mixtable+"_SRT`.ARTIST,"+ // 06 "`"+mixtable+"_SRT`.ALBUM,"+ // 07 "`"+mixtable+"_SRT`.LABEL "+ // 08 "from `"+mixtable+"_SRT` left join CART "+ "on `"+mixtable+"_SRT`.CART_NUMBER=CART.NUMBER "+ "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // // Write File Header // if(startdate==enddate) { fprintf(f," Rivendell RDAirPlay Music Playout Report for %s\n", (const char *)startdate.toString("MM/dd/yyyy")); } else { fprintf(f," Rivendell RDAirPlay Music Playout Report for %s - %s\n", (const char *)startdate.toString("MM/dd/yyyy"), (const char *)enddate.toString("MM/dd/yyyy")); } str=QString().sprintf("%s -- %s\n",(const char *)name(), (const char *)description()); for(int i=0;i<(180-str.length())/2;i++) { fprintf(f," "); } fprintf(f,"%s\n",(const char *)str); fprintf(f,"--Time-- -Cart- Cut A-Len --Title----------------------- --Artist---------------------- --Album------------------ --Label-------------\n"); // // Write Data Rows // while(q->next()) { if(q->value(5).toInt()>0) { cut=QString().sprintf("%03d",q->value(5).toInt()); } else { if((RDAirPlayConf::TrafficAction)q->value(6).toInt()== RDAirPlayConf::TrafficMacro) { cut="rml"; } else { cut=" "; } } cart_num=QString().sprintf(cart_fmt,q->value(1).toUInt()); fprintf(f,"%8s %6s %3s %5s %-30s %-30s %-25s %-20s\n", (const char *)q->value(2).toDateTime().time().toString("hh:mm:ss"), (const char *)cart_num, (const char *)cut, (const char *)RDGetTimeLength(q->value(0).toInt(),true,false). right(5), (const char *)StringField(q->value(4).toString().left(30)), (const char *)StringField(q->value(6).toString().left(30)), (const char *)StringField(q->value(7).toString().left(25)), (const char *)StringField(q->value(8).toString().left(20))); } delete q; fclose(f); report_error_code=RDReport::ErrorOk; return true; }
bool RDReport::ExportTechnical(const QString &filename,const QDate &startdate, const QDate &enddate,bool incl_hdr,bool incl_crs, const QString &mixtable) { QString sql; RDSqlQuery *q; QString cut; QString str; QString cart_fmt; QString cart_num; char eol[3]="\n"; if(incl_crs) { strcpy(eol,"\r\n"); } QFile *file=new QFile(filename); if(!file->open(QIODevice::WriteOnly|QIODevice::Truncate)) { report_error_code=RDReport::ErrorCantOpen; delete file; return false; } Q3TextStream *strm=new Q3TextStream(file); strm->setEncoding(Q3TextStream::UnicodeUTF8); if(useLeadingZeros()) { cart_fmt=QString().sprintf("%%0%uu",cartDigits()); } else { cart_fmt="%6u"; } sql=QString("select ")+ "ELR_LINES.LENGTH,"+ // 00 "ELR_LINES.CART_NUMBER,"+ // 01 "ELR_LINES.EVENT_DATETIME,"+ // 02 "ELR_LINES.EVENT_TYPE,"+ // 03 "ELR_LINES.EXT_START_TIME,"+ // 04 "ELR_LINES.EXT_LENGTH,"+ // 05 "ELR_LINES.EXT_DATA,"+ // 06 "ELR_LINES.EXT_EVENT_ID,"+ // 07 "ELR_LINES.TITLE,"+ // 08 "CART.FORCED_LENGTH,"+ // 09 "ELR_LINES.STATION_NAME,"+ // 10 "ELR_LINES.PLAY_SOURCE,"+ // 11 "ELR_LINES.CUT_NUMBER,"+ // 12 "ELR_LINES.START_SOURCE,"+ // 13 "ELR_LINES.ONAIR_FLAG "+ // 14 "from ELR_LINES left join CART "+ "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // // Write File Header // if(incl_hdr) { if(startdate==enddate) { *strm << RDReport::center("Rivendell RDAirPlay Technical Playout Report for "+ startdate.toString("MM/dd/yyyy"),96); *strm << eol; } else { *strm << RDReport::center("Rivendell RDAirPlay Technical Playout Report for "+ startdate.toString("MM/dd/yyyy")+" - "+ enddate.toString("MM/dd/yyyy"),96); *strm << eol; } *strm << RDReport::center(name()+" -- "+description(),96); *strm << eol; *strm << "--Time-- -Cart- Cut --Title---------------- A-Len N-Len --Host---- Srce StartedBy OnAir"; *strm << eol; } // // Write Data Rows // while(q->next()) { if(q->value(12).toInt()>0) { cut=QString().sprintf("%03d",q->value(12).toInt()); } else { if((RDAirPlayConf::TrafficAction)q->value(3).toInt()== RDAirPlayConf::TrafficMacro) { cut="rml"; } else { cut=" "; } } cart_num=QString().sprintf(cart_fmt,q->value(1).toUInt()); *strm << q->value(2).toTime().toString("hh:mm:ss")+" "; *strm << cart_num+" "; *strm << cut+" "; *strm << RDReport::leftJustify(q->value(8).toString(),23)+" "; *strm << RDGetTimeLength(q->value(0).toInt(),true,false).right(5)+" "; *strm << RDGetTimeLength(q->value(9).toInt(),true,false).right(5)+" "; *strm << RDReport::leftJustify(q->value(10).toString(),10)+" "; switch((RDLogLine::PlaySource)q->value(11).toInt()) { case RDLogLine::MainLog: *strm << "Main "; break; case RDLogLine::AuxLog1: *strm << "Aux1 "; break; case RDLogLine::AuxLog2: *strm << "Aux2 "; break; case RDLogLine::SoundPanel: *strm << "SPnl "; break; case RDLogLine::CartSlot: *strm << "Slot "; break; default: *strm << " "; break; } *strm << RDReport::leftJustify(RDLogLine::startSourceText((RDLogLine::StartSource)q->value(13).toInt()),7)+" "; if(q->value(14).toString()=="Y") { *strm << " Yes "; } else { *strm << " No "; } *strm << eol; } delete q; delete strm; delete file; report_error_code=RDReport::ErrorOk; return true; }
bool RDReport::ExportRadioTraffic(const QDate &startdate,const QDate &enddate, const QString &mixtable) { QString sql; RDSqlQuery *q; FILE *f; QString air_fmt; #ifdef WIN32 QString filename=RDDateDecode(exportPath(RDReport::Windows),startdate); #else QString filename=RDDateDecode(exportPath(RDReport::Linux),startdate); #endif QFile file(filename); if((f=fopen((const char *)filename,"w"))==NULL) { report_error_code=RDReport::ErrorCantOpen; return false; } if(useLeadingZeros()) { air_fmt=QString().sprintf("%%0%uu ",cartDigits()); } else { air_fmt=QString().sprintf("%%%-uu ",cartDigits()); } sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ `%s_SRT`.EXT_ANNC_TYPE,`%s_SRT`.TITLE,\ `%s_SRT`.EXT_CART_NAME from `%s_SRT` \ left join CART on\ `%s_SRT`.CART_NUMBER=CART.NUMBER\ order by EVENT_DATETIME", (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable, (const char *)mixtable); q=new RDSqlQuery(sql); // // Write Data Rows // while(q->next()) { fprintf(f,"%s ",(const char *)q->value(4).toTime().toString("hh:mm:ss")); fprintf(f,"%s ",(const char *)q->value(2).toDateTime(). toString("hh:mm:ss")); if(q->value(5).toInt()>0) { fprintf(f,"0%s ",(const char *)RDGetTimeLength(q->value(5).toInt(), true,false)); } else { fprintf(f,"00:00:00 "); } if(q->value(0).toInt()>0) { fprintf(f,"0%s ",(const char *)RDGetTimeLength(q->value(0).toInt(), true,false)); } else { fprintf(f,"00:00:00 "); } fprintf(f,air_fmt,q->value(1).toUInt()); fprintf(f,"%-34s ",(const char *)q->value(9).toString().left(34)); if(q->value(6).toString().isEmpty()) { fprintf(f," "); } else { fprintf(f,"%-32s",(const char *)q->value(6).toString().left(32). stripWhiteSpace()); } fprintf(f,"\r\n"); } delete q; fclose(f); report_error_code=RDReport::ErrorOk; return true; }
bool RDReport::ExportSpinCount(const QString &filename,const QDate &startdate, const QDate &enddate,const QString &mixtable) { QString sql; RDSqlQuery *q; QString cut; QString str; QString cart_fmt; QString cart_num; std::map<unsigned,unsigned> carts; std::map<unsigned,QString> titles; std::map<unsigned,QString> artists; std::map<unsigned,QString> labels; std::map<unsigned,QString> albums; QFile *file=new QFile(filename); if(!file->open(QIODevice::WriteOnly|QIODevice::Truncate)) { report_error_code=RDReport::ErrorCantOpen; delete file; return false; } Q3TextStream *strm=new Q3TextStream(file); strm->setEncoding(Q3TextStream::UnicodeUTF8); if(useLeadingZeros()) { cart_fmt=QString().sprintf("%%0%uu",cartDigits()); } else { cart_fmt="%6u"; } // // Generate Spin Counts // sql=QString("select ")+ "CART_NUMBER,"+ // 00 "TITLE,"+ // 01 "ARTIST,"+ // 02 "ALBUM,LABEL "+ // 03 "from ELR_LINES where "+ "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ "order by TITLE"; q=new RDSqlQuery(sql); while(q->next()) { carts[q->value(0).toInt()]++; titles[q->value(0).toInt()]=q->value(1).toString(); artists[q->value(0).toInt()]=q->value(2).toString(); albums[q->value(0).toInt()]=q->value(3).toString(); labels[q->value(0).toInt()]=q->value(4).toString(); } delete q; // // Write File Header // if(startdate==enddate) { *strm << RDReport::center(QString("Rivendell Spin Count Report for ")+ startdate.toString("MM/dd/yyyy"),132)+"\n"; } else { *strm << RDReport::center(QString("Rivendell Spin Count Report for ")+ startdate.toString("MM/dd/yyyy")+" - "+ enddate.toString("MM/dd/yyyy"),132)+"\n"; } *strm << RDReport::center(name()+" -- "+description(),132)+"\n"; *strm << "--Title------------------------ --Artist----------------------- --Album------------------------ --Label----------------------- Spins\n"; // // Write Data Rows // for(std::map<unsigned,unsigned>::const_iterator it=carts.begin(); it!=carts.end();it++) { *strm << RDReport::leftJustify(titles[it->first],30)+" "; *strm << RDReport::leftJustify(artists[it->first],30)+" "; *strm << RDReport::leftJustify(albums[it->first],30)+" "; *strm << RDReport::leftJustify(labels[it->first],29)+" "; *strm << QString().sprintf("%5u",it->second); *strm << "\n"; } delete strm; delete file; report_error_code=RDReport::ErrorOk; return true; }