Ticket #939: svn.diff

File svn.diff, 4.9 KB (added by frank.lynch@…, 18 years ago)

patch - enables mythmusic to check for music before (re-)importing it.

  • mythmusic/mythmusic/cdrip.h

     
    4444    static QString fixFileToken(QString token);
    4545    void handleFileTokens(QString &filename, Metadata *track);
    4646    void ejectCD(QString &cddev);
    47 
     47    bool isTuneInDB(QString &artist, QString &album, QString &title);
    4848    QVBoxLayout *bigvb;
    4949    QFrame *firstdiag;
    5050
  • mythmusic/mythmusic/globalsettings.cpp

     
    107107    return gc;
    108108};
    109109
     110static HostCheckBox *OnlyImportNewMusic()
     111{
     112    HostCheckBox *gc = new HostCheckBox("OnlyImportNewMusic");
     113    gc->setLabel(QObject::tr("Only Import new music."));
     114    gc->setValue(true);
     115    gc->setHelpText(QObject::tr("Checks the databasse for duplicates when importing/riping CDs."));
     116    return gc;
     117};
     118
    110119static HostCheckBox *AutoLookupCD()
    111120{
    112121    HostCheckBox *gc = new HostCheckBox("AutoLookupCD");
     
    592601    rippersettings->addChild(NoWhitespace());
    593602    rippersettings->addChild(PostCDRipScript());
    594603    rippersettings->addChild(EjectCD());
     604    rippersettings->addChild(OnlyImportNewMusic());
    595605    addChild(rippersettings);
    596606
    597607    VerticalConfigurationGroup* encodersettings = new VerticalConfigurationGroup(false);
  • mythmusic/mythmusic/cdrip.cpp

     
    161161    bool iscompilation = false;
    162162
    163163    CdDecoder *decoder = new CdDecoder("cda", NULL, NULL, NULL);
    164 
     164    bool newTune = true;
     165    int row = 0;
    165166    if (decoder)
    166167    {
    167168
    168         int row = 0;
    169169        QString label;
    170170        int length, min, sec;
    171171        Metadata *track;
     
    195195                }
    196196
    197197                length = track->Length() / 1000;
    198                 min = length / 60;
    199                 sec = length % 60;
     198
     199                QString title = track->Title();
     200                newTune = isTuneInDB(artistname, albumname, title);
     201
     202                if (newTune)
     203                {
     204                    min = length / 60;
     205                    sec = length % 60;
     206
     207                    table->setNumRows(row + 1);
    200208               
    201                 table->setNumRows(row + 1);
     209                    table->setRowHeight(row, (int)(30 * hmult));
     210                   
     211                    label.sprintf("%d", trackno + 1);
     212                    table->setText(row, 0, label);
     213                   
     214                    table->setText(row, 1, track->Title());
     215                   
     216                    table->setText(row, 2, track->Artist());
     217                   
     218                    label.sprintf("%02d:%02d", min, sec);
     219                    table->setText(row, 3, label);
    202220               
    203                 table->setRowHeight(row, (int)(30 * hmult));
    204                
    205                 label.sprintf("%d", trackno + 1);
    206                 table->setText(row, 0, label);
    207                
    208                 table->setText(row, 1, track->Title());
    209                
    210                 table->setText(row, 2, track->Artist());
    211                
    212                 label.sprintf("%02d:%02d", min, sec);
    213                 table->setText(row, 3, label);
    214                
    215                 row++;
     221                    row++;
     222                }
    216223                delete track;
    217224            }
    218225        }
     
    262269    MythPushButton *ripit = new MythPushButton(tr("Import this CD"), firstdiag);
    263270    ripit->setFocus ();
    264271    vbox->addWidget(ripit);
    265 
    266     connect(ripit, SIGNAL(clicked()), this, SLOT(ripthedisc()));
     272    if (row != 0)
     273    {
     274        connect(ripit, SIGNAL(clicked()), this, SLOT(ripthedisc()));
     275    }
    267276}
    268277
    269278Ripper::~Ripper(void)
    270279{   
    271280}       
    272281
     282bool Ripper::isTuneInDB(QString& artist, QString& album, QString& title)
     283{
     284    if (gContext->GetNumSetting("OnlyImportNewMusic",1))
     285    {
     286        MSqlQuery query(MSqlQuery::InitCon()); 
     287        QString queryString("SELECT filename, artist, album, title, intid "
     288                            "FROM musicmetadata WHERE artist REGEXP \'");     
     289        QString token = artist;
     290        token.replace(QRegExp("(/|\\\\|:|\'|\\,|\\!|\\(|\\)|\"|\\?|\\|)"), QString("."));
     291     
     292        queryString += token + "\' AND " + "album REGEXP \'";
     293        token = album;
     294        token.replace(QRegExp("(/|\\\\|:|\'|\\,|\\!|\\(|\\)|\"|\\?|\\|)"), QString("."));
     295        queryString += token + "\' AND " + "title    REGEXP \'";
     296        token = title;
     297        token.replace(QRegExp("(/|\\\\|:|\'|\\,|\\!|\\(|\\)|\"|\\?|\\|)"), QString("."));
     298        queryString += token + "\' ORDER BY artist, album, title, intid, filename";     
     299        query.prepare(queryString);
     300       
     301        bool has_entries = true;     
     302        if (!query.exec() || !query.isActive())
     303        {
     304            MythContext::DBError("Search music database", query);
     305            has_entries = false;
     306        }
     307        if (query.numRowsAffected() > 0)
     308        {
     309            return false;
     310        }
     311    }       
     312    return true;
     313}
     314
     315
    273316QSizePolicy Ripper::sizePolicy(void)
    274317{
    275318    return QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);