1 /*
2     SPDX-FileCopyrightText: 2006 Richard Lärkäng <nouseforaname@home.se>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "asyncmusicbrainzlookup.h"
8 
9 #include "musicbrainzlookup.h"
10 
11 #include <QDebug>
12 #include <QThread>
13 
14 namespace KCDDB
15 {
16   class LookupThread : public QThread
17   {
18 
19   Q_OBJECT
20 
21   public:
run()22     void run() override
23     {
24       Result result;
25       CDInfoList lookupResponse;
26       MusicBrainzLookup lookup;
27 
28       result = lookup.lookup(QString(), 0, m_offsetList);
29 
30       if (result == Success)
31         lookupResponse = lookup.lookupResponse();
32 
33       Q_EMIT lookupFinished(result, lookupResponse);
34     }
35 
36     TrackOffsetList m_offsetList;
37 
38   Q_SIGNALS:
39     void lookupFinished( KCDDB::Result, KCDDB::CDInfoList );
40   };
41 
AsyncMusicBrainzLookup()42   AsyncMusicBrainzLookup::AsyncMusicBrainzLookup()
43   {
44     // Register custom data types for the signal-slot connection with the lookup thread:
45     qRegisterMetaType<KCDDB::Result>("KCDDB::Result");
46     qRegisterMetaType<KCDDB::CDInfoList>("KCDDB::CDInfoList");
47   }
48 
~AsyncMusicBrainzLookup()49   AsyncMusicBrainzLookup::~AsyncMusicBrainzLookup()
50   {
51 
52   }
53 
lookup(const QString &,uint,const TrackOffsetList & trackOffsetList)54   Result AsyncMusicBrainzLookup::lookup( const QString &, uint, const TrackOffsetList & trackOffsetList )
55   {
56     LookupThread* lookupThread = new LookupThread();
57     lookupThread->m_offsetList = trackOffsetList;
58     connect(lookupThread, &LookupThread::lookupFinished, this, &AsyncMusicBrainzLookup::processLookupResult); // queued connection
59 
60     // Make the thread object "self-destructive"; allows us to keep the destructor non-blocking
61     connect(lookupThread, &LookupThread::finished, lookupThread, &LookupThread::deleteLater);
62     // NOTE: the memory automatically gets cleared after the thread has finished
63 
64     lookupThread->start();
65 
66     return Success;
67   }
68 
processLookupResult(KCDDB::Result result,KCDDB::CDInfoList lookupResponse)69   void AsyncMusicBrainzLookup::processLookupResult( KCDDB::Result result, KCDDB::CDInfoList lookupResponse )
70   {
71     qDebug();
72 
73     cdInfoList_ = lookupResponse;
74 
75     Q_EMIT finished(result);
76   }
77 }
78 
79 #include "asyncmusicbrainzlookup.moc"
80 
81 // vim:tabstop=2:shiftwidth=2:expandtab:cinoptions=(s,U1,m1
82