HomePage::HomePage(QWidget *parent) : QWidget(parent), ui(new Ui::HomePage) { ui->setupUi(this); //Initialize the splash screen and allow user to exit if they click on it QMovie *splashImg = new QMovie(":/icons/resources_icons/ProjectLogo_LoopOnce.gif"); ui->label->setMovie(splashImg); ui->label->setFixedSize(900,450); QMediaPlayer *player = new QMediaPlayer; player->setMedia(QUrl("qrc:/audio/resources_icons/ProjectLogoSound.mp3")); player->setVolume(100); player->setPlaybackRate(0.85); player->play(); //Connect the signal on every frame change to check for last frame since it loops infinitely connect(splashImg, SIGNAL(finished()), this, SLOT(EmitFinished())); splashImg->start(); }
void SpotifyBlobDownloader::ReplyFinished() { QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender()); if (reply->error() != QNetworkReply::NoError) { // Handle network errors ShowError(reply->errorString()); return; } // Is everything finished? for (QNetworkReply* reply : replies_) { if (!reply->isFinished()) { return; } } // Read files into memory first. QMap<QString, QByteArray> file_data; QStringList signature_filenames; for (QNetworkReply* reply : replies_) { const QString filename = reply->url().path().section('/', -1, -1); if (filename.endsWith(kSignatureSuffix)) { signature_filenames << filename; } file_data[filename] = reply->readAll(); } #ifdef HAVE_QCA // Load the public key QCA::ConvertResult conversion_result; QCA::PublicKey key = QCA::PublicKey::fromPEMFile( ":/clementine-spotify-public.pem", &conversion_result); if (QCA::ConvertGood != conversion_result) { ShowError("Failed to load Spotify public key"); return; } // Verify signatures for (const QString& signature_filename : signature_filenames) { QString actual_filename = signature_filename; actual_filename.remove(kSignatureSuffix); qLog(Debug) << "Verifying" << actual_filename << "against" << signature_filename; if (!key.verifyMessage(file_data[actual_filename], file_data[signature_filename], QCA::EMSA3_SHA1)) { ShowError("Invalid signature: " + actual_filename); return; } } #endif // HAVE_QCA // Make the destination directory and write the files into it QDir().mkpath(path_); for (const QString& filename : file_data.keys()) { const QString dest_path = path_ + "/" + filename; if (filename.endsWith(kSignatureSuffix)) continue; qLog(Info) << "Writing" << dest_path; QFile file(dest_path); if (!file.open(QIODevice::WriteOnly)) { ShowError("Failed to open " + dest_path + " for writing"); return; } file.write(file_data[filename]); file.close(); file.setPermissions(QFile::Permissions(0x7755)); #ifdef Q_OS_UNIX const int so_pos = filename.lastIndexOf(".so."); if (so_pos != -1) { QString link_path = path_ + "/" + filename.left(so_pos + 3); QStringList version_parts = filename.mid(so_pos + 4).split('.'); while (!version_parts.isEmpty()) { qLog(Debug) << "Linking" << dest_path << "to" << link_path; int ret = symlink(dest_path.toLocal8Bit().constData(), link_path.toLocal8Bit().constData()); if (ret != 0) { qLog(Warning) << "Creating symlink failed with return code" << ret; } link_path += "." + version_parts.takeFirst(); } } #endif // Q_OS_UNIX } EmitFinished(); }