Skip to content

Commit

Permalink
feat: customizable application id (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
xhyrom authored Nov 19, 2024
1 parent fd9bd42 commit bce54ae
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
3 changes: 3 additions & 0 deletions lsp/src/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ impl Rules {

#[derive(Debug)]
pub struct Configuration {
pub application_id: String,
pub base_icons_url: String,

pub state: Option<String>,
Expand Down Expand Up @@ -92,6 +93,7 @@ macro_rules! set_string {
impl Configuration {
pub fn new() -> Self {
Self {
application_id: String::from("1263505205522337886"),
base_icons_url: String::from(
"https://raw.githubusercontent.com/xhyrom/zed-discord-presence/main/assets/icons/",
),
Expand All @@ -108,6 +110,7 @@ impl Configuration {

pub fn set(&mut self, initialization_options: Option<Value>) {
if let Some(options) = initialization_options {
set_string!(self, options, application_id, "application_id");
set_string!(self, options, base_icons_url, "base_icons_url");
set_option!(self, options, state, "state");
set_option!(self, options, details, "details");
Expand Down
21 changes: 15 additions & 6 deletions lsp/src/discord.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,25 +31,30 @@ use crate::util;

#[derive(Debug)]
pub struct Discord {
client: Mutex<DiscordIpcClient>,
client: Option<Mutex<DiscordIpcClient>>,
start_timestamp: Duration,
}

impl Discord {
pub fn new() -> Self {
let discord_client = DiscordIpcClient::new("1263505205522337886")
.expect("Failed to initialize Discord Ipc Client");
let start_timestamp = SystemTime::now();
let since_epoch = start_timestamp
.duration_since(UNIX_EPOCH)
.expect("Failed to get duration since UNIX_EPOCH");

Self {
client: Mutex::new(discord_client),
client: None,
start_timestamp: since_epoch,
}
}

pub fn create_client(&mut self, application_id: String) {
let discord_client = DiscordIpcClient::new(application_id.as_str())
.expect("Failed to initialize Discord Ipc Client");

self.client = Some(Mutex::new(discord_client));
}

pub fn connect(&self) {
let mut client = self.get_client();
let result = client.connect();
Expand All @@ -62,8 +67,12 @@ impl Discord {
result.unwrap();
}

pub fn get_client(&self) -> MutexGuard<DiscordIpcClient> {
return self.client.lock().expect("Failed to lock discord client");
pub fn get_client(&self) -> MutexGuard<'_, DiscordIpcClient> {
self.client
.as_ref()
.expect("Discord client not initialized")
.lock()
.expect("Failed to lock discord client")
}

#[allow(clippy::too_many_arguments)]
Expand Down
17 changes: 12 additions & 5 deletions lsp/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ struct Document {

#[derive(Debug)]
struct Backend {
discord: discord::Discord,
client: Client,
discord: Mutex<Discord>,
workspace_file_name: Mutex<String>,
git_remote_url: Mutex<Option<String>>,
config: Mutex<Configuration>,
Expand Down Expand Up @@ -82,7 +82,7 @@ impl Backend {
fn new(client: Client) -> Self {
Self {
client,
discord: Discord::new(),
discord: Mutex::new(Discord::new()),
workspace_file_name: Mutex::new(String::new()),
git_remote_url: Mutex::new(None),
config: Mutex::new(Configuration::new()),
Expand Down Expand Up @@ -120,7 +120,7 @@ impl Backend {
.as_ref()
.map(|text| placeholders.replace(text));

self.discord.change_activity(
self.get_discord().change_activity(
state,
details,
large_image,
Expand Down Expand Up @@ -154,6 +154,10 @@ impl Backend {
fn get_config(&self) -> MutexGuard<Configuration> {
return self.config.lock().expect("Failed to lock config");
}

fn get_discord(&self) -> MutexGuard<Discord> {
return self.discord.lock().expect("Failed to lock discord");
}
}

#[tower_lsp::async_trait]
Expand All @@ -179,13 +183,16 @@ impl LanguageServer for Backend {
let mut config = self.config.lock().unwrap();
config.set(params.initialization_options);

let mut discord = self.get_discord();
discord.create_client(config.application_id.to_string());

if config.rules.suitable(
workspace_path
.to_str()
.expect("Failed to transform workspace path to str"),
) {
// Connect discord client
self.discord.connect();
discord.connect();
} else {
// Exit LSP
exit(0);
Expand Down Expand Up @@ -215,7 +222,7 @@ impl LanguageServer for Backend {
}

async fn shutdown(&self) -> Result<()> {
self.discord.kill();
self.get_discord().kill();

Ok(())
}
Expand Down

0 comments on commit bce54ae

Please sign in to comment.