unsigned RDFeed::postCut(RDStation *station,const QString &cutname,Error *err) { QString tmpfile; QString destfile; QString sql; RDSqlQuery *q; RDPodcast *cast=NULL; emit postProgressChanged(0); emit postProgressChanged(1); QString cut_filename=RDCut::pathName(cutname); QString cmd=GetExportCommand(station,cut_filename,&tmpfile,err); // printf("CMD: %s\n",(const char *)cmd); if(system(cmd)!=0) { emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorGeneral; return 0; } emit postProgressChanged(2); QFile file(tmpfile); int length=file.size(); RDCut *cut=new RDCut(cutname); unsigned cast_id=CreateCast(&destfile,length,cut->length()); delete cut; cast=new RDPodcast(cast_id); cmd=cast->audioUploadCommand(tmpfile); if(system(cmd)!=0) { emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorUploadFailed; sql=QString().sprintf("delete from PODCASTS where ID=%u",cast_id); q=new RDSqlQuery(sql); delete q; delete cast; return 0; } emit postProgressChanged(3); unlink(tmpfile); delete cast; emit postProgressChanged(totalPostSteps()); return cast_id; }
unsigned RDFeed::postFile(RDStation *station,const QString &srcfile,Error *err) { QString sql; RDSqlQuery *q; QString cmd; QString tmpfile; QString tmpfile2; QString destfile; int time_length; emit postProgressChanged(0); emit postProgressChanged(1); RDWaveFile *wave=new RDWaveFile(srcfile); if(!wave->openWave()) { emit postProgressChanged(totalPostSteps()); delete wave; *err=RDFeed::ErrorUnsupportedType; return 0; } time_length=wave->getExtTimeLength(); delete wave; cmd=GetImportCommand(station,srcfile,&tmpfile,err); if(*err!=RDFeed::ErrorOk) { return 0; } if(system(cmd)!=0) { emit postProgressChanged(totalPostSteps()); unlink(tmpfile); *err=RDFeed::ErrorGeneral; return 0; } emit postProgressChanged(2); cmd=GetExportCommand(station,tmpfile,&tmpfile2,err); if(*err!=RDFeed::ErrorOk) { unlink(tmpfile); return 0; } if(system(cmd)!=0) { emit postProgressChanged(totalPostSteps()); unlink(tmpfile); unlink(tmpfile2); *err=RDFeed::ErrorGeneral; return 0; } emit postProgressChanged(3); QFile file(tmpfile2); int length=file.size(); unsigned cast_id=CreateCast(&destfile,length,time_length); RDPodcast *cast=new RDPodcast(cast_id); cmd=cast->audioUploadCommand(tmpfile2); if(system(cmd)!=0) { sql=QString().sprintf("delete from PODCASTS where ID=%u",cast_id); q=new RDSqlQuery(sql); delete q; delete cast; unlink(tmpfile); unlink(tmpfile2); *err=RDFeed::ErrorUploadFailed; return 0; } delete cast; unlink(QString().sprintf("%s.wav",(const char *)tmpfile)); unlink(tmpfile); unlink(tmpfile2); emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorOk; return cast_id; }
unsigned RDFeed::postFile(RDStation *station,const QString &srcfile,Error *err, bool log_debug,RDConfig *config) { QString sql; RDSqlQuery *q; QString cmd; QString tmpfile; QString tmpfile2; QString destfile; int time_length=0; RDUpload *upload=NULL; RDUpload::ErrorCode upload_err; RDWaveFile *wave=NULL; unsigned audio_time=0; emit postProgressChanged(0); emit postProgressChanged(1); qApp->processEvents(); // // Convert Cut // tmpfile=GetTempFilename(); RDAudioConvert *conv=new RDAudioConvert(station->name(),this); conv->setSourceFile(srcfile); conv->setDestinationFile(tmpfile); RDSettings *settings=new RDSettings(); settings->setFormat(uploadFormat()); settings->setChannels(uploadChannels()); settings->setSampleRate(uploadSampleRate()); settings->setBitRate(uploadBitRate()); settings->setNormalizationLevel(normalizeLevel()/100); conv->setDestinationSettings(settings); switch(conv->convert()) { case RDAudioConvert::ErrorOk: wave=new RDWaveFile(tmpfile); if(wave->openWave()) { audio_time=wave->getExtTimeLength(); } delete wave; break; case RDAudioConvert::ErrorInvalidSettings: case RDAudioConvert::ErrorFormatNotSupported: emit postProgressChanged(totalPostSteps()); delete settings; delete conv; *err=RDFeed::ErrorUnsupportedType; unlink(tmpfile); return 0; case RDAudioConvert::ErrorNoSource: case RDAudioConvert::ErrorNoDestination: case RDAudioConvert::ErrorInternal: case RDAudioConvert::ErrorInvalidSource: case RDAudioConvert::ErrorNoDisc: case RDAudioConvert::ErrorNoTrack: case RDAudioConvert::ErrorInvalidSpeed: case RDAudioConvert::ErrorFormatError: case RDAudioConvert::ErrorNoSpace: emit postProgressChanged(totalPostSteps()); delete settings; delete conv; *err=RDFeed::ErrorGeneral; unlink(tmpfile); return 0; } delete settings; delete conv; // // Upload // emit postProgressChanged(2); emit postProgressChanged(3); qApp->processEvents(); QFile file(tmpfile); int length=file.size(); unsigned cast_id=CreateCast(&destfile,length,time_length); RDPodcast *cast=new RDPodcast(cast_id); upload=new RDUpload(station->name(),this); upload->setSourceFile(tmpfile); upload->setDestinationUrl(purgeUrl()+"/"+cast->audioFilename()); switch((upload_err=upload->runUpload(purgeUsername(),purgePassword(), log_debug))) { case RDUpload::ErrorOk: sql=QString().sprintf("update PODCASTS set AUDIO_TIME=%u where ID=%u", audio_time,cast_id); q=new RDSqlQuery(sql); delete q; break; default: emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorUploadFailed; printf("Upload Error: %s\n",(const char *)RDUpload::errorText(upload_err)); sql=QString().sprintf("delete from PODCASTS where ID=%u",cast_id); q=new RDSqlQuery(sql); delete q; delete upload; delete cast; *err=RDFeed::ErrorUploadFailed; unlink(tmpfile); return 0; } delete upload; delete cast; unlink(QString().sprintf("%s.wav",(const char *)tmpfile)); unlink(tmpfile); emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorOk; return cast_id; }
unsigned RDFeed::postCut(RDUser *user,RDStation *station, const QString &cutname,Error *err,bool log_debug, RDConfig *config) { QString tmpfile; QString destfile; QString sql; RDSqlQuery *q; RDPodcast *cast=NULL; RDUpload *upload=NULL; RDUpload::ErrorCode upload_err; RDAudioConvert::ErrorCode audio_conv_err; emit postProgressChanged(0); emit postProgressChanged(1); // // Export Cut // tmpfile=GetTempFilename(); RDCut *cut=new RDCut(cutname); if(!cut->exists()) { delete cut; *err=RDFeed::ErrorCannotOpenFile; return 0; } RDAudioExport *conv=new RDAudioExport(station,config,this); conv->setCartNumber(cut->cartNumber()); conv->setCutNumber(cut->cutNumber()); conv->setDestinationFile(tmpfile); conv->setRange(cut->startPoint(),cut->endPoint()); RDSettings *settings=new RDSettings(); settings->setFormat(uploadFormat()); settings->setChannels(uploadChannels()); settings->setSampleRate(uploadSampleRate()); settings->setBitRate(uploadBitRate()); settings->setNormalizationLevel(normalizeLevel()/100); conv->setDestinationSettings(settings); switch(conv->runExport(user->name(),user->password(),&audio_conv_err)) { case RDAudioExport::ErrorOk: break; case RDAudioExport::ErrorInvalidSettings: delete settings; delete conv; *err=RDFeed::ErrorUnsupportedType; unlink(tmpfile); return 0; case RDAudioExport::ErrorNoSource: case RDAudioExport::ErrorNoDestination: case RDAudioExport::ErrorInternal: case RDAudioExport::ErrorUrlInvalid: case RDAudioExport::ErrorService: case RDAudioExport::ErrorInvalidUser: case RDAudioExport::ErrorAborted: case RDAudioExport::ErrorConverter: delete settings; delete conv; *err=RDFeed::ErrorGeneral; unlink(tmpfile); return 0; } delete settings; delete conv; // // Upload // emit postProgressChanged(2); QFile file(tmpfile); int length=file.size(); unsigned cast_id=CreateCast(&destfile,length,cut->length()); delete cut; cast=new RDPodcast(cast_id); upload=new RDUpload(station->name(),this); upload->setSourceFile(tmpfile); upload->setDestinationUrl(purgeUrl()+"/"+cast->audioFilename()); switch((upload_err=upload->runUpload(purgeUsername(),purgePassword(), log_debug))) { case RDUpload::ErrorOk: *err=RDFeed::ErrorOk; break; default: emit postProgressChanged(totalPostSteps()); *err=RDFeed::ErrorUploadFailed; sql=QString().sprintf("delete from PODCASTS where ID=%u",cast_id); q=new RDSqlQuery(sql); delete q; delete upload; delete cast; *err=RDFeed::ErrorUploadFailed; unlink(tmpfile); return 0; } emit postProgressChanged(3); unlink(tmpfile); delete upload; delete cast; emit postProgressChanged(totalPostSteps()); return cast_id; }