From 0637b6584633f31540d5ce437a63d7013a0410f4 Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Sun, 12 Sep 2021 16:24:22 -0300 Subject: [PATCH] Fix a few narrowing conversions (#761) * Fix narrowing conversion in album cover loader * Fix narrowing conversions in discogs cover provider * Fix narrowing conversions in spotify cover provider * Add explicit conversion in moodbarbuilder * Fix narrowing conversions in osd dbus * Make WordyTimeNanosec use unsigned quint64 * Fix narrowing conversions in song * Fix narrowing conversions in qobuz stream url request * Make ConnectionInfo.msgLen use unsigned quint64 * Make AnalizerBase.timeout to signed int * Fix narrowing conversions in album cover fetcher * Make fht type be unsigned int * Correct for type in blockanalizer and use std::fill where possible * Revert "Fix narrowing conversions in song" This reverts commit 3de291394df90ecb9586041709b7942f3307cfcc. --- .../singleapplication/singleapplication_p.h | 2 +- src/analyzer/analyzerbase.h | 6 ++--- src/analyzer/blockanalyzer.cpp | 10 ++++---- src/analyzer/fht.cpp | 2 +- src/analyzer/fht.h | 2 +- src/core/utilities.cpp | 2 +- src/core/utilities.h | 2 +- .../albumcoverchoicecontroller.cpp | 10 ++++---- src/covermanager/albumcoverchoicecontroller.h | 4 ++-- src/covermanager/albumcoverfetchersearch.cpp | 4 ++-- src/covermanager/albumcoverloader.cpp | 24 +++++++++---------- src/covermanager/albumcoverloader.h | 12 +++++----- src/covermanager/albumcovermanager.h | 2 +- src/covermanager/discogscoverprovider.cpp | 8 +++---- src/covermanager/discogscoverprovider.h | 4 ++-- src/covermanager/spotifycoverprovider.cpp | 2 +- src/moodbar/moodbarbuilder.cpp | 6 ++--- src/osd/osddbus.cpp | 2 +- src/osd/osdpretty.h | 2 +- src/qobuz/qobuzstreamurlrequest.cpp | 2 +- 20 files changed, 53 insertions(+), 55 deletions(-) diff --git a/3rdparty/singleapplication/singleapplication_p.h b/3rdparty/singleapplication/singleapplication_p.h index 3ff1fd62..99b1cc95 100644 --- a/3rdparty/singleapplication/singleapplication_p.h +++ b/3rdparty/singleapplication/singleapplication_p.h @@ -55,7 +55,7 @@ struct InstancesInfo { struct ConnectionInfo { explicit ConnectionInfo() : msgLen(0), instanceId(0), stage(0) {} - qint64 msgLen; + quint64 msgLen; quint32 instanceId; quint8 stage; }; diff --git a/src/analyzer/analyzerbase.h b/src/analyzer/analyzerbase.h index 82ececee..5ee6a144 100644 --- a/src/analyzer/analyzerbase.h +++ b/src/analyzer/analyzerbase.h @@ -57,11 +57,11 @@ class Base : public QWidget { public: ~Base() override { delete fht_; } - uint timeout() const { return timeout_; } + int timeout() const { return timeout_; } void set_engine(EngineBase *engine) { engine_ = engine; } - void changeTimeout(uint newTimeout) { + void changeTimeout(int newTimeout) { timeout_ = newTimeout; if (timer_.isActive()) { timer_.stop(); @@ -90,7 +90,7 @@ class Base : public QWidget { protected: QBasicTimer timer_; - uint timeout_; + int timeout_; FHT *fht_; EngineBase *engine_; Scope lastscope_; diff --git a/src/analyzer/blockanalyzer.cpp b/src/analyzer/blockanalyzer.cpp index e2ce83fd..f2029357 100644 --- a/src/analyzer/blockanalyzer.cpp +++ b/src/analyzer/blockanalyzer.cpp @@ -62,7 +62,7 @@ BlockAnalyzer::BlockAnalyzer(QWidget *parent) setMaximumWidth(kMaxColumns * (kWidth + 1) - 1); // mxcl says null pixmaps cause crashes, so let's play it safe - for (uint i = 0; i < kFadeSize; ++i) fade_bars_[i] = QPixmap(1, 1); + std::fill(fade_bars_.begin(), fade_bars_.end(), QPixmap(1, 1)); } @@ -78,7 +78,7 @@ void BlockAnalyzer::resizeEvent(QResizeEvent *e) { // all is explained in analyze().. // +1 to counter -1 in maxSizes, trust me we need this! columns_ = qMin(static_cast(static_cast(width() + 1) / (kWidth + 1)) + 1, kMaxColumns); - rows_ = static_cast(static_cast(height() + 1) / (kHeight + 1)); + rows_ = static_cast(static_cast(height() + 1) / (kHeight + 1)); // this is the y-offset for drawing from the top of the widget y_ = (height() - (rows_ * (kHeight + 1)) + 2) / 2; @@ -88,9 +88,7 @@ void BlockAnalyzer::resizeEvent(QResizeEvent *e) { if (rows_ != oldRows) { barpixmap_ = QPixmap(kWidth, rows_ * (kHeight + 1)); - for (uint i = 0; i < kFadeSize; ++i) { - fade_bars_[i] = QPixmap(kWidth, rows_ * (kHeight + 1)); - } + std::fill(fade_bars_.begin(), fade_bars_.end(), QPixmap(kWidth, rows_ * (kHeight + 1))); yscale_.resize(rows_ + 1); @@ -373,7 +371,7 @@ void BlockAnalyzer::paletteChange(const QPalette&) { const int r2 = bg2.red(), g2 = bg2.green(), b2 = bg2.blue(); // Precalculate all fade-bar pixmaps - for (uint y = 0; y < kFadeSize; ++y) { + for (int y = 0; y < kFadeSize; ++y) { fade_bars_[y].fill(palette().color(QPalette::Window)); QPainter f(&fade_bars_[y]); for (int z = 0; z < rows_; ++z) { diff --git a/src/analyzer/fht.cpp b/src/analyzer/fht.cpp index 05274a93..4f6960c2 100644 --- a/src/analyzer/fht.cpp +++ b/src/analyzer/fht.cpp @@ -28,7 +28,7 @@ #include #include -FHT::FHT(int n) : num_((n < 3) ? 0 : 1 << n), exp2_((n < 3) ? -1 : n) { +FHT::FHT(uint n) : num_((n < 3) ? 0 : 1 << n), exp2_((n < 3) ? int(-1) : int(n)) { if (n > 3) { buf_vector_.resize(num_); diff --git a/src/analyzer/fht.h b/src/analyzer/fht.h index 82bff0b6..c94aa09a 100644 --- a/src/analyzer/fht.h +++ b/src/analyzer/fht.h @@ -63,7 +63,7 @@ class FHT { * should be at least 3. Values of more than 3 need a trigonometry table. * @see makeCasTable() */ - explicit FHT(int); + explicit FHT(uint); ~FHT(); int sizeExp() const; diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index e6736ecf..6adc5719 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -148,7 +148,7 @@ QString WordyTime(const quint64 seconds) { } -QString WordyTimeNanosec(const qint64 nanoseconds) { +QString WordyTimeNanosec(const quint64 nanoseconds) { return WordyTime(nanoseconds / kNsecPerSec); } diff --git a/src/core/utilities.h b/src/core/utilities.h index e8451366..b8a3ad14 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h @@ -56,7 +56,7 @@ QString PrettyTimeNanosec(const qint64 nanoseconds); QString PrettySize(const quint64 bytes); QString PrettySize(const QSize size); QString WordyTime(const quint64 seconds); -QString WordyTimeNanosec(const qint64 nanoseconds); +QString WordyTimeNanosec(const quint64 nanoseconds); QString Ago(const qint64 seconds_since_epoch, const QLocale &locale); QString PrettyFutureDate(const QDate date); diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 2c32a582..a8063eb3 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -482,9 +482,9 @@ void AlbumCoverChoiceController::ShowCover(const Song &song, const QPixmap &pixm } -qint64 AlbumCoverChoiceController::SearchCoverAutomatically(const Song &song) { +quint64 AlbumCoverChoiceController::SearchCoverAutomatically(const Song &song) { - qint64 id = cover_fetcher_->FetchAlbumCover(song.effective_albumartist(), song.album(), song.title(), true); + quint64 id = cover_fetcher_->FetchAlbumCover(song.effective_albumartist(), song.album(), song.title(), true); cover_fetching_tasks_[id] = song; @@ -640,12 +640,12 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co urls.reserve(songs.count()); for (const Song &s : songs) urls << s.url(); if (result.is_jpeg()) { - qint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image_data); + quint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image_data); QMutexLocker l(&mutex_cover_save_tasks_); cover_save_tasks_.insert(id, song); } else { - qint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image); + quint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, result.image); QMutexLocker l(&mutex_cover_save_tasks_); cover_save_tasks_.insert(id, song); } @@ -684,7 +684,7 @@ void AlbumCoverChoiceController::SaveCoverEmbeddedAutomatic(const Song &song, co QList urls; urls.reserve(songs.count()); for (const Song &s : songs) urls << s.url(); - qint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, cover_filename); + quint64 id = app_->album_cover_loader()->SaveEmbeddedCoverAsync(urls, cover_filename); QMutexLocker l(&mutex_cover_save_tasks_); cover_save_tasks_.insert(id, song); }); diff --git a/src/covermanager/albumcoverchoicecontroller.h b/src/covermanager/albumcoverchoicecontroller.h index f44824ea..05aa7cf0 100644 --- a/src/covermanager/albumcoverchoicecontroller.h +++ b/src/covermanager/albumcoverchoicecontroller.h @@ -129,7 +129,7 @@ class AlbumCoverChoiceController : public QWidget { void ShowCover(const Song &song, const QPixmap &pixmap); // Search for covers automatically - qint64 SearchCoverAutomatically(const Song &song); + quint64 SearchCoverAutomatically(const Song &song); // Saves the chosen cover as manual cover path of this song in collection. void SaveArtAutomaticToSong(Song *song, const QUrl &art_automatic); @@ -185,7 +185,7 @@ class AlbumCoverChoiceController : public QWidget { QAction *search_cover_auto_; QMap cover_fetching_tasks_; - QMap cover_save_tasks_; + QMap cover_save_tasks_; QMutex mutex_cover_save_tasks_; CollectionSettingsPage::SaveCoverType save_cover_type_; diff --git a/src/covermanager/albumcoverfetchersearch.cpp b/src/covermanager/albumcoverfetchersearch.cpp index 013e5d95..c0acc196 100644 --- a/src/covermanager/albumcoverfetchersearch.cpp +++ b/src/covermanager/albumcoverfetchersearch.cpp @@ -75,7 +75,7 @@ AlbumCoverFetcherSearch::~AlbumCoverFetcherSearch() { void AlbumCoverFetcherSearch::TerminateSearch() { QList ids = pending_requests_.keys(); - for (const quint64 id : ids) { + for (const int id : ids) { pending_requests_.take(id)->CancelSearch(id); } @@ -380,7 +380,7 @@ float AlbumCoverFetcherSearch::ScoreImage(const QSize size) { const float size_score = std::sqrt(float(size.width() * size.height())) / kTargetSize; // A 1:1 image scores 1.0, anything else scores less - const float aspect_score = float(1.0) - float(std::max(size.width(), size.height()) - std::min(size.width(), size.height())) / std::max(size.height(), size.width()); + const float aspect_score = float(1.0) - float(std::max(size.width(), size.height()) - std::min(size.width(), size.height())) / float(std::max(size.height(), size.width())); return size_score + aspect_score; diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp index 271fe470..72a89688 100644 --- a/src/covermanager/albumcoverloader.cpp +++ b/src/covermanager/albumcoverloader.cpp @@ -545,55 +545,55 @@ void AlbumCoverLoader::RemoteFetchFinished(QNetworkReply *reply, const QUrl &cov } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QString, song_filename), Q_ARG(QString, cover_filename)); return id; } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QString, song_filename), Q_ARG(QImage, image)); return id; } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QString, song_filename), Q_ARG(QByteArray, image_data)); return id; } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QList, urls), Q_ARG(QString, cover_filename)); return id; } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QImage &image) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QImage &image) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QList, urls), Q_ARG(QImage, image)); return id; } -qint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data) { +quint64 AlbumCoverLoader::SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data) { QMutexLocker l(&mutex_save_image_async_); - qint64 id = ++save_image_async_id_; + quint64 id = ++save_image_async_id_; QMetaObject::invokeMethod(this, "SaveEmbeddedCover", Qt::QueuedConnection, Q_ARG(qint64, id), Q_ARG(QList, urls), Q_ARG(QByteArray, image_data)); return id; diff --git a/src/covermanager/albumcoverloader.h b/src/covermanager/albumcoverloader.h index c175938b..2e38f188 100644 --- a/src/covermanager/albumcoverloader.h +++ b/src/covermanager/albumcoverloader.h @@ -81,12 +81,12 @@ class AlbumCoverLoader : public QObject { void CancelTask(const quint64 id); void CancelTasks(const QSet &ids); - qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename); - qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image); - qint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data); - qint64 SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename); - qint64 SaveEmbeddedCoverAsync(const QList &urls, const QImage &image); - qint64 SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data); + quint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QString &cover_filename); + quint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QImage &image); + quint64 SaveEmbeddedCoverAsync(const QString &song_filename, const QByteArray &image_data); + quint64 SaveEmbeddedCoverAsync(const QList &urls, const QString &cover_filename); + quint64 SaveEmbeddedCoverAsync(const QList &urls, const QImage &image); + quint64 SaveEmbeddedCoverAsync(const QList &urls, const QByteArray &image_data); signals: void ExitFinished(); diff --git a/src/covermanager/albumcovermanager.h b/src/covermanager/albumcovermanager.h index fff569b8..c3cfe575 100644 --- a/src/covermanager/albumcovermanager.h +++ b/src/covermanager/albumcovermanager.h @@ -214,7 +214,7 @@ class AlbumCoverManager : public QMainWindow { QPushButton *abort_progress_; int jobs_; - QMultiMap cover_save_tasks_; + QMultiMap cover_save_tasks_; QList cover_save_tasks2_; QListWidgetItem *all_artists_; diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index 2f3a7a3e..ff36f3c6 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -229,7 +229,7 @@ QByteArray DiscogsCoverProvider::GetReplyData(QNetworkReply *reply) { } -void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { +void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const quint64 id) { if (!replies_.contains(reply)) return; replies_.removeAll(reply); @@ -285,7 +285,7 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) Error("Invalid Json reply, results value object is missing ID, title or resource_url.", obj_result); continue; } - quint64 release_id = obj_result["id"].toDouble(); + quint64 release_id = obj_result["id"].toInt(); QUrl resource_url(obj_result["resource_url"].toString()); QString title = obj_result["title"].toString(); @@ -336,7 +336,7 @@ void DiscogsCoverProvider::SendReleaseRequest(const DiscogsCoverReleaseContext & } -void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int search_id, const quint64 release_id) { +void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const quint64 search_id, const quint64 release_id) { if (!replies_.contains(reply)) return; replies_.removeAll(reply); @@ -440,7 +440,7 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se int width = obj_image["width"].toInt(); int height = obj_image["height"].toInt(); if (width < 300 || height < 300) continue; - const float aspect_score = float(1.0) - float(std::max(width, height) - std::min(width, height)) / std::max(height, width); + const float aspect_score = float(1.0) - float(std::max(width, height) - std::min(width, height)) / float(std::max(height, width)); if (aspect_score < 0.85) continue; CoverProviderSearchResult result; result.artist = artist; diff --git a/src/covermanager/discogscoverprovider.h b/src/covermanager/discogscoverprovider.h index d4ea84ce..5c659e22 100644 --- a/src/covermanager/discogscoverprovider.h +++ b/src/covermanager/discogscoverprovider.h @@ -90,8 +90,8 @@ class DiscogsCoverProvider : public JsonCoverProvider { private slots: void FlushRequests(); - void HandleSearchReply(QNetworkReply *reply, const int id); - void HandleReleaseReply(QNetworkReply *reply, const int id, const quint64 release_id); + void HandleSearchReply(QNetworkReply *reply, const quint64 id); + void HandleReleaseReply(QNetworkReply *reply, const quint64 id, const quint64 release_id); private: static const char *kUrlSearch; diff --git a/src/covermanager/spotifycoverprovider.cpp b/src/covermanager/spotifycoverprovider.cpp index 5212ff11..abc236b5 100644 --- a/src/covermanager/spotifycoverprovider.cpp +++ b/src/covermanager/spotifycoverprovider.cpp @@ -80,7 +80,7 @@ SpotifyCoverProvider::SpotifyCoverProvider(Application *app, NetworkAccessManage s.endGroup(); if (!refresh_token_.isEmpty()) { - qint64 time = expires_in_ - (QDateTime::currentDateTime().toSecsSinceEpoch() - login_time_); + quint64 time = expires_in_ - (QDateTime::currentDateTime().toSecsSinceEpoch() - login_time_); if (time < 1) time = 1; refresh_login_timer_.setInterval(static_cast(time * kMsecPerSec)); refresh_login_timer_.start(); diff --git a/src/moodbar/moodbarbuilder.cpp b/src/moodbar/moodbarbuilder.cpp index b4c97ef2..26e23e5b 100644 --- a/src/moodbar/moodbarbuilder.cpp +++ b/src/moodbar/moodbarbuilder.cpp @@ -187,9 +187,9 @@ QByteArray MoodbarBuilder::Finish(int width) { const int n = end - start; - *(data++) = rgb.r / n; - *(data++) = rgb.g / n; - *(data++) = rgb.b / n; + *(data++) = char(rgb.r / n); + *(data++) = char(rgb.g / n); + *(data++) = char(rgb.b / n); } return ret; diff --git a/src/osd/osddbus.cpp b/src/osd/osddbus.cpp index 0605c069..3a4923ba 100644 --- a/src/osd/osddbus.cpp +++ b/src/osd/osddbus.cpp @@ -164,7 +164,7 @@ void OSDDBus::ShowMessageNative(const QString &summary, const QString &message, hints["transient"] = QVariant(true); - int id = 0; + quint64 id = 0; if (last_notification_time_.secsTo(QDateTime::currentDateTime()) * 1000 < timeout_msec()) { // Reuse the existing popup if it's still open. The reason we don't always // reuse the popup is because the notification daemon on KDE4 won't re-show the bubble if it's already gone to the tray. See issue #118 diff --git a/src/osd/osdpretty.h b/src/osd/osdpretty.h index d4160553..3eea0291 100644 --- a/src/osd/osdpretty.h +++ b/src/osd/osdpretty.h @@ -145,7 +145,7 @@ class OSDPretty : public QWidget { // Settings loaded from QSettings QColor foreground_color_; QColor background_color_; - float background_opacity_; + qreal background_opacity_; QString popup_screen_name_; QPoint popup_pos_; QScreen *popup_screen_; diff --git a/src/qobuz/qobuzstreamurlrequest.cpp b/src/qobuz/qobuzstreamurlrequest.cpp index 191b461b..c87ac85e 100644 --- a/src/qobuz/qobuzstreamurlrequest.cpp +++ b/src/qobuz/qobuzstreamurlrequest.cpp @@ -224,7 +224,7 @@ void QobuzStreamURLRequest::StreamURLReceived() { qint64 duration = -1; if (json_obj.contains("duration")) { - duration = json_obj["duration"].toDouble() * kNsecPerSec; + duration = json_obj["duration"].toInt() * kNsecPerSec; } int samplerate = -1; if (json_obj.contains("sampling_rate")) {