Compare commits

...

34 Commits

Author SHA1 Message Date
485ec0ec0a escape double quotes
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-27 18:00:49 +00:00
39f84a94ac write connection refused error to stderr
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-24 14:30:38 +00:00
4b71fa248a Truncate file when directly sharing
All checks were successful
continuous-integration/drone/push Build is passing
Fixes bug where recipient instance would have a bit of the previous
track data on the end of the output if the previous track data was
longer, which effectively froze the output on waybar as it was no longer
valid JSON.
2021-10-29 15:10:53 +01:00
c26c13e984 upload to buildrone before apt
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-25 01:57:29 +01:00
174d243f15 fix apt versioning
Some checks failed
continuous-integration/drone/push Build is failing
2021-05-31 23:19:31 +01:00
6cab493189 mention repo in README
All checks were successful
continuous-integration/drone/push Build is passing
2021-05-24 22:44:07 +01:00
69be0dcf8a fix typo
All checks were successful
continuous-integration/drone/push Build is passing
2021-05-24 21:48:44 +01:00
22ad0e29cb make debs/rpms, upload .debs to repo
Some checks failed
continuous-integration/drone/push Build is failing
2021-05-24 20:27:45 +01:00
8340ef1f20 always return the expected number of bytes written
All checks were successful
continuous-integration/drone/push Build is passing
emptyEveryWrite was returning the wrong number, so it ignores the real
value and just returns the expected value (len(bytes in)). For #4 again.
2021-05-24 14:51:21 +01:00
fe851278f4 change order of writers in io.Multiwriter
All checks were successful
continuous-integration/drone/push Build is passing
io.MultiWriter (i think) thinks dataWrite.Write fails, and so doesn't
continue writing to all other outputs. This just makes it the last one,
should fix #4.
2021-05-21 16:03:33 +01:00
49b3212c48 support multiple instances with different layouts
All checks were successful
continuous-integration/drone/push Build is passing
if specified layout for nth instance is different than 1st, the player data is
    shared instead of the waybar output.
2021-05-17 16:10:14 +01:00
ea4f47a1b1 only share output when args are identical; use fixed length socket
commands

fixed length commands were originally a guess for an issue I was having,
but it's cleaner this way anyway.
2021-05-17 13:44:24 +01:00
51c7a983a0 add PLAYER to --order, remove binary from repo
All checks were successful
continuous-integration/drone/push Build is passing
also added more prominent download links to the readme.
2021-05-16 23:28:23 +01:00
3aec82c40c fix upload.py args for new version
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-24 18:03:03 +01:00
a2164b0173 build JSON string instead of json.Marshal-ing
Some checks failed
continuous-integration/drone/push Build is failing
not that this was a problem, but the output is simple enough to
just create it by hand.
2021-04-24 16:37:44 +01:00
c235dd60dd overwrite previous content when sharing output
this way /tmp/waybar-mpris.out won't get filled up.
2021-04-24 16:02:39 +01:00
16465c44a2 add license.
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-13 22:28:30 +00:00
7a55b6d605 add message on issues
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-06 00:53:04 +00:00
40f813ddc3 Use fixes for spotify
All checks were successful
continuous-integration/drone/push Build is passing
fixes error caused by spotify returning a uint64 rather than int64 track
length. Also note spotify doesn't return a position so it is not
displayed.
2021-01-17 12:25:27 +00:00
7a3b3d5216 update readme, mention AUR package
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-16 17:03:48 +00:00
750317a0d7 url
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-15 22:21:33 +00:00
648f56f1d0 apt update agh
Some checks failed
continuous-integration/drone/push Build is failing
2021-01-15 22:20:08 +00:00
2c3c989480 oops, forgot to add python
Some checks failed
continuous-integration/drone/push Build is failing
2021-01-15 22:18:53 +00:00
bda0879199 add drone/buildrone
Some checks failed
continuous-integration/drone/push Build is failing
2021-01-15 22:15:45 +00:00
937769e2f7 use external mpris2client lib
now at github.com/hrfee/mpris2client.
2021-01-08 00:54:34 +00:00
233b5dd1ca improve ignoring of playerctld
also now ignores signals from it by storing its unique sender name on
startup and checking each signal.
2021-01-07 17:59:02 +00:00
bcd2a83dd9 move mpris2 component to separate module
I'll likely put it in a different repo as i'm thinking of writing a last.fm scrobbler and it'd be reused there.
2021-01-07 16:10:20 +00:00
af0af02059 add some comments and change identifier names 2020-12-15 20:44:03 +00:00
9b02fc2851 print clone message to stderr
any non-json output at all seems to break waybar now, so this avoids it.
2020-11-26 19:11:38 +00:00
a84ae6bd5b fix help output 2020-11-16 21:59:31 +00:00
78ce37db9f Run multiple instances by attaching to original
Fixes #1. When another instance is detected, a command is sent over the
socket for the original to write to stdout and to a temporary file, which is then
tailed by the new instance. Can be overridden with --replace.
2020-09-28 23:48:51 +01:00
b97a950582 add optional position interpolation, escape ampersands
added --interpolate which will increment the track position if there
hasnt been a change after a second. Kinda buggy, so disabled by default.
Ampersands are escaped in the tooltip.
2020-09-14 16:14:30 +01:00
018e3ce34e fix crash when tracklength not available 2020-09-11 21:24:11 +01:00
8343e713fe remove socket on exit; fix --position crash 2020-09-06 13:13:36 +01:00
16 changed files with 658 additions and 406 deletions

36
.drone.yml Normal file
View File

@@ -0,0 +1,36 @@
name: waybar-mpris
kind: pipeline
type: docker
steps:
- name: build
image: golang:latest
volumes:
- name: ssh_key
path: /id_rsa
commands:
- apt update -y
- apt install -y python3-pip curl
- go mod download
- curl -sL https://git.io/goreleaser > goreleaser.sh
- chmod +x goreleaser.sh
- ./version.sh ./goreleaser.sh --snapshot --skip-publish --rm-dist
- wget https://builds.hrfee.pw/upload.py
- pip3 install requests
- bash -c 'python3 upload.py https://builds2.hrfee.pw hrfee waybar-mpris --upload ./dist/*.tar.gz ./dist/*.rpm'
- bash -c 'sftp -P 2022 -i /id_rsa -o StrictHostKeyChecking=no root@161.97.102.153:/repo/incoming <<< $"put dist/*.deb"'
- bash -c 'ssh -i /id_rsa root@161.97.102.153 -p 2022 "repo-process-deb trusty-unstable"'
environment:
BUILDRONE_KEY:
from_secret: BUILDRONE_KEY
volumes:
- name: ssh_key
host:
path: /root/.ssh/id_rsa_packaging
trigger:
branch:
- main
event:
exclude:
- pull_request

2
.gitignore vendored
View File

@@ -1 +1,3 @@
./main
waybar-mpris
dist/*

55
.goreleaser.yml Normal file
View File

@@ -0,0 +1,55 @@
project_name: waybar-mpris
release:
gitea:
owner: hrfee
name: waybar-mpris
name_template: "v{{.Version}}"
before:
hooks:
- go mod download
builds:
- id: main
dir: ./
env:
- CGO_ENABLED=0
goos:
- linux
goarch:
- amd64
- arm
- arm64
archives:
- id: main
builds:
- main
replacements:
linux: Linux
amd64: x86_64
checksum:
name_template: 'checksums.txt'
snapshot:
name_template: "0.0.0-{{.Env.NFPM_EPOCH}}"
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
nfpms:
- id: main
file_name_template: '{{ .ProjectName }}-git-{{ .ShortCommit }}_{{ .Arch }}'
package_name: waybar-mpris
homepage: https://git.hrfee.pw/hrfee/waybar-mpris
description: MPRIS2 waybar component
maintainer: Harvey Tindall <hrfee@hrfee.dev>
license: MIT
vendor: hrfee.dev
version_metadata: git
builds:
- main
contents:
- src: ./LICENSE
dst: /usr/share/licenses/waybar-mpris
formats:
- deb
- rpm

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Harvey Tindall
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -3,11 +3,15 @@
<img src="images/cropped.gif" style="width: 100%;" alt="bar gif"></img>
</p>
##### Downloads:
##### [binary](https://builds2.hrfee.pw/view/hrfee/waybar-mpris) | [aur](https://aur.archlinux.org/packages/waybar-mpris-git/)
a waybar component/utility for displaying and controlling MPRIS2 compliant media players individually, inspired by [waybar-media](https://github.com/yurihs/waybar-media).
MPRIS2 is widely supported, so this component should work with:
* Chrome/Chromium
* Other browsers (with kde plasma integration installed)
* Firefox (Limited support with `media.hardwaremediakeys.enabled = true` in about:config)
* Other browsers (using KDE Plasma Integration)
* VLC
* Spotify
* Noson
@@ -15,10 +19,23 @@ MPRIS2 is widely supported, so this component should work with:
* Most other music/media players
## Install
`go get git.hrfee.pw/hrfee/waybar-mpris` will install the program, as well as the go dbus bindings and pflags for command-line arguments.
Available on the AUR as [waybar-mpris-git](https://aur.archlinux.org/packages/waybar-mpris-git/) (Thanks @nichobi!)
or just grab the `waybar-mpris` binary from here and place it in your PATH.
Available on my Debian repo as well:
```sh
sudo apt-get update && sudo apt-get install curl apt-transport-https gnupg
curl https://apt.hrfee.dev/hrfee.pubkey.gpg | sudo apt-key add -
echo "deb https://apt.hrfee.dev trusty-unstable main" | sudo tee /etc/apt/sources.list.d/hrfee.list
sudo apt-get update
sudo apt-get install waybar-mpris
```
`go get git.hrfee.pw/hrfee/waybar-mpris` will compile from source and install.
You can also download a precompiled binary from [here](https://builds2.hrfee.pw/view/hrfee/waybar-mpris).
## Issues
Stick them on [mpris2client](https://github.com/hrfee/mpris2client) or the [og](https://github.com/hrfee/waybar-mpris) repository (both on github) if you can't make an account here.
## Usage
When running, the program will pipe out json in waybar's format. Add something like this to your waybar `config.json`:
```
@@ -42,10 +59,12 @@ When running, the program will pipe out json in waybar's format. Add something l
```
Usage of waybar-mpris:
--autofocus Auto switch to currently playing music players.
--interpolate Interpolate track position (helpful for players that don't update regularly, e.g mpDris2)
--order string Element order. (default "SYMBOL:ARTIST:ALBUM:TITLE:POSITION")
--pause string Pause symbol/text to use. (default "\uf8e3")
--play string Play symbol/text to use. (default "▶")
--position Show current position between brackets, e.g (04:50/05:00)
--replace Replace any running instances
--send string send command to already runnning waybar-mpris instance. (options: player-next/player-prev/next/prev/toggle)
--separator string Separator string to use between artist, album, and title. (default " - ")
```
@@ -55,10 +74,12 @@ Usage of waybar-mpris:
* `--separator` specifies a string to separate the artist, album and title text.
* `--autofocus` makes waybar-mpris automatically focus on currently playing music players.
* `--position` enables the display of the track position.
* `--interpolate` increments the track position every second. This is useful for players (e.g mpDris2) that don't regularly update the position.
* `--replace`: By default, new instances will attach to the existing one so that the output is identical. This lets this instance replace any others running. It isn't recommended.
* `--send` sends commands to an already running waybar-mpris instance via a unix socket. Commands:
* `player-next`: Switch to displaying and controlling next available player.
* `player-prev`: Same as `player-next`, but for the previous player.
* `next/prev`: Next/previous track on the selected player.
* `toggle`: Play/pause.
* *Note: you can also bind these commands to keys in your sway/other wm config.*
* You can also bind these commands to Media keys in your WM config.

3
go.mod
View File

@@ -3,6 +3,9 @@ module git.hrfee.pw/hrfee/waybar-mpris
go 1.15
require (
github.com/fsnotify/fsnotify v1.4.9
github.com/godbus/dbus/v5 v5.0.3
github.com/hrfee/mpris2client v0.0.5
github.com/spf13/pflag v1.0.5
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 // indirect
)

7
go.sum
View File

@@ -1,4 +1,11 @@
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/hrfee/mpris2client v0.0.5 h1:h3gcb8Q68i6SfcEgOxL9cXcGee9ekvxXltrUxGwRLDU=
github.com/hrfee/mpris2client v0.0.5/go.mod h1:tVpzzAlsljmQevNA4mJwUy1onUUiaQcRAa4gdl37okY=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY=
golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 991 B

871
main.go

File diff suppressed because it is too large Load Diff

2
version.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
NFPM_EPOCH=$(git rev-list --all --count) $@

Binary file not shown.