#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "version.h" #include "kscd.h" #include "cddbdlg.h" #include "libkcddb/cdinfodialogbase.h" struct mytoc { unsigned absframe; }; CDDBDlg::CDDBDlg( TQWidget* parent, const char* name ) : KDialogBase( parent, name, false, i18n( "CD Editor" ), Ok|Cancel|User1|User2, Ok, true ) { TDEGlobal::locale()->insertCatalogue("libkcddb"); m_dlgBase = new CDInfoDialogBase( this, "m_dlgBase" ); setMainWidget( m_dlgBase ); setButtonText( User1, i18n( "Upload" ) ); setButtonText( User2, i18n( "Fetch Info" ) ); connect( this, TQ_SIGNAL( okClicked() ), TQ_SLOT( save() ) ); connect( this, TQ_SIGNAL( user1Clicked() ), TQ_SLOT( upload() ) ); connect( this, TQ_SIGNAL( user2Clicked() ), TQ_SIGNAL( cddbQuery() ) ); connect( m_dlgBase, TQ_SIGNAL( play( int ) ), TQ_SIGNAL( play( int ) ) ); cddbClient = new KCDDB::Client(); cddbClient->setBlockingMode(false); connect (cddbClient, TQ_SIGNAL(finished(CDDB::Result)), TQ_SLOT(submitFinished(CDDB::Result))); } CDDBDlg::~CDDBDlg() { delete cddbClient; } void CDDBDlg::setData( const KCDDB::CDInfo &_cddbInfo, const KCDDB::TrackOffsetList &_trackStartFrames, const TQStringList &_playlist) { // Let's make a deep copy of the cd struct info so that the data won't // change the cd changes while we are playing with the dialog. cddbInfo = _cddbInfo; trackStartFrames = _trackStartFrames; playlist = _playlist; // Write the complete record to the dialog. m_dlgBase->setInfo(cddbInfo, trackStartFrames); // FIXME: KDE4, move this logic into m_dlgBase->setInfo() once KCDDB:CDInfo is updated. m_dlgBase->m_playOrder->setText( playlist.join( "," ) ); } // setData void CDDBDlg::submitFinished(KCDDB::CDDB::Result r) { if (r == KCDDB::CDDB::Success) { KMessageBox::information(this, i18n("Record submitted successfully."), i18n("Record Submission")); } else { TQString str = i18n("Error sending record.\n\n%1") .arg(KCDDB::CDDB::resultToString(r)); KMessageBox::error(this, str, i18n("Record Submission")); } } // submitFinished() void CDDBDlg::upload() { if (!validInfo()) return; updateFromDialog(); // Create a copy with a bumped revision number. KCDDB::CDInfo copyInfo = cddbInfo; copyInfo.revision++; cddbClient->submit(copyInfo, trackStartFrames); } // upload void CDDBDlg::save() { updateFromDialog(); KCDDB::Cache::store(cddbInfo); emit newCDInfoStored(cddbInfo); } // save bool CDDBDlg::validInfo() { KCDDB::CDInfo copy = m_dlgBase->info(); if (copy.artist.isEmpty()) { KMessageBox::sorry(this, i18n("The artist name of the disc has to be entered.\n" "Please correct the entry and try again."), i18n("Invalid Database Entry")); return false; } if (copy.title.isEmpty()) { KMessageBox::sorry(this, i18n("The title of the disc has to be entered.\n" "Please correct the entry and try again."), i18n("Invalid Database Entry")); return false; } bool have_nonempty_title = false; for (unsigned i = 0; i < copy.trackInfoList.count(); i++) { if (!copy.trackInfoList[i].title.isEmpty()) { have_nonempty_title = true; break; } } if (!have_nonempty_title) { KMessageBox::sorry(this, i18n("At least one track title must be entered.\n"\ "Please correct the entry and try again."), i18n("Invalid Database Entry")); return false; } return true; } void CDDBDlg::updateFromDialog() { KCDDB::CDInfo copy = m_dlgBase->info(); // Playorder... TQStringList strlist = TQStringList::split( ',', m_dlgBase->m_playOrder->text() ); bool ret = true; TQString teststr; bool ok; unsigned num; for ( TQStringList::Iterator it = strlist.begin(); it != strlist.end(); ++it ) { teststr = *it; num = teststr.toInt(&ok); if( !ok || num > cddbInfo.trackInfoList.count() ) ret = false; } if(!ret) { KMessageBox::sorry(this, i18n("Invalid Playlist\nPlease use valid track numbers, " "separated by commas.")); } cddbInfo = copy; } // updateFromDialog #include "cddbdlg.moc"