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

Mpris blacklist support #390

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open

Conversation

abmantis
Copy link
Contributor

Continuation of PR #324.

@abmantis
Copy link
Contributor Author

abmantis commented Feb 25, 2024

When I run the formatter, there are quite a few changes to the mpris.vala file. I am assuming the style rule was updated meanwhile. Let me know if you want me to commit those changes too.

@MrPenguin07
Copy link

Continuation of PR #324.

Great to see progress on this.... and to see where my code was convoluted :)
I'll pull this now and report back.

Regards

@MrPenguin07
Copy link

Alright, so with config as so;

"mpris": {
    "image-size": 96,
    "image-radius": 6,
    "blacklist": [".*firefox.*"]
},

SwayNC reports at startup;

** Message: 13:13:39.774: mpris.vala:263: "org.mpris.MediaPlayer2.firefox.instance_1_5133" is blacklisted
** Message: 13:13:39.774: factory.vala:44: Loading widget: mpris

So regex is being respected, and the annoying firefox tabs each creating their own instance is no longer showing in SwayNC.

Thumbsup, I approve.

@ErikReider
Copy link
Owner

I'll get to this after the upcoming bug release :)

@MrPenguin07
Copy link

I've noticed that firefox instances aren't always blacklisted from the mpris module;

Upon swaync startup, instances are identified and removed. Great.
However, sometimes an existing swaync session does not pickup new firefox tabs/mpris players.
When this happens, if I run $ swaync-client --reload-config the new firefox tabs are then removed from the mpris player.
I also noticed this happening with my original PR.

I've yet to produce a repeatable scenario for this, however have noticed it happening quite a few times.

@ErikReider
Copy link
Owner

I've noticed that firefox instances aren't always blacklisted from the mpris module;

Upon swaync startup, instances are identified and removed. Great. However, sometimes an existing swaync session does not pickup new firefox tabs/mpris players. When this happens, if I run $ swaync-client --reload-config the new firefox tabs are then removed from the mpris player. I also noticed this happening with my original PR.

I've yet to produce a repeatable scenario for this, however have noticed it happening quite a few times.

I'll wait until this is resolved then

@abmantis
Copy link
Contributor Author

I've noticed that firefox instances aren't always blacklisted from the mpris module;
Upon swaync startup, instances are identified and removed. Great. However, sometimes an existing swaync session does not pickup new firefox tabs/mpris players. When this happens, if I run $ swaync-client --reload-config the new firefox tabs are then removed from the mpris player. I also noticed this happening with my original PR.
I've yet to produce a repeatable scenario for this, however have noticed it happening quite a few times.

I'll wait until this is resolved then

May I suggest that we merge this still? It still improves the functionality since currently, FF will always be duplicated anyway. Also we avoid having stale PRs for things that are already done (even if there is some unknown issue).

If there is some quirk, it can be fixed later. It would also help having more people use this and reporting so we can pinpoint the issue.

Otherwise, we risk never finding the cause and this PR will just stay open forever.

@MrPenguin07
Copy link

I've noticed that firefox instances aren't always blacklisted from the mpris module;
Upon swaync startup, instances are identified and removed. Great. However, sometimes an existing swaync session does not pickup new firefox tabs/mpris players. When this happens, if I run $ swaync-client --reload-config the new firefox tabs are then removed from the mpris player. I also noticed this happening with my original PR.
I've yet to produce a repeatable scenario for this, however have noticed it happening quite a few times.

I'll wait until this is resolved then

I believe, without reviewing the code but from the observed behavior, that this is simply caused by the mpris widget lacking a hook which checks if new players are in the blacklist prior to adding them first.
Thus starting/reloading Swaync will correctly identify and blacklist existing players on startup, however especially with firefox where new instances/players come and go, we lack the mechanism to cross reference the blacklist before adding it.

@abmantis makes some points, though can also accept it's best a feature is complete before merge.
Unless you beat me to it, i'll get onto this later this week regardless.

@ErikReider
Copy link
Owner

I'd rather not merge incomplete features

@abmantis
Copy link
Contributor Author

@MrPenguin07 any findings?

@abmantis
Copy link
Contributor Author

abmantis commented May 9, 2024

@ErikReider I was now able to reproduce the issue mentioned by @MrPenguin07 and just fixed it.
@MrPenguin07 can you try out my last commit?

@MrPenguin07
Copy link

@ErikReider I was now able to reproduce the issue mentioned by @MrPenguin07 and just fixed it. @MrPenguin07 can you try out my last commit?

I appreciate your taking the time to hash this one out, glad to see my suspicion was correct.
Just haven't had time to code much of anything these days :/

I've pulled your latest commit, built swaync and ....
image

Am happy to be greeted by this when a new player is added, without needing to reload swaync.
Good stuff @abmantis

I consider this feature to now be complete @ErikReider

@abmantis
Copy link
Contributor Author

I initially misinterpreted your description of the issue, that is why I was not able to reproduce it.
Yesterday, after coming back to this and reading it again I noticed that it was in fact easy to reproduce :D

@ErikReider are you ok with moving this forward now?

@rtgiskard
Copy link

rtgiskard commented May 14, 2024

@abmantis I like this, but I think it's better to keep only necessary changes, flake.nix is not likely to be included in this project, and the message() can be removed, just to keep it simple. Except for the manual page, configSchema.json need to be synced too.

@rtgiskard
Copy link

rtgiskard commented May 14, 2024

Just fixed a typo-like bug for name_owner_changed signal handler skipped, which should resolve the issue above, and also this: #425.

It's now here in the main branch with another PR in process, If you're willing, I may create another PR including this feature with the fix.

@abmantis abmantis closed this May 17, 2024
@abmantis
Copy link
Contributor Author

Closed by mistake. I thought this was pushed to main, but I was checking a fork 🤦

@abmantis abmantis reopened this May 17, 2024
@abmantis
Copy link
Contributor Author

Removed the flake.nix file, which was committed by mistake.

@abmantis
Copy link
Contributor Author

Just fixed a typo-like bug for name_owner_changed signal handler skipped, which should resolve the issue above, and also this: #425.

It's now here in the main branch with another PR in process, If you're willing, I may create another PR including this feature with the fix.

I think it would be better to keep this PR and to have separate PRs.

@MrPenguin07
Copy link

Reporting: 2 weeks of testing these commits and the mpris blacklist continues to work perfectly.

@@ -174,6 +184,7 @@ namespace SwayNotificationCenter.Widgets.Mpris {
string[] names = dbus_iface.list_names ();
foreach (string name in names) {
if (!name.has_prefix (MPRIS_PREFIX)) continue;
if (is_blacklisted(name)) continue;
if (check_player_exists (name)) return;

Choose a reason for hiding this comment

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

You may change this line to fix the unintended return

Choose a reason for hiding this comment

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

Maybe I'm too ignorant about it, I'm seeing that my report was merged in this PR, but I don't know how to use info written here to fix the issue with my Swaync. I uninstalled the one I got from Arch repo, and compiled this one, still having the same issue: Swaync shows MPRIS module when nothing is being played, and when there's something being played, I have two different MPRIS modules in Swaync. What I am missing?

Thanks in advance.

Choose a reason for hiding this comment

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

Maybe I'm too ignorant about it, I'm seeing that my report was merged in this PR, but I don't know how to use info written here to fix the issue with my Swaync. I uninstalled the one I got from Arch repo, and compiled this one, still having the same issue: Swaync shows MPRIS module when nothing is being played, and when there's something being played, I have two different MPRIS modules in Swaync. What I am missing?

Thanks in advance.

By "compiled this one" do you mean you've cloned SwayNotificationCenter repo, pulled the commits to your repo and then built that?
Or are you manually patching the source?

I get the feeling you may simply be building master from this repo without the changes.

Copy link

Choose a reason for hiding this comment

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

Yeah, just cloned and built it. No commits pulled. I don't know how to pull the commits separately, I tried to just copy/paste the changes but apparently I did it wrongly, and I wasn't able to modify the installation...

Sorry for the ignorance :(

EDIT: I found how to download mpris.vala and replaced the one in /src/controlCenter/widgets/mpris folder. Added "blacklist": [] in my config.json (the one I have configured already, since that's the one active in my dotfiles), rebuilt it, problem continues: I have two different mpris modules, and when nothing is being played, module is there.

EDIT 2: I finally got it. I'm a complete noob and I had no idea what to do, so just intuition led me to the answer: I had to write "playerctl" to blacklist it, and that's it.

I'll close the PR. Thanks for this solution!

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

Successfully merging this pull request may close these issues.

None yet

5 participants