RDSqlQuery::RDSqlQuery (const QString &query, QSqlDatabase *dbase): QSqlQuery (query,dbase) { //printf("lastQuery: %s\n",(const char *)lastQuery()); // With any luck, by the time we get here, we have already done the biz... unsigned schema; if (!isActive()){ //DB Offline? QString err=QObject::tr("invalid SQL or failed DB connection")+ +"["+lastError().text()+"]: "+query; fprintf(stderr,"%s\n",(const char *)err); #ifndef WIN32 syslog(LOG_ERR,(const char *)err); #endif // WIN32 QSqlDatabase *ldb = QSqlDatabase::database(); // Something went wrong with the DB, trying a reconnect ldb->removeDatabase(RDConfiguration()->mysqlDbname()); ldb->close(); db = NULL; RDInitDb (&schema); QSqlQuery::prepare (query); QSqlQuery::exec (); if (RDDbStatus()){ if (isActive()){ RDDbStatus()->sendRecon(); } else { RDDbStatus()->sendDiscon(query); } } } else { RDDbStatus()->sendRecon(); } }
DiskGauge::DiskGauge(int samp_rate,int chans,QWidget *parent,const char *name) : QWidget(parent,name) { disk_sample_rate=samp_rate; disk_channels=chans; // // Generate Fonts // QFont label_font("Helvetica",12,QFont::Bold); label_font.setPixelSize(12); disk_label=new QLabel("Free:",this,"free_label"); disk_label->setGeometry(0,0,50,sizeHint().height()); disk_label->setFont(label_font); disk_label->setAlignment(AlignRight|AlignVCenter); disk_bar=new QProgressBar(this); disk_bar->setPercentageVisible(false); disk_bar->setGeometry(55,0,sizeHint().width()-55,sizeHint().height()); disk_space_label=new QLabel(this); disk_space_label->setFont(label_font); disk_space_label->setAlignment(AlignCenter); struct statfs diskstat; statfs(RDConfiguration()->audioRoot().ascii(),&diskstat); disk_bar->setTotalSteps(GetMinutes(diskstat.f_blocks,diskstat.f_bsize)); update(); QTimer *timer=new QTimer(this,"update_timer"); connect(timer,SIGNAL(timeout()),this,SLOT(update())); timer->start(DISK_GAUGE_UPDATE_INTERVAL); }
void DiskGauge::update() { struct statfs diskstat; statfs(RDConfiguration()->audioRoot().ascii() ,&diskstat); int mins=GetMinutes(diskstat.f_bavail,diskstat.f_bsize); disk_bar->setProgress(mins); disk_space_label-> setText(QString().sprintf("%dh %02dm",mins/60,mins-60*(mins/60))); }
QSqlDatabase *RDInitDb (unsigned *schema,QString *error) { static bool firsttime = true; *schema=0; RDConfig *cf = RDConfiguration(); cf->load(); assert (cf); if (!db){ db=QSqlDatabase::addDatabase(cf->mysqlDriver()); if(!db) { if (error){ (*error) += QString(QObject::tr("Couldn't initialize QSql driver!")); } return NULL; } db->setDatabaseName(cf->mysqlDbname()); db->setUserName(cf->mysqlUsername()); db->setPassword(cf->mysqlPassword()); db->setHostName(cf->mysqlHostname()); if(!db->open()) { if (error){ (*error) += QString(QObject::tr("Couldn't open mySQL connection!")); } db->removeDatabase(cf->mysqlDbname()); db->close(); return NULL; } } if (firsttime){ new RDDbHeartbeat(cf->mysqlHeartbeatInterval()); firsttime = false; } // QSqlQuery *q=new QSqlQuery("set character_set_results='utf8'"); // delete q; QSqlQuery *q=new QSqlQuery("select DB from VERSION"); if(q->first()) { *schema=q->value(0).toUInt(); } delete q; return db; }
QString RDFeed::GetExportCommand(RDStation *station,const QString &srcfile, QString *destfile,RDFeed::Error *err) const { int format_in=0; int len; RDSettings settings; QString custom_cmd; *destfile=GetTempFilename(); QFile file(srcfile); if(!file.exists()) { *err=RDFeed::ErrorCannotOpenFile; return QString(); } RDWaveFile *wave=new RDWaveFile(srcfile); if(!wave->openWave()) { *err=RDFeed::ErrorUnsupportedType; delete wave; return QString(); } int samplerate=wave->getSamplesPerSec(); switch(wave->getFormatTag()) { case WAVE_FORMAT_PCM: format_in=0; len=wave->getSampleLength()*wave->getChannels()* (wave->getBitsPerSample()/8); break; case WAVE_FORMAT_MPEG: format_in=wave->getHeadLayer(); len=wave->getSampleLength()*wave->getChannels()*2; break; } wave->closeWave(); delete wave; QString cmd; float normal=0.0; RDLibraryConf *rdlibrary=new RDLibraryConf(station->name(),0); if(normalizeLevel()<=0) { normal=pow(10.0,(double)(normalizeLevel()/20000.0)); cmd=QString(). sprintf("rd_export_file %6.4f %d %d %s %d %d %d %d %d %s %s.dat %s.%s %d", normal, format_in, samplerate, (const char *)srcfile, uploadFormat(), uploadChannels(), uploadSampleRate(), uploadBitRate()/1000, uploadQuality(), (const char *)RDEscapeString(*destfile), (const char *)(*destfile), (const char *)(*destfile), RDConfiguration()->audioExtension().ascii(), rdlibrary->srcConverter()); } else { cmd=QString(). sprintf("rd_export_file 0 %d %d %s %d %d %d %d %d %s %s.dat %s.%s %d", format_in, samplerate, (const char *)srcfile, uploadFormat(), uploadChannels(), uploadSampleRate(), uploadBitRate()/1000, uploadQuality(), (const char *)RDEscapeString(*destfile), (const char *)(*destfile), (const char *)(*destfile), RDConfiguration()->audioExtension().ascii(), rdlibrary->srcConverter()); } delete rdlibrary; switch(uploadFormat()) { // Custom format? case RDSettings::Pcm16: case RDSettings::MpegL1: case RDSettings::MpegL2: case RDSettings::MpegL3: case RDSettings::Flac: case RDSettings::OggVorbis: break; default: settings.setFormat(uploadFormat()); settings.setChannels(uploadChannels()); settings.setSampleRate(uploadSampleRate()); settings.setBitRate(uploadBitRate()); custom_cmd=settings.resolvedCustomCommandLine(*destfile); if(custom_cmd.isEmpty()) { return QString(); } cmd+=" \""+custom_cmd+"\""; break; } // printf("CMD: %s",(const char *)cmd); *err=RDFeed::ErrorOk; return cmd; }