aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/services
diff options
context:
space:
mode:
authordelta <darkussdelta@gmail.com>2026-04-17 08:10:30 +0200
committerdelta <darkussdelta@gmail.com>2026-04-17 08:10:30 +0200
commita7c79cb5a04562be10347856642a80f0c4be89fc (patch)
tree98fac95855d84f5037a1c6f44061cbe94b550600 /.config/awesome/services
parent225eeafcea67d63a608f9c666faf2a2ef014be4a (diff)
Diffstat (limited to '.config/awesome/services')
-rw-r--r--.config/awesome/services/mpris/consts.lua13
-rw-r--r--.config/awesome/services/mpris/init.lua178
-rw-r--r--.config/awesome/services/osd.lua18
-rw-r--r--.config/awesome/services/wifi.lua0
4 files changed, 136 insertions, 73 deletions
diff --git a/.config/awesome/services/mpris/consts.lua b/.config/awesome/services/mpris/consts.lua
new file mode 100644
index 0000000..e86e50e
--- /dev/null
+++ b/.config/awesome/services/mpris/consts.lua
@@ -0,0 +1,13 @@
+local M = {}
+
+M.EXCLUDED_PLAYERS = {}
+
+M.TRACKED_METADATA = {
+ length = "mpris:length",
+ album = "xesam:album",
+ title = "xesam:title",
+ artist = "xesam:artist",
+ art = "mpris:artUrl",
+}
+
+return M
diff --git a/.config/awesome/services/mpris/init.lua b/.config/awesome/services/mpris/init.lua
index 3659a3a..1c907e7 100644
--- a/.config/awesome/services/mpris/init.lua
+++ b/.config/awesome/services/mpris/init.lua
@@ -1,100 +1,132 @@
local gobject = require "gears.object"
local playerctl = require "services.mpris.playerctl"
local qpersistent = require "quarrel.persistent"
+local playerctl = require("lgi").Playerctl
---@class ServiceMpris : gears.object
----@field inner Playerctl
---@field index number the index of the currently active player
-local M = {}
+---@field manager lgi.Playerctl.PlayerManager
+local M = { object = {} }
----@param self ServiceMpris
----@param player Playerctl.data
-local function update_player(self, player)
- self:emit_signal("player::metadata", player)
- self:emit_signal("player::position", player)
- -- handle_position(nil, player)
+---@class WrappedPlayer : gears.object
+---@field inner lgi.Playerctl.Player
+---@field _position_timer gears.timer
+
+---@param self WrappedPlayer
+function M.object:_update_position(by_user)
+ self:emit_signal("property::position", by_user)
end
----@param diff_player Playerctl.data
-local function recalculate_active_player(diff_player, vanished)
- if type(diff_player) ~= "table" then
- return
+---@param self WrappedPlayer
+function M.object:_update_position_timer()
+ if self.inner.playback_status == "PLAYING" then
+ self._position_timer:again()
+ else
+ self._position_timer:stop()
end
- -- if #layout.children == 0 then
- -- M.active_player_index = 1
- -- update_player()
- -- return
- -- end
+end
- local active_player = players[M.active_player_index]
- if not active_player then -- we're recovering from a state with no players
- update_player(diff_player)
- return
- end
+---@param self WrappedPlayer
+---@param value boolean
+function M.object:set_shuffle(value)
+ self.inner:set_shuffle(value)
+end
- if diff_player.instance == active_player.instance and vanished then -- active player vanished; fall back to previous player
- M.previous_player()
- else -- non-active player appeared/vanished; try to find active player
- for i, p in ipairs(playerctl:list()) do
- if p.instance == active_player.instance then
- M.active_player_index = i
- update_player(p)
- return
- end
- end
+---@param self WrappedPlayer
+---@param value number
+function M.object:set_volume(value)
+ self.inner:set_volume(value)
+end
- gdebug.print_warning(
- "failed to find active player:\n " .. gdebug.dump_return(active_player, nil, 2):gsub("\n", "\n ")
- )
- M.active_player_index = 1
- update_player(playerctl:list()[M.active_player_index])
- end
+---@param self WrappedPlayer
+---@param value integer
+function M.object:set_position(value)
+ self.inner:set_position(value)
+end
+
+---@param self WrappedPlayer
+---@param value lgi.Playerctl.LoopStatus
+function M.object:set_loop_status(value)
+ self.inner:set_loop_status(value)
+end
+
+---@param self WrappedPlayer
+function M.object:play_pause()
+ self.inner:play_pause()
+end
+
+---@param self WrappedPlayer
+function M.object:play()
+ self.inner:play()
+end
+
+---@param self WrappedPlayer
+function M.object:pause()
+ self.inner:pause()
end
-function M:next_player()
- local players = self.inner:list()
+---@param self WrappedPlayer
+function M.object:stop()
+ self.inner:stop()
+end
- if #players == 0 then
- return
- elseif self.index + 1 > #players then
- self.index = 1
+---@param self WrappedPlayer
+function M.object:previous()
+ self.inner:previous()
+end
+
+---@param self WrappedPlayer
+function M.object:next()
+ self.inner:next()
+end
+
+---@param self Playerctl
+---@param player_a lgi.Playerctl.Player
+---@param player_b lgi.Playerctl.Player
+---@return sign
+local function compare_players(self, player_a, player_b)
+ if player_a.player_name < player_b.player_name then
+ return -1
+ elseif player_a.player_name > player_b.player_name then
+ return 1
else
- self.index = self.index + 1
+ return 0
end
+end
+
+local function manage_player(self, full_name)
+ local player = playerctl.Player.new_from_name(full_name)
- -- update_player(playerctl:list()[M.active_player_index])
- local player = players[self.index]
- self:emit_signal("player::metadata", player)
- self:emit_signal("player::position", player)
+ function player.on_metadata(p, metadata)
+
+ end
end
-function M:previous_player()
- local players = self.inner:list()
- if #players == 0 then
- return
- elseif self.index - 1 < #players then
- self.index = #players
- else
- self.index = self.index - 1
+local function init_manager(self)
+ self.manager = playerctl.PlayerManager()
+ self.manager:set_sort_func(function(a, b)
+ local player_a = playerctl.Player(a)
+ local player_b = playerctl.Player(b)
+ return compare_players(self, player_a, player_b)
+ end)
+
+ function self.manager.on_name_appeared(_, full_name)
+
+ end
+
+ function self.manager.on_player_appeared()
+
end
+end
+
+local function new()
+ local self = gobject {}
+
+ init_manager(self)
- local player = players[self.index]
- self:emit_signal("player::metadata", player)
- self:emit_signal("player::position", player)
+ return self
end
-M.inner = playerctl.new {
- players = {},
- metadata = {
- album = "xesam:album",
- title = "xesam:title",
- artist = "xesam:artist",
- art = "mpris:artUrl",
- },
-}
+local instance = new()
-local instance = gobject { class = M }
-instance:connect_signal("property::index", function(self, index)
- qpersistent.store("active_player_index", self.index)
-end)
return instance
diff --git a/.config/awesome/services/osd.lua b/.config/awesome/services/osd.lua
index c4fa3e7..1851016 100644
--- a/.config/awesome/services/osd.lua
+++ b/.config/awesome/services/osd.lua
@@ -1,7 +1,25 @@
+local gobject = require "gears.object"
local battery = require "services.battery"
local osd = require "ui.osd"
local phosphor = require "assets.phosphor"
+local inner = false
+
+local M = gobject {
+ class = {
+ set_dnd = function(self, value)
+ inner = value
+ self:emit_signal("dnd", inner)
+ end,
+ get_dnd = function()
+ return inner
+ end
+ },
+ enable_properties = true,
+}
+
+return M
+
-- battery:connect_signal("icon", function (self, icon, _)
-- osd.notify(icon, self.level, 100)
-- end)
diff --git a/.config/awesome/services/wifi.lua b/.config/awesome/services/wifi.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.config/awesome/services/wifi.lua