Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 May 2020 20:19:10 +0000 (UTC)
From:      Matthias Andree <mandree@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r535673 - in head/audio: . strawberry strawberry/files
Message-ID:  <202005172019.04HKJA7X073683@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mandree
Date: Sun May 17 20:19:09 2020
New Revision: 535673
URL: https://svnweb.freebsd.org/changeset/ports/535673

Log:
  audio/strawberry: new port of Qt5-based music player
  
  ...which is descended from clementine.
  
  PR:		246342
  Submitted by:	Daniel Menelkir <menelkir@itroll.org> (maintainer)

Added:
  head/audio/strawberry/
  head/audio/strawberry/Makefile   (contents, props changed)
  head/audio/strawberry/distinfo   (contents, props changed)
  head/audio/strawberry/files/
  head/audio/strawberry/files/patch-src_collection_collectionmodel.cpp   (contents, props changed)
  head/audio/strawberry/files/patch-src_organise_organiseformat.cpp   (contents, props changed)
  head/audio/strawberry/files/patch-tests_CMakeLists.txt   (contents, props changed)
  head/audio/strawberry/files/patch-tests_src_collectionmodel__test.cpp   (contents, props changed)
  head/audio/strawberry/files/patch-tests_src_organiseformat__test.cpp   (contents, props changed)
  head/audio/strawberry/files/patch-tests_src_playlist__test.cpp   (contents, props changed)
  head/audio/strawberry/pkg-descr   (contents, props changed)
  head/audio/strawberry/pkg-plist   (contents, props changed)
Modified:
  head/audio/Makefile

Modified: head/audio/Makefile
==============================================================================
--- head/audio/Makefile	Sun May 17 20:18:31 2020	(r535672)
+++ head/audio/Makefile	Sun May 17 20:19:09 2020	(r535673)
@@ -770,6 +770,7 @@
     SUBDIR += stegosaurus-lv2
     SUBDIR += stk
     SUBDIR += stone-phaser-lv2
+    SUBDIR += strawberry
     SUBDIR += streamripper
     SUBDIR += streamtranscoder
     SUBDIR += string-machine-lv2

Added: head/audio/strawberry/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/Makefile	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,99 @@
+# $FreeBSD$
+
+PORTNAME=	strawberry
+DISTVERSION=	0.6.11
+CATEGORIES=	audio
+MASTER_SITES=	https://github.com/strawberrymusicplayer/${PORTNAME}/releases/download/${DISTVERSION}/ \
+		https://files.jkvinge.net/packages/strawberry/
+
+MAINTAINER=	menelkir@itroll.org
+COMMENT=	Fork of clementine with many features
+
+LICENSE=	GPLv3
+LICENSE_FILE=	${WRKSRC}/COPYING
+
+BUILD_DEPENDS=	boost-libs>0:devel/boost-libs
+LIB_DEPENDS=	libgnutls.so:security/gnutls \
+		libprotobuf.so:devel/protobuf \
+		libtag.so:audio/taglib
+TEST_DEPENDS=	googletest>=0:devel/googletest
+
+USES=		compiler:c++11-lang cmake desktop-file-utils gnome \
+		gettext-runtime gettext-tools iconv pkgconfig \
+		qt:5 sqlite pkgconfig tar:xz xorg
+
+USE_GNOME=	glib20
+USE_GSTREAMER1=	yes
+USE_QT=		buildtools_build concurrent core dbus gui network \
+		linguisttools qmake_build sql testlib_build widgets x11extras
+USE_XORG=	ice sm x11 xcb xext
+INSTALLS_ICONS=	yes
+
+CMAKE_ARGS=	-DUSE_SYSTEM_TAGLIB=ON -DENABLE_UDISKS2=OFF -DENABLE_XINE=OFF \
+		-DENABLE_GSTREAMER:BOOL=true \
+		-DENABLE_TRANSLATIONS:BOOL=true
+
+TEST_TARGET=	strawberry_test
+
+# NLS is not optional, as of 0.6.11,
+# src/core/utilities.cpp always includes iconv.h and calls iconv_*().
+
+# GSTREAMER is not optional, as of 0.6.11, disabling it kills the build on
+# src/core/mainwindow.cpp:229:7: 
+# error: member initializer 'transcode_dialog_' does not name a non-static data member or base class
+# transcode_dialog_([=]() {
+
+OPTIONS_DEFINE=		APPLEDEV AUDIOCD IPOD MOODBAR MTPDEV MUSICBRAINZ \
+			SUBSONIC TIDAL VLC
+APPLEDEV_IMPLIES=	IPOD
+OPTIONS_DEFAULT=	PULSEAUDIO
+
+BACKEND_DESC=		Multimedia backend(s)
+
+OPTIONS_MULTI=		SOUND
+OPTIONS_MULTI_SOUND=	ALSA PULSEAUDIO
+
+APPLEDEV_DESC=		Enable support for more recent Apple devices
+AUDIOCD_DESC=		Enable support for Audio CDs
+IPOD_DESC=		Enable support for iPod Classic
+MOODBAR_DESC=		Enable moodbar
+MTPDEV_DESC=		Enable support for Media Transport Protocol
+MUSICBRAINZ_DESC=	Enable tag fetching from MusicBrainz
+SUBSONIC_DESC=		Enable support for Subsonic music streamer
+TIDAL_DESC=		Enable support for TIDAL music service
+VLC_DESC=		Multimedia support via (lib)vlc
+
+APPLEDEV_CMAKE_BOOL=	ENABLE_IMOBILEDEVICE
+APPLEDEV_LIB_DEPENDS=	libimobiledevice.so:comms/libimobiledevice \
+			libplist.so:devel/libplist \
+			libusbmuxd.so:comms/libusbmuxd
+
+ALSA_CMAKE_BOOL=	ENABLE_ALSA
+ALSA_LIB_DEPENDS=	libasound.so:audio/alsa-lib
+
+AUDIOCD_CMAKE_BOOL=	ENABLE_AUDIOCD
+AUDIOCD_LIB_DEPENDS=	libcdio.so:sysutils/libcdio
+
+IPOD_CMAKE_BOOL=	ENABLE_LIBGPOD
+IPOD_LIB_DEPENDS=	libgpod.so:audio/libgpod
+
+MTPDEV_CMAKE_BOOL=	ENABLE_LIBMTP
+MTPDEV_LIB_DEPENDS=	libmtp.so:multimedia/libmtp
+
+MOODBAR_CMAKE_BOOL=	ENABLE_MOODBAR
+MOODBAR_LIB_DEPENDS=	libfftw3.so:math/fftw3
+
+MUSICBRAINZ_CMAKE_BOOL=	ENABLE_CHROMAPRINT
+MUSICBRAINZ_LIB_DEPENDS=	libchromaprint.so:audio/chromaprint
+
+PULSEAUDIO_CMAKE_BOOL=	ENABLE_LIBPULSE
+PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
+
+SUBSONIC_CMAKE_BOOL=	ENABLE_SUBSONIC
+
+TIDAL_CMAKE_BOOL=	ENABLE_TIDAL
+
+VLC_CMAKE_BOOL=		ENABLE_VLC
+VLC_LIB_DEPENDS=	libvlc.so:multimedia/vlc
+
+.include <bsd.port.mk>

Added: head/audio/strawberry/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/distinfo	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,3 @@
+TIMESTAMP = 1589641083
+SHA256 (strawberry-0.6.11.tar.xz) = 84b71b33b5f80b7e86682e49f15289c2c00ab89d47e3722f762dda0d6965a201
+SIZE (strawberry-0.6.11.tar.xz) = 9295808

Added: head/audio/strawberry/files/patch-src_collection_collectionmodel.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-src_collection_collectionmodel.cpp	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,84 @@
+--- src/collection/collectionmodel.cpp.orig	2020-05-16 18:39:26 UTC
++++ src/collection/collectionmodel.cpp
+@@ -119,12 +119,14 @@ CollectionModel::CollectionModel(CollectionBackend *ba
+   }
+ 
+   QIcon nocover = IconLoader::Load("cdcase");
+-  no_cover_icon_ = nocover.pixmap(nocover.availableSizes().last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+-  //no_cover_icon_ = QPixmap(":/pictures/noalbumart.png").scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
++  if (!nocover.isNull()) {
++    no_cover_icon_ = nocover.pixmap(nocover.availableSizes().last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
++  }
+ 
+-  if (sIconCache == nullptr) {
++  if (app_ && !sIconCache) {
+     sIconCache = new QNetworkDiskCache(this);
+     sIconCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/" + kPixmapDiskCacheDir);
++    connect(app_, SIGNAL(ClearPixmapDiskCache()), SLOT(ClearDiskCache()));
+   }
+ 
+   connect(backend_, SIGNAL(SongsDiscovered(SongList)), SLOT(SongsDiscovered(SongList)));
+@@ -139,8 +141,6 @@ CollectionModel::CollectionModel(CollectionBackend *ba
+   backend_->UpdateTotalArtistCountAsync();
+   backend_->UpdateTotalAlbumCountAsync();
+ 
+-  connect(app_, SIGNAL(ClearPixmapDiskCache()), SLOT(ClearDiskCache()));
+-
+   ReloadSettings();
+ 
+ }
+@@ -189,7 +189,9 @@ void CollectionModel::ReloadSettings() {
+ 
+   QPixmapCache::setCacheLimit(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsCacheSize, CollectionSettingsPage::kSettingsCacheSizeUnit, CollectionSettingsPage::kSettingsCacheSizeDefault) / 1024);
+ 
+-  sIconCache->setMaximumCacheSize(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsDiskCacheSize, CollectionSettingsPage::kSettingsDiskCacheSizeUnit, CollectionSettingsPage::kSettingsDiskCacheSizeDefault));
++  if (sIconCache) {
++    sIconCache->setMaximumCacheSize(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsDiskCacheSize, CollectionSettingsPage::kSettingsDiskCacheSizeUnit, CollectionSettingsPage::kSettingsDiskCacheSizeDefault));
++  }
+ 
+   s.endGroup();
+ 
+@@ -510,7 +512,7 @@ void CollectionModel::SongsDeleted(const SongList &son
+       // Remove from pixmap cache
+       const QString cache_key = AlbumIconPixmapCacheKey(ItemToIndex(node));
+       QPixmapCache::remove(cache_key);
+-      if (use_disk_cache_) sIconCache->remove(QUrl(cache_key));
++      if (use_disk_cache_ && sIconCache) sIconCache->remove(QUrl(cache_key));
+       if (pending_cache_keys_.contains(cache_key)) {
+         pending_cache_keys_.remove(cache_key);
+       }
+@@ -585,7 +587,7 @@ QVariant CollectionModel::AlbumIcon(const QModelIndex 
+   }
+ 
+   // Try to load it from the disk cache
+-  if (use_disk_cache_) {
++  if (use_disk_cache_ && sIconCache) {
+     std::unique_ptr<QIODevice> cache(sIconCache->data(QUrl(cache_key)));
+     if (cache) {
+       QImage cached_image;
+@@ -637,7 +639,7 @@ void CollectionModel::AlbumCoverLoaded(const quint64 i
+   }
+ 
+   // If we have a valid cover not already in the disk cache
+-  if (use_disk_cache_) {
++  if (use_disk_cache_ && sIconCache) {
+     std::unique_ptr<QIODevice> cached_img(sIconCache->data(QUrl(cache_key)));
+     if (!cached_img && !result.image_scaled.isNull()) {
+       QNetworkCacheMetaData item_metadata;
+@@ -1556,6 +1558,7 @@ int CollectionModel::MaximumCacheSize(QSettings *s, co
+   } while (unit > 0);
+ 
+   return size;
++
+ }
+ 
+ void CollectionModel::GetChildSongs(CollectionItem *item, QList<QUrl> *urls, SongList *songs, QSet<int> *song_ids) const {
+@@ -1686,7 +1689,7 @@ void CollectionModel::TotalAlbumCountUpdatedSlot(const
+ }
+ 
+ void CollectionModel::ClearDiskCache() {
+-  sIconCache->clear();
++  if (sIconCache) sIconCache->clear();
+ }
+ 
+ QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping &g) {

Added: head/audio/strawberry/files/patch-src_organise_organiseformat.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-src_organise_organiseformat.cpp	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,33 @@
+--- src/organise/organiseformat.cpp.orig	2020-04-27 23:42:16 UTC
++++ src/organise/organiseformat.cpp
+@@ -35,6 +35,7 @@
+ #include <QPalette>
+ #include <QValidator>
+ #include <QTextEdit>
++#include <QTextDocument>
+ #include <QTextFormat>
+ 
+ #include "core/arraysize.h"
+@@ -44,8 +45,6 @@
+ 
+ #include "organiseformat.h"
+ 
+-class QTextDocument;
+-
+ const char *OrganiseFormat::kTagPattern = "\\%([a-zA-Z]*)";
+ const char *OrganiseFormat::kBlockPattern = "\\{([^{}]+)\\}";
+ const QStringList OrganiseFormat::kKnownTags = QStringList() << "title"
+@@ -145,7 +144,12 @@ QString OrganiseFormat::GetFilenameForSong(const Song 
+ 
+   QFileInfo info(filename);
+   QString extension = info.suffix();
+-  QString filepath = info.path() + "/" + info.completeBaseName();
++  QString filepath;
++  if (!info.path().isEmpty() && info.path() != ".") {
++    filepath.append(info.path());
++    filepath.append("/");
++  }
++  filepath.append(info.completeBaseName());
+ 
+   // Fix any parts of the path that start with dots.
+   QStringList parts_old = filepath.split("/");

Added: head/audio/strawberry/files/patch-tests_CMakeLists.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-tests_CMakeLists.txt	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,10 @@
+--- tests/CMakeLists.txt.orig	2020-04-27 23:42:17 UTC
++++ tests/CMakeLists.txt
+@@ -87,7 +87,6 @@ if(Qt5Test_FOUND AND GTEST_FOUND AND GMOCK_LIBRARY)
+   add_test_file(src/song_test.cpp false)
+   add_test_file(src/collectionbackend_test.cpp false)
+   add_test_file(src/collectionmodel_test.cpp true)
+-  add_test_file(src/playlist_test.cpp true)
+   add_test_file(src/songplaylistitem_test.cpp false)
+   add_test_file(src/organiseformat_test.cpp false)
+ 

Added: head/audio/strawberry/files/patch-tests_src_collectionmodel__test.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-tests_src_collectionmodel__test.cpp	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,29 @@
+--- tests/src/collectionmodel_test.cpp.orig	2020-04-27 23:42:17 UTC
++++ tests/src/collectionmodel_test.cpp
+@@ -75,6 +75,8 @@ class CollectionModelTest : public ::testing::Test {
+   Song AddSong(const QString& title, const QString& artist, const QString& album, int length) {
+     Song song;
+     song.Init(title, artist, album, length);
++    song.set_mtime(0);
++    song.set_ctime(0);
+     return AddSong(song);
+   }
+ 
+@@ -111,6 +113,8 @@ TEST_F(CollectionModelTest, CompilationAlbums) {
+   Song song;
+   song.Init("Title", "Artist", "Album", 123);
+   song.set_compilation(true);
++  song.set_mtime(0);
++  song.set_ctime(0);
+ 
+   AddSong(song);
+   model_->Init(false);
+@@ -200,6 +204,8 @@ TEST_F(CollectionModelTest, VariousArtistSongs) {
+     QString n = QString::number(i+1);
+     Song song;
+     song.Init("Title " + n, "Artist " + n, "Album", 0);
++    song.set_mtime(0);
++    song.set_ctime(0);
+     songs << song;
+   }
+ 

Added: head/audio/strawberry/files/patch-tests_src_organiseformat__test.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-tests_src_organiseformat__test.cpp	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,24 @@
+--- tests/src/organiseformat_test.cpp.orig	2019-06-29 18:18:34 UTC
++++ tests/src/organiseformat_test.cpp
+@@ -59,6 +59,7 @@ TEST_F(OrganiseFormatTest, BasicReplace) {
+   format_.set_format("%album %albumartist %artist %bitrate %comment %composer %performer %grouping %disc %genre %length %samplerate %bitdepth %title %track %year");
+ 
+   ASSERT_TRUE(format_.IsValid());
++
+   EXPECT_EQ("album_albumartist_artist_123_comment_composer_performer_grouping_789_genre_987_654_32_title_321_2010", format_.GetFilenameForSong(song_));
+ 
+ }
+@@ -135,11 +136,12 @@ TEST_F(OrganiseFormatTest, ReplaceNonAscii) {
+ 
+   format_.set_remove_non_ascii(false);
+   EXPECT_EQ(QString::fromUtf8("Röyksopp"), format_.GetFilenameForSong(song_));
++
+   format_.set_remove_non_ascii(true);
+   EXPECT_EQ("Royksopp", format_.GetFilenameForSong(song_));
+ 
+   song_.set_artist(QString::fromUtf8("Владимир Высоцкий"));
+-  EXPECT_EQ("_________________", format_.GetFilenameForSong(song_));
++  EXPECT_EQ("????????_????????", format_.GetFilenameForSong(song_));
+ 
+ }
+ 

Added: head/audio/strawberry/files/patch-tests_src_playlist__test.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/files/patch-tests_src_playlist__test.cpp	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,31 @@
+--- tests/src/playlist_test.cpp.orig	2020-04-27 23:42:17 UTC
++++ tests/src/playlist_test.cpp
+@@ -53,15 +53,15 @@ class PlaylistTest : public ::testing::Test {
+     Song metadata;
+     metadata.Init(title, artist, album, length);
+ 
+-    //MockPlaylistItem* ret = new MockPlaylistItem;
++    MockPlaylistItem *ret = new MockPlaylistItem;
+     //EXPECT_CALL(*ret, Metadata()).WillRepeatedly(Return(metadata));
+ 
+-    //return ret;
++    return ret;
+     return nullptr;
+   }
+ 
+-  std::shared_ptr<PlaylistItem> MakeMockItemP(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const {
+-    return std::shared_ptr<PlaylistItem>(MakeMockItem(title, artist, album, length));
++  PlaylistItemPtr MakeMockItemP(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const {
++    return PlaylistItemPtr(MakeMockItem(title, artist, album, length));
+   }
+ 
+   Playlist playlist_;
+@@ -76,7 +76,7 @@ TEST_F(PlaylistTest, Basic) {
+ TEST_F(PlaylistTest, InsertItems) {
+ 
+   MockPlaylistItem* item = MakeMockItem("Title", "Artist", "Album", 123);
+-  std::shared_ptr<PlaylistItem> item_ptr(item);
++  PlaylistItemPtr item_ptr(item);
+ 
+   // Insert the item
+   EXPECT_EQ(0, playlist_.rowCount(QModelIndex()));

Added: head/audio/strawberry/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/pkg-descr	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,3 @@
+Strawberry is a fork of clementine with many features.
+
+WWW: https://www.strawberrymusicplayer.org/

Added: head/audio/strawberry/pkg-plist
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/strawberry/pkg-plist	Sun May 17 20:19:09 2020	(r535673)
@@ -0,0 +1,9 @@
+bin/strawberry
+bin/strawberry-tagreader
+share/applications/org.strawberrymusicplayer.strawberry.desktop
+share/icons/hicolor/128x128/apps/strawberry.png
+share/icons/hicolor/48x48/apps/strawberry.png
+share/icons/hicolor/64x64/apps/strawberry.png
+share/man/man1/strawberry-tagreader.1.gz
+share/man/man1/strawberry.1.gz
+share/metainfo/org.strawberrymusicplayer.strawberry.appdata.xml



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005172019.04HKJA7X073683>