1 /* This file is part of Clementine.
2    Copyright 2011, David Sansome <me@davidsansome.com>
3    Copyright 2014, Krzysztof Sobiecki <sobkas@gmail.com>
4    Copyright 2014, John Maguire <john.maguire@gmail.com>
5 
6    Clementine is free software: you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation, either version 3 of the License, or
9    (at your option) any later version.
10 
11    Clementine is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with Clementine.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef INTERNET_SPOTIFY_SPOTIFYBLOBDOWNLOADER_H_
21 #define INTERNET_SPOTIFY_SPOTIFYBLOBDOWNLOADER_H_
22 
23 #include <QMap>
24 #include <QObject>
25 
26 class QNetworkAccessManager;
27 class QNetworkReply;
28 class QProgressDialog;
29 
30 class SpotifyBlobDownloader : public QObject {
31   Q_OBJECT
32 
33  public:
34   SpotifyBlobDownloader(const QString& version, const QString& path,
35                         QObject* parent = nullptr);
36   ~SpotifyBlobDownloader();
37 
38   static const char* kSignatureSuffix;
39 
40   static bool Prompt();
41 
42   void Start();
43 
44 signals:
45   void Finished();
46 
47  private slots:
48   void ReplyFinished();
49   void ReplyProgress();
50   void Cancel();
51 
52  private:
53   void ShowError(const QString& message);
54   void EmitFinished();
55 
56   bool CheckSignature(const QMap<QString, QByteArray>& file_data,
57                       const QStringList& signature_filenames);
58   static QByteArray ConvertPEMToDER(const QByteArray& pem);
59 
60  private:
61   QString version_;
62   QString path_;
63 
64   QNetworkAccessManager* network_;
65   QList<QNetworkReply*> replies_;
66 
67   QProgressDialog* progress_;
68 };
69 
70 #endif  // INTERNET_SPOTIFY_SPOTIFYBLOBDOWNLOADER_H_
71