├── setup.exe ├── Steamworks.NET.dll ├── Source ├── IdleMaster │ ├── logo1.ico │ ├── Resources │ │ ├── ban-2x.png │ │ ├── cog-2x.png │ │ ├── eye-2x.png │ │ ├── x-2x.png │ │ ├── check-2x.png │ │ ├── globe-2x.png │ │ ├── info-2x.png │ │ ├── trash-2x.png │ │ ├── CSteamworks.dll │ │ ├── document-2x.png │ │ ├── media-pause.png │ │ ├── media-play.png │ │ ├── steam-idle.exe │ │ ├── steam_api.dll │ │ ├── bar-chart-2x.png │ │ ├── media-play-2x.png │ │ ├── lock-locked-2x.png │ │ ├── media-pause-2x.png │ │ ├── power-standby-2x.png │ │ ├── select2-spinner.gif │ │ ├── media-step-forward.png │ │ └── media-step-forward-2x.png │ ├── packages.config │ ├── AvgValues.cs │ ├── frmChangelog.cs │ ├── frmAbout.cs │ ├── Program.cs │ ├── SteamProfile.cs │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Settings.settings │ │ ├── Settings.Designer.cs │ │ ├── Resources.resx │ │ └── Resources.Designer.cs │ ├── frmBlacklist.cs │ ├── Statistics.cs │ ├── frmChangelog.Designer.cs │ ├── frmStatistics.cs │ ├── Logger.cs │ ├── app.config │ ├── Badge.cs │ ├── frmSettingsAdvanced.cs │ ├── frmBrowser.Designer.cs │ ├── frmAbout.Designer.cs │ ├── CookieClient.cs │ ├── frmSettings.cs │ ├── frmBlacklist.Designer.cs │ ├── frmStatistics.Designer.cs │ ├── frmSettingsAdvanced.Designer.cs │ ├── frmBrowser.cs │ ├── localization │ │ ├── strings.zh.resx │ │ ├── strings.zh-TW.resx │ │ ├── strings.ja.resx │ │ └── strings.ko.resx │ └── IdleMaster.csproj └── IdleMaster.sln ├── steam-idle Source ├── steam-idle │ ├── icon.ico │ ├── Properties │ │ ├── Settings.settings │ │ ├── Settings.Designer.cs │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── frmMain.cs │ ├── Program.cs │ ├── frmMain.Designer.cs │ └── steam-idle.csproj └── steam-idle.sln ├── .gitignore └── README.md /setup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/setup.exe -------------------------------------------------------------------------------- /Steamworks.NET.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Steamworks.NET.dll -------------------------------------------------------------------------------- /Source/IdleMaster/logo1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/logo1.ico -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/ban-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/ban-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/cog-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/cog-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/eye-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/eye-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/x-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/x-2x.png -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/steam-idle Source/steam-idle/icon.ico -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/check-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/check-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/globe-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/globe-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/info-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/info-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/trash-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/trash-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/CSteamworks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/CSteamworks.dll -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/document-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/document-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-pause.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-play.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/steam-idle.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/steam-idle.exe -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/steam_api.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/steam_api.dll -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/bar-chart-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/bar-chart-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-play-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-play-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/lock-locked-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/lock-locked-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-pause-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-pause-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/power-standby-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/power-standby-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/select2-spinner.gif -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-step-forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-step-forward.png -------------------------------------------------------------------------------- /Source/IdleMaster/Resources/media-step-forward-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jshackles/idle_master/HEAD/Source/IdleMaster/Resources/media-step-forward-2x.png -------------------------------------------------------------------------------- /Source/IdleMaster/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Source/IdleMaster/AvgValues.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace IdleMaster 4 | { 5 | public class EnhancedsteamHelper 6 | { 7 | // ReSharper disable once InconsistentNaming 8 | public List Avg_Values { get; set; } 9 | } 10 | 11 | public class Avg 12 | { 13 | public int AppId { get; set; } 14 | 15 | // ReSharper disable once InconsistentNaming 16 | public double Avg_Price { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmChangelog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using IdleMaster.Properties; 4 | 5 | namespace IdleMaster 6 | { 7 | public partial class frmChangelog : Form 8 | { 9 | public frmChangelog() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | private void frmChangelog_Load(object sender, EventArgs e) 15 | { 16 | // Localize Form 17 | this.Text = localization.strings.release_notes_title; 18 | 19 | rtbChangelog.Rtf = Resources.Changelog; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/frmMain.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace steam_idle 12 | { 13 | public partial class frmMain : Form 14 | { 15 | public frmMain(long appid) 16 | { 17 | InitializeComponent(); 18 | picApp.Load("http://cdn.akamai.steamstatic.com/steam/apps/" + appid.ToString() + "/header_292x136.jpg"); 19 | } 20 | 21 | private void frmMain_Load(object sender, EventArgs e) 22 | { 23 | 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | using Steamworks; 7 | 8 | namespace steam_idle 9 | { 10 | static class Program 11 | { 12 | [STAThread] 13 | static void Main(string[] args) 14 | { 15 | long appId = long.Parse(args[0]); 16 | Environment.SetEnvironmentVariable("SteamAppId", appId.ToString()); 17 | 18 | if (!SteamAPI.Init()) 19 | { 20 | return; 21 | } 22 | 23 | Application.EnableVisualStyles(); 24 | Application.SetCompatibleTextRenderingDefault(false); 25 | Application.Run(new frmMain(appId)); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Source/IdleMaster/frmAbout.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Deployment.Application; 3 | using System.Reflection; 4 | using System.Windows.Forms; 5 | 6 | namespace IdleMaster 7 | { 8 | public partial class frmAbout : Form 9 | { 10 | public frmAbout() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | private void btnOK_Click(object sender, EventArgs e) 16 | { 17 | Close(); 18 | } 19 | 20 | private void frmAbout_Load(object sender, EventArgs e) 21 | { 22 | // Localize the form 23 | btnOK.Text = localization.strings.ok; 24 | 25 | if (ApplicationDeployment.IsNetworkDeployed) 26 | { 27 | var version = ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(); 28 | lblVersion.Text = "Idle Master v" + version; 29 | } 30 | else 31 | { 32 | var version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 33 | lblVersion.Text = "Idle Master v" + version; 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Source/IdleMaster.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IdleMaster", "IdleMaster\IdleMaster.csproj", "{D26CAFBB-F684-4E53-BE38-60AAD2531893}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {D26CAFBB-F684-4E53-BE38-60AAD2531893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {D26CAFBB-F684-4E53-BE38-60AAD2531893}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {D26CAFBB-F684-4E53-BE38-60AAD2531893}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {D26CAFBB-F684-4E53-BE38-60AAD2531893}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.31101.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "steam-idle", "steam-idle\steam-idle.csproj", "{E0E49AFD-1101-4815-A1F1-01F65D4D3306}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {E0E49AFD-1101-4815-A1F1-01F65D4D3306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {E0E49AFD-1101-4815-A1F1-01F65D4D3306}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {E0E49AFD-1101-4815-A1F1-01F65D4D3306}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {E0E49AFD-1101-4815-A1F1-01F65D4D3306}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18444 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace steam_idle.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Source/IdleMaster/Program.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace IdleMaster 7 | { 8 | static class Program 9 | { 10 | /// 11 | /// The main entry point for the application. 12 | /// 13 | [STAThread] 14 | static void Main() 15 | { 16 | // Set the Browser emulation version for embedded browser control 17 | try 18 | { 19 | RegistryKey ie_root = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"); 20 | RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true); 21 | String programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]); 22 | key.SetValue(programName, (int)10001, RegistryValueKind.DWord); 23 | } 24 | catch (Exception) 25 | { 26 | 27 | } 28 | 29 | Application.ThreadException += (o, a) => Logger.Exception(a.Exception); 30 | Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 31 | Application.EnableVisualStyles(); 32 | Application.SetCompatibleTextRenderingDefault(false); 33 | Application.Run(new frmMain()); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Visual Studio 3 | ################# 4 | 5 | ## Ignore Visual Studio temporary files, build results, and 6 | ## files generated by popular Visual Studio add-ons. 7 | 8 | # User-specific files 9 | *.suo 10 | *.user 11 | *.sln.docstates 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Rr]elease/ 16 | *_i.c 17 | *_p.c 18 | *.ilk 19 | *.meta 20 | *.obj 21 | *.pch 22 | *.pdb 23 | *.pgc 24 | *.pgd 25 | *.rsp 26 | *.sbr 27 | *.tlb 28 | *.tli 29 | *.tlh 30 | *.tmp 31 | *.vspscc 32 | .builds 33 | *.dotCover 34 | packages/ 35 | 36 | # Visual C++ cache files 37 | ipch/ 38 | *.aps 39 | *.ncb 40 | *.opensdf 41 | *.sdf 42 | 43 | # Visual Studio profiler 44 | *.psess 45 | *.vsp 46 | 47 | # Installshield output folder 48 | [Ee]xpress 49 | 50 | # Click-Once directory 51 | publish 52 | 53 | # Others 54 | [Bb]in 55 | [Oo]bj 56 | sql 57 | TestResults 58 | *.Cache 59 | ClientBin 60 | stylecop.* 61 | ~$* 62 | *.dbmdl 63 | Generated_Code #added for RIA/Silverlight projects 64 | 65 | # Backup & report files from converting an old project file to a newer 66 | # Visual Studio version. Backup files are not needed, because we have git ;-) 67 | _UpgradeReport_Files/ 68 | Backup*/ 69 | UpgradeLog*.XML 70 | 71 | 72 | 73 | ############ 74 | ## Windows 75 | ############ 76 | 77 | # Windows image file caches 78 | Thumbs.db 79 | 80 | # Folder config file 81 | Desktop.ini 82 | 83 | ############ 84 | ## Security 85 | ############ 86 | 87 | # Certificate file extensions 88 | *.pfx -------------------------------------------------------------------------------- /Source/IdleMaster/SteamProfile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Text; 4 | using System.Xml; 5 | using IdleMaster.Properties; 6 | 7 | namespace IdleMaster 8 | { 9 | internal class SteamProfile 10 | { 11 | internal static string GetSteamId() 12 | { 13 | var steamid = WebUtility.UrlDecode(Settings.Default.steamLogin); 14 | var index = steamid.IndexOfAny(new[] { '|' }, 0); 15 | return index != -1 ? steamid.Remove(index) : steamid; 16 | } 17 | 18 | internal static string GetSteamUrl() 19 | { 20 | return "http://steamcommunity.com/profiles/" + GetSteamId(); 21 | } 22 | 23 | internal static string GetSignedAs() 24 | { 25 | var steamUrl = GetSteamUrl(); 26 | var userName = "User " + GetSteamId(); 27 | try 28 | { 29 | var xmlRaw = new WebClient() { Encoding = Encoding.UTF8 }.DownloadString(string.Format("{0}/?xml=1", steamUrl)); 30 | var xml = new XmlDocument(); 31 | xml.LoadXml(xmlRaw); 32 | var nameNode = xml.SelectSingleNode("//steamID"); 33 | if (nameNode != null) 34 | userName = WebUtility.HtmlDecode(nameNode.InnerText); 35 | } 36 | catch (Exception ex) 37 | { 38 | Console.WriteLine(ex.Message); 39 | Logger.Exception(ex, "frmMain -> GetSignedAs, for steamUrl = " + steamUrl); 40 | } 41 | return localization.strings.signed_in_as + " " + userName; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Source/IdleMaster/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("IdleMaster")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("IdleMaster")] 12 | [assembly: AssemblyCopyright("Copyright © 2014")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("351d8228-4284-4c00-9526-7039b81b771b")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.4.1.0")] 35 | [assembly: AssemblyFileVersion("1.4.1.0")] 36 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("steam-idle")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("steam-idle")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("95f5c803-be44-47da-9eea-46e6b2fd8ef3")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmBlacklist.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Windows.Forms; 4 | using IdleMaster.Properties; 5 | 6 | namespace IdleMaster 7 | { 8 | public partial class frmBlacklist : Form 9 | { 10 | public frmBlacklist() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | public void SaveBlacklist() 16 | { 17 | Settings.Default.blacklist.Clear(); 18 | Settings.Default.blacklist.AddRange(lstBlacklist.Items.Cast().ToArray()); 19 | Settings.Default.Save(); 20 | } 21 | 22 | private void frmBlacklist_Load(object sender, EventArgs e) 23 | { 24 | // Localize form 25 | btnAdd.Text = localization.strings.add; 26 | btnSave.Text = localization.strings.save; 27 | this.Text = localization.strings.manage_blacklist; 28 | grpAdd.Text = localization.strings.add_game_blacklist; 29 | 30 | lstBlacklist.Items.AddRange(Settings.Default.blacklist.Cast().ToArray()); 31 | } 32 | 33 | private void btnSave_Click(object sender, EventArgs e) 34 | { 35 | SaveBlacklist(); 36 | Close(); 37 | } 38 | 39 | private void btnAdd_Click(object sender, EventArgs e) 40 | { 41 | int result; 42 | if (int.TryParse(txtAppid.Text, out result)) 43 | { 44 | if (lstBlacklist.Items.Cast().All(blApp => blApp != txtAppid.Text)) 45 | lstBlacklist.Items.Add(txtAppid.Text); 46 | } 47 | txtAppid.Text = string.Empty; 48 | txtAppid.Focus(); 49 | } 50 | 51 | private void btnRemove_Click(object sender, EventArgs e) 52 | { 53 | lstBlacklist.Items.Remove(lstBlacklist.SelectedItem); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Source/IdleMaster/Statistics.cs: -------------------------------------------------------------------------------- 1 | namespace IdleMaster 2 | { 3 | public class Statistics 4 | { 5 | private uint sessionMinutesIdled = 0; 6 | private uint sessionCardIdled = 0; 7 | private uint remainingCards = 0; 8 | 9 | public uint getSessionMinutesIdled() 10 | { 11 | return sessionMinutesIdled; 12 | } 13 | 14 | public uint getSessionCardIdled() 15 | { 16 | return sessionCardIdled; 17 | } 18 | 19 | public uint getRemainingCards() 20 | { 21 | return remainingCards; 22 | } 23 | 24 | public void setRemainingCards(uint remainingCards) 25 | { 26 | this.remainingCards = remainingCards; 27 | } 28 | 29 | public void checkCardRemaining(uint actualCardRemaining) 30 | { 31 | if (actualCardRemaining < remainingCards) 32 | { 33 | increaseCardIdled(remainingCards - actualCardRemaining); 34 | remainingCards = actualCardRemaining; 35 | } 36 | else if (actualCardRemaining > remainingCards) 37 | { 38 | remainingCards = actualCardRemaining; 39 | } 40 | 41 | } 42 | 43 | public void increaseCardIdled(uint number) 44 | { 45 | Properties.Settings.Default.totalCardIdled+=number; 46 | Properties.Settings.Default.Save(); 47 | sessionCardIdled+=number; 48 | } 49 | 50 | public void increaseMinutesIdled() 51 | { 52 | Properties.Settings.Default.totalMinutesIdled++; 53 | Properties.Settings.Default.Save(); 54 | sessionMinutesIdled++; 55 | } 56 | 57 | 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Idle Master 2 | =========== 3 | 4 | This program will determine which of your Steam games still have Steam Trading Card drops remaining, and will go through each application to simulate you being “in-game” so that cards will drop. It will check periodically to see if the game you’re idling has card drops remaining. When only one drop remains, it will start checking more frequently. When the game you’re idling has no more cards, it’ll move on to the next game. When no more cards are available, the program will terminate. 5 | 6 | **This project has been discontinued**, no further bug fixes or changes will be made. Issues and pull requests will be ignored. The program should still work (as of Jan 3, 2018) but Valve may make a change that causes the program to become non-functioning at any time. There are a multitude of forks of this project that are being currently maintained. 7 | 8 | Requirements 9 | ------- 10 | 11 | This application requires Steam to be open and for you to be logged in. This program is now being developed exclusively for Microsoft Windows. 12 | 13 | Non-Windows versions are available in the [Python repository](https://github.com/jshackles/idle_master_py) but may be deprecated or feature incomplete. 14 | 15 | Setup 16 | ------- 17 | 18 | If you are an end user you can download an install Idle Master directly from http://www.steamidlemaster.com or by launching setup.exe included in the root of this repository. You can also download the source repository above and compile the application using Microsoft Visual Studio. 19 | 20 | Translation 21 | ------- 22 | 23 | You can contribute your translation suggestions and vote on existing translations using our new [Translation Page](http://translate.steamidlemaster.com). 24 | 25 | Credits 26 | ------- 27 | 28 | Idle Master was created by jshackles, based on the original code created by Stumpokapow. 29 | 30 | Idle Master was writen in C# using Steamworks.NET and CSteamworks by Riley Labrecque (https://github.com/rlabrecque/CSteamworks), and using open source icons from Open Iconic (https://github.com/iconic/open-iconic). 31 | 32 | License 33 | ------- 34 | 35 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. A copy of the GNU General Public License can be found at http://www.gnu.org/licenses/. For your convenience, a copy of this license is included. 36 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmChangelog.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | partial class frmChangelog 7 | { 8 | /// 9 | /// Required designer variable. 10 | /// 11 | private IContainer components = null; 12 | 13 | /// 14 | /// Clean up any resources being used. 15 | /// 16 | /// true if managed resources should be disposed; otherwise, false. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Windows Form Designer generated code 27 | 28 | /// 29 | /// Required method for Designer support - do not modify 30 | /// the contents of this method with the code editor. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | var resources = new System.ComponentModel.ComponentResourceManager(typeof(frmChangelog)); 35 | this.rtbChangelog = new System.Windows.Forms.RichTextBox(); 36 | this.SuspendLayout(); 37 | // 38 | // rtbChangelog 39 | // 40 | this.rtbChangelog.BackColor = System.Drawing.Color.White; 41 | this.rtbChangelog.Dock = System.Windows.Forms.DockStyle.Fill; 42 | this.rtbChangelog.Location = new System.Drawing.Point(0, 0); 43 | this.rtbChangelog.Name = "rtbChangelog"; 44 | this.rtbChangelog.ReadOnly = true; 45 | this.rtbChangelog.Size = new System.Drawing.Size(564, 578); 46 | this.rtbChangelog.TabIndex = 0; 47 | this.rtbChangelog.Text = ""; 48 | // 49 | // frmChangelog 50 | // 51 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 52 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 53 | this.ClientSize = new System.Drawing.Size(564, 578); 54 | this.Controls.Add(this.rtbChangelog); 55 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 56 | this.Name = "frmChangelog"; 57 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 58 | this.Text = "Idle Master Release Notes"; 59 | this.Load += new System.EventHandler(this.frmChangelog_Load); 60 | this.ResumeLayout(false); 61 | 62 | } 63 | 64 | #endregion 65 | 66 | private RichTextBox rtbChangelog; 67 | } 68 | } -------------------------------------------------------------------------------- /Source/IdleMaster/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | False 22 | 23 | 24 | True 25 | 26 | 27 | False 28 | 29 | 30 | False 31 | 32 | 33 | <?xml version="1.0" encoding="utf-16"?> 34 | <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 35 | <string /> 36 | </ArrayOfString> 37 | 38 | 39 | False 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 0 49 | 50 | 51 | 0 52 | 53 | 54 | 55 | 56 | 57 | True 58 | 59 | 60 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmStatistics.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | public partial class frmStatistics : Form 7 | { 8 | private Statistics statistics; 9 | public frmStatistics(Statistics statistics) 10 | { 11 | InitializeComponent(); 12 | this.statistics = statistics; 13 | } 14 | 15 | private void frmStatistics_Load(object sender, EventArgs e) 16 | { 17 | // Localize Form 18 | this.Text = localization.strings.statistics.Replace("&", ""); 19 | btnOK.Text = localization.strings.accept; 20 | lblSessionHeader.Text = localization.strings.this_session + ":"; 21 | lblTotalHeader.Text = localization.strings.total + ":"; 22 | 23 | TimeSpan sessionMinutesIdled = TimeSpan.FromMinutes(statistics.getSessionMinutesIdled()); 24 | TimeSpan totalMinutesIdled = TimeSpan.FromMinutes(Properties.Settings.Default.totalMinutesIdled); 25 | 26 | int sessionHoursIdled = (sessionMinutesIdled.Days * 24) + sessionMinutesIdled.Hours; 27 | int totalHoursIdled = (totalMinutesIdled.Days * 24) + totalMinutesIdled.Hours; 28 | 29 | //Session 30 | if (sessionHoursIdled > 0) 31 | { 32 | lblSessionTime.Text = String.Format("{0} hour{1}, {2} minute{3} idled", 33 | sessionHoursIdled, 34 | sessionHoursIdled == 1 ? "" : "s", 35 | sessionMinutesIdled.Minutes, 36 | sessionMinutesIdled.Minutes == 1 ? "" : "s"); 37 | } 38 | else 39 | { 40 | lblSessionTime.Text = String.Format("{0} minute{1} idled", 41 | sessionMinutesIdled.Minutes, 42 | sessionMinutesIdled.Minutes == 1 ? "" : "s"); 43 | } 44 | lblSessionCards.Text = statistics.getSessionCardIdled().ToString() + " cards idled"; 45 | 46 | //Total 47 | if (totalHoursIdled > 0) 48 | { 49 | lblTotalTime.Text = String.Format("{0} hour{1}, {2} minute{3} idled", 50 | totalHoursIdled, 51 | totalHoursIdled == 1 ? "" : "s", 52 | totalMinutesIdled.Minutes, 53 | totalMinutesIdled.Minutes == 1 ? "" : "s"); 54 | } 55 | else 56 | { 57 | lblTotalTime.Text = String.Format("{0} minute{1} idled", 58 | totalMinutesIdled.Minutes, 59 | totalMinutesIdled.Minutes == 1 ? "" : "s"); 60 | } 61 | lblTotalCards.Text = Properties.Settings.Default.totalCardIdled.ToString() + " cards idled"; 62 | } 63 | 64 | private void btnOK_Click(object sender, EventArgs e) 65 | { 66 | Close(); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/frmMain.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace steam_idle 2 | { 3 | partial class frmMain 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain)); 32 | this.picApp = new System.Windows.Forms.PictureBox(); 33 | ((System.ComponentModel.ISupportInitialize)(this.picApp)).BeginInit(); 34 | this.SuspendLayout(); 35 | // 36 | // picApp 37 | // 38 | this.picApp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 39 | | System.Windows.Forms.AnchorStyles.Left) 40 | | System.Windows.Forms.AnchorStyles.Right))); 41 | this.picApp.Location = new System.Drawing.Point(-1, 0); 42 | this.picApp.Name = "picApp"; 43 | this.picApp.Size = new System.Drawing.Size(292, 136); 44 | this.picApp.TabIndex = 0; 45 | this.picApp.TabStop = false; 46 | // 47 | // frmMain 48 | // 49 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 50 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 51 | this.ClientSize = new System.Drawing.Size(291, 136); 52 | this.Controls.Add(this.picApp); 53 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 54 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 55 | this.MaximizeBox = false; 56 | this.Name = "frmMain"; 57 | this.Text = "You\'re Now In-Game"; 58 | this.Load += new System.EventHandler(this.frmMain_Load); 59 | ((System.ComponentModel.ISupportInitialize)(this.picApp)).EndInit(); 60 | this.ResumeLayout(false); 61 | 62 | } 63 | 64 | #endregion 65 | 66 | private System.Windows.Forms.PictureBox picApp; 67 | } 68 | } 69 | 70 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18444 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace steam_idle.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("steam_idle.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Source/IdleMaster/Logger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Reflection; 5 | using System.Text; 6 | using System.Threading; 7 | 8 | namespace IdleMaster 9 | { 10 | public static class Logger 11 | { 12 | private static readonly object LogLock = new object(); 13 | 14 | private static readonly string ExceptionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @".\error.log"; 15 | 16 | public static void Exception(Exception ex, params string[] messages) 17 | { 18 | var contents = string.Concat(DateTime.Now, " ", string.Join(Environment.NewLine, messages), 19 | Environment.NewLine, ex.ToString(), Environment.NewLine); 20 | Write(contents, ExceptionPath); 21 | } 22 | 23 | private static void Write(string contents, string path) 24 | { 25 | Console.WriteLine(contents); 26 | using (TimedLock.Lock(LogLock)) 27 | { 28 | File.AppendAllText(path, contents, Encoding.UTF8); 29 | } 30 | } 31 | } 32 | 33 | 34 | // Thanks to Eric Gunnerson for recommending this be a struct rather 35 | // than a class - avoids a heap allocation. 36 | // Thanks to Change Gillespie and Jocelyn Coulmance for pointing out 37 | // the bugs that then crept in when I changed it to use struct... 38 | // Thanks to John Sands for providing the necessary incentive to make 39 | // me invent a way of using a struct in both release and debug builds 40 | // without losing the debug leak tracking. 41 | 42 | public struct TimedLock : IDisposable 43 | { 44 | public static TimedLock Lock(object o) 45 | { 46 | return Lock(o, TimeSpan.FromSeconds(10)); 47 | } 48 | 49 | public static TimedLock Lock(object o, TimeSpan timeout) 50 | { 51 | var tl = new TimedLock(o); 52 | if (!Monitor.TryEnter(o, timeout)) 53 | { 54 | #if DEBUG 55 | GC.SuppressFinalize(tl.leakDetector); 56 | #endif 57 | throw new LockTimeoutException(); 58 | } 59 | 60 | return tl; 61 | } 62 | 63 | private TimedLock(object o) 64 | { 65 | target = o; 66 | #if DEBUG 67 | leakDetector = new Sentinel(); 68 | #endif 69 | } 70 | private object target; 71 | 72 | public void Dispose() 73 | { 74 | Monitor.Exit(target); 75 | 76 | // It's a bad error if someone forgets to call Dispose, 77 | // so in Debug builds, we put a finalizer in to detect 78 | // the error. If Dispose is called, we suppress the 79 | // finalizer. 80 | #if DEBUG 81 | GC.SuppressFinalize(leakDetector); 82 | #endif 83 | } 84 | 85 | #if DEBUG 86 | // (In Debug mode, we make it a class so that we can add a finalizer 87 | // in order to detect when the object is not freed.) 88 | private class Sentinel 89 | { 90 | ~Sentinel() 91 | { 92 | // If this finalizer runs, someone somewhere failed to 93 | // call Dispose, which means we've failed to leave 94 | // a monitor! 95 | Debug.Fail("Undisposed lock"); 96 | } 97 | } 98 | private Sentinel leakDetector; 99 | #endif 100 | 101 | } 102 | public class LockTimeoutException : ApplicationException 103 | { 104 | public LockTimeoutException() 105 | : base("Timeout waiting for lock") 106 | { 107 | } 108 | } 109 | } -------------------------------------------------------------------------------- /Source/IdleMaster/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | False 27 | 28 | 29 | True 30 | 31 | 32 | False 33 | 34 | 35 | False 36 | 37 | 38 | 39 | 41 | 42 | 43 | 44 | 45 | 46 | False 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 0 56 | 57 | 58 | 0 59 | 60 | 61 | 62 | 63 | 64 | True 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /Source/IdleMaster/Badge.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Globalization; 4 | using System.Text.RegularExpressions; 5 | using System.Threading.Tasks; 6 | using HtmlAgilityPack; 7 | using IdleMaster.Properties; 8 | 9 | namespace IdleMaster 10 | { 11 | public class Badge 12 | { 13 | public double AveragePrice { get; set; } 14 | 15 | public int AppId { get; set; } 16 | 17 | public string Name { get; set; } 18 | 19 | public string StringId 20 | { 21 | get { return AppId.ToString(); } 22 | set { AppId = string.IsNullOrWhiteSpace(value) ? 0 : int.Parse(value); } 23 | } 24 | 25 | public int RemainingCard { get; set; } 26 | 27 | public double HoursPlayed { get; set; } 28 | 29 | 30 | private Process idleProcess; 31 | 32 | public bool InIdle { get { return idleProcess != null && !idleProcess.HasExited; } } 33 | 34 | public Process Idle() 35 | { 36 | if (InIdle) 37 | return idleProcess; 38 | 39 | idleProcess = Process.Start(new ProcessStartInfo("steam-idle.exe", AppId.ToString()) { WindowStyle = ProcessWindowStyle.Hidden }); 40 | return idleProcess; 41 | } 42 | 43 | public void StopIdle() 44 | { 45 | if (InIdle) 46 | idleProcess.Kill(); 47 | } 48 | 49 | public async Task CanCardDrops() 50 | { 51 | try 52 | { 53 | var document = new HtmlDocument(); 54 | var response = await CookieClient.GetHttpAsync(Settings.Default.myProfileURL + "/gamecards/" + StringId); 55 | // Response should be empty. User should be unauthorised. 56 | if (string.IsNullOrEmpty(response)) 57 | { 58 | return false; 59 | } 60 | document.LoadHtml(response); 61 | 62 | var hoursNode = document.DocumentNode.SelectSingleNode("//div[@class=\"badge_title_stats_playtime\"]"); 63 | var hours = Regex.Match(hoursNode.InnerText, @"[0-9\.,]+").Value; 64 | 65 | var cardNode = hoursNode.ParentNode.SelectSingleNode(".//span[@class=\"progress_info_bold\"]"); 66 | var cards = cardNode == null ? string.Empty : Regex.Match(cardNode.InnerText, @"[0-9]+").Value; 67 | 68 | UpdateStats(cards, hours); 69 | return RemainingCard != 0; 70 | } 71 | catch (Exception ex) 72 | { 73 | Logger.Exception(ex, "Badge -> CanCardDrops, for id = " + AppId); 74 | } 75 | return false; 76 | } 77 | 78 | public void UpdateStats(string remaining, string hours) 79 | { 80 | RemainingCard = string.IsNullOrWhiteSpace(remaining) ? 0 : int.Parse(remaining); 81 | HoursPlayed = string.IsNullOrWhiteSpace(hours) ? 0 : double.Parse(hours, new NumberFormatInfo()); 82 | } 83 | 84 | public override bool Equals(object obj) 85 | { 86 | var badge = obj as Badge; 87 | return badge != null && Equals(AppId, badge.AppId); 88 | } 89 | 90 | public override int GetHashCode() 91 | { 92 | return AppId.GetHashCode(); 93 | } 94 | 95 | public override string ToString() 96 | { 97 | return string.IsNullOrWhiteSpace(Name) ? StringId : Name; 98 | } 99 | 100 | public Badge(string id, string name, string remaining, string hours) 101 | : this() 102 | { 103 | StringId = id; 104 | Name = name; 105 | UpdateStats(remaining, hours); 106 | } 107 | 108 | public Badge() 109 | { } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/steam-idle.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {E0E49AFD-1101-4815-A1F1-01F65D4D3306} 8 | WinExe 9 | Properties 10 | steam_idle 11 | steam-idle 12 | v4.0 13 | 512 14 | 15 | 16 | x86 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | icon.ico 36 | 37 | 38 | 39 | ..\packages\Steamworks.NET.dll 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Form 55 | 56 | 57 | frmMain.cs 58 | 59 | 60 | 61 | 62 | frmMain.cs 63 | 64 | 65 | ResXFileCodeGenerator 66 | Resources.Designer.cs 67 | Designer 68 | 69 | 70 | True 71 | Resources.resx 72 | 73 | 74 | SettingsSingleFileGenerator 75 | Settings.Designer.cs 76 | 77 | 78 | True 79 | Settings.settings 80 | True 81 | 82 | 83 | 84 | 85 | 86 | 87 | 94 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmSettingsAdvanced.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using System.Windows.Forms; 4 | using IdleMaster.Properties; 5 | 6 | namespace IdleMaster 7 | { 8 | public partial class frmSettingsAdvanced : Form 9 | { 10 | public frmSettingsAdvanced() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | private void btnView_Click(object sender, EventArgs e) 16 | { 17 | txtSessionID.PasswordChar = '\0'; 18 | txtSteamLogin.PasswordChar = '\0'; 19 | txtSteamParental.PasswordChar = '\0'; 20 | 21 | txtSessionID.Enabled = true; 22 | txtSteamLogin.Enabled = true; 23 | txtSteamParental.Enabled = true; 24 | 25 | btnView.Visible = false; 26 | } 27 | 28 | private void frmSettingsAdvanced_Load(object sender, EventArgs e) 29 | { 30 | // Localize Form 31 | btnUpdate.Text = localization.strings.update; 32 | this.Text = localization.strings.auth_data; 33 | ttHelp.SetToolTip(btnView, localization.strings.cookie_warning); 34 | 35 | 36 | if (!string.IsNullOrWhiteSpace(Settings.Default.sessionid)) 37 | { 38 | txtSessionID.Text = Settings.Default.sessionid; 39 | txtSessionID.Enabled = false; 40 | } 41 | else 42 | { 43 | txtSessionID.PasswordChar = '\0'; 44 | } 45 | 46 | if (!string.IsNullOrWhiteSpace(Settings.Default.steamLogin)) 47 | { 48 | txtSteamLogin.Text = Settings.Default.steamLogin; 49 | txtSteamLogin.Enabled = false; 50 | } 51 | else 52 | { 53 | txtSteamLogin.PasswordChar = '\0'; 54 | } 55 | 56 | if (!string.IsNullOrWhiteSpace(Settings.Default.steamparental)) 57 | { 58 | txtSteamParental.Text = Settings.Default.steamparental; 59 | txtSteamParental.Enabled = false; 60 | } 61 | else 62 | { 63 | txtSteamParental.PasswordChar = '\0'; 64 | } 65 | 66 | if (txtSessionID.Enabled && txtSteamLogin.Enabled && txtSteamParental.Enabled) 67 | { 68 | btnView.Visible = false; 69 | } 70 | 71 | btnUpdate.Enabled = false; 72 | } 73 | 74 | private void txtSessionID_TextChanged(object sender, EventArgs e) 75 | { 76 | btnUpdate.Enabled = true; 77 | } 78 | 79 | private void txtSteamLogin_TextChanged(object sender, EventArgs e) 80 | { 81 | btnUpdate.Enabled = true; 82 | } 83 | 84 | private void txtSteamParental_TextChanged(object sender, EventArgs e) 85 | { 86 | btnUpdate.Enabled = true; 87 | } 88 | 89 | private async Task CheckAndSave() 90 | { 91 | try 92 | { 93 | Settings.Default.sessionid = txtSessionID.Text.Trim(); 94 | Settings.Default.steamLogin = txtSteamLogin.Text.Trim(); 95 | Settings.Default.myProfileURL = SteamProfile.GetSteamUrl(); 96 | Settings.Default.steamparental = txtSteamParental.Text.Trim(); 97 | 98 | if (await CookieClient.IsLogined()) 99 | { 100 | Settings.Default.Save(); 101 | Close(); 102 | return; 103 | } 104 | } 105 | catch (Exception ex) 106 | { 107 | Logger.Exception(ex, "frmSettingsAdvanced -> CheckAndSave"); 108 | } 109 | 110 | // Invalid cookie data, reset the form 111 | btnUpdate.Text = localization.strings.update; 112 | txtSessionID.Text = ""; 113 | txtSteamLogin.Text = ""; 114 | txtSteamParental.Text = ""; 115 | txtSessionID.PasswordChar = '\0'; 116 | txtSteamLogin.PasswordChar = '\0'; 117 | txtSteamParental.PasswordChar = '\0'; 118 | txtSessionID.Enabled = true; 119 | txtSteamLogin.Enabled = true; 120 | txtSteamParental.Enabled = true; 121 | txtSessionID.Focus(); 122 | MessageBox.Show(localization.strings.validate_failed); 123 | btnUpdate.Enabled = true; 124 | } 125 | 126 | private async void btnUpdate_Click(object sender, EventArgs e) 127 | { 128 | btnUpdate.Enabled = false; 129 | txtSessionID.Enabled = false; 130 | txtSteamLogin.Enabled = false; 131 | txtSteamParental.Enabled = false; 132 | btnUpdate.Text = localization.strings.validating; 133 | await CheckAndSave(); 134 | } 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmBrowser.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | partial class frmBrowser 7 | { 8 | /// 9 | /// Required designer variable. 10 | /// 11 | private IContainer components = null; 12 | 13 | /// 14 | /// Clean up any resources being used. 15 | /// 16 | /// true if managed resources should be disposed; otherwise, false. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Windows Form Designer generated code 27 | 28 | /// 29 | /// Required method for Designer support - do not modify 30 | /// the contents of this method with the code editor. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | this.components = new System.ComponentModel.Container(); 35 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmBrowser)); 36 | this.wbAuth = new System.Windows.Forms.WebBrowser(); 37 | this.lblSaving = new System.Windows.Forms.Label(); 38 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 39 | this.tmrCheck = new System.Windows.Forms.Timer(this.components); 40 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 41 | this.SuspendLayout(); 42 | // 43 | // wbAuth 44 | // 45 | this.wbAuth.AllowWebBrowserDrop = false; 46 | this.wbAuth.Dock = System.Windows.Forms.DockStyle.Fill; 47 | this.wbAuth.Location = new System.Drawing.Point(0, 0); 48 | this.wbAuth.MinimumSize = new System.Drawing.Size(20, 20); 49 | this.wbAuth.Name = "wbAuth"; 50 | this.wbAuth.ScriptErrorsSuppressed = true; 51 | this.wbAuth.ScrollBarsEnabled = false; 52 | this.wbAuth.Size = new System.Drawing.Size(976, 798); 53 | this.wbAuth.TabIndex = 0; 54 | this.wbAuth.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.wbAuth_DocumentCompleted); 55 | this.wbAuth.Navigating += new System.Windows.Forms.WebBrowserNavigatingEventHandler(this.wbAuth_Navigating); 56 | // 57 | // lblSaving 58 | // 59 | this.lblSaving.AutoSize = true; 60 | this.lblSaving.Location = new System.Drawing.Point(34, 11); 61 | this.lblSaving.Name = "lblSaving"; 62 | this.lblSaving.Size = new System.Drawing.Size(180, 13); 63 | this.lblSaving.TabIndex = 1; 64 | this.lblSaving.Text = "Idle Master is saving your information"; 65 | // 66 | // pictureBox1 67 | // 68 | this.pictureBox1.Image = global::IdleMaster.Properties.Resources.imgSpin; 69 | this.pictureBox1.Location = new System.Drawing.Point(13, 9); 70 | this.pictureBox1.Name = "pictureBox1"; 71 | this.pictureBox1.Size = new System.Drawing.Size(16, 16); 72 | this.pictureBox1.TabIndex = 2; 73 | this.pictureBox1.TabStop = false; 74 | // 75 | // tmrCheck 76 | // 77 | this.tmrCheck.Interval = 1000; 78 | this.tmrCheck.Tick += new System.EventHandler(this.tmrCheck_Tick); 79 | // 80 | // frmBrowser 81 | // 82 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 83 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 84 | this.ClientSize = new System.Drawing.Size(976, 798); 85 | this.Controls.Add(this.wbAuth); 86 | this.Controls.Add(this.pictureBox1); 87 | this.Controls.Add(this.lblSaving); 88 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 89 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 90 | this.MaximizeBox = false; 91 | this.Name = "frmBrowser"; 92 | this.Text = "Please Login to Steam"; 93 | this.Load += new System.EventHandler(this.frmBrowser_Load); 94 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 95 | this.ResumeLayout(false); 96 | this.PerformLayout(); 97 | 98 | } 99 | 100 | #endregion 101 | 102 | private WebBrowser wbAuth; 103 | private Label lblSaving; 104 | private PictureBox pictureBox1; 105 | private Timer tmrCheck; 106 | } 107 | } -------------------------------------------------------------------------------- /Source/IdleMaster/frmAbout.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | partial class frmAbout 7 | { 8 | /// 9 | /// Required designer variable. 10 | /// 11 | private IContainer components = null; 12 | 13 | /// 14 | /// Clean up any resources being used. 15 | /// 16 | /// true if managed resources should be disposed; otherwise, false. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Windows Form Designer generated code 27 | 28 | /// 29 | /// Required method for Designer support - do not modify 30 | /// the contents of this method with the code editor. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | var resources = new System.ComponentModel.ComponentResourceManager(typeof(frmAbout)); 35 | this.btnOK = new System.Windows.Forms.Button(); 36 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 37 | this.lblVersion = new System.Windows.Forms.Label(); 38 | this.label2 = new System.Windows.Forms.Label(); 39 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 40 | this.SuspendLayout(); 41 | // 42 | // btnOK 43 | // 44 | this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 45 | this.btnOK.Location = new System.Drawing.Point(192, 129); 46 | this.btnOK.Name = "btnOK"; 47 | this.btnOK.Size = new System.Drawing.Size(75, 23); 48 | this.btnOK.TabIndex = 0; 49 | this.btnOK.Text = "&OK"; 50 | this.btnOK.UseVisualStyleBackColor = true; 51 | this.btnOK.Click += new System.EventHandler(this.btnOK_Click); 52 | // 53 | // pictureBox1 54 | // 55 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 56 | this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 57 | this.pictureBox1.Location = new System.Drawing.Point(12, 12); 58 | this.pictureBox1.Name = "pictureBox1"; 59 | this.pictureBox1.Size = new System.Drawing.Size(255, 111); 60 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 61 | this.pictureBox1.TabIndex = 1; 62 | this.pictureBox1.TabStop = false; 63 | // 64 | // lblVersion 65 | // 66 | this.lblVersion.AutoSize = true; 67 | this.lblVersion.Location = new System.Drawing.Point(13, 125); 68 | this.lblVersion.Name = "lblVersion"; 69 | this.lblVersion.Size = new System.Drawing.Size(59, 13); 70 | this.lblVersion.TabIndex = 2; 71 | this.lblVersion.Text = "Idle Master"; 72 | // 73 | // label2 74 | // 75 | this.label2.AutoSize = true; 76 | this.label2.Location = new System.Drawing.Point(13, 139); 77 | this.label2.Name = "label2"; 78 | this.label2.Size = new System.Drawing.Size(65, 13); 79 | this.label2.TabIndex = 3; 80 | this.label2.Text = "by jshackles"; 81 | // 82 | // frmAbout 83 | // 84 | this.AcceptButton = this.btnOK; 85 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 86 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 87 | this.ClientSize = new System.Drawing.Size(272, 159); 88 | this.Controls.Add(this.label2); 89 | this.Controls.Add(this.lblVersion); 90 | this.Controls.Add(this.pictureBox1); 91 | this.Controls.Add(this.btnOK); 92 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 93 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 94 | this.MaximizeBox = false; 95 | this.Name = "frmAbout"; 96 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 97 | this.Text = "About Idle Master"; 98 | this.Load += new System.EventHandler(this.frmAbout_Load); 99 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 100 | this.ResumeLayout(false); 101 | this.PerformLayout(); 102 | 103 | } 104 | 105 | #endregion 106 | 107 | private Button btnOK; 108 | private PictureBox pictureBox1; 109 | private Label lblVersion; 110 | private Label label2; 111 | } 112 | } -------------------------------------------------------------------------------- /Source/IdleMaster/CookieClient.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | using HtmlAgilityPack; 6 | using IdleMaster.Properties; 7 | 8 | namespace IdleMaster 9 | { 10 | public class CookieClient : WebClient 11 | { 12 | internal CookieContainer Cookie = new CookieContainer(); 13 | 14 | internal Uri ResponseUri; 15 | 16 | protected override WebRequest GetWebRequest(Uri address) 17 | { 18 | var request = base.GetWebRequest(address); 19 | if (request is HttpWebRequest) 20 | (request as HttpWebRequest).CookieContainer = Cookie; 21 | return request; 22 | } 23 | 24 | protected override WebResponse GetWebResponse(WebRequest request, System.IAsyncResult result) 25 | { 26 | try 27 | { 28 | var baseResponse = base.GetWebResponse(request); 29 | 30 | var cookies = (baseResponse as HttpWebResponse).Cookies; 31 | 32 | // Check, if cookie should be deleted. This means that sessionID is now invalid and user has to log in again. 33 | // Maybe this shoud be done other way (authenticate exception), but because of shared settings and timers in frmMain... 34 | if (cookies.Count > 0) 35 | { 36 | if (cookies["steamLogin"] != null && cookies["steamLogin"].Value == "deleted") 37 | { 38 | Settings.Default.sessionid = string.Empty; 39 | Settings.Default.steamLogin = string.Empty; 40 | Settings.Default.steamparental = string.Empty; 41 | Settings.Default.steamMachineAuth = string.Empty; 42 | Settings.Default.steamRememberLogin = string.Empty; 43 | Settings.Default.Save(); 44 | } 45 | } 46 | 47 | this.ResponseUri = baseResponse.ResponseUri; 48 | return baseResponse; 49 | } 50 | catch (Exception) 51 | { 52 | 53 | } 54 | return null; 55 | } 56 | 57 | public static CookieContainer GenerateCookies() 58 | { 59 | var cookies = new CookieContainer(); 60 | var target = new Uri("http://steamcommunity.com"); 61 | cookies.Add(new Cookie("sessionid", Settings.Default.sessionid) { Domain = target.Host }); 62 | cookies.Add(new Cookie("steamLogin", Settings.Default.steamLogin) { Domain = target.Host }); 63 | cookies.Add(new Cookie("steamparental", Settings.Default.steamparental) { Domain = target.Host }); 64 | cookies.Add(new Cookie("steamRememberLogin", Settings.Default.steamRememberLogin) { Domain = target.Host }); 65 | cookies.Add(new Cookie(GetSteamMachineAuthCookieName(), Settings.Default.steamMachineAuth) { Domain = target.Host }); 66 | return cookies; 67 | } 68 | 69 | public static string GetSteamMachineAuthCookieName() 70 | { 71 | if (Settings.Default.steamLogin != null && Settings.Default.steamLogin.Length > 17) 72 | return string.Format("steamMachineAuth{0}", Settings.Default.steamLogin.Substring(0, 17)); 73 | return "steamMachineAuth"; 74 | } 75 | 76 | public static async Task GetHttpAsync(string url, int count = 3) 77 | { 78 | while (true) 79 | { 80 | var client = new CookieClient(); 81 | var content = string.Empty; 82 | try 83 | { 84 | // If user is NOT authenticated (cookie got deleted in GetWebResponse()), return empty result 85 | if (String.IsNullOrEmpty(Settings.Default.sessionid)) 86 | { 87 | return string.Empty; 88 | } 89 | 90 | content = await client.DownloadStringTaskAsync(url); 91 | } 92 | catch (Exception ex) 93 | { 94 | Logger.Exception(ex, "CookieClient -> GetHttpAsync, for url = " + url); 95 | } 96 | 97 | if (!string.IsNullOrWhiteSpace(content) || count == 0) 98 | return content; 99 | 100 | count = count - 1; 101 | } 102 | } 103 | 104 | public static async Task IsLogined() 105 | { 106 | var response = await GetHttpAsync(Settings.Default.myProfileURL); 107 | var document = new HtmlDocument(); 108 | document.LoadHtml(response); 109 | return document.DocumentNode.SelectSingleNode("//a[@class=\"global_action_link\"]") == null; 110 | } 111 | 112 | public CookieClient() 113 | { 114 | Cookie = GenerateCookies(); 115 | Encoding = Encoding.UTF8; 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /steam-idle Source/steam-idle/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using IdleMaster.Properties; 4 | using System.Threading; 5 | using System.Text.RegularExpressions; 6 | 7 | namespace IdleMaster 8 | { 9 | public partial class frmSettings : Form 10 | { 11 | public frmSettings() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | private void btnCancel_Click(object sender, EventArgs e) 17 | { 18 | Close(); 19 | } 20 | 21 | private void btnOK_Click(object sender, EventArgs e) 22 | { 23 | if (radIdleDefault.Checked) 24 | { 25 | Settings.Default.sort = "default"; 26 | } 27 | if (radIdleLeastDrops.Checked) 28 | { 29 | Settings.Default.sort = "leastcards"; 30 | } 31 | if (radIdleMostDrops.Checked) 32 | { 33 | Settings.Default.sort = "mostcards"; 34 | } 35 | if (radIdleMostValue.Checked) 36 | { 37 | Settings.Default.sort = "mostvalue"; 38 | } 39 | 40 | if (cboLanguage.Text != "") 41 | { 42 | if (cboLanguage.Text != Settings.Default.language) 43 | { 44 | MessageBox.Show(localization.strings.please_restart); 45 | } 46 | Settings.Default.language = cboLanguage.Text; 47 | } 48 | 49 | if (radOneThenMany.Checked) 50 | { 51 | Settings.Default.OnlyOneGameIdle = false; 52 | Settings.Default.OneThenMany = true; 53 | } 54 | else 55 | { 56 | Settings.Default.OnlyOneGameIdle = radOneGameOnly.Checked && !radManyThenOne.Checked; 57 | Settings.Default.OneThenMany = false; 58 | } 59 | Settings.Default.minToTray = chkMinToTray.Checked; 60 | Settings.Default.ignoreclient = chkIgnoreClientStatus.Checked; 61 | Settings.Default.showUsername = chkShowUsername.Checked; 62 | Settings.Default.Save(); 63 | Close(); 64 | } 65 | 66 | private void frmSettings_Load(object sender, EventArgs e) 67 | { 68 | if (Settings.Default.language != "") 69 | { 70 | cboLanguage.SelectedItem = Settings.Default.language; 71 | } 72 | else 73 | { 74 | switch (Thread.CurrentThread.CurrentUICulture.EnglishName) 75 | { 76 | case "Chinese (Simplified, China)": 77 | case "Chinese (Traditional, China)": 78 | case "Portuguese (Brazil)": 79 | cboLanguage.SelectedItem = Thread.CurrentThread.CurrentUICulture.EnglishName; 80 | break; 81 | default: 82 | cboLanguage.SelectedItem = Regex.Replace(Thread.CurrentThread.CurrentUICulture.EnglishName, @"\(.+\)", "").Trim(); 83 | break; 84 | } 85 | } 86 | 87 | switch (Settings.Default.sort) 88 | { 89 | case "leastcards": 90 | radIdleLeastDrops.Checked = true; 91 | break; 92 | case "mostcards": 93 | radIdleMostDrops.Checked = true; 94 | break; 95 | case "mostvalue": 96 | radIdleMostValue.Checked = true; 97 | break; 98 | default: 99 | break; 100 | } 101 | 102 | // Load translation 103 | this.Text = localization.strings.idle_master_settings; 104 | grpGeneral.Text = localization.strings.general; 105 | grpIdlingQuantity.Text = localization.strings.idling_behavior; 106 | grpPriority.Text = localization.strings.idling_order; 107 | btnOK.Text = localization.strings.accept; 108 | btnCancel.Text = localization.strings.cancel; 109 | ttHints.SetToolTip(btnAdvanced, localization.strings.advanced_auth); 110 | chkMinToTray.Text = localization.strings.minimize_to_tray; 111 | ttHints.SetToolTip(chkMinToTray, localization.strings.minimize_to_tray); 112 | chkIgnoreClientStatus.Text = localization.strings.ignore_client_status; 113 | ttHints.SetToolTip(chkIgnoreClientStatus, localization.strings.ignore_client_status); 114 | chkShowUsername.Text = localization.strings.show_username; 115 | ttHints.SetToolTip(chkShowUsername, localization.strings.show_username); 116 | radOneGameOnly.Text = localization.strings.idle_individual; 117 | ttHints.SetToolTip(radOneGameOnly, localization.strings.idle_individual); 118 | radManyThenOne.Text = localization.strings.idle_simultaneous; 119 | ttHints.SetToolTip(radManyThenOne, localization.strings.idle_simultaneous); 120 | radOneThenMany.Text = localization.strings.idle_onethenmany; 121 | ttHints.SetToolTip(radOneThenMany, localization.strings.idle_onethenmany); 122 | radIdleDefault.Text = localization.strings.order_default; 123 | ttHints.SetToolTip(radIdleDefault, localization.strings.order_default); 124 | radIdleMostValue.Text = localization.strings.order_value; 125 | ttHints.SetToolTip(radIdleMostValue, localization.strings.order_value); 126 | radIdleMostDrops.Text = localization.strings.order_most; 127 | ttHints.SetToolTip(radIdleMostDrops, localization.strings.order_most); 128 | radIdleLeastDrops.Text = localization.strings.order_least; 129 | ttHints.SetToolTip(radIdleLeastDrops, localization.strings.order_least); 130 | lblLanguage.Text = localization.strings.interface_language; 131 | 132 | if (Settings.Default.OneThenMany) 133 | { 134 | radOneThenMany.Checked = true; 135 | } 136 | else 137 | { 138 | radOneGameOnly.Checked = Settings.Default.OnlyOneGameIdle; 139 | radManyThenOne.Checked = !Settings.Default.OnlyOneGameIdle; 140 | } 141 | 142 | if (Settings.Default.minToTray) 143 | { 144 | chkMinToTray.Checked = true; 145 | } 146 | 147 | if (Settings.Default.ignoreclient) 148 | { 149 | chkIgnoreClientStatus.Checked = true; 150 | } 151 | 152 | if (Settings.Default.showUsername) 153 | { 154 | chkShowUsername.Checked = true; 155 | } 156 | } 157 | 158 | private void btnAdvanced_Click(object sender, EventArgs e) 159 | { 160 | var frm = new frmSettingsAdvanced(); 161 | frm.ShowDialog(); 162 | } 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /Source/IdleMaster/frmBlacklist.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | partial class frmBlacklist 7 | { 8 | /// 9 | /// Required designer variable. 10 | /// 11 | private IContainer components = null; 12 | 13 | /// 14 | /// Clean up any resources being used. 15 | /// 16 | /// true if managed resources should be disposed; otherwise, false. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Windows Form Designer generated code 27 | 28 | /// 29 | /// Required method for Designer support - do not modify 30 | /// the contents of this method with the code editor. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmBlacklist)); 35 | this.lstBlacklist = new System.Windows.Forms.ListBox(); 36 | this.grpAdd = new System.Windows.Forms.GroupBox(); 37 | this.btnAdd = new System.Windows.Forms.Button(); 38 | this.txtAppid = new System.Windows.Forms.TextBox(); 39 | this.label1 = new System.Windows.Forms.Label(); 40 | this.btnSave = new System.Windows.Forms.Button(); 41 | this.btnRemove = new System.Windows.Forms.Button(); 42 | this.grpAdd.SuspendLayout(); 43 | this.SuspendLayout(); 44 | // 45 | // lstBlacklist 46 | // 47 | this.lstBlacklist.FormattingEnabled = true; 48 | this.lstBlacklist.Location = new System.Drawing.Point(13, 13); 49 | this.lstBlacklist.Name = "lstBlacklist"; 50 | this.lstBlacklist.Size = new System.Drawing.Size(270, 316); 51 | this.lstBlacklist.Sorted = true; 52 | this.lstBlacklist.TabIndex = 0; 53 | // 54 | // grpAdd 55 | // 56 | this.grpAdd.Controls.Add(this.btnAdd); 57 | this.grpAdd.Controls.Add(this.txtAppid); 58 | this.grpAdd.Controls.Add(this.label1); 59 | this.grpAdd.Location = new System.Drawing.Point(13, 336); 60 | this.grpAdd.Name = "grpAdd"; 61 | this.grpAdd.Size = new System.Drawing.Size(181, 76); 62 | this.grpAdd.TabIndex = 1; 63 | this.grpAdd.TabStop = false; 64 | this.grpAdd.Text = "Add Game to Blacklist"; 65 | // 66 | // btnAdd 67 | // 68 | this.btnAdd.Location = new System.Drawing.Point(100, 43); 69 | this.btnAdd.Name = "btnAdd"; 70 | this.btnAdd.Size = new System.Drawing.Size(75, 23); 71 | this.btnAdd.TabIndex = 3; 72 | this.btnAdd.Text = "&Add"; 73 | this.btnAdd.UseVisualStyleBackColor = true; 74 | this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); 75 | // 76 | // txtAppid 77 | // 78 | this.txtAppid.Location = new System.Drawing.Point(56, 17); 79 | this.txtAppid.Name = "txtAppid"; 80 | this.txtAppid.Size = new System.Drawing.Size(119, 20); 81 | this.txtAppid.TabIndex = 0; 82 | // 83 | // label1 84 | // 85 | this.label1.AutoSize = true; 86 | this.label1.Location = new System.Drawing.Point(7, 20); 87 | this.label1.Name = "label1"; 88 | this.label1.Size = new System.Drawing.Size(43, 13); 89 | this.label1.TabIndex = 0; 90 | this.label1.Text = "App ID:"; 91 | // 92 | // btnSave 93 | // 94 | this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 95 | this.btnSave.Location = new System.Drawing.Point(237, 383); 96 | this.btnSave.Name = "btnSave"; 97 | this.btnSave.Size = new System.Drawing.Size(75, 23); 98 | this.btnSave.TabIndex = 3; 99 | this.btnSave.Text = "&Save"; 100 | this.btnSave.UseVisualStyleBackColor = true; 101 | this.btnSave.Click += new System.EventHandler(this.btnSave_Click); 102 | // 103 | // btnRemove 104 | // 105 | this.btnRemove.Image = global::IdleMaster.Properties.Resources.imgTrash; 106 | this.btnRemove.Location = new System.Drawing.Point(289, 13); 107 | this.btnRemove.Name = "btnRemove"; 108 | this.btnRemove.Size = new System.Drawing.Size(28, 28); 109 | this.btnRemove.TabIndex = 2; 110 | this.btnRemove.UseVisualStyleBackColor = true; 111 | this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); 112 | // 113 | // frmBlacklist 114 | // 115 | this.AcceptButton = this.btnAdd; 116 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 117 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 118 | this.ClientSize = new System.Drawing.Size(324, 418); 119 | this.Controls.Add(this.btnSave); 120 | this.Controls.Add(this.btnRemove); 121 | this.Controls.Add(this.grpAdd); 122 | this.Controls.Add(this.lstBlacklist); 123 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 124 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 125 | this.MaximizeBox = false; 126 | this.MinimizeBox = false; 127 | this.Name = "frmBlacklist"; 128 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 129 | this.Text = "Manage Idle Master Blacklist"; 130 | this.Load += new System.EventHandler(this.frmBlacklist_Load); 131 | this.grpAdd.ResumeLayout(false); 132 | this.grpAdd.PerformLayout(); 133 | this.ResumeLayout(false); 134 | 135 | } 136 | 137 | #endregion 138 | 139 | private ListBox lstBlacklist; 140 | private GroupBox grpAdd; 141 | private Button btnRemove; 142 | private Button btnSave; 143 | private Button btnAdd; 144 | private TextBox txtAppid; 145 | private Label label1; 146 | } 147 | } -------------------------------------------------------------------------------- /Source/IdleMaster/frmStatistics.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace IdleMaster 2 | { 3 | partial class frmStatistics 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmStatistics)); 32 | this.btnOK = new System.Windows.Forms.Button(); 33 | this.lblSessionTime = new System.Windows.Forms.Label(); 34 | this.lblSessionCards = new System.Windows.Forms.Label(); 35 | this.lblTotalCards = new System.Windows.Forms.Label(); 36 | this.lblTotalTime = new System.Windows.Forms.Label(); 37 | this.lblSessionHeader = new System.Windows.Forms.Label(); 38 | this.lblTotalHeader = new System.Windows.Forms.Label(); 39 | this.SuspendLayout(); 40 | // 41 | // btnOK 42 | // 43 | this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 44 | this.btnOK.Location = new System.Drawing.Point(175, 129); 45 | this.btnOK.Name = "btnOK"; 46 | this.btnOK.Size = new System.Drawing.Size(75, 23); 47 | this.btnOK.TabIndex = 0; 48 | this.btnOK.Text = "&OK"; 49 | this.btnOK.UseVisualStyleBackColor = true; 50 | this.btnOK.Click += new System.EventHandler(this.btnOK_Click); 51 | // 52 | // lblSessionTime 53 | // 54 | this.lblSessionTime.AutoSize = true; 55 | this.lblSessionTime.Location = new System.Drawing.Point(12, 29); 56 | this.lblSessionTime.Name = "lblSessionTime"; 57 | this.lblSessionTime.Size = new System.Drawing.Size(65, 13); 58 | this.lblSessionTime.TabIndex = 1; 59 | this.lblSessionTime.Text = "sessionTime"; 60 | // 61 | // lblSessionCards 62 | // 63 | this.lblSessionCards.AutoSize = true; 64 | this.lblSessionCards.Location = new System.Drawing.Point(12, 44); 65 | this.lblSessionCards.Name = "lblSessionCards"; 66 | this.lblSessionCards.Size = new System.Drawing.Size(69, 13); 67 | this.lblSessionCards.TabIndex = 2; 68 | this.lblSessionCards.Text = "sessionCards"; 69 | // 70 | // lblTotalCards 71 | // 72 | this.lblTotalCards.AutoSize = true; 73 | this.lblTotalCards.Location = new System.Drawing.Point(12, 104); 74 | this.lblTotalCards.Name = "lblTotalCards"; 75 | this.lblTotalCards.Size = new System.Drawing.Size(54, 13); 76 | this.lblTotalCards.TabIndex = 3; 77 | this.lblTotalCards.Text = "totalCards"; 78 | // 79 | // lblTotalTime 80 | // 81 | this.lblTotalTime.AutoSize = true; 82 | this.lblTotalTime.Location = new System.Drawing.Point(12, 89); 83 | this.lblTotalTime.Name = "lblTotalTime"; 84 | this.lblTotalTime.Size = new System.Drawing.Size(50, 13); 85 | this.lblTotalTime.TabIndex = 4; 86 | this.lblTotalTime.Text = "totalTime"; 87 | // 88 | // lblSessionHeader 89 | // 90 | this.lblSessionHeader.AutoSize = true; 91 | this.lblSessionHeader.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 92 | this.lblSessionHeader.Location = new System.Drawing.Point(10, 9); 93 | this.lblSessionHeader.Name = "lblSessionHeader"; 94 | this.lblSessionHeader.Size = new System.Drawing.Size(81, 13); 95 | this.lblSessionHeader.TabIndex = 5; 96 | this.lblSessionHeader.Text = "This session:"; 97 | // 98 | // lblTotalHeader 99 | // 100 | this.lblTotalHeader.AutoSize = true; 101 | this.lblTotalHeader.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 102 | this.lblTotalHeader.Location = new System.Drawing.Point(10, 69); 103 | this.lblTotalHeader.Name = "lblTotalHeader"; 104 | this.lblTotalHeader.Size = new System.Drawing.Size(40, 13); 105 | this.lblTotalHeader.TabIndex = 6; 106 | this.lblTotalHeader.Text = "Total:"; 107 | // 108 | // frmStatistics 109 | // 110 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 111 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 112 | this.ClientSize = new System.Drawing.Size(253, 157); 113 | this.Controls.Add(this.lblTotalHeader); 114 | this.Controls.Add(this.lblSessionHeader); 115 | this.Controls.Add(this.lblTotalTime); 116 | this.Controls.Add(this.lblTotalCards); 117 | this.Controls.Add(this.lblSessionCards); 118 | this.Controls.Add(this.lblSessionTime); 119 | this.Controls.Add(this.btnOK); 120 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 121 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 122 | this.MaximizeBox = false; 123 | this.Name = "frmStatistics"; 124 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 125 | this.Text = "Statistics"; 126 | this.Load += new System.EventHandler(this.frmStatistics_Load); 127 | this.ResumeLayout(false); 128 | this.PerformLayout(); 129 | 130 | } 131 | 132 | #endregion 133 | 134 | private System.Windows.Forms.Button btnOK; 135 | private System.Windows.Forms.Label lblSessionTime; 136 | private System.Windows.Forms.Label lblSessionCards; 137 | private System.Windows.Forms.Label lblTotalCards; 138 | private System.Windows.Forms.Label lblTotalTime; 139 | private System.Windows.Forms.Label lblSessionHeader; 140 | private System.Windows.Forms.Label lblTotalHeader; 141 | } 142 | } -------------------------------------------------------------------------------- /Source/IdleMaster/frmSettingsAdvanced.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Windows.Forms; 3 | 4 | namespace IdleMaster 5 | { 6 | partial class frmSettingsAdvanced 7 | { 8 | /// 9 | /// Required designer variable. 10 | /// 11 | private IContainer components = null; 12 | 13 | /// 14 | /// Clean up any resources being used. 15 | /// 16 | /// true if managed resources should be disposed; otherwise, false. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Windows Form Designer generated code 27 | 28 | /// 29 | /// Required method for Designer support - do not modify 30 | /// the contents of this method with the code editor. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | this.components = new System.ComponentModel.Container(); 35 | var resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSettingsAdvanced)); 36 | this.label1 = new System.Windows.Forms.Label(); 37 | this.label2 = new System.Windows.Forms.Label(); 38 | this.label3 = new System.Windows.Forms.Label(); 39 | this.txtSessionID = new System.Windows.Forms.TextBox(); 40 | this.txtSteamLogin = new System.Windows.Forms.TextBox(); 41 | this.txtSteamParental = new System.Windows.Forms.TextBox(); 42 | this.btnUpdate = new System.Windows.Forms.Button(); 43 | this.btnView = new System.Windows.Forms.Button(); 44 | this.ttHelp = new System.Windows.Forms.ToolTip(this.components); 45 | this.SuspendLayout(); 46 | // 47 | // label1 48 | // 49 | this.label1.Location = new System.Drawing.Point(13, 13); 50 | this.label1.Name = "label1"; 51 | this.label1.Size = new System.Drawing.Size(85, 23); 52 | this.label1.TabIndex = 0; 53 | this.label1.Text = "sessionid:"; 54 | this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; 55 | // 56 | // label2 57 | // 58 | this.label2.Location = new System.Drawing.Point(13, 36); 59 | this.label2.Name = "label2"; 60 | this.label2.Size = new System.Drawing.Size(85, 23); 61 | this.label2.TabIndex = 1; 62 | this.label2.Text = "steamLogin:"; 63 | this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; 64 | // 65 | // label3 66 | // 67 | this.label3.Location = new System.Drawing.Point(12, 60); 68 | this.label3.Name = "label3"; 69 | this.label3.Size = new System.Drawing.Size(86, 23); 70 | this.label3.TabIndex = 2; 71 | this.label3.Text = "steamparental:"; 72 | this.label3.TextAlign = System.Drawing.ContentAlignment.TopRight; 73 | // 74 | // txtSessionID 75 | // 76 | this.txtSessionID.Location = new System.Drawing.Point(104, 10); 77 | this.txtSessionID.Name = "txtSessionID"; 78 | this.txtSessionID.PasswordChar = '*'; 79 | this.txtSessionID.Size = new System.Drawing.Size(299, 20); 80 | this.txtSessionID.TabIndex = 3; 81 | this.txtSessionID.TextChanged += new System.EventHandler(this.txtSessionID_TextChanged); 82 | // 83 | // txtSteamLogin 84 | // 85 | this.txtSteamLogin.Location = new System.Drawing.Point(104, 33); 86 | this.txtSteamLogin.Name = "txtSteamLogin"; 87 | this.txtSteamLogin.PasswordChar = '*'; 88 | this.txtSteamLogin.Size = new System.Drawing.Size(299, 20); 89 | this.txtSteamLogin.TabIndex = 4; 90 | this.txtSteamLogin.TextChanged += new System.EventHandler(this.txtSteamLogin_TextChanged); 91 | // 92 | // txtSteamParental 93 | // 94 | this.txtSteamParental.Location = new System.Drawing.Point(104, 57); 95 | this.txtSteamParental.Name = "txtSteamParental"; 96 | this.txtSteamParental.PasswordChar = '*'; 97 | this.txtSteamParental.Size = new System.Drawing.Size(299, 20); 98 | this.txtSteamParental.TabIndex = 5; 99 | this.txtSteamParental.TextChanged += new System.EventHandler(this.txtSteamParental_TextChanged); 100 | // 101 | // btnUpdate 102 | // 103 | this.btnUpdate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 104 | this.btnUpdate.Location = new System.Drawing.Point(327, 83); 105 | this.btnUpdate.Name = "btnUpdate"; 106 | this.btnUpdate.Size = new System.Drawing.Size(75, 23); 107 | this.btnUpdate.TabIndex = 7; 108 | this.btnUpdate.Text = "&Update"; 109 | this.btnUpdate.UseVisualStyleBackColor = true; 110 | this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click); 111 | // 112 | // btnView 113 | // 114 | this.btnView.Image = global::IdleMaster.Properties.Resources.imgView; 115 | this.btnView.Location = new System.Drawing.Point(104, 83); 116 | this.btnView.Name = "btnView"; 117 | this.btnView.Size = new System.Drawing.Size(27, 23); 118 | this.btnView.TabIndex = 6; 119 | this.ttHelp.SetToolTip(this.btnView, "Display information above\r\n\r\n[WARNING] \r\nDo not share this information with anyon" + 120 | "e, \r\nas it could potentially be used by an attacker to log into \r\nyour Steam acc" + 121 | "ount."); 122 | this.btnView.UseVisualStyleBackColor = true; 123 | this.btnView.Click += new System.EventHandler(this.btnView_Click); 124 | // 125 | // ttHelp 126 | // 127 | this.ttHelp.AutoPopDelay = 9000; 128 | this.ttHelp.InitialDelay = 500; 129 | this.ttHelp.ReshowDelay = 100; 130 | // 131 | // frmSettingsAdvanced 132 | // 133 | this.AcceptButton = this.btnUpdate; 134 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 135 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 136 | this.ClientSize = new System.Drawing.Size(415, 116); 137 | this.Controls.Add(this.btnUpdate); 138 | this.Controls.Add(this.btnView); 139 | this.Controls.Add(this.txtSteamParental); 140 | this.Controls.Add(this.txtSteamLogin); 141 | this.Controls.Add(this.txtSessionID); 142 | this.Controls.Add(this.label3); 143 | this.Controls.Add(this.label2); 144 | this.Controls.Add(this.label1); 145 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 146 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 147 | this.MaximizeBox = false; 148 | this.Name = "frmSettingsAdvanced"; 149 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 150 | this.Text = "Idle Master Authentication Data"; 151 | this.Load += new System.EventHandler(this.frmSettingsAdvanced_Load); 152 | this.ResumeLayout(false); 153 | this.PerformLayout(); 154 | 155 | } 156 | 157 | #endregion 158 | 159 | private Label label1; 160 | private Label label2; 161 | private Label label3; 162 | private TextBox txtSessionID; 163 | private TextBox txtSteamLogin; 164 | private TextBox txtSteamParental; 165 | private Button btnView; 166 | private Button btnUpdate; 167 | private ToolTip ttHelp; 168 | } 169 | } -------------------------------------------------------------------------------- /Source/IdleMaster/frmBrowser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Runtime.InteropServices; 4 | using System.Text; 5 | using System.Windows.Forms; 6 | using IdleMaster.Properties; 7 | 8 | namespace IdleMaster 9 | { 10 | public partial class frmBrowser : Form 11 | { 12 | 13 | public int SecondsWaiting = 30; 14 | 15 | [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 16 | private static extern bool InternetSetOption(int hInternet, int dwOption, string lpBuffer, int dwBufferLength); 17 | 18 | [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 19 | private static extern bool InternetSetCookie(string lpszUrlName, string lpszCookieName, string lpszCookieData); 20 | 21 | public frmBrowser() 22 | { 23 | // This initializes the components on the form 24 | InitializeComponent(); 25 | } 26 | 27 | private void frmBrowser_Load(object sender, EventArgs e) 28 | { 29 | // Remove any existing session state data 30 | InternetSetOption(0, 42, null, 0); 31 | 32 | // Localize form 33 | this.Text = localization.strings.please_login; 34 | lblSaving.Text = localization.strings.saving_info; 35 | 36 | // Delete Steam cookie data from the browser control 37 | InternetSetCookie("http://steamcommunity.com", "sessionid", ";expires=Mon, 01 Jan 0001 00:00:00 GMT"); 38 | InternetSetCookie("http://steamcommunity.com", "steamLogin", ";expires=Mon, 01 Jan 0001 00:00:00 GMT"); 39 | InternetSetCookie("http://steamcommunity.com", "steamRememberLogin", ";expires=Mon, 01 Jan 0001 00:00:00 GMT"); 40 | 41 | // When the form is loaded, navigate to the Steam login page using the web browser control 42 | wbAuth.Navigate("https://steamcommunity.com/login/home/?goto=my/profile", "_self", null, "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"); 43 | } 44 | 45 | // This code block executes each time a new document is loaded into the web browser control 46 | private void wbAuth_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 47 | { 48 | // Find the page header, and remove it. This gives the login form a more streamlined look. 49 | dynamic htmldoc = wbAuth.Document.DomDocument; 50 | dynamic globalHeader = htmldoc.GetElementById("global_header"); 51 | if (globalHeader != null) 52 | { 53 | try 54 | { 55 | globalHeader.parentNode.removeChild(globalHeader); 56 | } 57 | catch (Exception) 58 | { 59 | 60 | } 61 | 62 | } 63 | 64 | // Get the URL of the page that just finished loading 65 | var url = wbAuth.Url.AbsoluteUri; 66 | 67 | // If the page it just finished loading is the login page 68 | if (url == "https://steamcommunity.com/login/home/?goto=my/profile" || 69 | url == "https://store.steampowered.com/login/transfer" || 70 | url == "https://store.steampowered.com//login/transfer") 71 | { 72 | // Get a list of cookies from the current page 73 | CookieContainer container = GetUriCookieContainer(wbAuth.Url); 74 | var cookies = container.GetCookies(wbAuth.Url); 75 | foreach (Cookie cookie in cookies) 76 | { 77 | if (cookie.Name.StartsWith("steamMachineAuth")) 78 | Settings.Default.steamMachineAuth = cookie.Value; 79 | } 80 | } 81 | // If the page it just finished loading isn't the login page 82 | else if (url.StartsWith("javascript:") == false && url.StartsWith("about:") == false) 83 | { 84 | 85 | try 86 | { 87 | dynamic parentalNotice = htmldoc.GetElementById("parental_notice"); 88 | if (parentalNotice != null) 89 | { 90 | if (parentalNotice.OuterHtml != "") 91 | { 92 | // Steam family options enabled 93 | wbAuth.Show(); 94 | Width = 1000; 95 | Height = 350; 96 | return; 97 | } 98 | } 99 | } 100 | catch (Exception) 101 | { 102 | 103 | } 104 | 105 | // Get a list of cookies from the current page 106 | var container = GetUriCookieContainer(wbAuth.Url); 107 | var cookies = container.GetCookies(wbAuth.Url); 108 | 109 | // Go through the cookie data so that we can extract the cookies we are looking for 110 | foreach (Cookie cookie in cookies) 111 | { 112 | // Save the "sessionid" cookie 113 | if (cookie.Name == "sessionid") 114 | { 115 | Settings.Default.sessionid = cookie.Value; 116 | } 117 | 118 | // Save the "steamLogin" cookie and construct and save the user's profile link 119 | else if (cookie.Name == "steamLogin") 120 | { 121 | Settings.Default.steamLogin = cookie.Value; 122 | Settings.Default.myProfileURL = SteamProfile.GetSteamUrl(); 123 | } 124 | 125 | // Save the "steamparental" cookie" 126 | else if (cookie.Name == "steamparental") 127 | { 128 | Settings.Default.steamparental = cookie.Value; 129 | } 130 | 131 | else if (cookie.Name == "steamRememberLogin") 132 | { 133 | Settings.Default.steamRememberLogin = cookie.Value; 134 | } 135 | } 136 | 137 | // Save all of the data to the program settings file, and close this form 138 | Settings.Default.Save(); 139 | Close(); 140 | } 141 | } 142 | 143 | // Imports the InternetGetCookieEx function from wininet.dll which allows the application to access the cookie data from the web browser control 144 | // Reference: http://stackoverflow.com/questions/3382498/is-it-possible-to-transfer-authentication-from-webbrowser-to-webrequest 145 | [DllImport("wininet.dll", SetLastError = true)] 146 | public static extern bool InternetGetCookieEx( 147 | string url, 148 | string cookieName, 149 | StringBuilder cookieData, 150 | ref int size, 151 | int dwFlags, 152 | IntPtr lpReserved); 153 | 154 | // Assigns the hex value for the DLL flag that allows Idle Master to be able to access cookie data marked as "HTTP Only" 155 | private const int InternetCookieHttponly = 0x2000; 156 | 157 | // This function returns cookie data based on a uniform resource identifier 158 | public static CookieContainer GetUriCookieContainer(Uri uri) 159 | { 160 | // First, create a null cookie container 161 | CookieContainer cookies = null; 162 | 163 | // Determine the size of the cookie 164 | var datasize = 8192 * 16; 165 | var cookieData = new StringBuilder(datasize); 166 | 167 | // Call InternetGetCookieEx from wininet.dll 168 | if (!InternetGetCookieEx(uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero)) 169 | { 170 | if (datasize < 0) 171 | return null; 172 | // Allocate stringbuilder large enough to hold the cookie 173 | cookieData = new StringBuilder(datasize); 174 | if (!InternetGetCookieEx( 175 | uri.ToString(), 176 | null, cookieData, 177 | ref datasize, 178 | InternetCookieHttponly, 179 | IntPtr.Zero)) 180 | return null; 181 | } 182 | 183 | // If the cookie contains data, add it to the cookie container 184 | if (cookieData.Length > 0) 185 | { 186 | cookies = new CookieContainer(); 187 | cookies.SetCookies(uri, cookieData.ToString().Replace(';', ',')); 188 | } 189 | 190 | // Return the cookie container 191 | return cookies; 192 | } 193 | 194 | // This code executes each time the web browser control is in the process of navigating 195 | private void wbAuth_Navigating(object sender, WebBrowserNavigatingEventArgs e) 196 | { 197 | // Get the url that's being navigated to 198 | var url = e.Url.AbsoluteUri; 199 | 200 | // Check to see if the page it's navigating to isn't the Steam login page or related calls 201 | if (url != "https://steamcommunity.com/login/home/?goto=my/profile" && url != "https://store.steampowered.com/login/transfer" && url != "https://store.steampowered.com//login/transfer" && url.StartsWith("javascript:") == false && url.StartsWith("about:") == false) 202 | { 203 | // start the sanity check timer 204 | tmrCheck.Enabled = true; 205 | 206 | // If it's navigating to a page other than the Steam login page, hide the browser control and resize the form 207 | wbAuth.Visible = false; 208 | 209 | // Scale the form based on the user's DPI settings 210 | var graphics = CreateGraphics(); 211 | var scaleY = graphics.DpiY * 0.84375; 212 | var scaleX = graphics.DpiX * 2.84; 213 | Height = Convert.ToInt32(scaleY); 214 | Width = Convert.ToInt32(scaleX); 215 | } 216 | } 217 | 218 | private void tmrCheck_Tick(object sender, EventArgs e) 219 | { 220 | // Prevents the application from "saving" for more than 30 seconds and will attempt to save the cookie data after that time 221 | if (SecondsWaiting > 0) 222 | { 223 | SecondsWaiting = SecondsWaiting - 1; 224 | } 225 | else 226 | { 227 | tmrCheck.Enabled = false; 228 | Close(); 229 | } 230 | } 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /Source/IdleMaster/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace IdleMaster.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string sessionid { 30 | get { 31 | return ((string)(this["sessionid"])); 32 | } 33 | set { 34 | this["sessionid"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("")] 41 | public string steamLogin { 42 | get { 43 | return ((string)(this["steamLogin"])); 44 | } 45 | set { 46 | this["steamLogin"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("")] 53 | public string myProfileURL { 54 | get { 55 | return ((string)(this["myProfileURL"])); 56 | } 57 | set { 58 | this["myProfileURL"] = value; 59 | } 60 | } 61 | 62 | [global::System.Configuration.UserScopedSettingAttribute()] 63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 64 | [global::System.Configuration.DefaultSettingValueAttribute("")] 65 | public string steamparental { 66 | get { 67 | return ((string)(this["steamparental"])); 68 | } 69 | set { 70 | this["steamparental"] = value; 71 | } 72 | } 73 | 74 | [global::System.Configuration.UserScopedSettingAttribute()] 75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 76 | [global::System.Configuration.DefaultSettingValueAttribute("")] 77 | public string sort { 78 | get { 79 | return ((string)(this["sort"])); 80 | } 81 | set { 82 | this["sort"] = value; 83 | } 84 | } 85 | 86 | [global::System.Configuration.UserScopedSettingAttribute()] 87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 88 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 89 | public bool minToTray { 90 | get { 91 | return ((bool)(this["minToTray"])); 92 | } 93 | set { 94 | this["minToTray"] = value; 95 | } 96 | } 97 | 98 | [global::System.Configuration.UserScopedSettingAttribute()] 99 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 100 | [global::System.Configuration.DefaultSettingValueAttribute("True")] 101 | public bool updateNeeded { 102 | get { 103 | return ((bool)(this["updateNeeded"])); 104 | } 105 | set { 106 | this["updateNeeded"] = value; 107 | } 108 | } 109 | 110 | [global::System.Configuration.UserScopedSettingAttribute()] 111 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 112 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 113 | public bool ignoreclient { 114 | get { 115 | return ((bool)(this["ignoreclient"])); 116 | } 117 | set { 118 | this["ignoreclient"] = value; 119 | } 120 | } 121 | 122 | [global::System.Configuration.UserScopedSettingAttribute()] 123 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 124 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 125 | public bool showUsername { 126 | get { 127 | return ((bool)(this["showUsername"])); 128 | } 129 | set { 130 | this["showUsername"] = value; 131 | } 132 | } 133 | 134 | [global::System.Configuration.UserScopedSettingAttribute()] 135 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 136 | [global::System.Configuration.DefaultSettingValueAttribute("\r\n\r\n \r\n")] 139 | public global::System.Collections.Specialized.StringCollection blacklist { 140 | get { 141 | return ((global::System.Collections.Specialized.StringCollection)(this["blacklist"])); 142 | } 143 | set { 144 | this["blacklist"] = value; 145 | } 146 | } 147 | 148 | [global::System.Configuration.UserScopedSettingAttribute()] 149 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 150 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 151 | public bool OnlyOneGameIdle { 152 | get { 153 | return ((bool)(this["OnlyOneGameIdle"])); 154 | } 155 | set { 156 | this["OnlyOneGameIdle"] = value; 157 | } 158 | } 159 | 160 | [global::System.Configuration.UserScopedSettingAttribute()] 161 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 162 | [global::System.Configuration.DefaultSettingValueAttribute("")] 163 | public string steamRememberLogin { 164 | get { 165 | return ((string)(this["steamRememberLogin"])); 166 | } 167 | set { 168 | this["steamRememberLogin"] = value; 169 | } 170 | } 171 | 172 | [global::System.Configuration.UserScopedSettingAttribute()] 173 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 174 | [global::System.Configuration.DefaultSettingValueAttribute("")] 175 | public string steamMachineAuth { 176 | get { 177 | return ((string)(this["steamMachineAuth"])); 178 | } 179 | set { 180 | this["steamMachineAuth"] = value; 181 | } 182 | } 183 | 184 | [global::System.Configuration.UserScopedSettingAttribute()] 185 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 186 | [global::System.Configuration.DefaultSettingValueAttribute("0")] 187 | public uint totalCardIdled { 188 | get { 189 | return ((uint)(this["totalCardIdled"])); 190 | } 191 | set { 192 | this["totalCardIdled"] = value; 193 | } 194 | } 195 | 196 | [global::System.Configuration.UserScopedSettingAttribute()] 197 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 198 | [global::System.Configuration.DefaultSettingValueAttribute("0")] 199 | public uint totalMinutesIdled { 200 | get { 201 | return ((uint)(this["totalMinutesIdled"])); 202 | } 203 | set { 204 | this["totalMinutesIdled"] = value; 205 | } 206 | } 207 | 208 | [global::System.Configuration.UserScopedSettingAttribute()] 209 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 210 | [global::System.Configuration.DefaultSettingValueAttribute("")] 211 | public string language { 212 | get { 213 | return ((string)(this["language"])); 214 | } 215 | set { 216 | this["language"] = value; 217 | } 218 | } 219 | 220 | [global::System.Configuration.UserScopedSettingAttribute()] 221 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 222 | [global::System.Configuration.DefaultSettingValueAttribute("True")] 223 | public bool OneThenMany { 224 | get { 225 | return ((bool)(this["OneThenMany"])); 226 | } 227 | set { 228 | this["OneThenMany"] = value; 229 | } 230 | } 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /Source/IdleMaster/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Changelog.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 123 | 124 | 125 | ..\Resources\ban-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\document-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\power-standby-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\x-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\globe-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\Resources\info-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\Resources\lock-locked-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\Resources\media-pause-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\Resources\media-pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | 152 | ..\Resources\media-play-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 153 | 154 | 155 | ..\Resources\media-play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 156 | 157 | 158 | ..\Resources\cog-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 159 | 160 | 161 | ..\Resources\media-step-forward-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 162 | 163 | 164 | ..\Resources\media-step-forward.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 165 | 166 | 167 | ..\Resources\select2-spinner.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 168 | 169 | 170 | ..\Resources\bar-chart-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 171 | 172 | 173 | ..\Resources\trash-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 174 | 175 | 176 | ..\Resources\check-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 177 | 178 | 179 | ..\Resources\eye-2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 180 | 181 | -------------------------------------------------------------------------------- /Source/IdleMaster/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace IdleMaster.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IdleMaster.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized string similar to {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} 65 | ///{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f10\fbidi \fn [rest of string was truncated]";. 66 | /// 67 | internal static string Changelog { 68 | get { 69 | return ResourceManager.GetString("Changelog", resourceCulture); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap imgBlacklist { 77 | get { 78 | object obj = ResourceManager.GetObject("imgBlacklist", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap imgDocument { 87 | get { 88 | object obj = ResourceManager.GetObject("imgDocument", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap imgExit { 97 | get { 98 | object obj = ResourceManager.GetObject("imgExit", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// Looks up a localized resource of type System.Drawing.Bitmap. 105 | /// 106 | internal static System.Drawing.Bitmap imgFalse { 107 | get { 108 | object obj = ResourceManager.GetObject("imgFalse", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// Looks up a localized resource of type System.Drawing.Bitmap. 115 | /// 116 | internal static System.Drawing.Bitmap imgGlobe { 117 | get { 118 | object obj = ResourceManager.GetObject("imgGlobe", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | 123 | /// 124 | /// Looks up a localized resource of type System.Drawing.Bitmap. 125 | /// 126 | internal static System.Drawing.Bitmap imgInfo { 127 | get { 128 | object obj = ResourceManager.GetObject("imgInfo", resourceCulture); 129 | return ((System.Drawing.Bitmap)(obj)); 130 | } 131 | } 132 | 133 | /// 134 | /// Looks up a localized resource of type System.Drawing.Bitmap. 135 | /// 136 | internal static System.Drawing.Bitmap imgLock { 137 | get { 138 | object obj = ResourceManager.GetObject("imgLock", resourceCulture); 139 | return ((System.Drawing.Bitmap)(obj)); 140 | } 141 | } 142 | 143 | /// 144 | /// Looks up a localized resource of type System.Drawing.Bitmap. 145 | /// 146 | internal static System.Drawing.Bitmap imgPause { 147 | get { 148 | object obj = ResourceManager.GetObject("imgPause", resourceCulture); 149 | return ((System.Drawing.Bitmap)(obj)); 150 | } 151 | } 152 | 153 | /// 154 | /// Looks up a localized resource of type System.Drawing.Bitmap. 155 | /// 156 | internal static System.Drawing.Bitmap imgPauseSmall { 157 | get { 158 | object obj = ResourceManager.GetObject("imgPauseSmall", resourceCulture); 159 | return ((System.Drawing.Bitmap)(obj)); 160 | } 161 | } 162 | 163 | /// 164 | /// Looks up a localized resource of type System.Drawing.Bitmap. 165 | /// 166 | internal static System.Drawing.Bitmap imgPlay { 167 | get { 168 | object obj = ResourceManager.GetObject("imgPlay", resourceCulture); 169 | return ((System.Drawing.Bitmap)(obj)); 170 | } 171 | } 172 | 173 | /// 174 | /// Looks up a localized resource of type System.Drawing.Bitmap. 175 | /// 176 | internal static System.Drawing.Bitmap imgPlaySmall { 177 | get { 178 | object obj = ResourceManager.GetObject("imgPlaySmall", resourceCulture); 179 | return ((System.Drawing.Bitmap)(obj)); 180 | } 181 | } 182 | 183 | /// 184 | /// Looks up a localized resource of type System.Drawing.Bitmap. 185 | /// 186 | internal static System.Drawing.Bitmap imgSettings { 187 | get { 188 | object obj = ResourceManager.GetObject("imgSettings", resourceCulture); 189 | return ((System.Drawing.Bitmap)(obj)); 190 | } 191 | } 192 | 193 | /// 194 | /// Looks up a localized resource of type System.Drawing.Bitmap. 195 | /// 196 | internal static System.Drawing.Bitmap imgSkip { 197 | get { 198 | object obj = ResourceManager.GetObject("imgSkip", resourceCulture); 199 | return ((System.Drawing.Bitmap)(obj)); 200 | } 201 | } 202 | 203 | /// 204 | /// Looks up a localized resource of type System.Drawing.Bitmap. 205 | /// 206 | internal static System.Drawing.Bitmap imgSkipSmall { 207 | get { 208 | object obj = ResourceManager.GetObject("imgSkipSmall", resourceCulture); 209 | return ((System.Drawing.Bitmap)(obj)); 210 | } 211 | } 212 | 213 | /// 214 | /// Looks up a localized resource of type System.Drawing.Bitmap. 215 | /// 216 | internal static System.Drawing.Bitmap imgSpin { 217 | get { 218 | object obj = ResourceManager.GetObject("imgSpin", resourceCulture); 219 | return ((System.Drawing.Bitmap)(obj)); 220 | } 221 | } 222 | 223 | /// 224 | /// Looks up a localized resource of type System.Drawing.Bitmap. 225 | /// 226 | internal static System.Drawing.Bitmap imgStatistics { 227 | get { 228 | object obj = ResourceManager.GetObject("imgStatistics", resourceCulture); 229 | return ((System.Drawing.Bitmap)(obj)); 230 | } 231 | } 232 | 233 | /// 234 | /// Looks up a localized resource of type System.Drawing.Bitmap. 235 | /// 236 | internal static System.Drawing.Bitmap imgTrash { 237 | get { 238 | object obj = ResourceManager.GetObject("imgTrash", resourceCulture); 239 | return ((System.Drawing.Bitmap)(obj)); 240 | } 241 | } 242 | 243 | /// 244 | /// Looks up a localized resource of type System.Drawing.Bitmap. 245 | /// 246 | internal static System.Drawing.Bitmap imgTrue { 247 | get { 248 | object obj = ResourceManager.GetObject("imgTrue", resourceCulture); 249 | return ((System.Drawing.Bitmap)(obj)); 250 | } 251 | } 252 | 253 | /// 254 | /// Looks up a localized resource of type System.Drawing.Bitmap. 255 | /// 256 | internal static System.Drawing.Bitmap imgView { 257 | get { 258 | object obj = ResourceManager.GetObject("imgView", resourceCulture); 259 | return ((System.Drawing.Bitmap)(obj)); 260 | } 261 | } 262 | } 263 | } 264 | -------------------------------------------------------------------------------- /Source/IdleMaster/localization/strings.zh.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 关于(&A) 122 | 123 | 124 | 徽章状态加载错误, __num__ 秒后重试 125 | 126 | 127 | 黑名单(&B) 128 | 129 | 130 | 将当前游戏加入黑名单(&B) 131 | 132 | 133 | 剩余卡牌掉落 134 | 135 | 136 | 游戏中 137 | 138 | 139 | 退出(&X) 140 | 141 | 142 | 文件(&F) 143 | 144 | 145 | 游戏(&G) 146 | 147 | 148 | 游戏尚有卡牌 149 | 150 | 151 | 帮助(&H) 152 | 153 | 154 | 游戏时间 155 | 156 | 157 | 小时游戏时间 158 | 159 | 160 | Idle Master已登录到Steam 161 | 162 | 163 | Idle Master未登录到Steam 164 | 165 | 166 | 正在运行 167 | 168 | 169 | 挂卡完成,无剩余卡牌掉落 170 | 171 | 172 | 游戏暂停 173 | 174 | 175 | 加载下一个游戏... 176 | 177 | 178 | 游戏时间 179 | 180 | 181 | 下次刷新 182 | 183 | 184 | 无游戏运行 185 | 186 | 187 | 官方组(&O) 188 | 189 | 190 | 暂停(&P) 191 | 192 | 193 | 请稍候... 194 | 195 | 196 | 读取徽章状态中 197 | 198 | 199 | 更新记录(&R) 200 | 201 | 202 | 继续(&R) 203 | 204 | 205 | 设置(&S) 206 | 207 | 208 | 当前账号为 209 | 210 | 211 | 登录 212 | 213 | 214 | 退出 215 | 216 | 217 | 下一个(&S) 218 | 219 | 220 | 排序加载中请稍候... 221 | 222 | 223 | 统计 (&S) 224 | 225 | 226 | Steam状态已被忽略 227 | 228 | 229 | Steam没有启动 230 | 231 | 232 | Steam正在运行 233 | 234 | 235 | 更新游戏状态 236 | 237 | 238 | 确定(&A) 239 | 240 | 241 | 添加(&A) 242 | 243 | 244 | 添加游戏到黑名单 245 | 246 | 247 | 高级设置 248 | 249 | 250 | Idle Master 用户数据(Cookie) 251 | 252 | 253 | 取消(&C) 254 | 255 | 256 | 显示数据 257 | 258 | [警告] 259 | 不要泄露任何数据,这和你把密码泄露出去没什么区别 260 | 261 | 262 | 常规 263 | 264 | 265 | 按顺序运行 266 | 267 | 268 | Idle Master 设置 269 | 270 | 271 | 将所有游戏运行满2小时后再按顺序运行 272 | 273 | 274 | 规则 275 | 276 | 277 | 顺序 278 | 279 | 280 | 忽略Steam运行状态 281 | 282 | 283 | 界面语言 284 | 285 | 286 | 管理 Idle Master 黑名单 287 | 288 | 289 | 最小化到系统托盘 290 | 291 | 292 | 确定(&A) 293 | 294 | 295 | 默认 (按字母排序) 296 | 297 | 298 | 优先运行卡牌数量少的游戏 299 | 300 | 301 | 优先运行卡牌数量多的游戏 302 | 303 | 304 | 优先运行卡牌价值高的游戏 305 | 306 | 307 | 请登录 Steam 308 | 309 | 310 | 请重启程序使语言更改生效. 311 | 312 | 313 | Idle Master更新记录 314 | 315 | 316 | 保存(&S) 317 | 318 | 319 | Idle Master正在提取用户数据 320 | 321 | 322 | 显示当前Steam用户 323 | 324 | 325 | 本次统计 326 | 327 | 328 | 历史统计 329 | 330 | 331 | 更新(&U) 332 | 333 | 334 | 您输入的数据无效. 请再试一次. 335 | 336 | 337 | 验证中... 338 | 339 | 340 | 优先单独运行已满2小时的游戏,然后再同时挂卡 341 | 342 | 343 | -------------------------------------------------------------------------------- /Source/IdleMaster/localization/strings.zh-TW.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 關於(&A) 122 | 123 | 124 | 徽章頁沒有載入,將在 __num__ 秒後重試 125 | 126 | 127 | 黑名單(&B) 128 | 129 | 130 | 將目前遊戲加入黑名單(&B) 131 | 132 | 133 | 卡片剩餘 134 | 135 | 136 | 目前正在遊戲內 137 | 138 | 139 | 離開(&X) 140 | 141 | 142 | 檔案(&F) 143 | 144 | 145 | 遊戲(&G) 146 | 147 | 148 | 遊戲尚有未掉落卡片 149 | 150 | 151 | 說明(&H) 152 | 153 | 154 | 時數 155 | 156 | 157 | 小時 158 | 159 | 160 | Idle Master已經連結至Steam 161 | 162 | 163 | Idle Master尚未連結至Steam 164 | 165 | 166 | 現在開始掉落 167 | 168 | 169 | 掉落結束, 沒有可掉落的卡片 170 | 171 | 172 | 掉落已暫停 173 | 174 | 175 | 正在載入下一個遊戲... 176 | 177 | 178 | 名稱 179 | 180 | 181 | 下一次檢查 182 | 183 | 184 | 不在遊戲中 185 | 186 | 187 | 官方群組(&O) 188 | 189 | 190 | 暫停掉落(&P) 191 | 192 | 193 | 請稍候... 194 | 195 | 196 | 讀取徽章頁 197 | 198 | 199 | 版本發佈說明(&R) 200 | 201 | 202 | 繼續(&R) 203 | 204 | 205 | 設定(&S) 206 | 207 | 208 | 登入身分: 209 | 210 | 211 | 登入 212 | 213 | 214 | 登出 215 | 216 | 217 | 跳過目前遊戲(&S) 218 | 219 | 220 | 正在依您的設定進行排序,請稍候... 221 | 222 | 223 | 統計數據(&S) 224 | 225 | 226 | Steam客戶端狀態已忽略 227 | 228 | 229 | Steam 已停止運行 230 | 231 | 232 | Steam 正在運行 233 | 234 | 235 | 更新遊戲狀態 236 | 237 | 238 | 接受(&A) 239 | 240 | 241 | 添加(&A) 242 | 243 | 244 | 將遊戲加到黑名單 245 | 246 | 247 | 顯示進階身份驗證資訊 248 | 249 | 250 | Idle Master認證資料 251 | 252 | 253 | 取消(&C) 254 | 255 | 256 | 顯示資訊 257 | 258 | [WARNING] 259 | 以上資訊請勿與人分享, 260 | 潛在攻擊者可能會用它登入至您的Steam帳戶。 261 | 262 | 263 | 一般 264 | 265 | 266 | 各遊戲卡片分開掉落 267 | 268 | 269 | Idle Master設定 270 | 271 | 272 | 所有遊戲同時等待掉落2小時,然後再分開進行 273 | 274 | 275 | 卡片掉落行為 276 | 277 | 278 | 掉落順序 279 | 280 | 281 | 忽略Steam用戶端狀態 282 | 283 | 284 | 介面語言 285 | 286 | 287 | 管理Idle Master黑名單 288 | 289 | 290 | 將Idle Master縮小至系統工具列 291 | 292 | 293 | 確認(&O) 294 | 295 | 296 | 預設(字母順序) 297 | 298 | 299 | 優先掉落遊戲卡片數量最少的 300 | 301 | 302 | 優先掉落遊戲卡片數量最多的 303 | 304 | 305 | 優先掉落價值最高的卡片 306 | 307 | 308 | 請登入至Steam帳戶 309 | 310 | 311 | 請重新啟動程式,使語言更改生效 312 | 313 | 314 | Idle Master版本發佈說明 315 | 316 | 317 | 儲存(&S) 318 | 319 | 320 | Idle Master正在儲存您的資訊 321 | 322 | 323 | 顯示已登入Steam帳戶的使用者名字 324 | 325 | 326 | 這次使用期間 327 | 328 | 329 | 總計 330 | 331 | 332 | 更新(&U) 333 | 334 | 335 | 您輸入的資料不是有效的。 請再試一次。 336 | 337 | 338 | 驗證中... 339 | 340 | 341 | 同時對遊戲時間超過2小時的遊戲進行掛機 342 | 343 | 344 | -------------------------------------------------------------------------------- /Source/IdleMaster/localization/strings.ja.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | &詳細 122 | 123 | 124 | あなたのSteamバッジページが読み込まれていません、__num__秒以内に再試行します。 125 | 126 | 127 | &ブラックリスト 128 | 129 | 130 | &現在のゲームをブラックリストに 131 | 132 | 133 | 枚のカードが未ドロップです 134 | 135 | 136 | 現在ゲーム中 137 | 138 | 139 | &終了 140 | 141 | 142 | &ファイル 143 | 144 | 145 | &ゲーム 146 | 147 | 148 | 個のゲームがアイドル待機中です 149 | 150 | 151 | &ヘルプ 152 | 153 | 154 | 時間 155 | 156 | 157 | 時間のプレイ記録 158 | 159 | 160 | Idle MasterはSteamと接続しました 161 | 162 | 163 | Idle MasterはSteamと接続していません 164 | 165 | 166 | ゲームアイドル中 167 | 168 | 169 | アイドリングが完了しました! ドロップ可能なカードはもうありません 170 | 171 | 172 | アイドリング一時停止中 173 | 174 | 175 | 次のゲームを読み込んでいます... 176 | 177 | 178 | ゲーム名 179 | 180 | 181 | 次のチェックまで残り 182 | 183 | 184 | ゲーム中ではありません 185 | 186 | 187 | &公式グループ 188 | 189 | 190 | &アイドリングを一時停止 191 | 192 | 193 | お待ち下さい... 194 | 195 | 196 | Steamバッジページを読み込み中 197 | 198 | 199 | &更新履歴 200 | 201 | 202 | &アイドリングを続行 203 | 204 | 205 | &設定 206 | 207 | 208 | ログイン中のアカウント 209 | 210 | 211 | サインイン 212 | 213 | 214 | サインアウト 215 | 216 | 217 | &現在のゲームをスキップする 218 | 219 | 220 | 結果を並べ替えています、しばらくお待ち下さい... 221 | 222 | 223 | &統計 224 | 225 | 226 | Steamクライアントの状況を無視しています 227 | 228 | 229 | Steamが起動していません 230 | 231 | 232 | Steamは起動しています 233 | 234 | 235 | ゲームのカード獲得状況を更新する 236 | 237 | 238 | &承認 239 | 240 | 241 | &追加 242 | 243 | 244 | ゲームをブラックリストに追加する 245 | 246 | 247 | より詳細な認証情報を表示する 248 | 249 | 250 | Idle Masterの認証情報 251 | 252 | 253 | &キャンセル 254 | 255 | 256 | 上の情報を表示する 257 | 258 | [WARNING] 259 | ハッカーやクラッカーがあなたのSteamアカウントにログインするのに使われる可能性があるので、この情報をいかなる第三者とも共有しないで下さい。 260 | 261 | 262 | 基本設定 263 | 264 | 265 | ゲームを一つづつ個別にアイドルする 266 | 267 | 268 | Idle Masterの設定 269 | 270 | 271 | 複数のゲームを同時に2時間アイドルし、その後一つづつ個別にアイドルする 272 | 273 | 274 | アイドル時の動作 275 | 276 | 277 | アイドルする順番 278 | 279 | 280 | Steamクライアントの状態を無視する 281 | 282 | 283 | 言語 284 | 285 | 286 | Idle Masterのブラックリストを編集する 287 | 288 | 289 | Idle Masterを通知領域に最小化する 290 | 291 | 292 | &はい 293 | 294 | 295 | デフォルト(アルファベット順) 296 | 297 | 298 | カードのドロップ可能な数が少ない順に並び替える 299 | 300 | 301 | カードのドロップ可能な数が多い順に並び替える 302 | 303 | 304 | カードの価格が高い順に並び替える 305 | 306 | 307 | Steamにログインして下さい 308 | 309 | 310 | 言語の変更を完了するために再起動してください。 311 | 312 | 313 | Idle Masterの更新履歴 314 | 315 | 316 | &保存 317 | 318 | 319 | Idle Masterはあなたの情報を保存中です 320 | 321 | 322 | 現在サインイン中のユーザー名を表示する 323 | 324 | 325 | 現行のセッション 326 | 327 | 328 | 合計 329 | 330 | 331 | &更新 332 | 333 | 334 | あなたが入力したデータは有効ではありません。もう一度お試し下さい。 335 | 336 | 337 | 確認中です... 338 | 339 | 340 | 2時間以上のプレイ記録のあるゲームを一つづつ個別にアイドルし、その後プレイ記録が2時間未満のゲームを同時にアイドルする 341 | 342 | 343 | -------------------------------------------------------------------------------- /Source/IdleMaster/localization/strings.ko.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Idle Master 정보(A) 122 | 123 | 124 | 배지 페이지를 불러오지 못했습니다. __num__초 후 다시 시도합니다. 125 | 126 | 127 | 블랙리스트(B) 128 | 129 | 130 | 현재 게임을 블랙리스트에 추가(B) 131 | 132 | 133 | 획득 가능한 카드 장수 134 | 135 | 136 | 현재 플레이중인 게임 137 | 138 | 139 | 종료(X) 140 | 141 | 142 | 파일(F) 143 | 144 | 145 | 게임(G) 146 | 147 | 148 | 남은 게임 수 149 | 150 | 151 | 도움말(H) 152 | 153 | 154 | 시간 155 | 156 | 157 | 시간째 플레이 158 | 159 | 160 | Idle master가 Steam에 연결되었습니다. 161 | 162 | 163 | Idle Master가 Steam과 연결되어 있지 않습니다 164 | 165 | 166 | 현재 농사중 167 | 168 | 169 | 농사가 모두 완료되었습니다. 더 이상 수확할 카드가 없습니다 170 | 171 | 172 | 농사가 잠시 중단되었습니다 173 | 174 | 175 | 다음 게임을 불러옵니다 176 | 177 | 178 | 제목 179 | 180 | 181 | 다음번 확인까지 182 | 183 | 184 | 게임중이 아닙니다 185 | 186 | 187 | 공식 Steam 그룹(O) 188 | 189 | 190 | 농사 일시 중지(P) 191 | 192 | 193 | 잠시 기다려 주십시오 194 | 195 | 196 | 배지 페이지를 읽고 있습니다 197 | 198 | 199 | 릴리스 노트(R) 200 | 201 | 202 | 농사 재개(R) 203 | 204 | 205 | 설정(S) 206 | 207 | 208 | 다음 이름으로 로그인 했습니다 209 | 210 | 211 | 로그인 212 | 213 | 214 | 로그아웃 215 | 216 | 217 | 현재 게임 건너뛰기(S) 218 | 219 | 220 | 설정에 따라 결과를 정렬중입니다. 잠시만 기다려 주십시오. 221 | 222 | 223 | 통계(S) 224 | 225 | 226 | Steam 클라이언트 상태 무시 227 | 228 | 229 | Steam 클라이언트가 꺼져있습니다 230 | 231 | 232 | Steam 클라이언트가 실행중입니다 233 | 234 | 235 | 게임 상태 업데이트 236 | 237 | 238 | 확인(A) 239 | 240 | 241 | 추가(A) 242 | 243 | 244 | 게임을 블랙리스트에 추가합니다 245 | 246 | 247 | 고급 인증 정보를 표시합니다 248 | 249 | 250 | Idle Master 인증 정보 251 | 252 | 253 | 취소(C) 254 | 255 | 256 | 위의 정보를 표시합니다 257 | 258 | [WARNING] 259 | 이 정보는 귀하의 계정으로 로그인하려는 해커들에게 사용될 수 260 | 있기 때문에, 다른 사람들과 이 정보를 공유하지 않도록 하십시오. 261 | 262 | 263 | 일반 264 | 265 | 266 | 개별 게임을 각각 농사짓습니다 267 | 268 | 269 | Idle Master 설정 270 | 271 | 272 | 2시간까지는 동시에 농사를 짓고, 이후에는 따로 농사를 짓습니다 273 | 274 | 275 | 농사 동작 276 | 277 | 278 | 농사 순서 279 | 280 | 281 | Steam 클라이언트 상태를 무시합니다 282 | 283 | 284 | 인터페이스 언어 285 | 286 | 287 | Idle Master 블랙 리스트를 관리합니다 288 | 289 | 290 | Idle Master를 시스템 트레이로 최소화합니다 291 | 292 | 293 | 확인(O) 294 | 295 | 296 | 기본 (알파벳 순서) 297 | 298 | 299 | 남아있는 카드 수가 적은 게임을 최우선 순위로 합니다 300 | 301 | 302 | 남아있는 카드 수가 가장 많은 게임을 최우선 순위로 합니다 303 | 304 | 305 | 카드 값이 가장 비싼 게임을 최우선순위로 합니다 306 | 307 | 308 | Steam에 로그인해 주십시오 309 | 310 | 311 | 언어 변경 내역을 적용하려면 응용 프로그램을 다시 실행해 주십시오. 312 | 313 | 314 | Idle Master 릴리스 노트 315 | 316 | 317 | 저장(S) 318 | 319 | 320 | Idle Master가 귀하의 정보를 저장중입니다 321 | 322 | 323 | Steam에 로그인한 사용자의 이름을 보여줍니다 324 | 325 | 326 | 현재 세션 327 | 328 | 329 | 총합 330 | 331 | 332 | 업데이트U) 333 | 334 | 335 | 입력하신 정보를 사용할 수 없습니다. 다시 시도해 주십시오. 336 | 337 | 338 | 확인 중... 339 | 340 | 341 | 2시간까지는 따로 농사를 짓고, 이후부터는 동시에 농사를 짓습니다 342 | 343 | 344 | -------------------------------------------------------------------------------- /Source/IdleMaster/IdleMaster.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {D26CAFBB-F684-4E53-BE38-60AAD2531893} 8 | WinExe 9 | Properties 10 | IdleMaster 11 | IdleMaster 12 | v4.5 13 | 512 14 | 15 | true 16 | ftp://ftp.steamidlemaster.com/idlemaster/install/ 17 | true 18 | Web 19 | true 20 | Background 21 | 1 22 | Days 23 | true 24 | false 25 | false 26 | http://www.steamidlemaster.com/install/ 27 | 0 28 | 1.4.1.%2a 29 | false 30 | true 31 | true 32 | true 33 | 34 | 35 | x86 36 | true 37 | full 38 | false 39 | bin\Debug\ 40 | DEBUG;TRACE 41 | prompt 42 | 4 43 | false 44 | false 45 | 46 | 47 | AnyCPU 48 | pdbonly 49 | true 50 | bin\Release\ 51 | TRACE 52 | prompt 53 | 4 54 | false 55 | 56 | 57 | logo1.ico 58 | 59 | 60 | 2E30D3385B38F3716634E7A4D3A3E0DB97BAA205 61 | 62 | 63 | 64 | 65 | 66 | 67 | true 68 | 69 | 70 | false 71 | 72 | 73 | 74 | False 75 | ..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll 76 | 77 | 78 | True 79 | 80 | 81 | False 82 | ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll 83 | 84 | 85 | False 86 | ..\..\Steamworks.NET.dll 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | Component 105 | 106 | 107 | Form 108 | 109 | 110 | frmAbout.cs 111 | 112 | 113 | Form 114 | 115 | 116 | frmBlacklist.cs 117 | 118 | 119 | Form 120 | 121 | 122 | frmChangelog.cs 123 | 124 | 125 | Form 126 | 127 | 128 | frmMain.cs 129 | 130 | 131 | Form 132 | 133 | 134 | frmBrowser.cs 135 | 136 | 137 | Form 138 | 139 | 140 | frmSettings.cs 141 | 142 | 143 | Form 144 | 145 | 146 | frmSettingsAdvanced.cs 147 | 148 | 149 | Form 150 | 151 | 152 | frmStatistics.cs 153 | 154 | 155 | 156 | 157 | 158 | True 159 | True 160 | Resources.resx 161 | 162 | 163 | True 164 | True 165 | strings.resx 166 | 167 | 168 | 169 | 170 | frmAbout.cs 171 | 172 | 173 | frmBlacklist.cs 174 | 175 | 176 | frmBrowser.cs 177 | 178 | 179 | frmChangelog.cs 180 | 181 | 182 | frmMain.cs 183 | 184 | 185 | frmSettings.cs 186 | 187 | 188 | frmSettingsAdvanced.cs 189 | 190 | 191 | frmStatistics.cs 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | ResXFileCodeGenerator 218 | Designer 219 | Resources.Designer.cs 220 | 221 | 222 | ResXFileCodeGenerator 223 | strings.Designer.cs 224 | 225 | 226 | 227 | 228 | 229 | SettingsSingleFileGenerator 230 | Settings.Designer.cs 231 | 232 | 233 | True 234 | Settings.settings 235 | True 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | False 260 | Microsoft .NET Framework 4.5 %28x86 and x64%29 261 | true 262 | 263 | 264 | False 265 | .NET Framework 3.5 SP1 Client Profile 266 | false 267 | 268 | 269 | False 270 | .NET Framework 3.5 SP1 271 | false 272 | 273 | 274 | False 275 | Windows Installer 4.5 276 | true 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 297 | --------------------------------------------------------------------------------