mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
Revert "Revert "Refactored Common Base Games""
This reverts commit a71b866545
.
This commit is contained in:
parent
a71b866545
commit
3b63953648
43
HeliosPlus/GameLibraries/Game.cs
Normal file
43
HeliosPlus/GameLibraries/Game.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
public class Game
|
||||
{
|
||||
|
||||
#region Properties
|
||||
public virtual uint Id { get; set; }
|
||||
|
||||
public virtual SupportedGameLibrary GameLibrary { get; }
|
||||
|
||||
public virtual bool IsRunning { get; set; }
|
||||
|
||||
public virtual bool IsUpdating { get; set; }
|
||||
|
||||
public virtual string Name { get; set; }
|
||||
|
||||
public virtual string ExePath { get; set; }
|
||||
|
||||
public virtual string IconPath { get; set; }
|
||||
|
||||
public virtual string Directory { get; set; }
|
||||
|
||||
public virtual string Executable { get; set; }
|
||||
|
||||
public virtual string ProcessName { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Methods
|
||||
public virtual bool CopyTo(SteamGame steamGame)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@ using System.Diagnostics;
|
||||
|
||||
namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
public class SteamGame
|
||||
public class SteamGame : Game
|
||||
{
|
||||
/*private static string SteamLibrary.SteamExe;
|
||||
private static string SteamLibrary.SteamPath;
|
||||
@ -39,7 +39,8 @@ namespace HeliosPlus.GameLibraries
|
||||
private string _gameRegistryKey;
|
||||
private uint _steamGameId;
|
||||
private string _steamGameName;
|
||||
private string _steamGamePath;
|
||||
private string _steamGameExePath;
|
||||
private string _steamGameDir;
|
||||
private string _steamGameExe;
|
||||
private string _steamGameProcessName;
|
||||
private string _steamGameIconPath;
|
||||
@ -61,34 +62,53 @@ namespace HeliosPlus.GameLibraries
|
||||
}
|
||||
|
||||
|
||||
public SteamGame(uint steamGameId, string steamGameName, string steamGamePath, string steamGameExe, string steamGameIconPath)
|
||||
public SteamGame(uint steamGameId, string steamGameName, string steamGameExePath, string steamGameIconPath)
|
||||
{
|
||||
|
||||
_gameRegistryKey = $@"{SteamLibrary.SteamAppsRegistryKey}\\{steamGameId}";
|
||||
_steamGameId = steamGameId;
|
||||
_steamGameName = steamGameName;
|
||||
_steamGamePath = steamGamePath;
|
||||
_steamGameExe = steamGameExe;
|
||||
_steamGameProcessName = Path.GetFileNameWithoutExtension(_steamGameExe);
|
||||
_steamGameExePath = steamGameExePath;
|
||||
_steamGameDir = Path.GetDirectoryName(steamGameExePath);
|
||||
_steamGameExe = Path.GetFileName(_steamGameExePath);
|
||||
_steamGameProcessName = Path.GetFileNameWithoutExtension(_steamGameExePath);
|
||||
_steamGameIconPath = steamGameIconPath;
|
||||
|
||||
}
|
||||
|
||||
public uint GameId {
|
||||
public override uint Id {
|
||||
get => _steamGameId;
|
||||
set => _steamGameId = value;
|
||||
}
|
||||
|
||||
public SupportedGameLibrary GameLibrary {
|
||||
public override string Name
|
||||
{
|
||||
get => _steamGameName;
|
||||
set => _steamGameName = value;
|
||||
}
|
||||
|
||||
public override SupportedGameLibrary GameLibrary {
|
||||
get => SupportedGameLibrary.Steam;
|
||||
}
|
||||
|
||||
public string GameIconPath {
|
||||
public override string IconPath {
|
||||
get => _steamGameIconPath;
|
||||
set => _steamGameIconPath = value;
|
||||
}
|
||||
|
||||
public bool IsRunning
|
||||
|
||||
public override string ExePath
|
||||
{
|
||||
get => _steamGameExePath;
|
||||
set => _steamGameExePath = value;
|
||||
}
|
||||
|
||||
public override string Directory
|
||||
{
|
||||
get => _steamGameExePath;
|
||||
set => _steamGameExePath = value;
|
||||
}
|
||||
|
||||
public override bool IsRunning
|
||||
{
|
||||
get
|
||||
{
|
||||
@ -123,12 +143,12 @@ namespace HeliosPlus.GameLibraries
|
||||
|
||||
bool isRunning = Process.GetProcessesByName(_steamGameProcessName)
|
||||
.FirstOrDefault(p => p.MainModule.FileName
|
||||
.StartsWith(GamePath,StringComparison.OrdinalIgnoreCase)) != default(Process);
|
||||
.StartsWith(ExePath,StringComparison.OrdinalIgnoreCase)) != default(Process);
|
||||
return isRunning;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsUpdating
|
||||
public override bool IsUpdating
|
||||
{
|
||||
get
|
||||
{
|
||||
@ -163,26 +183,16 @@ namespace HeliosPlus.GameLibraries
|
||||
}
|
||||
}
|
||||
|
||||
public string GameName {
|
||||
get => _steamGameName;
|
||||
set => _steamGameName = value;
|
||||
}
|
||||
|
||||
public string GamePath {
|
||||
get => _steamGamePath;
|
||||
set => _steamGamePath = value;
|
||||
}
|
||||
|
||||
public bool CopyTo(SteamGame steamGame)
|
||||
{
|
||||
if (!(steamGame is SteamGame))
|
||||
return false;
|
||||
|
||||
// Copy all the game data over to the other game
|
||||
steamGame.GameIconPath = GameIconPath;
|
||||
steamGame.GameId = GameId;
|
||||
steamGame.GameName = GameName;
|
||||
steamGame.GamePath = GamePath;
|
||||
steamGame.IconPath = IconPath;
|
||||
steamGame.Id = Id;
|
||||
steamGame.Name = Name;
|
||||
steamGame.ExePath = ExePath;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -48,8 +48,6 @@ namespace HeliosPlus.GameLibraries
|
||||
_steamPath = _steamPath.Replace('/', '\\');
|
||||
}
|
||||
|
||||
// Load the Shortcuts from storage
|
||||
LoadInstalledSteamGames();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -60,7 +58,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
// Load the Steam Games from Steam Client if needed
|
||||
if (_allSteamGames == null)
|
||||
LoadInstalledSteamGames();
|
||||
LoadInstalledGames();
|
||||
return _allSteamGames;
|
||||
}
|
||||
}
|
||||
@ -132,7 +130,7 @@ namespace HeliosPlus.GameLibraries
|
||||
if (ContainsSteamGame(steamGame))
|
||||
{
|
||||
// We update the existing Shortcut with the data over
|
||||
SteamGame steamGameToUpdate = GetSteamGame(steamGame.GameId.ToString());
|
||||
SteamGame steamGameToUpdate = GetSteamGame(steamGame.Id.ToString());
|
||||
steamGame.CopyTo(steamGameToUpdate);
|
||||
}
|
||||
else
|
||||
@ -157,7 +155,7 @@ namespace HeliosPlus.GameLibraries
|
||||
return false;
|
||||
|
||||
// Remove the steamGame from the list.
|
||||
int numRemoved = _allSteamGames.RemoveAll(item => item.GameId.Equals(steamGame.GameId));
|
||||
int numRemoved = _allSteamGames.RemoveAll(item => item.Id.Equals(steamGame.Id));
|
||||
|
||||
if (numRemoved == 1)
|
||||
{
|
||||
@ -178,9 +176,9 @@ namespace HeliosPlus.GameLibraries
|
||||
int numRemoved;
|
||||
Match match = Regex.Match(steamGameNameOrUuid, steamAppIdRegex, RegexOptions.IgnoreCase);
|
||||
if (match.Success)
|
||||
numRemoved = _allSteamGames.RemoveAll(item => steamGameNameOrUuid.Equals(Convert.ToUInt32(item.GameId)));
|
||||
numRemoved = _allSteamGames.RemoveAll(item => steamGameNameOrUuid.Equals(Convert.ToUInt32(item.Id)));
|
||||
else
|
||||
numRemoved = _allSteamGames.RemoveAll(item => steamGameNameOrUuid.Equals(item.GameName));
|
||||
numRemoved = _allSteamGames.RemoveAll(item => steamGameNameOrUuid.Equals(item.Name));
|
||||
|
||||
if (numRemoved == 1)
|
||||
return true;
|
||||
@ -199,7 +197,7 @@ namespace HeliosPlus.GameLibraries
|
||||
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (testSteamGame.GameId.Equals(steamGame.GameId))
|
||||
if (testSteamGame.Id.Equals(steamGame.Id))
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -217,7 +215,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameNameOrUuid.Equals(Convert.ToUInt32(testSteamGame.GameId)))
|
||||
if (steamGameNameOrUuid.Equals(Convert.ToUInt32(testSteamGame.Id)))
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -226,7 +224,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameNameOrUuid.Equals(testSteamGame.GameName))
|
||||
if (steamGameNameOrUuid.Equals(testSteamGame.Name))
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -240,7 +238,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameId == testSteamGame.GameId)
|
||||
if (steamGameId == testSteamGame.Id)
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -260,7 +258,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameNameOrUuid.Equals(Convert.ToUInt32(testSteamGame.GameId)))
|
||||
if (steamGameNameOrUuid.Equals(Convert.ToUInt32(testSteamGame.Id)))
|
||||
return testSteamGame;
|
||||
}
|
||||
|
||||
@ -269,7 +267,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameNameOrUuid.Equals(testSteamGame.GameName))
|
||||
if (steamGameNameOrUuid.Equals(testSteamGame.Name))
|
||||
return testSteamGame;
|
||||
}
|
||||
|
||||
@ -283,7 +281,7 @@ namespace HeliosPlus.GameLibraries
|
||||
{
|
||||
foreach (SteamGame testSteamGame in _allSteamGames)
|
||||
{
|
||||
if (steamGameId == testSteamGame.GameId)
|
||||
if (steamGameId == testSteamGame.Id)
|
||||
return testSteamGame;
|
||||
}
|
||||
|
||||
@ -291,7 +289,7 @@ namespace HeliosPlus.GameLibraries
|
||||
|
||||
}
|
||||
|
||||
private static bool LoadInstalledSteamGames()
|
||||
public static bool LoadInstalledGames()
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -547,7 +545,7 @@ namespace HeliosPlus.GameLibraries
|
||||
}
|
||||
|
||||
// And we add the Game to the list of games we have!
|
||||
_allSteamGames.Add(new SteamGame(steamGameId, steamGameName, steamGameInstallDir, steamGameExe, steamGameIconPath));
|
||||
_allSteamGames.Add(new SteamGame(steamGameId, steamGameName, steamGameExe, steamGameIconPath));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -73,6 +73,7 @@
|
||||
<Reference Include="System.Xml.Serialization" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="GameLibraries\Game.cs" />
|
||||
<Compile Include="GameLibraries\SteamAppInfoParser\AppInfo.cs" />
|
||||
<Compile Include="GameLibraries\SteamAppInfoParser\EUniverse.cs" />
|
||||
<Compile Include="GameLibraries\SteamAppInfoParser\Package.cs" />
|
||||
|
@ -104,6 +104,8 @@ namespace HeliosPlus {
|
||||
return 0;
|
||||
});
|
||||
|
||||
// Try to load all the games in parallel to this process
|
||||
Task.Run(() => LoadGamesInBackground());
|
||||
|
||||
try
|
||||
{
|
||||
@ -418,8 +420,93 @@ namespace HeliosPlus {
|
||||
}
|
||||
}
|
||||
|
||||
public static bool LoadGamesInBackground()
|
||||
{
|
||||
|
||||
Debug.WriteLine("Program/LoadGamesInBackground : Starting");
|
||||
// Now lets prepare loading all the Steam games we have installed
|
||||
Task loadSteamGamesTask = new Task(() =>
|
||||
{
|
||||
// Load Steam library games
|
||||
Console.WriteLine("Program/LoadGamesInBackground : Loading Installed Steam Games ");
|
||||
if (!HeliosPlus.GameLibraries.SteamLibrary.LoadInstalledGames())
|
||||
{
|
||||
// Somehow return that this profile topology didn't apply
|
||||
throw new LoadingInstalledGamesException("Program/LoadGamesInBackground: Cannot load installed Steam Games!");
|
||||
}
|
||||
});
|
||||
|
||||
// Now lets prepare loading all the Uplay games we have installed
|
||||
Task loadUplayGamesTask = new Task(() =>
|
||||
{
|
||||
// Load Uplay library games
|
||||
Console.WriteLine("Program/LoadGamesInBackground : Loading Installed Uplay Games ");
|
||||
/* if (!HeliosPlus.GameLibraries.UplayLibrary.LoadInstalledGames())
|
||||
{
|
||||
// Somehow return that this profile topology didn't apply
|
||||
throw new LoadingInstalledGamesException("Program/LoadGamesInBackground: Cannot load installed Uplay Games!");
|
||||
}
|
||||
*/
|
||||
|
||||
});
|
||||
|
||||
// Store all the tasks in an array so we can wait on them later
|
||||
Task[] loadGamesTasks = new Task[2];
|
||||
loadGamesTasks[0] = loadSteamGamesTask;
|
||||
loadGamesTasks[1] = loadUplayGamesTask;
|
||||
|
||||
Console.WriteLine("Program/LoadGamesInBackground : Running tasks");
|
||||
// Go through and start all the tasks
|
||||
foreach (Task loadGameTask in loadGamesTasks)
|
||||
loadGameTask.Start();
|
||||
|
||||
try
|
||||
{
|
||||
Console.WriteLine("Program/LoadGamesInBackground : Waiting for tasks to finish");
|
||||
Task.WaitAll(loadGamesTasks);
|
||||
Console.WriteLine("Program/LoadGamesInBackground : All tasks completed!");
|
||||
}
|
||||
catch (AggregateException ae)
|
||||
{
|
||||
Console.WriteLine("Program/LoadGamesInBackground : Task exception!");
|
||||
foreach (var e in ae.InnerExceptions)
|
||||
{
|
||||
// Handle the custom exception.
|
||||
if (e is LoadingInstalledGamesException)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
// Rethrow any other exception.
|
||||
else
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool failedTask = false;
|
||||
foreach (var loadGameTask in loadGamesTasks)
|
||||
{
|
||||
Console.WriteLine($"Program/LoadGamesInBackground: LoadGameTask #{loadGameTask.Id}: {loadGameTask.Status}");
|
||||
if (loadGameTask.Exception != null)
|
||||
{
|
||||
failedTask = true;
|
||||
foreach (var ex in loadGameTask.Exception.InnerExceptions)
|
||||
Console.WriteLine(" {0}: {1}", ex.GetType().Name,
|
||||
ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
if (failedTask)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class ApplyTopologyException : Exception
|
||||
{
|
||||
public ApplyTopologyException(String message) : base(message)
|
||||
@ -431,4 +518,10 @@ namespace HeliosPlus {
|
||||
public ApplyPathInfoException(String message) : base(message)
|
||||
{ }
|
||||
}
|
||||
|
||||
public class LoadingInstalledGamesException : Exception
|
||||
{
|
||||
public LoadingInstalledGamesException(String message) : base(message)
|
||||
{ }
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@ using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using HeliosPlus.InterProcess;
|
||||
using HeliosPlus.UIForms;
|
||||
using ComponentFactory.Krypton.Toolkit;
|
||||
|
||||
namespace HeliosPlus
|
||||
{
|
||||
@ -50,30 +51,265 @@ namespace HeliosPlus
|
||||
public bool CloseOnFinish;
|
||||
}
|
||||
|
||||
public struct Executable
|
||||
{
|
||||
public string DifferentExecutableToMonitor;
|
||||
public string ExecutableNameAndPath;
|
||||
public uint ExecutableTimeout;
|
||||
public string ExecutableArguments;
|
||||
public bool ExecutableArgumentsRequired;
|
||||
public bool ProcessNameToMonitorUsesExecutable;
|
||||
}
|
||||
|
||||
public struct GameStruct
|
||||
{
|
||||
public Game GameToPlay;
|
||||
public uint StartTimeout;
|
||||
public string GameArguments;
|
||||
public bool GameArgumentsRequired;
|
||||
}
|
||||
|
||||
public class ShortcutItem
|
||||
{
|
||||
|
||||
//private static List<ShortcutItem> _allSavedShortcuts = new List<ShortcutItem>();
|
||||
//private MultiIcon _shortcutIcon, _originalIcon = null;
|
||||
private Bitmap _shortcutBitmap, _originalBitmap = null;
|
||||
private ProfileItem _profileToUse = null;
|
||||
private string _originalIconPath = "";
|
||||
//private string _savedShortcutIconCacheFilename = "";
|
||||
private string _profileUuid = "";
|
||||
private ProfileItem _profileToUse;
|
||||
private string _uuid = "";
|
||||
private string _name = "";
|
||||
//private uint _id = 0;
|
||||
private string _profileUuid = "";
|
||||
private bool _isPossible = false;
|
||||
private ShortcutCategory _category = ShortcutCategory.NoGame;
|
||||
private string _differentExecutableToMonitor;
|
||||
private string _executableNameAndPath = "";
|
||||
private string _executableArguments;
|
||||
private bool _executableArgumentsRequired;
|
||||
private bool _processNameToMonitorUsesExecutable;
|
||||
private uint _gameAppId;
|
||||
private string _gameName;
|
||||
private SupportedGameLibrary _gameLibrary;
|
||||
private uint _startTimeout;
|
||||
private string _gameArguments;
|
||||
private bool _gameArgumentsRequired;
|
||||
private ShortcutPermanence _permanence;
|
||||
private bool _autoName;
|
||||
private bool _isPossible;
|
||||
private List<StartProgram> _startPrograms;
|
||||
public string _originalIconPath;
|
||||
private Bitmap _shortcutBitmap, _originalBitmap;
|
||||
|
||||
|
||||
public ShortcutItem()
|
||||
{
|
||||
// Create a new UUID for the shortcut if one wasn't created already
|
||||
if (String.IsNullOrWhiteSpace(_uuid))
|
||||
_uuid = Guid.NewGuid().ToString("D");
|
||||
|
||||
// Autocreate a name for the shortcut if AutoName is on
|
||||
// (and if we have a profile to use)
|
||||
if (AutoName && _profileToUse is ProfileItem)
|
||||
{
|
||||
// If Autoname is on, and then lets autoname it!
|
||||
// That populates all the right things
|
||||
AutoSuggestShortcutName();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ShortcutItem(ProfileItem profile) : this()
|
||||
public ShortcutItem(
|
||||
string name,
|
||||
ProfileItem profile,
|
||||
uint gameAppId,
|
||||
string gameName,
|
||||
SupportedGameLibrary gameLibrary,
|
||||
uint gameTimeout,
|
||||
string gameArguments,
|
||||
bool gameArgumentsRequired,
|
||||
ShortcutPermanence permanence,
|
||||
string originalIconPath,
|
||||
List<StartProgram> startPrograms = null,
|
||||
bool autoName = true,
|
||||
string uuid = ""
|
||||
) : this()
|
||||
{
|
||||
ProfileToUse = profile;
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileToUse = profile;
|
||||
_category = ShortcutCategory.Game;
|
||||
_profileToUse = profile;
|
||||
_gameAppId = gameAppId;
|
||||
_gameName = gameName;
|
||||
_gameLibrary = gameLibrary;
|
||||
_startTimeout = gameTimeout;
|
||||
_gameArguments = gameArguments;
|
||||
_gameArgumentsRequired = gameArgumentsRequired;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileUuid
|
||||
_profileUuid = profile.UUID;
|
||||
|
||||
}
|
||||
|
||||
public ShortcutItem(string name, ProfileItem profile, GameStruct game, ShortcutPermanence permanence, string originalIconPath,
|
||||
List<StartProgram> startPrograms = null, bool autoName = true, string uuid = "") : this()
|
||||
{
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileToUse = profile;
|
||||
_category = ShortcutCategory.Game;
|
||||
_gameAppId = game.GameToPlay.Id;
|
||||
_gameName = game.GameToPlay.Name;
|
||||
_gameLibrary = game.GameToPlay.GameLibrary;
|
||||
_startTimeout = game.StartTimeout;
|
||||
_gameArguments = game.GameArguments;
|
||||
_gameArgumentsRequired = game.GameArgumentsRequired;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileUuid
|
||||
_profileUuid = profile.UUID;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ShortcutItem(string name, string profileUuid, GameStruct game, ShortcutPermanence permanence, string originalIconPath,
|
||||
List<StartProgram> startPrograms = null, bool autoName = true, string uuid = "") : this()
|
||||
{
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileUuid = profileUuid;
|
||||
_category = ShortcutCategory.Game;
|
||||
_gameAppId = game.GameToPlay.Id;
|
||||
_gameName = game.GameToPlay.Name;
|
||||
_gameLibrary = game.GameToPlay.GameLibrary;
|
||||
_startTimeout = game.StartTimeout;
|
||||
_gameArguments = game.GameArguments;
|
||||
_gameArgumentsRequired = game.GameArgumentsRequired;
|
||||
_gameArgumentsRequired = false;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileToUse
|
||||
foreach (ProfileItem profileToTest in ProfileRepository.AllProfiles)
|
||||
{
|
||||
if (profileToTest.UUID.Equals(_profileUuid,StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
_profileToUse = profileToTest;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (_profileToUse == null)
|
||||
{
|
||||
throw new Exception($"Trying to create a ShortcutItem and cannot find a loaded profile with UUID {uuid}.");
|
||||
}
|
||||
}
|
||||
|
||||
public ShortcutItem(
|
||||
string name,
|
||||
ProfileItem profile,
|
||||
string differentExecutableToMonitor,
|
||||
string executableNameAndPath,
|
||||
uint executableTimeout,
|
||||
string executableArguments,
|
||||
bool executableArgumentsRequired,
|
||||
bool processNameToMonitorUsesExecutable,
|
||||
ShortcutPermanence permanence,
|
||||
string originalIconPath,
|
||||
List<StartProgram> startPrograms = null,
|
||||
bool autoName = true,
|
||||
string uuid = ""
|
||||
) : this()
|
||||
{
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileToUse = profile;
|
||||
_category = ShortcutCategory.Application;
|
||||
_differentExecutableToMonitor = differentExecutableToMonitor;
|
||||
_executableNameAndPath = executableNameAndPath;
|
||||
_startTimeout = executableTimeout;
|
||||
_executableArguments = executableArguments;
|
||||
_executableArgumentsRequired = executableArgumentsRequired;
|
||||
_processNameToMonitorUsesExecutable = processNameToMonitorUsesExecutable;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileUuid
|
||||
_profileUuid = profile.UUID;
|
||||
|
||||
}
|
||||
|
||||
public ShortcutItem(string name, ProfileItem profile, Executable executable, ShortcutPermanence permanence, string originalIconPath,
|
||||
List<StartProgram> startPrograms = null, bool autoName = true, string uuid = "") : this()
|
||||
{
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileToUse = profile;
|
||||
_category = ShortcutCategory.Application;
|
||||
_differentExecutableToMonitor = executable.DifferentExecutableToMonitor;
|
||||
_executableNameAndPath = executable.ExecutableNameAndPath;
|
||||
_startTimeout = executable.ExecutableTimeout;
|
||||
_executableArguments = executable.ExecutableArguments;
|
||||
_executableArgumentsRequired = executable.ExecutableArgumentsRequired;
|
||||
_processNameToMonitorUsesExecutable = executable.ProcessNameToMonitorUsesExecutable;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileUuid
|
||||
_profileUuid = profile.UUID;
|
||||
|
||||
}
|
||||
|
||||
public ShortcutItem(string name, string profileUuid, Executable executable, ShortcutPermanence permanence, string originalIconPath,
|
||||
List<StartProgram> startPrograms = null, bool autoName = true, string uuid = "") : this()
|
||||
{
|
||||
_uuid = uuid;
|
||||
_name = name;
|
||||
_profileUuid = profileUuid;
|
||||
_category = ShortcutCategory.Application;
|
||||
_differentExecutableToMonitor = executable.DifferentExecutableToMonitor;
|
||||
_executableNameAndPath = executable.ExecutableNameAndPath;
|
||||
_startTimeout = executable.ExecutableTimeout;
|
||||
_executableArguments = executable.ExecutableArguments;
|
||||
_executableArgumentsRequired = executable.ExecutableArgumentsRequired;
|
||||
_processNameToMonitorUsesExecutable = executable.ProcessNameToMonitorUsesExecutable;
|
||||
_permanence = permanence;
|
||||
_autoName = autoName;
|
||||
_startPrograms = startPrograms;
|
||||
_originalIconPath = originalIconPath;
|
||||
|
||||
// Now we need to find and populate the profileToUse
|
||||
foreach (ProfileItem profileToTest in ProfileRepository.AllProfiles)
|
||||
{
|
||||
if (profileToTest.UUID.Equals(_profileUuid, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
_profileToUse = profileToTest;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (_profileToUse == null)
|
||||
{
|
||||
throw new Exception($"Trying to create a ShortcutItem and cannot find a loaded profile with UUID {uuid}.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static Version Version
|
||||
{
|
||||
get => new Version(1, 0);
|
||||
@ -83,8 +319,6 @@ namespace HeliosPlus
|
||||
{
|
||||
get
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(_uuid))
|
||||
_uuid = Guid.NewGuid().ToString("D");
|
||||
return _uuid;
|
||||
}
|
||||
set
|
||||
@ -100,11 +334,6 @@ namespace HeliosPlus
|
||||
{
|
||||
get
|
||||
{
|
||||
if (AutoName && _profileToUse is ProfileItem)
|
||||
{
|
||||
// If Autoname is on, and then lets autoname it!
|
||||
AutoSuggestShortcutName();
|
||||
}
|
||||
return _name;
|
||||
}
|
||||
set
|
||||
@ -113,23 +342,23 @@ namespace HeliosPlus
|
||||
}
|
||||
}
|
||||
|
||||
public bool AutoName { get; set; } = true;
|
||||
public bool AutoName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _autoName;
|
||||
}
|
||||
set
|
||||
{
|
||||
_autoName = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[JsonIgnore]
|
||||
public ProfileItem ProfileToUse {
|
||||
get
|
||||
{
|
||||
if (_profileToUse == null && !String.IsNullOrWhiteSpace(_profileUuid))
|
||||
foreach (ProfileItem profileToTest in ProfileRepository.AllProfiles)
|
||||
{
|
||||
if (profileToTest.UUID.Equals(_profileUuid))
|
||||
{
|
||||
_profileToUse = profileToTest;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return _profileToUse;
|
||||
}
|
||||
set
|
||||
@ -138,9 +367,7 @@ namespace HeliosPlus
|
||||
{
|
||||
_profileToUse = value;
|
||||
_profileUuid = _profileToUse.UUID;
|
||||
// And if we have the _originalBitmap we can also save the Bitmap overlay, but only if the ProfileToUse is set
|
||||
if (_originalBitmap is Bitmap)
|
||||
_shortcutBitmap = ToBitmapOverlay(_originalBitmap, ProfileToUse.ProfileTightestBitmap,256,256);
|
||||
// We should try to set the Profile
|
||||
// And we rename the shortcut if the AutoName is on
|
||||
if (AutoName)
|
||||
AutoSuggestShortcutName();
|
||||
@ -151,8 +378,6 @@ namespace HeliosPlus
|
||||
public string ProfileUUID {
|
||||
get
|
||||
{
|
||||
if (_profileUuid == null && _profileToUse is ProfileItem)
|
||||
_profileUuid = _profileToUse.UUID;
|
||||
return _profileUuid;
|
||||
}
|
||||
set
|
||||
@ -168,42 +393,198 @@ namespace HeliosPlus
|
||||
}
|
||||
}
|
||||
|
||||
public ShortcutPermanence Permanence { get; set; } = ShortcutPermanence.Temporary;
|
||||
public ShortcutPermanence Permanence
|
||||
{
|
||||
get
|
||||
{
|
||||
return _permanence;
|
||||
}
|
||||
|
||||
public ShortcutCategory Category { get; set; } = ShortcutCategory.Game;
|
||||
set
|
||||
{
|
||||
_permanence = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string DifferentExecutableToMonitor { get; set; } = "";
|
||||
public ShortcutCategory Category
|
||||
{
|
||||
get
|
||||
{
|
||||
return _category;
|
||||
}
|
||||
|
||||
public string ExecutableNameAndPath { get; set; } = "";
|
||||
set
|
||||
{
|
||||
_category = value;
|
||||
}
|
||||
}
|
||||
|
||||
public uint ExecutableTimeout { get; set; } = 30;
|
||||
public string DifferentExecutableToMonitor
|
||||
{
|
||||
get
|
||||
{
|
||||
return _differentExecutableToMonitor;
|
||||
}
|
||||
|
||||
public string ExecutableArguments { get; set; } = "";
|
||||
set
|
||||
{
|
||||
_differentExecutableToMonitor = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool ExecutableArgumentsRequired { get; set; } = false;
|
||||
public string ExecutableNameAndPath
|
||||
{
|
||||
get
|
||||
{
|
||||
return _executableNameAndPath;
|
||||
}
|
||||
|
||||
public bool ProcessNameToMonitorUsesExecutable { get; set; } = true;
|
||||
set
|
||||
{
|
||||
_executableNameAndPath = value;
|
||||
|
||||
public uint GameAppId { get; set; } = 0;
|
||||
// If the executableNameandPath is set then we also want to update the originalIconPath
|
||||
// so it's the path to the application. This will kick of the icon grabbing processes
|
||||
if (!String.IsNullOrWhiteSpace(_originalIconPath))
|
||||
if (Category.Equals(ShortcutCategory.Application))
|
||||
_originalIconPath = value;
|
||||
|
||||
public string GameName { get; set; } = "";
|
||||
}
|
||||
}
|
||||
|
||||
public SupportedGameLibrary GameLibrary { get; set; } = SupportedGameLibrary.Unknown;
|
||||
public string ExecutableArguments
|
||||
{
|
||||
get
|
||||
{
|
||||
return _executableArguments;
|
||||
}
|
||||
|
||||
public uint GameTimeout { get; set; } = 30;
|
||||
set
|
||||
{
|
||||
_executableArguments = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string GameArguments { get; set; } = "";
|
||||
public bool ExecutableArgumentsRequired
|
||||
{
|
||||
get
|
||||
{
|
||||
return _executableArgumentsRequired;
|
||||
}
|
||||
|
||||
public bool GameArgumentsRequired { get; set; } = false;
|
||||
set
|
||||
{
|
||||
_executableArgumentsRequired = value;
|
||||
}
|
||||
}
|
||||
|
||||
public List<StartProgram> StartPrograms { get; set; }
|
||||
public bool ProcessNameToMonitorUsesExecutable
|
||||
{
|
||||
get
|
||||
{
|
||||
return _processNameToMonitorUsesExecutable;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_processNameToMonitorUsesExecutable = value;
|
||||
}
|
||||
}
|
||||
|
||||
public uint GameAppId
|
||||
{
|
||||
get
|
||||
{
|
||||
return _gameAppId;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_gameAppId = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string GameName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _gameName;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_gameName = value;
|
||||
}
|
||||
}
|
||||
|
||||
public SupportedGameLibrary GameLibrary
|
||||
{
|
||||
get
|
||||
{
|
||||
return _gameLibrary;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_gameLibrary = value;
|
||||
}
|
||||
}
|
||||
|
||||
public uint StartTimeout
|
||||
{
|
||||
get
|
||||
{
|
||||
return _startTimeout;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_startTimeout = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string GameArguments
|
||||
{
|
||||
get
|
||||
{
|
||||
return _gameArguments;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_gameArguments = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool GameArgumentsRequired
|
||||
{
|
||||
get
|
||||
{
|
||||
return _gameArgumentsRequired;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_gameArgumentsRequired = value;
|
||||
}
|
||||
}
|
||||
|
||||
public List<StartProgram> StartPrograms
|
||||
{
|
||||
get
|
||||
{
|
||||
return _startPrograms;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_startPrograms = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string OriginalIconPath {
|
||||
get
|
||||
{
|
||||
if (String.IsNullOrEmpty(_originalIconPath))
|
||||
return null;
|
||||
|
||||
return _originalIconPath;
|
||||
}
|
||||
|
||||
@ -211,17 +592,9 @@ namespace HeliosPlus
|
||||
{
|
||||
_originalIconPath = value;
|
||||
|
||||
// We now force creation of the bitmap
|
||||
// straight away, so we know it has already been done.
|
||||
|
||||
/*if (Category == ShortcutCategory.Application)
|
||||
_originalBitmap = ToBitmapFromExe(_originalIconPath);
|
||||
else
|
||||
_originalBitmap = ToBitmapFromIcon(_originalIconPath);*/
|
||||
|
||||
// And we do the same for the Bitmap overlay, but only if the ProfileToUse is set
|
||||
//if (ProfileToUse is ProfileItem)
|
||||
// _shortcutBitmap = ToBitmapOverlay(_originalBitmap, ProfileToUse.ProfileTightestBitmap, 256, 256);
|
||||
// And we do the same for the OriginalBitmap
|
||||
if (_originalBitmap == null)
|
||||
_originalBitmap = ToBitmap(_originalIconPath);
|
||||
}
|
||||
}
|
||||
|
||||
@ -230,25 +603,17 @@ namespace HeliosPlus
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_originalBitmap is Bitmap)
|
||||
return _originalBitmap;
|
||||
else
|
||||
{
|
||||
if (String.IsNullOrEmpty(OriginalIconPath))
|
||||
return null;
|
||||
|
||||
if (Category == ShortcutCategory.Application)
|
||||
_originalBitmap = ToBitmapFromExe(OriginalIconPath);
|
||||
else
|
||||
_originalBitmap = ToBitmapFromIcon(OriginalIconPath);
|
||||
|
||||
return _originalBitmap;
|
||||
}
|
||||
return _originalBitmap;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_originalBitmap = value;
|
||||
|
||||
// And we do the same for the Bitmap overlay, but only if the ProfileToUse is set
|
||||
if (_profileToUse is ProfileItem)
|
||||
_shortcutBitmap = ToBitmapOverlay(_originalBitmap, _profileToUse.ProfileTightestBitmap, 256, 256);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,25 +622,12 @@ namespace HeliosPlus
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_shortcutBitmap is Bitmap)
|
||||
return _shortcutBitmap;
|
||||
else
|
||||
{
|
||||
|
||||
if (ProfileToUse == null)
|
||||
return null;
|
||||
|
||||
if (OriginalBitmap == null)
|
||||
return null;
|
||||
|
||||
_shortcutBitmap = ToBitmapOverlay(_originalBitmap, ProfileToUse.ProfileTightestBitmap, 256, 256);
|
||||
return _shortcutBitmap;
|
||||
}
|
||||
return _shortcutBitmap;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_originalBitmap = value;
|
||||
_shortcutBitmap = value;
|
||||
}
|
||||
}
|
||||
|
||||
@ -310,14 +662,13 @@ namespace HeliosPlus
|
||||
shortcut.Category = Category;
|
||||
shortcut.DifferentExecutableToMonitor = DifferentExecutableToMonitor;
|
||||
shortcut.ExecutableNameAndPath = ExecutableNameAndPath;
|
||||
shortcut.ExecutableTimeout = ExecutableTimeout;
|
||||
shortcut.ExecutableArguments = ExecutableArguments;
|
||||
shortcut.ExecutableArgumentsRequired = ExecutableArgumentsRequired;
|
||||
shortcut.ProcessNameToMonitorUsesExecutable = ProcessNameToMonitorUsesExecutable;
|
||||
shortcut.GameAppId = GameAppId;
|
||||
shortcut.GameName = GameName;
|
||||
shortcut.GameLibrary = GameLibrary;
|
||||
shortcut.GameTimeout = GameTimeout;
|
||||
shortcut.StartTimeout = StartTimeout;
|
||||
shortcut.GameArguments = GameArguments;
|
||||
shortcut.GameArgumentsRequired = GameArgumentsRequired;
|
||||
shortcut.OriginalIconPath = OriginalIconPath;
|
||||
|
@ -547,7 +547,7 @@ namespace HeliosPlus
|
||||
{
|
||||
// Now wait a little while for all the processes we want to monitor to start up
|
||||
var ticks = 0;
|
||||
while (ticks < shortcutToUse.ExecutableTimeout * 1000)
|
||||
while (ticks < shortcutToUse.StartTimeout * 1000)
|
||||
{
|
||||
// Look for the processes with the ProcessName we want (which in Windows is the filename without the extension)
|
||||
processesToMonitor = System.Diagnostics.Process.GetProcessesByName(Path.GetFileNameWithoutExtension(shortcutToUse.DifferentExecutableToMonitor)).ToList();
|
||||
@ -630,7 +630,7 @@ namespace HeliosPlus
|
||||
{
|
||||
// Prepare to start the steam game using the URI interface
|
||||
// as used by Steam for it's own desktop shortcuts.
|
||||
var address = $"steam://rungameid/{steamGameToRun.GameId}";
|
||||
var address = $"steam://rungameid/{steamGameToRun.Id}";
|
||||
if (shortcutToUse.GameArgumentsRequired)
|
||||
{
|
||||
address += "/" + shortcutToUse.GameArguments;
|
||||
@ -641,7 +641,7 @@ namespace HeliosPlus
|
||||
|
||||
// Wait for Steam game to update if needed
|
||||
var ticks = 0;
|
||||
while (ticks < shortcutToUse.GameTimeout * 1000)
|
||||
while (ticks < shortcutToUse.StartTimeout * 1000)
|
||||
{
|
||||
if (steamGameToRun.IsRunning)
|
||||
{
|
||||
@ -696,7 +696,7 @@ namespace HeliosPlus
|
||||
|
||||
Thread.Sleep(300);
|
||||
}
|
||||
Console.WriteLine($"{steamGameToRun.GameName} has been exited. Now continuing with cleanup tasks.");
|
||||
Console.WriteLine($"{steamGameToRun.Name} has been exited. Now continuing with cleanup tasks.");
|
||||
}
|
||||
|
||||
// Remove the status notification icon from the status area
|
||||
|
@ -22,11 +22,15 @@ namespace HeliosPlus.UIForms
|
||||
private ProfileAdaptor _profileAdaptor;
|
||||
//private List<ProfileItem> _loadedProfiles = new List<ProfileItem>();
|
||||
private ProfileItem _profileToUse= null;
|
||||
private GameStruct _gameToUse;
|
||||
private Executable _executableToUse;
|
||||
private ShortcutPermanence _permanence = ShortcutPermanence.Temporary;
|
||||
List<StartProgram> _startPrograms = new List<StartProgram>();
|
||||
private ShortcutItem _shortcutToEdit = null;
|
||||
private bool _isNewShortcut = false;
|
||||
private bool _isNewShortcut = true;
|
||||
private bool _isUnsaved = false;
|
||||
private bool _loadedShortcut = false;
|
||||
private bool _saveNameAutomatic = true;
|
||||
private bool _autoName = true;
|
||||
private uint _gameId = 0;
|
||||
private string _uuid = "";
|
||||
|
||||
@ -41,12 +45,12 @@ namespace HeliosPlus.UIForms
|
||||
// Create a new SHortcut if we are creating a new one
|
||||
// And set up the page (otherwise this is all set when we load an
|
||||
// existing Shortcut)
|
||||
if (_shortcutToEdit == null)
|
||||
/*if (_shortcutToEdit == null)
|
||||
{
|
||||
_shortcutToEdit = new ShortcutItem();
|
||||
_isNewShortcut = true;
|
||||
//_shortcutToEdit = new ShortcutItem();
|
||||
//_isNewShortcut = true;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
@ -366,69 +370,14 @@ namespace HeliosPlus.UIForms
|
||||
|
||||
}
|
||||
|
||||
// Fill the Shortcut object with the bits we care about saving
|
||||
// Save the autonaming setting
|
||||
_shortcutToEdit.AutoName = cb_autosuggest.Checked;
|
||||
|
||||
// Update the Executable args
|
||||
_shortcutToEdit.ExecutableArguments = txt_args_executable.Text;
|
||||
|
||||
// Update if the executable args are needed
|
||||
_shortcutToEdit.ExecutableArgumentsRequired = cb_args_executable.Checked;
|
||||
|
||||
// Update the Executable name and path
|
||||
_shortcutToEdit.ExecutableNameAndPath = txt_executable.Text;
|
||||
|
||||
// Update the executable timeout
|
||||
_shortcutToEdit.ExecutableTimeout = Convert.ToUInt32(nud_timeout_executable.Value);
|
||||
|
||||
// Update the game app id
|
||||
_shortcutToEdit.GameAppId = _gameId;
|
||||
|
||||
// Update the game args
|
||||
_shortcutToEdit.GameArguments = txt_args_game.Text;
|
||||
|
||||
// Update if the game args are needed
|
||||
_shortcutToEdit.GameArgumentsRequired = cb_args_game.Checked;
|
||||
|
||||
// Update what game library it's from
|
||||
//_shortcutToEdit.GameLibrary = SupportedGameLibrary.Steam;
|
||||
|
||||
// Update the Game Name
|
||||
_shortcutToEdit.GameName = txt_game_name.Text;
|
||||
|
||||
// Update the Game Timeout
|
||||
_shortcutToEdit.GameTimeout = Convert.ToUInt32(nud_timeout_game.Value);
|
||||
|
||||
// Update the Shortcut name
|
||||
_shortcutToEdit.Name = txt_shortcut_save_name.Text;
|
||||
|
||||
// Set some values
|
||||
// Check the permanence requirements
|
||||
if (rb_switch_temp.Checked)
|
||||
_shortcutToEdit.Permanence = ShortcutPermanence.Temporary;
|
||||
_permanence = ShortcutPermanence.Temporary;
|
||||
|
||||
if (rb_switch_permanent.Checked)
|
||||
_shortcutToEdit.Permanence = ShortcutPermanence.Permanent;
|
||||
|
||||
// Update the process name to monitor
|
||||
if (!String.IsNullOrWhiteSpace(txt_alternative_executable.Text)) {
|
||||
_shortcutToEdit.DifferentExecutableToMonitor = txt_alternative_executable.Text;
|
||||
}
|
||||
|
||||
if (rb_wait_alternative_executable.Checked && !String.IsNullOrWhiteSpace(txt_alternative_executable.Text))
|
||||
{
|
||||
_shortcutToEdit.ProcessNameToMonitorUsesExecutable = true;
|
||||
_shortcutToEdit.DifferentExecutableToMonitor = txt_alternative_executable.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
_shortcutToEdit.ProcessNameToMonitorUsesExecutable = false;
|
||||
}
|
||||
|
||||
// Update the profile to use
|
||||
_shortcutToEdit.ProfileToUse = _profileToUse;
|
||||
|
||||
List<StartProgram> myStartPrograms = new List<StartProgram>();
|
||||
_permanence = ShortcutPermanence.Permanent;
|
||||
|
||||
// Save the start program 1
|
||||
StartProgram myStartProgram = new StartProgram();
|
||||
@ -438,7 +387,7 @@ namespace HeliosPlus.UIForms
|
||||
myStartProgram.ExecutableArgumentsRequired = cb_start_program_pass_args1.Checked;
|
||||
myStartProgram.Arguments = txt_start_program_args1.Text;
|
||||
myStartProgram.CloseOnFinish = cb_start_program_close1.Checked;
|
||||
myStartPrograms.Add(myStartProgram);
|
||||
_startPrograms.Add(myStartProgram);
|
||||
|
||||
myStartProgram = new StartProgram();
|
||||
myStartProgram.Priority = 2;
|
||||
@ -447,7 +396,7 @@ namespace HeliosPlus.UIForms
|
||||
myStartProgram.ExecutableArgumentsRequired = cb_start_program_pass_args2.Checked;
|
||||
myStartProgram.Arguments = txt_start_program_args2.Text;
|
||||
myStartProgram.CloseOnFinish = cb_start_program_close2.Checked;
|
||||
myStartPrograms.Add(myStartProgram);
|
||||
_startPrograms.Add(myStartProgram);
|
||||
|
||||
myStartProgram = new StartProgram();
|
||||
myStartProgram.Priority = 3;
|
||||
@ -456,7 +405,7 @@ namespace HeliosPlus.UIForms
|
||||
myStartProgram.ExecutableArgumentsRequired = cb_start_program_pass_args3.Checked;
|
||||
myStartProgram.Arguments = txt_start_program_args3.Text;
|
||||
myStartProgram.CloseOnFinish = cb_start_program_close3.Checked;
|
||||
myStartPrograms.Add(myStartProgram);
|
||||
_startPrograms.Add(myStartProgram);
|
||||
|
||||
myStartProgram = new StartProgram();
|
||||
myStartProgram.Priority = 4;
|
||||
@ -465,31 +414,80 @@ namespace HeliosPlus.UIForms
|
||||
myStartProgram.ExecutableArgumentsRequired = cb_start_program_pass_args4.Checked;
|
||||
myStartProgram.Arguments = txt_start_program_args4.Text;
|
||||
myStartProgram.CloseOnFinish = cb_start_program_close4.Checked;
|
||||
myStartPrograms.Add(myStartProgram);
|
||||
_startPrograms.Add(myStartProgram);
|
||||
|
||||
// Save the start programs to the shortcut
|
||||
_shortcutToEdit.StartPrograms = myStartPrograms;
|
||||
|
||||
// Update the Category as well as the OriginalIconPath
|
||||
// (as we need the OriginalIconPath to run the SaveShortcutIconToCache method)
|
||||
// Now we create the Shortcut Object ready to save
|
||||
// If we're launching a game
|
||||
if (rb_launcher.Checked)
|
||||
_shortcutToEdit.Category = ShortcutCategory.Game;
|
||||
{
|
||||
// If the game is a SteamGame
|
||||
if(txt_game_launcher.Text == SupportedGameLibrary.Steam.ToString())
|
||||
{
|
||||
// Find the SteamGame
|
||||
_gameToUse = new GameStruct();
|
||||
_gameToUse.GameToPlay = (from steamGame in SteamLibrary.AllInstalledGames where steamGame.Id == _gameId select steamGame).First();
|
||||
_gameToUse.StartTimeout = Convert.ToUInt32(nud_timeout_game.Value);
|
||||
_gameToUse.GameArguments = txt_args_game.Text;
|
||||
_gameToUse.GameArgumentsRequired = cb_args_game.Checked;
|
||||
|
||||
if (txt_game_launcher.Text == SupportedGameLibrary.Steam.ToString())
|
||||
{
|
||||
_shortcutToEdit.OriginalIconPath = (from steamGame in SteamLibrary.AllInstalledGames where steamGame.GameId == _shortcutToEdit.GameAppId select steamGame.GameIconPath).First();
|
||||
_shortcutToEdit.GameLibrary = SupportedGameLibrary.Steam;
|
||||
}
|
||||
/*else if (txt_game_launcher.Text == SupportedGameLibrary.Uplay.ToString())
|
||||
{
|
||||
_shortcutToEdit.OriginalIconPath = (from uplayGame in UplayLibrary.AllInstalledGames where uplayGame.GameId == _shortcutToEdit.GameAppId select uplayGame.GameIconPath).First();
|
||||
_shortcutToEdit.GameLibrary = SupportedGameLibrary.Uplay;
|
||||
}*/
|
||||
_shortcutToEdit = new ShortcutItem(
|
||||
Name,
|
||||
_profileToUse,
|
||||
_gameToUse,
|
||||
_permanence,
|
||||
_gameToUse.GameToPlay.IconPath,
|
||||
_startPrograms,
|
||||
_autoName
|
||||
);
|
||||
|
||||
}
|
||||
// If the game is a SteamGame
|
||||
/*else if (txt_game_launcher.Text == SupportedGameLibrary.Uplay.ToString())
|
||||
{
|
||||
// Find the UplayGame
|
||||
_steamGameToUse = (from UplayGame in SteamLibrary.AllInstalledGames where UplayGame.GameId == _shortcutToEdit.GameAppId).First();
|
||||
|
||||
_shortcutToEdit = new ShortcutItem(
|
||||
Name,
|
||||
_profileToUse,
|
||||
_steamGameToUse,
|
||||
_permanence,
|
||||
_steamGameToUse.GameIconPath,
|
||||
_startPrograms,
|
||||
_autoName
|
||||
);
|
||||
|
||||
}*/
|
||||
}
|
||||
else if (rb_standalone.Checked)
|
||||
{
|
||||
_shortcutToEdit.Category = ShortcutCategory.Application;
|
||||
}
|
||||
_executableToUse = new Executable();
|
||||
_executableToUse.ExecutableArguments = txt_args_executable.Text;
|
||||
_executableToUse.ExecutableArgumentsRequired = cb_args_executable.Checked;
|
||||
_executableToUse.ExecutableNameAndPath = txt_executable.Text;
|
||||
_executableToUse.ExecutableTimeout = Convert.ToUInt32(nud_timeout_executable.Value);
|
||||
|
||||
if (rb_wait_alternative_executable.Checked && !String.IsNullOrWhiteSpace(txt_alternative_executable.Text))
|
||||
{
|
||||
_executableToUse.ProcessNameToMonitorUsesExecutable = true;
|
||||
_executableToUse.DifferentExecutableToMonitor = txt_alternative_executable.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
_executableToUse.ProcessNameToMonitorUsesExecutable = false;
|
||||
}
|
||||
|
||||
_shortcutToEdit = new ShortcutItem(
|
||||
Name,
|
||||
_profileToUse,
|
||||
_executableToUse,
|
||||
_permanence,
|
||||
_executableToUse.ExecutableNameAndPath,
|
||||
_startPrograms,
|
||||
_autoName
|
||||
);
|
||||
}
|
||||
|
||||
// Add the Shortcut to the list of saved Shortcuts so it gets saved for later
|
||||
// but only if it's new... if it is an edit then it will already be in the list.
|
||||
ShortcutRepository.AddShortcut(_shortcutToEdit);
|
||||
@ -539,7 +537,7 @@ namespace HeliosPlus.UIForms
|
||||
|
||||
private void suggestShortcutName()
|
||||
{
|
||||
if (_saveNameAutomatic && _profileToUse is ProfileItem)
|
||||
if (_autoName && _profileToUse is ProfileItem)
|
||||
{
|
||||
if (rb_no_game.Checked)
|
||||
{
|
||||
@ -659,6 +657,65 @@ namespace HeliosPlus.UIForms
|
||||
bool foundChosenProfileInLoadedProfiles = false;
|
||||
ProfileItem chosenProfile = null;
|
||||
|
||||
|
||||
// Load the Games ListView
|
||||
foreach (var game in SteamLibrary.AllInstalledGames.OrderBy(game => game.Name))
|
||||
{
|
||||
if (File.Exists(game.IconPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (game.IconPath.EndsWith(".ico"))
|
||||
{
|
||||
// if it's an icon try to load it as a bitmap
|
||||
il_games.Images.Add(Image.FromFile(game.IconPath));
|
||||
}
|
||||
else if (game.IconPath.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase) || game.IconPath.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
// otherwise use IconExtractor
|
||||
/*IconExtractor IconEx = new IconExtractor(game.GameIconPath);
|
||||
Icon icoAppIcon = IconEx.GetIcon(0); // Because standard System.Drawing.Icon.ExtractAssociatedIcon() returns ONLY 32x32.*/
|
||||
|
||||
Icon icoAppIcon = Icon.ExtractAssociatedIcon(game.IconPath);
|
||||
// We first try high quality icons
|
||||
Bitmap extractedBitmap = ShortcutItem.ExtractVistaIcon(icoAppIcon);
|
||||
if (extractedBitmap == null)
|
||||
extractedBitmap = icoAppIcon.ToBitmap();
|
||||
il_games.Images.Add(extractedBitmap);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"ShortcutForm exception: {ex.Message}: {ex.StackTrace} - {ex.InnerException}");
|
||||
il_games.Images.Add(Image.FromFile("Resources/Steam.ico"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//(Icon)global::Calculate.Properties.Resources.ResourceManager.GetObject("Steam.ico");
|
||||
il_games.Images.Add(Image.FromFile("Resources/Steam.ico"));
|
||||
}
|
||||
|
||||
|
||||
if (!Visible)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lv_games.Items.Add(new ListViewItem
|
||||
{
|
||||
Text = game.Name,
|
||||
Tag = game,
|
||||
ImageIndex = il_games.Images.Count - 1
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// If it is a new Shortcut then we don't have to load anything!
|
||||
if (_isNewShortcut)
|
||||
return;
|
||||
|
||||
if (_shortcutToEdit is ShortcutItem && _shortcutToEdit.ProfileToUse is ProfileItem)
|
||||
{
|
||||
foreach (ProfileItem loadedProfile in ProfileRepository.AllProfiles)
|
||||
@ -718,57 +775,6 @@ namespace HeliosPlus.UIForms
|
||||
}
|
||||
}
|
||||
|
||||
// Start finding the games and loading the Games ListView
|
||||
foreach (var game in SteamLibrary.AllInstalledGames.OrderBy(game => game.GameName))
|
||||
{
|
||||
if (File.Exists(game.GameIconPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (game.GameIconPath.EndsWith(".ico"))
|
||||
{
|
||||
// if it's an icon try to load it as a bitmap
|
||||
il_games.Images.Add(Image.FromFile(game.GameIconPath));
|
||||
}
|
||||
else if (game.GameIconPath.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase) || game.GameIconPath.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
// otherwise use IconExtractor
|
||||
/*IconExtractor IconEx = new IconExtractor(game.GameIconPath);
|
||||
Icon icoAppIcon = IconEx.GetIcon(0); // Because standard System.Drawing.Icon.ExtractAssociatedIcon() returns ONLY 32x32.*/
|
||||
|
||||
Icon icoAppIcon = Icon.ExtractAssociatedIcon(game.GameIconPath);
|
||||
// We first try high quality icons
|
||||
Bitmap extractedBitmap = ShortcutItem.ExtractVistaIcon(icoAppIcon);
|
||||
if (extractedBitmap == null)
|
||||
extractedBitmap = icoAppIcon.ToBitmap();
|
||||
il_games.Images.Add(extractedBitmap);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"ShortcutForm exception: {ex.Message}: {ex.StackTrace} - {ex.InnerException}");
|
||||
il_games.Images.Add(Image.FromFile("Resources/Steam.ico"));
|
||||
}
|
||||
} else
|
||||
{
|
||||
//(Icon)global::Calculate.Properties.Resources.ResourceManager.GetObject("Steam.ico");
|
||||
il_games.Images.Add(Image.FromFile("Resources/Steam.ico"));
|
||||
}
|
||||
|
||||
|
||||
if (!Visible)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lv_games.Items.Add(new ListViewItem
|
||||
{
|
||||
Text = game.GameName,
|
||||
Tag = game,
|
||||
ImageIndex = il_games.Images.Count - 1
|
||||
});
|
||||
}
|
||||
|
||||
// Now start populating the other fields
|
||||
_uuid = _shortcutToEdit.UUID;
|
||||
// Set if we launch App/Game/NoGame
|
||||
@ -789,7 +795,7 @@ namespace HeliosPlus.UIForms
|
||||
txt_game_launcher.Text = _shortcutToEdit.GameLibrary.ToString();
|
||||
txt_game_name.Text = _shortcutToEdit.GameName;
|
||||
_gameId = _shortcutToEdit.GameAppId;
|
||||
nud_timeout_game.Value = _shortcutToEdit.GameTimeout;
|
||||
nud_timeout_game.Value = _shortcutToEdit.StartTimeout;
|
||||
txt_args_game.Text = _shortcutToEdit.GameArguments;
|
||||
if (_shortcutToEdit.GameArgumentsRequired)
|
||||
{
|
||||
@ -809,7 +815,7 @@ namespace HeliosPlus.UIForms
|
||||
|
||||
// Set the executable items if we have them
|
||||
txt_executable.Text = _shortcutToEdit.ExecutableNameAndPath;
|
||||
nud_timeout_executable.Value = _shortcutToEdit.ExecutableTimeout;
|
||||
nud_timeout_executable.Value = _shortcutToEdit.StartTimeout;
|
||||
txt_args_executable.Text = _shortcutToEdit.ExecutableArguments;
|
||||
if (_shortcutToEdit.ExecutableArgumentsRequired)
|
||||
{
|
||||
@ -950,12 +956,12 @@ namespace HeliosPlus.UIForms
|
||||
txt_game_name.Text = lv_games.SelectedItems[0].Text;
|
||||
foreach (SteamGame game in SteamLibrary.AllInstalledGames)
|
||||
{
|
||||
if (game.GameName == txt_game_name.Text)
|
||||
if (game.Name == txt_game_name.Text)
|
||||
{
|
||||
if (_loadedShortcut)
|
||||
_isUnsaved = true;
|
||||
txt_game_launcher.Text = game.GameLibrary.ToString();
|
||||
_gameId = game.GameId;
|
||||
_gameId = game.Id;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1159,7 +1165,7 @@ namespace HeliosPlus.UIForms
|
||||
{
|
||||
if (_loadedShortcut)
|
||||
_isUnsaved = true;
|
||||
_saveNameAutomatic = false;
|
||||
_autoName = false;
|
||||
cb_autosuggest.Checked = false;
|
||||
}
|
||||
|
||||
@ -1169,11 +1175,11 @@ namespace HeliosPlus.UIForms
|
||||
_isUnsaved = true;
|
||||
if (cb_autosuggest.Checked)
|
||||
{
|
||||
_saveNameAutomatic = true;
|
||||
_autoName = true;
|
||||
suggestShortcutName();
|
||||
}
|
||||
else
|
||||
_saveNameAutomatic = false;
|
||||
_autoName = false;
|
||||
}
|
||||
|
||||
private string get_exe_file()
|
||||
|
Loading…
Reference in New Issue
Block a user