Refactor sponsorship-related code and update .gitignore for macOS build
Some checks failed
Build / Build openSUSE (leap:15.6) (push) Has been cancelled
Build / Build openSUSE (leap:16.0) (push) Has been cancelled
Build / Build openSUSE (tumbleweed) (push) Has been cancelled
Build / Build Fedora (42) (push) Has been cancelled
Build / Build Fedora (43) (push) Has been cancelled
Build / Build Fedora (44) (push) Has been cancelled
Build / Build OpenMandriva (cooker) (push) Has been cancelled
Build / Build Mageia (9) (push) Has been cancelled
Build / Build Debian (bookworm) (push) Has been cancelled
Build / Build Debian (forky) (push) Has been cancelled
Build / Build Debian (trixie) (push) Has been cancelled
Build / Build Ubuntu (noble) (push) Has been cancelled
Build / Build Ubuntu (questing) (push) Has been cancelled
Build / Build Ubuntu (resolute) (push) Has been cancelled
Build / Upload Ubuntu PPA (noble) (push) Has been cancelled
Build / Upload Ubuntu PPA (questing) (push) Has been cancelled
Build / Upload Ubuntu PPA (resolute) (push) Has been cancelled
Build / Build FreeBSD (push) Has been cancelled
Build / Build OpenBSD (push) Has been cancelled
Build / Build macOS Public (release, macos-15) (push) Has been cancelled
Build / Build macOS Public (release, macos-15-intel) (push) Has been cancelled
Build / Build macOS Private (release, macos-arm64) (push) Has been cancelled
Build / Build Windows MinGW (i686, debug) (push) Has been cancelled
Build / Build Windows MinGW (i686, release) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, debug) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, release) (push) Has been cancelled
Build / Build Windows MSVC (arm64, debug, arm64 debug, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (arm64, release, arm64 release, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (x86, debug, x86 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86, release, x86 release, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, debug, x86_64 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, release, x86_64 release, windows-2022) (push) Has been cancelled
Build / Upload (push) Has been cancelled
Build / Attach to release (push) Has been cancelled
Some checks failed
Build / Build openSUSE (leap:15.6) (push) Has been cancelled
Build / Build openSUSE (leap:16.0) (push) Has been cancelled
Build / Build openSUSE (tumbleweed) (push) Has been cancelled
Build / Build Fedora (42) (push) Has been cancelled
Build / Build Fedora (43) (push) Has been cancelled
Build / Build Fedora (44) (push) Has been cancelled
Build / Build OpenMandriva (cooker) (push) Has been cancelled
Build / Build Mageia (9) (push) Has been cancelled
Build / Build Debian (bookworm) (push) Has been cancelled
Build / Build Debian (forky) (push) Has been cancelled
Build / Build Debian (trixie) (push) Has been cancelled
Build / Build Ubuntu (noble) (push) Has been cancelled
Build / Build Ubuntu (questing) (push) Has been cancelled
Build / Build Ubuntu (resolute) (push) Has been cancelled
Build / Upload Ubuntu PPA (noble) (push) Has been cancelled
Build / Upload Ubuntu PPA (questing) (push) Has been cancelled
Build / Upload Ubuntu PPA (resolute) (push) Has been cancelled
Build / Build FreeBSD (push) Has been cancelled
Build / Build OpenBSD (push) Has been cancelled
Build / Build macOS Public (release, macos-15) (push) Has been cancelled
Build / Build macOS Public (release, macos-15-intel) (push) Has been cancelled
Build / Build macOS Private (release, macos-arm64) (push) Has been cancelled
Build / Build Windows MinGW (i686, debug) (push) Has been cancelled
Build / Build Windows MinGW (i686, release) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, debug) (push) Has been cancelled
Build / Build Windows MinGW (x86_64, release) (push) Has been cancelled
Build / Build Windows MSVC (arm64, debug, arm64 debug, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (arm64, release, arm64 release, windows-11-arm) (push) Has been cancelled
Build / Build Windows MSVC (x86, debug, x86 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86, release, x86 release, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, debug, x86_64 debug, windows-2022) (push) Has been cancelled
Build / Build Windows MSVC (x86_64, release, x86_64 release, windows-2022) (push) Has been cancelled
Build / Upload (push) Has been cancelled
Build / Attach to release (push) Has been cancelled
This commit removes sponsorship-related UI elements and functionality from the application, including the donation links and associated logic in the main window and radio services. Additionally, the .gitignore file is updated to exclude various macOS-specific files and directories, ensuring a cleaner build environment while retaining necessary build tooling scripts.
This commit is contained in:
24
.gitignore
vendored
24
.gitignore
vendored
@@ -19,3 +19,27 @@ _codeql_detected_source_root
|
||||
/build*/
|
||||
!/build_tools/
|
||||
!/build_tools/**
|
||||
|
||||
# macOS noise
|
||||
.DS_Store
|
||||
/bin
|
||||
/CMakeLists.txt.user
|
||||
/.qtcreator
|
||||
/.kdev4
|
||||
/strawberry.kdev4
|
||||
/.vscode
|
||||
/.code-workspace
|
||||
/.sublime-workspace
|
||||
/.idea
|
||||
/.vs
|
||||
/out
|
||||
/CMakeSettings.json
|
||||
/dist/scripts/maketarball.sh
|
||||
/debian/changelog
|
||||
_codeql_detected_source_root
|
||||
|
||||
# Build output (keep build tooling scripts in /build_tools/ tracked)
|
||||
/cmake-build*/
|
||||
/build*/
|
||||
!/build_tools/
|
||||
!/build_tools/**
|
||||
|
||||
@@ -343,7 +343,7 @@ Version 1.1.0 (2024.07.14):
|
||||
* Only use playbin3 with GStreamer 1.24 and higher, not with GStreamer 1.22 or lower.
|
||||
* (macOS/Windows) Fixed dash and hls streaming, plugins were missing.
|
||||
* (Windows) Fixed incorrect colors in smart playlist wizard with Fusion in dark mode (#1399).
|
||||
* (Windows) Fixed update window blocking sponsor window on startup.
|
||||
* (Windows) Fixed update window blocking startup window on launch.
|
||||
|
||||
Enhancements:
|
||||
* Improve error messages when connecting and copying to devices.
|
||||
|
||||
76
README.md
76
README.md
@@ -1,60 +1,49 @@
|
||||
# :strawberry: Strawberry Music Player [](https://github.com/strawberrymusicplayer/strawberry/actions)
|
||||
[](https://github.com/sponsors/jonaski)
|
||||
[](https://patreon.com/jonaskvinge)
|
||||
[](https://paypal.me/jonaskvinge)
|
||||
# Strawberry (macOS-focused fork)
|
||||
|
||||
Strawberry is a **music player and music collection organizer**, originally forked from *Clementine* in 2018.
|
||||
It’s written in **C++ using the Qt framework**, designed for **audiophiles and music collectors**.
|
||||
This repository is a **macOS-focused fork** of the upstream Strawberry Music Player project originally created and maintained by **Jonas Kvinge** (itself originally forked from Clementine).
|
||||
|
||||

|
||||
The goal of this fork is to make Strawberry **build cleanly and repeatably on macOS**, with:
|
||||
|
||||
---
|
||||
- Homebrew dependency installation via `Brewfile`
|
||||
- local Homebrew formulas (tap) for missing dependencies
|
||||
- build / deploy / signing / notarization helper scripts under `build_tools/`
|
||||
- Sparkle feed configuration knobs so you can publish your own updates
|
||||
|
||||
## :globe_with_meridians: Resources
|
||||
## Upstream vs this fork (macOS distribution)
|
||||
|
||||
- **Website:** https://www.strawberrymusicplayer.org
|
||||
- **Wiki:** https://wiki.strawberrymusicplayer.org
|
||||
- **Forum:** https://forum.strawberrymusicplayer.org
|
||||
- **GitHub:** https://github.com/strawberrymusicplayer/strawberry
|
||||
- **Latest builds:** https://builds.strawberrymusicplayer.org
|
||||
- **openSUSE Build Service:**
|
||||
- Stable: https://build.opensuse.org/package/show/home:jonaski:strawberry/strawberry
|
||||
- Unstable: https://build.opensuse.org/package/show/home:jonaski:strawberry-dev/strawberry
|
||||
- **Ubuntu PPAs:**
|
||||
- Stable: https://launchpad.net/~jonaski/+archive/ubuntu/strawberry
|
||||
- Unstable: https://launchpad.net/~jonaski/+archive/ubuntu/strawberry-unstable
|
||||
- **Translations:** https://crowdin.com/project/strawberrymusicplayer
|
||||
Upstream Strawberry is free/open-source, but upstream’s **macOS binaries** may be distributed via a **paid-access channel** depending on the release period and policy.
|
||||
|
||||
---
|
||||
This fork is intended for people who want to:
|
||||
|
||||
## :warning: Opening an Issue
|
||||
- **build from source on macOS** without guesswork
|
||||
- **produce signed + notarized binaries** themselves (and optionally distribute them)
|
||||
|
||||
Before creating a new GitHub issue:
|
||||
General safety note: whether you use upstream builds, your own builds, or someone else’s, only install software from sources you trust and prefer **signed + notarized** releases.
|
||||
|
||||
1. **Read the [FAQ](https://wiki.strawberrymusicplayer.org/wiki/FAQ)**.
|
||||
2. **Search existing issues** to avoid duplicates. If one already exists, comment there with any additional information.
|
||||
3. **Use the [forum](https://forum.strawberrymusicplayer.org/)** for technical problems, discussions or feature suggestions — it’s better suited for back-and-forth conversation.
|
||||
4. **Feature requests are not accepted on GitHub.** Issues created for feature requests will be closed. You can still discuss ideas on the forum.
|
||||
5. **Flatpak users:** We do **not** maintain the Flatpak package. Report Flatpak-specific issues via [Flatpak support](https://flatpak.org/about/).
|
||||
## Quick start (macOS)
|
||||
|
||||
---
|
||||
Install Homebrew dependencies:
|
||||
|
||||
## :moneybag: Sponsoring
|
||||
```bash
|
||||
./build_tools/macos/install_brew_deps.sh
|
||||
```
|
||||
|
||||
Strawberry is **free software released under the GPL**.
|
||||
If you enjoy using it, please consider **supporting development** through sponsorship or donation.
|
||||
Build:
|
||||
|
||||
**Sponsorship options:**
|
||||
1. [Patreon](https://www.patreon.com/jonaskvinge)
|
||||
2. [GitHub](https://github.com/sponsors/jonaski)
|
||||
3. [Ko-fi](https://ko-fi.com/jonaskvinge)
|
||||
4. [PayPal](https://paypal.me/jonaskvinge)
|
||||
```bash
|
||||
./build_tools/macos/build_app.sh --release --clean
|
||||
open ./cmake-build-macos-release/strawberry.app
|
||||
```
|
||||
|
||||
Supporting open-source developers helps ensure continued maintenance and improvements.
|
||||
Build + deploy + sign + notarize (+ DMG):
|
||||
|
||||
---
|
||||
```bash
|
||||
./build_tools/macos/build_sign_notarize.sh --run --release --clean --deploy --dmg \
|
||||
--identity "Developer ID Application: Your Name (TEAMID)" \
|
||||
--notary-profile "<profile-name>"
|
||||
```
|
||||
|
||||
## :white_check_mark: Features
|
||||
## Features
|
||||
|
||||
- Play and organize your music collection
|
||||
- Supports formats: WAV, FLAC, WavPack, Ogg Vorbis, Opus, MPC, TrueAudio, AIFF, MP4, MP3, ASF, and Monkey’s Audio
|
||||
@@ -78,11 +67,6 @@ Supporting open-source developers helps ensure continued maintenance and improve
|
||||
|
||||
:white_check_mark: Tested on **Linux**, **OpenBSD**, **FreeBSD**, **macOS**, and **Windows**.
|
||||
|
||||
> **Note:** macOS and Windows releases are currently **available to sponsors only**.
|
||||
> A monthly sponsorship via [Patreon](https://www.patreon.com/jonaskvinge) grants direct access to new releases.
|
||||
|
||||
---
|
||||
|
||||
## :gear: Requirements
|
||||
|
||||
To build Strawberry from source, you’ll need:
|
||||
|
||||
@@ -1142,18 +1142,7 @@ MainWindow::MainWindow(Application *app,
|
||||
asked_permission = s.value("asked_permission", false).toBool();
|
||||
s.endGroup();
|
||||
#endif
|
||||
if (asked_permission) {
|
||||
s.beginGroup(MainWindowSettings::kSettingsGroup);
|
||||
const bool do_not_show_sponsor_message = s.value(MainWindowSettings::kDoNotShowSponsorMessage, false).toBool();
|
||||
s.endGroup();
|
||||
if (!do_not_show_sponsor_message) {
|
||||
MessageDialog *sponsor_message = new MessageDialog(this);
|
||||
sponsor_message->set_settings_group(QLatin1String(MainWindowSettings::kSettingsGroup));
|
||||
sponsor_message->set_do_not_show_message_again(QLatin1String(MainWindowSettings::kDoNotShowSponsorMessage));
|
||||
sponsor_message->setAttribute(Qt::WA_DeleteOnClose);
|
||||
sponsor_message->ShowMessage(tr("Sponsoring Strawberry"), tr("Strawberry is free and open source software. If you like Strawberry, please consider sponsoring the project. For more information about sponsorship see our website %1").arg(u"<a href= \"https://www.strawberrymusicplayer.org/\">www.strawberrymusicplayer.org</a>"_s), IconLoader::Load(u"dialog-information"_s));
|
||||
}
|
||||
}
|
||||
Q_UNUSED(asked_permission)
|
||||
}
|
||||
|
||||
qLog(Debug) << "Started" << QThread::currentThread();
|
||||
|
||||
@@ -124,17 +124,6 @@ QString About::MainHtml() const {
|
||||
ret += tr("You should have received a copy of the GNU General Public License along with this program. If not, see %1").arg(QStringLiteral("<a style=\"color:%1;\" href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a>").arg(palette().text().color().name()));
|
||||
ret += "</p>"_L1;
|
||||
|
||||
ret += "<p>"_L1;
|
||||
ret += tr("If you like Strawberry and can make use of it, consider sponsoring or donating.");
|
||||
ret += "<br />"_L1;
|
||||
ret += tr("You can sponsor the author on %1 or %2. You can also make a one-time payment through %3.").arg(
|
||||
QStringLiteral("<a style=\"color:%1;\" href=\"https://www.patreon.com/jonaskvinge\">Patreon</a>").arg(palette().text().color().name()),
|
||||
QStringLiteral("<a style=\"color:%1;\" href=\"https://github.com/sponsors/jonaski\">GitHub</a>").arg(palette().text().color().name()),
|
||||
QStringLiteral("<a style=\"color:%1;\" href=\"https://paypal.me/jonaskvinge\">paypal.me/jonaskvinge</a>").arg(palette().text().color().name())
|
||||
);
|
||||
|
||||
ret += "</p>"_L1;
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
@@ -113,11 +113,6 @@ QVariant RadioModel::data(const RadioItem *item, int role) const {
|
||||
if (service) return service->Homepage();
|
||||
break;
|
||||
}
|
||||
case Role_Donate:{
|
||||
RadioService *service = radio_services_->ServiceBySource(item->source);
|
||||
if (service) return service->Donate();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,6 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
|
||||
Role_Source,
|
||||
Role_Url,
|
||||
Role_Homepage,
|
||||
Role_Donate,
|
||||
RoleCount
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ RadioParadiseService::RadioParadiseService(const SharedPtr<TaskManager> task_man
|
||||
: RadioService(Song::Source::RadioParadise, u"Radio Paradise"_s, IconLoader::Load(u"radioparadise"_s), task_manager, network, parent) {}
|
||||
|
||||
QUrl RadioParadiseService::Homepage() { return QUrl(u"https://radioparadise.com/"_s); }
|
||||
QUrl RadioParadiseService::Donate() { return QUrl(u"https://payments.radioparadise.com/rp2s-content.php?name=Support&file=support"_s); }
|
||||
|
||||
void RadioParadiseService::Abort() {
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ class RadioParadiseService : public RadioService {
|
||||
explicit RadioParadiseService(const SharedPtr<TaskManager> task_manager, const SharedPtr<NetworkAccessManager> network, QObject *parent = nullptr);
|
||||
|
||||
QUrl Homepage() override;
|
||||
QUrl Donate() override;
|
||||
|
||||
void Abort();
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@ class RadioService : public QObject {
|
||||
virtual void ReloadSettings() {}
|
||||
|
||||
virtual QUrl Homepage() = 0;
|
||||
virtual QUrl Donate() = 0;
|
||||
|
||||
Q_SIGNALS:
|
||||
void NewChannels(const RadioChannelList &channels = RadioChannelList());
|
||||
|
||||
@@ -44,7 +44,6 @@ RadioView::RadioView(QWidget *parent)
|
||||
action_playlist_replace_(nullptr),
|
||||
action_playlist_new_(nullptr),
|
||||
action_homepage_(nullptr),
|
||||
action_donate_(nullptr),
|
||||
initialized_(false) {
|
||||
|
||||
setItemDelegate(new CollectionItemDelegate(this));
|
||||
@@ -88,10 +87,6 @@ void RadioView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
QObject::connect(action_homepage_, &QAction::triggered, this, &RadioView::Homepage);
|
||||
menu_->addAction(action_homepage_);
|
||||
|
||||
action_donate_ = new QAction(IconLoader::Load(u"download"_s), tr("Donate"), this);
|
||||
QObject::connect(action_donate_, &QAction::triggered, this, &RadioView::Donate);
|
||||
menu_->addAction(action_donate_);
|
||||
|
||||
menu_->addAction(IconLoader::Load(u"view-refresh"_s), tr("Refresh channels"), this, &RadioView::GetChannels);
|
||||
}
|
||||
|
||||
@@ -101,7 +96,6 @@ void RadioView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
action_playlist_replace_->setVisible(channels_selected);
|
||||
action_playlist_new_->setVisible(channels_selected);
|
||||
action_homepage_->setVisible(channels_selected);
|
||||
action_donate_->setVisible(channels_selected);
|
||||
|
||||
menu_->popup(e->globalPos());
|
||||
|
||||
@@ -165,22 +159,3 @@ void RadioView::Homepage() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RadioView::Donate() {
|
||||
|
||||
const QModelIndexList selected_indexes = selectedIndexes();
|
||||
if (selected_indexes.isEmpty()) return;
|
||||
|
||||
QList<QUrl> urls;
|
||||
for (const QModelIndex &idx : selected_indexes) {
|
||||
QUrl url = idx.data(RadioModel::Role_Donate).toUrl();
|
||||
if (!urls.contains(url)) {
|
||||
urls << url; // clazy:exclude=reserve-candidates
|
||||
}
|
||||
}
|
||||
|
||||
for (const QUrl &url : std::as_const(urls)) {
|
||||
QDesktopServices::openUrl(url);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,7 +50,6 @@ class RadioView : public AutoExpandingTreeView {
|
||||
void ReplacePlaylist();
|
||||
void OpenInNewPlaylist();
|
||||
void Homepage();
|
||||
void Donate();
|
||||
|
||||
private:
|
||||
QMenu *menu_;
|
||||
@@ -58,7 +57,6 @@ class RadioView : public AutoExpandingTreeView {
|
||||
QAction *action_playlist_replace_;
|
||||
QAction *action_playlist_new_;
|
||||
QAction *action_homepage_;
|
||||
QAction *action_donate_;
|
||||
bool initialized_;
|
||||
};
|
||||
|
||||
|
||||
@@ -49,7 +49,6 @@ SomaFMService::~SomaFMService() {
|
||||
}
|
||||
|
||||
QUrl SomaFMService::Homepage() { return QUrl(u"https://somafm.com/"_s); }
|
||||
QUrl SomaFMService::Donate() { return QUrl(u"https://somafm.com/support/"_s); }
|
||||
|
||||
void SomaFMService::Abort() {
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ class SomaFMService : public RadioService {
|
||||
~SomaFMService();
|
||||
|
||||
QUrl Homepage() override;
|
||||
QUrl Donate() override;
|
||||
|
||||
void Abort();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user