DiskRipper::DiskRipper(QString *filter,QString *group,QString *schedcode, bool profile_rip,QWidget *parent,const char *name) : QDialog(parent,name) { rip_isrc_read=false; rip_filter_text=filter; rip_group_text=group; rip_schedcode_text=schedcode; rip_profile_rip=profile_rip; rip_aborting=false; // // Fix the Window Size // setMinimumWidth(sizeHint().width()); setMinimumHeight(sizeHint().height()); // // Generate Fonts // QFont button_font=QFont("Helvetica",12,QFont::Bold); button_font.setPixelSize(12); QFont label_font=QFont("Helvetica",12,QFont::Bold); label_font.setPixelSize(12); setCaption(tr("Rip Disk")); // // Create Dialogs // rip_wavedata_dialog=new RDWaveDataDialog("RDLibrary",this); // // Create Temporary Directory // char path[PATH_MAX]; strncpy(path,RDTempDir(),PATH_MAX); strcat(path,"/XXXXXX"); if(mkdtemp(path)==NULL) { QMessageBox::warning(this,"RDLibrary - "+tr("Ripper Error"), tr("Unable to create temporary directory!")); } else { rip_cdda_dir.setPath(path); } // // The CDROM Drive // if(rip_profile_rip) { rip_cdrom=new RDCdPlayer(stdout,this); } else { rip_cdrom=new RDCdPlayer(NULL,this); } connect(rip_cdrom,SIGNAL(ejected()),this,SLOT(ejectedData())); connect(rip_cdrom,SIGNAL(mediaChanged()),this,SLOT(mediaChangedData())); connect(rip_cdrom,SIGNAL(played(int)),this,SLOT(playedData(int))); connect(rip_cdrom,SIGNAL(stopped()),this,SLOT(stoppedData())); rip_cdrom->setDevice(rdlibrary_conf->ripperDevice()); rip_cdrom->open(); // // CDDB Stuff // if(rip_profile_rip) { rip_cddb_lookup=new RDCddbLookup(stdout,this); } else { rip_cddb_lookup=new RDCddbLookup(NULL,this); } connect(rip_cddb_lookup,SIGNAL(done(RDCddbLookup::Result)), this,SLOT(cddbDoneData(RDCddbLookup::Result))); // // Artist Label // QLabel *label=new QLabel(tr("Artist:"),this); label->setGeometry(10,10,50,18); label->setFont(label_font); label->setAlignment(AlignRight|AlignVCenter); rip_artist_edit=new QLineEdit(this); // // Album Edit // label=new QLabel(tr("Album:"),this); label->setGeometry(10,32,50,18); label->setFont(label_font); label->setAlignment(AlignRight|AlignVCenter); rip_album_edit=new QLineEdit(this); // // Other Edit // label=new QLabel(tr("Other:"),this); label->setGeometry(10,54,50,16); label->setFont(label_font); label->setAlignment(AlignRight); rip_other_edit=new QTextEdit(this); rip_other_edit->setReadOnly(true); // // Apply FreeDB Check Box // rip_apply_box=new QCheckBox(this,"rip_apply_box"); rip_apply_box->setChecked(true); rip_apply_box->setDisabled(true); rip_apply_label= new QLabel(rip_apply_box,tr("Apply FreeDB Values to Carts"),this); rip_apply_label->setFont(label_font); rip_apply_label->setAlignment(AlignLeft); rip_apply_box->setChecked(false); rip_apply_label->setDisabled(true); // // Track List // rip_track_list=new QListView(this); rip_track_list->setAllColumnsShowFocus(true); rip_track_list->setItemMargin(5); rip_track_list->setSorting(-1); rip_track_list->setSelectionMode(QListView::Extended); connect(rip_track_list,SIGNAL(selectionChanged()), this,SLOT(selectionChangedData())); connect(rip_track_list, SIGNAL(doubleClicked(QListViewItem *,const QPoint &,int)), this, SLOT(doubleClickedData(QListViewItem *,const QPoint &,int))); rip_track_label=new QLabel(rip_track_list,tr("Tracks"),this); rip_track_label->setFont(label_font); rip_track_list->addColumn(tr("TRACK")); rip_track_list->setColumnAlignment(0,Qt::AlignHCenter); rip_track_list->addColumn(tr("LENGTH")); rip_track_list->setColumnAlignment(1,Qt::AlignRight); rip_track_list->addColumn(tr("TITLE")); rip_track_list->setColumnAlignment(2,Qt::AlignLeft); rip_track_list->addColumn(tr("OTHER")); rip_track_list->setColumnAlignment(3,Qt::AlignLeft); rip_track_list->addColumn(tr("TYPE")); rip_track_list->setColumnAlignment(4,Qt::AlignLeft); rip_track_list->addColumn(tr("CUT")); rip_track_list->setColumnAlignment(5,Qt::AlignLeft); // // Progress Bars // rip_disk_bar=new QProgressBar(this); rip_diskbar_label=new QLabel(tr("Disk Progress"),this); rip_diskbar_label->setFont(label_font); rip_diskbar_label->setAlignment(AlignLeft|AlignVCenter); rip_diskbar_label->setDisabled(true); rip_track_bar=new QProgressBar(this); rip_trackbar_label=new QLabel(tr("Track Progress"),this); rip_trackbar_label->setFont(label_font); rip_trackbar_label->setAlignment(AlignLeft|AlignVCenter); rip_trackbar_label->setDisabled(true); // // Eject Button // rip_eject_button=new RDTransportButton(RDTransportButton::Eject,this); connect(rip_eject_button,SIGNAL(clicked()),this,SLOT(ejectButtonData())); // // Play Button // rip_play_button=new RDTransportButton(RDTransportButton::Play,this); connect(rip_play_button,SIGNAL(clicked()),this,SLOT(playButtonData())); // // Stop Button // rip_stop_button=new RDTransportButton(RDTransportButton::Stop,this); rip_stop_button->setOnColor(red); rip_stop_button->on(); connect(rip_stop_button,SIGNAL(clicked()),this,SLOT(stopButtonData())); // // Set Cut Button // rip_setcut_button=new QPushButton(tr("Set\n&Cart/Cut"),this); rip_setcut_button->setFont(button_font); rip_setcut_button->setDisabled(true); connect(rip_setcut_button,SIGNAL(clicked()),this,SLOT(setCutButtonData())); // // Set Multi Tracks Button // rip_setall_button=new QPushButton(tr("Add Cart\nPer Track"),this); rip_setall_button->setFont(button_font); rip_setall_button->setDisabled(true); connect(rip_setall_button,SIGNAL(clicked()),this,SLOT(setMultiButtonData())); // // Set Single Button // rip_setsingle_button=new QPushButton(tr("Add Single\nCart"),this); rip_setsingle_button->setFont(button_font); rip_setsingle_button->setDisabled(true); connect(rip_setsingle_button,SIGNAL(clicked()), this,SLOT(setSingleButtonData())); // // Set Cart Label Button // rip_cartlabel_button=new QPushButton(tr("Modify\nCart Label"),this); rip_cartlabel_button->setFont(button_font); rip_cartlabel_button->setDisabled(true); connect(rip_cartlabel_button,SIGNAL(clicked()), this,SLOT(modifyCartLabelData())); // // Clear Selection Button // rip_clear_button=new QPushButton(tr("Clear\nSelection"),this); rip_clear_button->setFont(button_font); rip_clear_button->setDisabled(true); connect(rip_clear_button,SIGNAL(clicked()),this,SLOT(clearSelectionData())); // // Normalize Check Box // rip_normalize_box=new QCheckBox(this); rip_normalize_box->setChecked(true); rip_normalizebox_label=new QLabel(rip_normalize_box,tr("Normalize"),this); rip_normalizebox_label->setFont(label_font); rip_normalizebox_label->setAlignment(AlignLeft|AlignVCenter); connect(rip_normalize_box,SIGNAL(toggled(bool)), this,SLOT(normalizeCheckData(bool))); // // Normalize Level // rip_normalize_spin=new QSpinBox(this); rip_normalize_spin->setRange(-30,0); rip_normalize_label=new QLabel(rip_normalize_spin,tr("Level:"),this); rip_normalize_label->setFont(label_font); rip_normalize_label->setAlignment(AlignRight|AlignVCenter); rip_normalize_unit=new QLabel(tr("dBFS"),this); rip_normalize_unit->setFont(label_font); rip_normalize_unit->setAlignment(AlignLeft|AlignVCenter); // // Autotrim Check Box // rip_autotrim_box=new QCheckBox(this); rip_autotrim_box->setChecked(true); rip_autotrimbox_label=new QLabel(rip_autotrim_box,tr("Autotrim"),this); rip_autotrimbox_label->setFont(label_font); rip_autotrimbox_label->setAlignment(AlignLeft|AlignVCenter); connect(rip_autotrim_box,SIGNAL(toggled(bool)), this,SLOT(autotrimCheckData(bool))); // // Autotrim Level // rip_autotrim_spin=new QSpinBox(this); rip_autotrim_spin->setRange(-99,0); rip_autotrim_label=new QLabel(rip_autotrim_spin,tr("Level:"),this); rip_autotrim_label->setFont(label_font); rip_autotrim_label->setAlignment(AlignRight|AlignVCenter); rip_autotrim_unit=new QLabel(tr("dBFS"),this); rip_autotrim_unit->setFont(label_font); rip_autotrim_unit->setAlignment(AlignLeft|AlignVCenter); // // Channels // rip_channels_box=new QComboBox(this); rip_channels_label=new QLabel(rip_channels_box,tr("Channels:"),this); rip_channels_label->setFont(label_font); rip_channels_label->setAlignment(AlignRight|AlignVCenter); // // Rip Disc Button // rip_rip_button=new QPushButton(tr("&Rip\nDisc"),this); rip_rip_button->setFont(button_font); connect(rip_rip_button,SIGNAL(clicked()),this,SLOT(ripDiskButtonData())); rip_rip_button->setDisabled(true); // // Close Button // rip_close_button=new QPushButton(tr("&Close"),this); rip_close_button->setFont(button_font); connect(rip_close_button,SIGNAL(clicked()),this,SLOT(closeData())); // // Populate Data // rip_normalize_spin->setValue(rdlibrary_conf->ripperLevel()/100); rip_autotrim_spin->setValue(rdlibrary_conf->trimThreshold()/100); rip_channels_box->insertItem("1"); rip_channels_box->insertItem("2"); rip_channels_box->setCurrentItem(rdlibrary_conf->defaultChannels()-1); rip_done=false; }
QString RDFeed::GetTempFilename() const { char tempname[PATH_MAX]; sprintf(tempname,"%s/podcastXXXXXX",(const char *)RDTempDir()); if(mkstemp(tempname)<0) { return QString(); } return QString(tempname); }
bool RDTextFile(const QString &data) { char tmpfile[256]; QString editor; if(getenv("VISUAL")==NULL) { #ifdef WIN32 editor=RD_WIN32_EDITOR; #else editor=RD_LINUX_EDITOR; #endif // WIN32 } else { editor=getenv("VISUAL"); } #ifdef WIN32 QString tempfile=QString().sprintf("%s\\rd-%s",(const char *)RDTempDir(), (const char *)QTime::currentTime().toString("hhmmsszzz")); FILE *f=fopen(tempfile,"w"); if(f==NULL) { QMessageBox::warning(NULL,"File Error","Unable to create temporary file"); return false; } fprintf(f,"%s",(const char *)data); fclose(f); QStringList args; args+=editor; args+=tempfile; QProcess *proc=new QProcess(args); proc->launch(""); delete proc; #else strcpy(tmpfile,"/tmp/rdreportXXXXXX"); int fd=mkstemp(tmpfile); if(fd<0) { QMessageBox::warning(NULL,"File Error","Unable to create temporary file"); return false; } else { write(fd,data,data.length()); ::close(fd); if(fork()==0) { system(QString().sprintf("%s %s",(const char *)editor,tmpfile)); unlink(tmpfile); exit(0); } } #endif // WIN32 return true; }
MainObject::MainObject(QObject *parent) :QObject(parent) { new RDApplication(RDApplication::Console,"rdrepld",RDREPLD_USAGE); // // Make sure we're the only instance running // if(RDCheckDaemon(RD_RDREPLD_PID)) { printf("rdrepld: aborting - multiple instances not allowed"); exit(1); } // // Initialize Data Structures // debug=false; // // Calculate Temporary Directory // repl_temp_dir=RDTempDir(); // // Detach // if(qApp->argc()==1) { RDDetach(rda->config()->logCoreDumpDirectory()); } else { debug=true; } ::signal(SIGINT,SigHandler); ::signal(SIGTERM,SigHandler); ::signal(SIGCHLD,SigHandler); if(!RDWritePid(RD_PID_DIR,"rdrepld.pid")) { printf("rdrepld: aborting - can't write pid file\n"); exit(1); } // // Start the Main Loop // repl_loop_timer=new QTimer(this); connect(repl_loop_timer,SIGNAL(timeout()),this,SLOT(mainLoop())); repl_loop_timer->start(RD_RDREPL_SCAN_INTERVAL,true); rda->config()->log("rdrepld",RDConfig::LogNotice,"started"); }
RDFormPost::RDFormPost(RDFormPost::Encoding encoding,unsigned maxsize, bool auto_delete) { char tempdir[PATH_MAX]; bool ok=false; post_encoding=encoding; post_error=RDFormPost::ErrorNotInitialized; post_auto_delete=auto_delete; // // Verify Transfer Type // if(getenv("REQUEST_METHOD")==NULL) { post_error=RDFormPost::ErrorNotPost; return; } if(QString(getenv("REQUEST_METHOD")).lower()!="post") { post_error=RDFormPost::ErrorNotPost; return; } // // Verify Size // if(getenv("CONTENT_LENGTH")==NULL) { post_error=RDFormPost::ErrorPostTooLarge; return; } post_content_length=QString(getenv("CONTENT_LENGTH")).toUInt(&ok); if((!ok)||((maxsize>0)&&(post_content_length>maxsize))) { post_error=RDFormPost::ErrorPostTooLarge; return; } // // Initialize Temp Directory Path // strcpy(tempdir,RDTempDir()); strcat(tempdir,"/rivendellXXXXXX"); post_tempdir=mkdtemp(tempdir); if(post_tempdir.isNull()) { post_error=RDFormPost::ErrorNoTempDir; return; } // // (Perhaps) autodetect the encoding type // char first[2]; read(0,first,1); if(post_encoding==RDFormPost::AutoEncoded) { if(first[0]=='-') { post_encoding=RDFormPost::MultipartEncoded; } else { post_encoding=RDFormPost::UrlEncoded; } } switch(post_encoding) { case RDFormPost::UrlEncoded: LoadUrlEncoding(first[0]); break; case RDFormPost::MultipartEncoded: LoadMultipartEncoding(first[0]); break; case RDFormPost::AutoEncoded: break; } }
CdRipper::CdRipper(QString cutname,RDCddbRecord *rec,RDLibraryConf *conf, bool profile_rip,QWidget *parent) : QDialog(parent) { rip_profile_rip=profile_rip; rip_isrc_read=false; // // Fix the Window Size // setMinimumWidth(sizeHint().width()); setMinimumHeight(sizeHint().height()); // // Generate Fonts // QFont button_font=QFont("Helvetica",12,QFont::Bold); button_font.setPixelSize(12); QFont label_font=QFont("Helvetica",12,QFont::Bold); label_font.setPixelSize(12); rip_conf=conf; rip_cddb_record=rec; rip_track[0]=-1; rip_track[1]=-1; rip_title=NULL; setCaption("Rip CD"); // // Create Temporary Directory // char path[PATH_MAX]; strncpy(path,RDTempDir(),PATH_MAX); strcat(path,"/XXXXXX"); if(mkdtemp(path)==NULL) { QMessageBox::warning(this,"RDLibrary - "+tr("Ripper Error"), tr("Unable to create temporary directory!")); } else { rip_cdda_dir.setPath(path); } // // Target Cut // rip_cut=new RDCut(cutname); // // The CDROM Drive // if(rip_profile_rip) { rip_cdrom=new RDCdPlayer(stdout,this); } else { rip_cdrom=new RDCdPlayer(NULL,this); } connect(rip_cdrom,SIGNAL(ejected()),this,SLOT(ejectedData())); connect(rip_cdrom,SIGNAL(mediaChanged()),this,SLOT(mediaChangedData())); connect(rip_cdrom,SIGNAL(played(int)),this,SLOT(playedData(int))); connect(rip_cdrom,SIGNAL(stopped()),this,SLOT(stoppedData())); rip_cdrom->setDevice(rip_conf->ripperDevice()); rip_cdrom->open(); // // CDDB Stuff // if(rip_profile_rip) { rip_cddb_lookup=new RDCddbLookup(stdout,this); } else { rip_cddb_lookup=new RDCddbLookup(NULL,this); } connect(rip_cddb_lookup,SIGNAL(done(RDCddbLookup::Result)), this,SLOT(cddbDoneData(RDCddbLookup::Result))); // // Title Selector // rip_title_label=new QLabel(tr("Title:"),this); rip_title_label->setFont(label_font); rip_title_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); rip_title_box=new QComboBox(this); rip_title_box->insertItem(tr("[none]")); // // Artist Label // rip_artist_label=new QLabel(tr("Artist:"),this); rip_artist_label->setFont(label_font); rip_artist_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); rip_artist_edit=new QLineEdit(this); // // Album Edit // rip_album_label=new QLabel(tr("Album:"),this); rip_album_label->setFont(label_font); rip_album_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); rip_album_edit=new QLineEdit(this); // // Other Edit // rip_other_label=new QLabel(tr("Other:"),this); rip_other_label->setFont(label_font); rip_other_label->setAlignment(Qt::AlignRight); rip_other_edit=new Q3TextEdit(this); rip_other_edit->setReadOnly(true); // // Apply FreeDB Check Box // rip_apply_box=new QCheckBox(this); rip_apply_box->setChecked(true); rip_apply_box->setDisabled(true); rip_apply_label= new QLabel(rip_apply_box,tr("Apply FreeDB Values to Cart"),this); rip_apply_label->setFont(label_font); rip_apply_label->setAlignment(Qt::AlignLeft); rip_apply_box->setChecked(false); rip_apply_label->setDisabled(true); // // Track List // rip_track_list=new RDListView(this); rip_track_list->setAllColumnsShowFocus(true); rip_track_list->setSelectionMode(Q3ListView::Extended); rip_track_list->setItemMargin(5); rip_track_list->setSorting(-1); connect(rip_track_list,SIGNAL(selectionChanged()), this,SLOT(trackSelectionChangedData())); rip_track_label=new QLabel(rip_track_list,tr("Tracks"),this); rip_track_label->setFont(label_font); rip_track_list->addColumn(tr("TRACK")); rip_track_list->setColumnAlignment(0,Qt::AlignHCenter); rip_track_list->addColumn(tr("LENGTH")); rip_track_list->setColumnAlignment(1,Qt::AlignRight); rip_track_list->addColumn(tr("TITLE")); rip_track_list->setColumnAlignment(2,Qt::AlignLeft); rip_track_list->addColumn(tr("OTHER")); rip_track_list->setColumnAlignment(3,Qt::AlignLeft); rip_track_list->addColumn(tr("TYPE")); rip_track_list->setColumnAlignment(4,Qt::AlignLeft); // // Progress Bar // rip_bar=new Q3ProgressBar(this); // // Eject Button // rip_eject_button=new RDTransportButton(RDTransportButton::Eject,this); connect(rip_eject_button,SIGNAL(clicked()),this,SLOT(ejectButtonData())); // // Play Button // rip_play_button=new RDTransportButton(RDTransportButton::Play,this); connect(rip_play_button,SIGNAL(clicked()),this,SLOT(playButtonData())); // // Stop Button // rip_stop_button=new RDTransportButton(RDTransportButton::Stop,this); rip_stop_button->setOnColor(Qt::red); rip_stop_button->on(); connect(rip_stop_button,SIGNAL(clicked()),this,SLOT(stopButtonData())); // // Rip Track Button // rip_rip_button=new QPushButton(tr("&Rip\nTrack"),this); rip_rip_button->setFont(button_font); rip_rip_button->setDisabled(true); connect(rip_rip_button,SIGNAL(clicked()),this,SLOT(ripTrackButtonData())); // // Normalize Check Box // rip_normalize_box=new QCheckBox(this); rip_normalize_box->setChecked(true); rip_normalize_box_label=new QLabel(rip_normalize_box,tr("Normalize"),this); rip_normalize_box_label->setFont(label_font); rip_normalize_box_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); connect(rip_normalize_box,SIGNAL(toggled(bool)), this,SLOT(normalizeCheckData(bool))); // // Normalize Level // rip_normalize_spin=new QSpinBox(this); rip_normalize_spin->setRange(-30,0); rip_normalize_label=new QLabel(rip_normalize_spin,tr("Level:"),this); rip_normalize_label->setFont(label_font); rip_normalize_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); rip_normalize_unit=new QLabel(tr("dBFS"),this); rip_normalize_unit->setFont(label_font); rip_normalize_unit->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); // // Autotrim Check Box // rip_autotrim_box=new QCheckBox(this); rip_autotrim_box->setChecked(true); rip_autotrim_box_label=new QLabel(rip_autotrim_box,tr("Autotrim"),this); rip_autotrim_box_label->setFont(label_font); rip_autotrim_box_label->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); connect(rip_autotrim_box,SIGNAL(toggled(bool)), this,SLOT(autotrimCheckData(bool))); // // Autotrim Level // rip_autotrim_spin=new QSpinBox(this); rip_autotrim_spin->setRange(-99,0); rip_autotrim_label=new QLabel(rip_autotrim_spin,tr("Level:"),this); rip_autotrim_label->setFont(label_font); rip_autotrim_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); rip_autotrim_unit=new QLabel(tr("dBFS"),this); rip_autotrim_unit->setFont(label_font); rip_autotrim_unit->setAlignment(Qt::AlignLeft|Qt::AlignVCenter); // // Channels // rip_channels_box=new QComboBox(this); rip_channels_label=new QLabel(rip_channels_box,tr("Channels:"),this); rip_channels_label->setFont(label_font); rip_channels_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); // // Close Button // rip_close_button=new QPushButton("&Close",this); rip_close_button->setFont(button_font); connect(rip_close_button,SIGNAL(clicked()),this,SLOT(closeData())); // // Populate Data // rip_normalize_spin->setValue(rip_conf->ripperLevel()/100); rip_autotrim_spin->setValue(rip_conf->trimThreshold()/100); rip_channels_box->insertItem("1"); rip_channels_box->insertItem("2"); rip_channels_box->setCurrentItem(rip_conf->defaultChannels()-1); rip_done=false; }
void CdRipper::ripTrackButtonData() { RDCdRipper *ripper=NULL; rip_done=false; rip_rip_aborted=false; if(rip_cut->length()>0) { switch(QMessageBox::warning(this,tr("Audio Exists"), tr("This will overwrite the existing recording.\nDo you want to proceed?"), QMessageBox::Yes,QMessageBox::No)) { case QMessageBox::No: case Qt::NoButton: return; default: break; } } if(cut_clipboard!=NULL) { if(rip_cut->cutName()==cut_clipboard->cutName()) { switch(QMessageBox::warning(this,tr("Empty Clipboard"), tr("Ripping this cut will also empty the clipboard.\nDo you still want to proceed?"), QMessageBox::Yes, QMessageBox::No)) { case QMessageBox::No: case Qt::NoButton: return; default: break; } delete cut_clipboard; cut_clipboard=NULL; } } rip_eject_button->setDisabled(true); rip_play_button->setDisabled(true); rip_stop_button->setDisabled(true); rip_rip_button->setText(tr("Abort\nRip")); rip_close_button->setDisabled(true); // // Set Track Title // if(rip_apply_box->isChecked()) { *rip_title=rip_title_box->currentText(); *rip_artist=rip_artist_edit->text(); *rip_album=rip_album_edit->text(); } // // Read ISRCs // if(!rip_isrc_read) { if(rda->libraryConf()->readIsrc()) { rip_cddb_lookup->readIsrc(rip_cdda_dir.path(),rip_conf->ripperDevice()); } rip_isrc_read=true; } // // Rip from disc // RDAudioImport::ErrorCode conv_err; RDAudioConvert::ErrorCode audio_conv_err; RDCdRipper::ErrorCode ripper_err; QString tmpdir=RDTempDir(); QString tmpfile=tmpdir+"/"+RIPPER_TEMP_WAV; if(rip_profile_rip) { ripper=new RDCdRipper(stdout,this); } else { ripper=new RDCdRipper(NULL,this); } disconnect(rip_rip_button,SIGNAL(clicked()),this,SLOT(ripTrackButtonData())); connect(rip_rip_button,SIGNAL(clicked()),ripper,SLOT(abort())); rip_bar->setTotalSteps(ripper->totalSteps()+1); connect(ripper,SIGNAL(progressChanged(int)),rip_bar,SLOT(setProgress(int))); RDAudioImport *conv=NULL; RDSettings *settings=NULL; ripper->setDevice(rip_conf->ripperDevice()); ripper->setDestinationFile(tmpfile); rip_track[0]=-1; rip_track[1]=-1; Q3ListViewItem *item=rip_track_list->firstChild(); while(item!=NULL) { if(item->isSelected()) { if(rip_track[0]<0) { rip_track[0]=item->text(0).toInt()-1; } rip_track[1]=item->text(0).toInt()-1; } item=item->nextSibling(); } switch((ripper_err=ripper->rip(rip_track[0],rip_track[1]))) { case RDCdRipper::ErrorOk: conv=new RDAudioImport(rda->station(),rda->config(),this); conv->setSourceFile(tmpfile); conv->setCartNumber(rip_cut->cartNumber()); conv->setCutNumber(rip_cut->cutNumber()); conv->setUseMetadata(false); settings=new RDSettings(); if(rda->libraryConf()->defaultFormat()==1) { settings->setFormat(RDSettings::MpegL2Wav); } else { settings->setFormat(RDSettings::Pcm16); } settings->setChannels(rip_channels_box->currentText().toInt()); settings->setSampleRate(rda->system()->sampleRate()); settings->setBitRate(rda->libraryConf()->defaultBitrate()); if(rip_normalize_box->isChecked()) { settings->setNormalizationLevel(rip_normalize_spin->value()); } if(rip_autotrim_box->isChecked()) { settings->setAutotrimLevel(rip_autotrim_spin->value()); } conv->setDestinationSettings(settings); switch((conv_err=conv-> runImport(rda->user()->name(),rda->user()->password(),&audio_conv_err))) { case RDAudioImport::ErrorOk: QMessageBox::information(this,tr("Rip Complete"),tr("Rip complete!")); break; default: QMessageBox::warning(this,tr("RDLibrary - Importer Error"), RDAudioImport::errorText(conv_err,audio_conv_err)); break; } delete settings; delete conv; break; case RDCdRipper::ErrorNoDevice: case RDCdRipper::ErrorNoDestination: case RDCdRipper::ErrorInternal: case RDCdRipper::ErrorNoDisc: case RDCdRipper::ErrorNoTrack: case RDCdRipper::ErrorAborted: QMessageBox::warning(this,tr("RDLibrary - Ripper Error"), RDCdRipper::errorText(ripper_err)); break; } delete ripper; unlink(tmpfile); rmdir(tmpdir); rip_bar->setPercentageVisible(false); rip_bar->reset(); rip_eject_button->setEnabled(true); rip_play_button->setEnabled(true); rip_stop_button->setEnabled(true); rip_rip_button->setText(tr("Rip Track")); connect(rip_rip_button,SIGNAL(clicked()),this,SLOT(ripTrackButtonData())); rip_close_button->setEnabled(true); rip_cdrom->unlock(); rip_done=true; rip_bar->setProgress(0); rip_bar->setPercentageVisible(true); }
void Xport::Export() { RDAudioConvert::ErrorCode conv_err=RDAudioConvert::ErrorOk; int resp_code=0; // // Verify Post // int cartnum=0; if(!xport_post->getValue("CART_NUMBER",&cartnum)) { XmlExit("Missing CART_NUMBER",400); } int cutnum=0; if(!xport_post->getValue("CUT_NUMBER",&cutnum)) { XmlExit("Missing CUT_NUMBER",400); } int format=0; if(!xport_post->getValue("FORMAT",&format)) { XmlExit("Missing FORMAT",400); } int channels=0; if(!xport_post->getValue("CHANNELS",&channels)) { XmlExit("Missing CHANNELS",400); } int sample_rate=0; if(!xport_post->getValue("SAMPLE_RATE",&sample_rate)) { XmlExit("Missing SAMPLE_RATE",400); } int bit_rate=0; if(!xport_post->getValue("BIT_RATE",&bit_rate)) { XmlExit("Missing BIT_RATE",400); } int quality=0; if(!xport_post->getValue("QUALITY",&quality)) { XmlExit("Missing QUALITY",400); } int start_point=-1; if(!xport_post->getValue("START_POINT",&start_point)) { XmlExit("Missing START_POINT",400); } int end_point=-1; if(!xport_post->getValue("END_POINT",&end_point)) { XmlExit("Missing END_POINT",400); } int normalization_level=0; if(!xport_post->getValue("NORMALIZATION_LEVEL",&normalization_level)) { XmlExit("Missing NORMALIZATION_LEVEL",400); } int enable_metadata=false; if(!xport_post->getValue("ENABLE_METADATA",&enable_metadata)) { XmlExit("Missing ENABLE_METADATA",400); } if(!RDCart::exists(cartnum)) { XmlExit("No such cart",404); } if(!RDCut::exists(cartnum,cutnum)) { XmlExit("No such cut",404); } // // Verify User Perms // if(!xport_user->cartAuthorized(cartnum)) { XmlExit("No such cart",404); } // // Generate Metadata // RDWaveData *wavedata=NULL; float speed_ratio=1.0; if(enable_metadata!=0) { wavedata=new RDWaveData(); } if(wavedata!=NULL) { RDCart *cart=new RDCart(cartnum); RDCut *cut=new RDCut(cartnum,cutnum); cart->getMetadata(wavedata); cut->getMetadata(wavedata); if(cart->enforceLength()) { speed_ratio=(float)cut->length()/(float)cart->forcedLength(); } delete cut; delete cart; } // // Export Cut // int fd; ssize_t n; uint8_t data[2048]; QString tmpdir=RDTempDir(); QString tmpfile=tmpdir+"/exported_audio"; RDSettings *settings=new RDSettings(); settings->setFormat((RDSettings::Format)format); settings->setChannels(channels); settings->setSampleRate(sample_rate); settings->setBitRate(bit_rate); settings->setQuality(quality); settings->setNormalizationLevel(normalization_level); RDAudioConvert *conv=new RDAudioConvert(xport_config->stationName()); conv->setSourceFile(RDCut::pathName(cartnum,cutnum)); conv->setDestinationFile(tmpfile); conv->setDestinationSettings(settings); conv->setDestinationWaveData(wavedata); conv->setRange(start_point,end_point); conv->setSpeedRatio(speed_ratio); switch(conv_err=conv->convert()) { case RDAudioConvert::ErrorOk: switch(settings->format()) { case RDSettings::Pcm16: case RDSettings::Pcm24: printf("Content-type: audio/x-wav\n\n"); break; case RDSettings::MpegL1: case RDSettings::MpegL2: case RDSettings::MpegL2Wav: case RDSettings::MpegL3: printf("Content-type: audio/x-mpeg\n\n"); break; case RDSettings::OggVorbis: printf("Content-type: audio/ogg\n\n"); break; case RDSettings::Flac: printf("Content-type: audio/flac\n\n"); break; } fflush(NULL); if((fd=open(tmpfile,O_RDONLY))>=0) { while((n=read(fd,data,2048))>0) { write(1,data,n); } } close(fd); unlink(tmpfile); rmdir(tmpdir); Exit(0); break; case RDAudioConvert::ErrorFormatNotSupported: case RDAudioConvert::ErrorInvalidSettings: resp_code=415; break; case RDAudioConvert::ErrorNoSource: case RDAudioConvert::ErrorNoDestination: case RDAudioConvert::ErrorInvalidSource: case RDAudioConvert::ErrorNoSpace: case RDAudioConvert::ErrorInternal: case RDAudioConvert::ErrorNoDisc: case RDAudioConvert::ErrorNoTrack: case RDAudioConvert::ErrorInvalidSpeed: case RDAudioConvert::ErrorFormatError: resp_code=500; break; } delete conv; delete settings; if(wavedata!=NULL) { delete wavedata; } unlink(tmpfile); rmdir(tmpdir); Exit(resp_code); }
void DiskRipper::RipTrack(int track,int end_track,QString cutname,QString title) { RDCdRipper *ripper=NULL; RDCut *cut=new RDCut(cutname); RDCart *cart=new RDCart(cut->cartNumber()); QString sql; RDSqlQuery *q; // // Create Cut // sql=QString("insert into CUTS set ")+ "CUT_NAME=\""+RDEscapeString(cutname)+"\","+ QString().sprintf("CART_NUMBER=%u,",cut->cartNumber())+ "DESCRIPTION=\""+tr("Cut")+" 001\""; q=new RDSqlQuery(sql); delete q; rip_done=false; rip_rip_aborted=false; rip_track_number=track; rip_title=title; rip_cutname=cutname; if(title.isEmpty()) { rip_trackbar_label->setText(tr("Track Progress")+" - "+tr("Track")+ QString().sprintf(" %d",track)); } else { rip_trackbar_label->setText(tr("Track Progress")+" - "+title); } rip_diskbar_label->setEnabled(true); rip_trackbar_label->setEnabled(true); // // Rip from disc // RDAudioImport::ErrorCode conv_err; RDAudioConvert::ErrorCode audio_conv_err; RDCdRipper::ErrorCode ripper_err; QString tmpdir=RDTempDir(); QString tmpfile=tmpdir+"/"+RIPPER_TEMP_WAV; if(rip_profile_rip) { ripper=new RDCdRipper(stdout,this); } else { ripper=new RDCdRipper(NULL,this); } rip_track_bar->setTotalSteps(ripper->totalSteps()+1); connect(ripper,SIGNAL(progressChanged(int)), rip_track_bar,SLOT(setProgress(int))); connect(rip_rip_button,SIGNAL(clicked()),ripper,SLOT(abort())); RDAudioImport *conv=NULL; RDSettings *settings=NULL; ripper->setDevice(rdlibrary_conf->ripperDevice()); ripper->setDestinationFile(tmpfile); switch((ripper_err=ripper->rip(rip_track_number-1,end_track-1))) { case RDCdRipper::ErrorOk: conv=new RDAudioImport(rdstation_conf,lib_config,this); conv->setSourceFile(tmpfile); conv->setCartNumber(cut->cartNumber()); conv->setCutNumber(cut->cutNumber()); conv->setUseMetadata(false); settings=new RDSettings(); if(rdlibrary_conf->defaultFormat()==1) { settings->setFormat(RDSettings::MpegL2Wav); } else { settings->setFormat(RDSettings::Pcm16); } settings->setChannels(rip_channels_box->currentText().toInt()); settings->setSampleRate(lib_system->sampleRate()); settings->setBitRate(rdlibrary_conf->defaultBitrate()); if(rip_normalize_box->isChecked()) { settings->setNormalizationLevel(rip_normalize_spin->value()); } if(rip_autotrim_box->isChecked()) { settings->setAutotrimLevel(rip_autotrim_spin->value()); } conv->setDestinationSettings(settings); switch((conv_err=conv-> runImport(lib_user->name(),lib_user->password(), &audio_conv_err))) { case RDAudioImport::ErrorOk: cart->setMetadata(rip_wave_datas[track-1]); cut->setDescription(rip_wave_datas[track-1]->title()); cut->setIsrc(rip_cddb_record.isrc(rip_track_number-1)); cart->clearPending(); break; default: cart->remove(rdstation_conf,lib_user,lib_config); QMessageBox::warning(this,tr("RDLibrary - Importer Error"), RDAudioImport::errorText(conv_err,audio_conv_err)); break; } delete settings; delete conv; break; case RDCdRipper::ErrorNoDevice: case RDCdRipper::ErrorNoDestination: case RDCdRipper::ErrorInternal: case RDCdRipper::ErrorNoDisc: case RDCdRipper::ErrorNoTrack: cart->remove(rdstation_conf,lib_user,lib_config); QMessageBox::warning(this,tr("RDLibrary - Ripper Error"), RDCdRipper::errorText(ripper_err)); break; case RDCdRipper::ErrorAborted: rip_aborting=true; cart->remove(rdstation_conf,lib_user,lib_config); break; } delete ripper; unlink(tmpfile); rmdir(tmpdir); rip_track_bar->setProgress(0); rip_track_bar->setPercentageVisible(true); delete cart; delete cut; }