Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Package for Flatpak #2047

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Package for Flatpak #2047

wants to merge 2 commits into from

Conversation

Grafcube
Copy link

Closes #737

This patch adds flatpak support. I built and installed it on my branch with these commands:

pnpm build
pnpm electron-builder --linux flatpak
flatpak install --bundle 'pack/YouTube Music-3.3.6-x86_64.flatpak'

A few things to note, I need to write a separate yml to publish to flathub which repeats a lot of metadata (electron builder doesn't currently have any way to publish to flathub automatically). According to the flatpak app submission guidelines:

Flathub is primarily intended as a service that is used by app developers to distribute their apps. Our goal is to give developers control of their apps and to allow them a closer relationship with their users without middlemen getting in the way. However, as part of setting up Flathub, some applications are being distributed on Flathub without the involvement of their developers. We would prefer that these applications are controlled by their authors.

I am perfectly fine with maintaining the flatpak myself.

The appstream metadata should probably contain content warnings since YT music also has explicit content. I've left it blank for now. It also needs to be packaged manually since electron builder doesn't yet support adding it (see electron-userland/electron-builder#1993). I'll manually include it in the manifest until that issue is resolved. The appstream file is useful for all linux packages, not just flatpak, which is why I've included it in the PR.

If you don't want to wait, you can checkout my branch and install it yourself with the above commands. Cheers!

@Grafcube Grafcube mentioned this pull request May 11, 2024
@razzeee
Copy link

razzeee commented May 11, 2024

You can try using https://hughsie.github.io/oars/generate.html to generate the missing oars data

@Grafcube
Copy link
Author

You can try using https://hughsie.github.io/oars/generate.html to generate the missing oars data

Here's what I got. I'm unsure if it's accurate since it's only audio and not video.

  <content_rating type="oars-1.1">
    <content_attribute id="drugs-alcohol">mild</content_attribute>
    <content_attribute id="drugs-narcotics">mild</content_attribute>
    <content_attribute id="drugs-tobacco">mild</content_attribute>
    <content_attribute id="sex-nudity">mild</content_attribute>
    <content_attribute id="sex-themes">mild</content_attribute>
    <content_attribute id="language-profanity">moderate</content_attribute>
    <content_attribute id="social-info">intense</content_attribute>
    <content_attribute id="money-purchasing">intense</content_attribute>
    <content_attribute id="money-advertising">intense</content_attribute>
  </content_rating>

@ArjixWasTaken
Copy link
Contributor

is there any point in setting oars ratings to anything other than intense?
we do not have control over youtube's content, so we cannot explicitly set age ratings

@razzeee
Copy link

razzeee commented May 12, 2024

Won't this also play video in some cases?

@MulverineX
Copy link
Contributor

Also social-info shouldn't be marked intense, anonymous users can use this app

@Grafcube
Copy link
Author

Grafcube commented May 18, 2024

Also social-info shouldn't be marked intense, anonymous users can use this app

I'm pretty sure the algorithm still works for anonymous users.

From https://hughsie.github.io/oars/generate.html
If the user is able to "enable" NSFW or "adult" content, then this should be included in the assessment even if it is turned off by default.

This makes me think that it should be the "worst case" for all the fields.

@JellyBrick JellyBrick added the enhancement New feature or request label May 24, 2024
https://github.com/th-ch/youtube-music/assets/16558115/53efdf73-b8fa-4d7b-a235-b96b91ea77fc</image>
</screenshot>
</screenshots>
<releases>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to write this XML manually for each release?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you have a sane way of feeding a tool, writing a script that modifies xml is pretty straightforward. Problem usually is the changelog, version number etc.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used this tool to automatically fetch and populate the release history.

https://jakobdev.codeberg.page/work/app/jdAppStreamEdit/

I didn't have to do anything manually so I think it should be easy enough to make a script to automatically update the file.

@Skythrew
Copy link

Any update on this ? :) Would be really cool to see the app packaged as a Flatpak 👍

@Grafcube
Copy link
Author

The app currently uses com.github.th_ch.youtube_music as its app id but according to this, it makes more sense to use io.github.th_ch.youtube_music. This is probably better suited for a separate issue but maybe all instances of the old app id should be changed?

https://docs.flathub.org/docs/for-app-authors/verification/#source-code-hosting-site

Apart from that, I'll try to make a manifest that can be used for submission into flathub whenever I get the time.

@Grafcube
Copy link
Author

Grafcube commented Sep 2, 2024

Despite my best attempts it's been really complicated to build a flatpak. I think I'm going to give up and just manually update it when I need to. I'm going to leave some information here if anyone else wants to take a crack at it.

  • Generate a list of sources from pnpm-lock.yaml to include in the flatpak manifest sources.
  • electron-builder only generates a single-file bundle. I couldn't figure out a way to get it to build a directory.
  • Trying to package a regular linux build is more complicated because electron builder doesn't generate a desktop file for other package types (unless I just don't know how to do it).

Here's the changes I made to package.json to build a flatpak with the commands in my original comment.

"linux": {
  "icon": "assets/generated/icons/png",
  "category": "AudioVideo",
  "target": [
    "AppImage",
    "snap",
    "freebsd",
    "flatpak",
    "deb",
    "rpm"
  ]
},
"flatpak": {
  "runtimeVersion": "23.08",
  "baseVersion": "23.08",
  "useWaylandFlags": true,
  "finishArgs": [
    "--socket=wayland",
    "--socket=fallback-x11",
    "--share=ipc",
    "--device=dri",
    "--socket=pulseaudio",
    "--filesystem=xdg-music",
    "--share=network",
    "--talk-name=org.freedesktop.Notifications",
    "--talk-name=org.kde.StatusNotifierWatcher",
    "--talk-name=org.gnome.SettingsDaemon.MediaKeys",
    "--talk-name=com.canonical.AppMenu.Registrar",
    "--talk-name=org.gnome.SessionManager",
    "--own-name=org.mpris.MediaPlayer2.chromium.*"
  ]
},

@JellyBrick
Copy link
Collaborator

Added flatpak bundle starting in 3.6.1 and later
https://github.com/th-ch/youtube-music/releases/tag/v3.6.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Flatpak Support
7 participants