mirror of
https://github.com/jiriks74/presence.nvim
synced 2024-12-29 19:32:05 +01:00
Add config to blacklist certain files or workspaces
* Add blacklist config * update blacklist log message * add length check for blacklist table * format parent and project checks in check_blacklist function * minor refactors for better performance
This commit is contained in:
parent
f2a0dd50c6
commit
45ede471bf
1 changed files with 63 additions and 10 deletions
|
@ -119,6 +119,8 @@ function Presence:setup(options)
|
||||||
self:set_option("reading_text", "Reading %s")
|
self:set_option("reading_text", "Reading %s")
|
||||||
self:set_option("workspace_text", "Working on %s")
|
self:set_option("workspace_text", "Working on %s")
|
||||||
self:set_option("line_number_text", "Line %s out of %s")
|
self:set_option("line_number_text", "Line %s out of %s")
|
||||||
|
-- Blacklist table
|
||||||
|
self:set_option("blacklist", {})
|
||||||
|
|
||||||
-- Get and check discord socket path
|
-- Get and check discord socket path
|
||||||
local discord_socket_path = self:get_discord_socket_path()
|
local discord_socket_path = self:get_discord_socket_path()
|
||||||
|
@ -613,6 +615,46 @@ function Presence.discord_event(on_ready)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Check if the current project/parent is in blacklist
|
||||||
|
function Presence:check_blacklist(buffer, parent_dirpath, project_dirpath)
|
||||||
|
local parent_dirname = nil
|
||||||
|
local project_dirname = nil
|
||||||
|
|
||||||
|
-- Parse parent/project directory name
|
||||||
|
if parent_dirpath then
|
||||||
|
parent_dirname = self.get_filename(parent_dirpath, self.os.path_separator)
|
||||||
|
end
|
||||||
|
|
||||||
|
if project_dirpath then
|
||||||
|
project_dirname = self.get_filename(project_dirpath, self.os.path_separator)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Blacklist table
|
||||||
|
local blacklist_table = self.options["blacklist"]
|
||||||
|
|
||||||
|
-- Loop over the values to see if the provided project/path is in the blacklist
|
||||||
|
for _, val in pairs(blacklist_table) do
|
||||||
|
-- Match buffer
|
||||||
|
if buffer:match(val) == buffer then return true end
|
||||||
|
-- Match parent
|
||||||
|
local is_parent_directory_blacklisted = parent_dirpath and
|
||||||
|
(parent_dirpath:match(val) == parent_dirpath or
|
||||||
|
parent_dirname:match(val) == parent_dirname)
|
||||||
|
if is_parent_directory_blacklisted then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
-- Match project
|
||||||
|
local is_project_directory_blacklisted = project_dirpath and
|
||||||
|
(parent_dirpath:match(val) == project_dirpath or
|
||||||
|
parent_dirname:match(val) == project_dirname)
|
||||||
|
if is_project_directory_blacklisted then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- Update Rich Presence for the provided vim buffer
|
-- Update Rich Presence for the provided vim buffer
|
||||||
function Presence:update_for_buffer(buffer, should_debounce)
|
function Presence:update_for_buffer(buffer, should_debounce)
|
||||||
-- Avoid unnecessary updates if the previous activity was for the current buffer
|
-- Avoid unnecessary updates if the previous activity was for the current buffer
|
||||||
|
@ -622,13 +664,6 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local activity_set_at = os.time()
|
|
||||||
-- If we shouldn't debounce and we trigger an activity, keep this value the same.
|
|
||||||
-- Otherwise set it to the current time.
|
|
||||||
local relative_activity_set_at = should_debounce and self.last_activity.relative_set_at or os.time()
|
|
||||||
|
|
||||||
self.log:debug(string.format("Setting activity for %s...", buffer and #buffer > 0 and buffer or "unnamed buffer"))
|
|
||||||
|
|
||||||
-- Parse vim buffer
|
-- Parse vim buffer
|
||||||
local filename = self.get_filename(buffer, self.os.path_separator)
|
local filename = self.get_filename(buffer, self.os.path_separator)
|
||||||
local parent_dirpath = self.get_dir_path(buffer, self.os.path_separator)
|
local parent_dirpath = self.get_dir_path(buffer, self.os.path_separator)
|
||||||
|
@ -636,6 +671,27 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
||||||
|
|
||||||
self.log:debug(string.format("Parsed filename %s with %s extension", filename, extension or "no"))
|
self.log:debug(string.format("Parsed filename %s with %s extension", filename, extension or "no"))
|
||||||
|
|
||||||
|
self.log:debug(string.format("Getting project name for %s...", parent_dirpath))
|
||||||
|
|
||||||
|
local project_name, project_path = self:get_project_name(parent_dirpath)
|
||||||
|
|
||||||
|
-- Check for blacklist
|
||||||
|
local is_blacklisted = #self.options.blacklist > 0 and self:check_blacklist(buffer, parent_dirpath, project_path)
|
||||||
|
|
||||||
|
if is_blacklisted then
|
||||||
|
self.last_activity.file = buffer
|
||||||
|
self.log:debug("Either project or directory name is blacklisted, skipping...")
|
||||||
|
self:cancel()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local activity_set_at = os.time()
|
||||||
|
-- If we shouldn't debounce and we trigger an activity, keep this value the same.
|
||||||
|
-- Otherwise set it to the current time.
|
||||||
|
local relative_activity_set_at = should_debounce and self.last_activity.relative_set_at or os.time()
|
||||||
|
|
||||||
|
self.log:debug(string.format("Setting activity for %s...", buffer and #buffer > 0 and buffer or "unnamed buffer"))
|
||||||
|
|
||||||
-- Determine image text and asset key
|
-- Determine image text and asset key
|
||||||
local name = filename
|
local name = filename
|
||||||
local asset_key = "code"
|
local asset_key = "code"
|
||||||
|
@ -693,10 +749,7 @@ function Presence:update_for_buffer(buffer, should_debounce)
|
||||||
else
|
else
|
||||||
-- Include project details if available and if the user hasn't set the enable_line_number option
|
-- Include project details if available and if the user hasn't set the enable_line_number option
|
||||||
|
|
||||||
self.log:debug(string.format("Getting project name for %s...", parent_dirpath))
|
|
||||||
|
|
||||||
local workspace_text = self.options.workspace_text
|
local workspace_text = self.options.workspace_text
|
||||||
local project_name, project_path = self:get_project_name(parent_dirpath)
|
|
||||||
|
|
||||||
if project_name then
|
if project_name then
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue