mirror of
https://github.com/EnderIce2/SDR-RPC.git
synced 2025-07-12 07:59:14 +00:00
First commit
This commit is contained in:
99
DiscordAPI/Registry/UnixUriSchemeCreator.cs
Normal file
99
DiscordAPI/Registry/UnixUriSchemeCreator.cs
Normal file
@ -0,0 +1,99 @@
|
||||
using DiscordRPC.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace DiscordRPC.Registry
|
||||
{
|
||||
internal class UnixUriSchemeCreator : IUriSchemeCreator
|
||||
{
|
||||
private ILogger logger;
|
||||
public UnixUriSchemeCreator(ILogger logger)
|
||||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public bool RegisterUriScheme(UriSchemeRegister register)
|
||||
{
|
||||
var home = Environment.GetEnvironmentVariable("HOME");
|
||||
if (string.IsNullOrEmpty(home))
|
||||
{
|
||||
logger.Error("Failed to register because the HOME variable was not set.");
|
||||
return false;
|
||||
}
|
||||
|
||||
string exe = register.ExecutablePath;
|
||||
if (string.IsNullOrEmpty(exe))
|
||||
{
|
||||
logger.Error("Failed to register because the application was not located.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//Prepare the command
|
||||
string command = null;
|
||||
if (register.UsingSteamApp)
|
||||
{
|
||||
//A steam command isntead
|
||||
command = "xdg-open steam://rungameid/" + register.SteamAppID;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Just a regular discord command
|
||||
command = exe;
|
||||
}
|
||||
|
||||
|
||||
//Prepare the file
|
||||
string desktopFileFormat =
|
||||
@"[Desktop Entry]
|
||||
Name=Game {0}
|
||||
Exec={1} %u
|
||||
Type=Application
|
||||
NoDisplay=true
|
||||
Categories=Discord;Games;
|
||||
MimeType=x-scheme-handler/discord-{2}";
|
||||
|
||||
string file = string.Format(desktopFileFormat, register.ApplicationID, command, register.ApplicationID);
|
||||
|
||||
//Prepare the path
|
||||
string filename = "/discord-" + register.ApplicationID + ".desktop";
|
||||
string filepath = home + "/.local/share/applications";
|
||||
var directory = Directory.CreateDirectory(filepath);
|
||||
if (!directory.Exists)
|
||||
{
|
||||
logger.Error("Failed to register because {0} does not exist", filepath);
|
||||
return false;
|
||||
}
|
||||
|
||||
//Write the file
|
||||
File.WriteAllText(filepath + filename, file);
|
||||
|
||||
//Register the Mime type
|
||||
if (!RegisterMime(register.ApplicationID))
|
||||
{
|
||||
logger.Error("Failed to register because the Mime failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
logger.Trace("Registered {0}, {1}, {2}", filepath + filename, file, command);
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool RegisterMime(string appid)
|
||||
{
|
||||
//Format the arguments
|
||||
string format = "default discord-{0}.desktop x-scheme-handler/discord-{0}";
|
||||
string arguments = string.Format(format, appid);
|
||||
|
||||
//Run the process and wait for response
|
||||
Process process = Process.Start("xdg-mime", arguments);
|
||||
process.WaitForExit();
|
||||
|
||||
//Return if succesful
|
||||
return process.ExitCode >= 0;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user