diff --git a/helpers/filesystem.lua b/helpers/filesystem.lua index f06139ad..38d91577 100644 --- a/helpers/filesystem.lua +++ b/helpers/filesystem.lua @@ -52,8 +52,13 @@ function _filesystem.list_directory_files(path, exts, recursive) return files end -function _filesystem.save_image_async_curl(url, filepath, callback) - awful.spawn.with_line_callback(string.format("curl -L -s %s -o %s", url, filepath), +function _filesystem.save_image_async_curl(redownload, create_dirs, url, filepath, callback) + if not redownload and Gio.File.query_exists(Gio.File.new_for_path(filepath)) then + callback() + return + end + + awful.spawn.with_line_callback(string.format("curl -L -s %s -o %s %s", url, filepath, (create_dirs and "--create-dirs" or "")), { exit=callback }) diff --git a/signal/playerctl/playerctl_cli.lua b/signal/playerctl/playerctl_cli.lua index d091407d..2b417c91 100644 --- a/signal/playerctl/playerctl_cli.lua +++ b/signal/playerctl/playerctl_cli.lua @@ -26,6 +26,7 @@ local gobject = require("gears.object") local gtable = require("gears.table") local gtimer = require("gears.timer") local gstring = require("gears.string") +local gfs = require("gears.filesystem") local beautiful = require("beautiful") local helpers = require(tostring(...):match(".*bling") .. ".helpers") local setmetatable = setmetatable @@ -184,8 +185,8 @@ local function emit_player_metadata(self) callback = function() if title and title ~= "" then if art_url ~= "" then - local art_path = os.tmpname() - helpers.filesystem.save_image_async_curl(art_url, art_path, function() + local art_path = gfs.get_cache_dir() .. "bling_album_art/" .. art_url:gsub("https://", ""):gsub("http://", "") + helpers.filesystem.save_image_async_curl(false, true, art_url, art_path, function() self:emit_signal("metadata", title, artist, art_path, album, player_name) capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, art_path) end) diff --git a/signal/playerctl/playerctl_lib.lua b/signal/playerctl/playerctl_lib.lua index ca196333..e0206afc 100644 --- a/signal/playerctl/playerctl_lib.lua +++ b/signal/playerctl/playerctl_lib.lua @@ -37,6 +37,7 @@ local gobject = require("gears.object") local gtable = require("gears.table") local gtimer = require("gears.timer") local gstring = require("gears.string") +local gfs = require("gears.filesystem") local beautiful = require("beautiful") local helpers = require(tostring(...):match(".*bling") .. ".helpers") local setmetatable = setmetatable @@ -190,8 +191,8 @@ local function emit_metadata_signal(self, title, artist, artUrl, album, new, pla end if artUrl ~= "" then - local art_path = os.tmpname() - helpers.filesystem.save_image_async_curl(artUrl, art_path, function() + local art_path = gfs.get_cache_dir() .. "bling_album_art/" .. artUrl:gsub("https://", ""):gsub("http://", "") + helpers.filesystem.save_image_async_curl(false, true, artUrl, art_path, function() self:emit_signal("metadata", title, artist, art_path, album, new, player_name) capi.awesome.emit_signal("bling::playerctl::title_artist_album", title, artist, art_path, player_name) end)