File indexing completed on 2024-05-05 04:56:11

0001 /*
0002     SPDX-FileCopyrightText: 2006 Richard Lärkäng <nouseforaname@home.se>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "asyncmusicbrainzlookup.h"
0008 
0009 #include "musicbrainzlookup.h"
0010 
0011 #include <QDebug>
0012 #include <QThread>
0013 
0014 namespace KCDDB
0015 {
0016   class LookupThread : public QThread
0017   {
0018 
0019   Q_OBJECT
0020 
0021   public:
0022     void run() override
0023     {
0024       Result result;
0025       CDInfoList lookupResponse;
0026       MusicBrainzLookup lookup;
0027 
0028       result = lookup.lookup(QString(), 0, m_offsetList);
0029 
0030       if (result == Success)
0031         lookupResponse = lookup.lookupResponse();
0032 
0033       Q_EMIT lookupFinished(result, lookupResponse);
0034     }
0035 
0036     TrackOffsetList m_offsetList;
0037 
0038   Q_SIGNALS:
0039     void lookupFinished( KCDDB::Result, KCDDB::CDInfoList );
0040   };
0041 
0042   AsyncMusicBrainzLookup::AsyncMusicBrainzLookup()
0043   {
0044     // Register custom data types for the signal-slot connection with the lookup thread:
0045     qRegisterMetaType<KCDDB::Result>("KCDDB::Result");
0046     qRegisterMetaType<KCDDB::CDInfoList>("KCDDB::CDInfoList");
0047   }
0048 
0049   AsyncMusicBrainzLookup::~AsyncMusicBrainzLookup()
0050   {
0051 
0052   }
0053 
0054   Result AsyncMusicBrainzLookup::lookup( const QString &, uint, const TrackOffsetList & trackOffsetList )
0055   {
0056     LookupThread* lookupThread = new LookupThread();
0057     lookupThread->m_offsetList = trackOffsetList;
0058     connect(lookupThread, &LookupThread::lookupFinished, this, &AsyncMusicBrainzLookup::processLookupResult); // queued connection
0059 
0060     // Make the thread object "self-destructive"; allows us to keep the destructor non-blocking
0061     connect(lookupThread, &LookupThread::finished, lookupThread, &LookupThread::deleteLater);
0062     // NOTE: the memory automatically gets cleared after the thread has finished
0063 
0064     lookupThread->start();
0065 
0066     return Success;
0067   }
0068 
0069   void AsyncMusicBrainzLookup::processLookupResult( KCDDB::Result result, KCDDB::CDInfoList lookupResponse )
0070   {
0071     qDebug();
0072 
0073     cdInfoList_ = lookupResponse;
0074 
0075     Q_EMIT finished(result);
0076   }
0077 }
0078 
0079 #include "asyncmusicbrainzlookup.moc"
0080 #include "moc_asyncmusicbrainzlookup.cpp"
0081 
0082 // vim:tabstop=2:shiftwidth=2:expandtab:cinoptions=(s,U1,m1