Compare commits

...

127 Commits

Author SHA1 Message Date
ffa385d3c8 Update 'README.md' 2020-05-01 23:58:56 +03:00
a3a4cf267e Update 'README.md' 2020-05-01 23:57:10 +03:00
1c157c5dd1 Update 'README.md' 2020-05-01 23:54:22 +03:00
3e1d0b2fee Ex and API 2019-01-23 12:34:14 +03:00
0ed3830d9c todo 2019-01-23 12:18:34 +03:00
2b23479079 Move Paths Struct with Comments and Version bump 2019-01-23 12:16:27 +03:00
6a8019c1ac Remove Meesage box invoke from Tracker class 2019-01-23 11:58:44 +03:00
d0745d1bec Merge branch 'release/1.4.3' of Hesham/OWtrack into master 2018-12-22 10:14:19 +03:00
0632fe5b8f Merge branch 'Redo-SR' into release/1.4.3 2018-12-22 10:06:55 +03:00
bc3c84c984 Fixed #40 2018-12-22 10:04:45 +03:00
8d00ee0720 Paths to struct 2018-12-22 09:22:02 +03:00
5905ec0122 ProgramFiles class to struct 2018-12-22 09:18:39 +03:00
5caf393ea8 Merge branch 'release/1.4.3' of Hesham/OWtrack into master
Fixed:

    #39
    #33
    #11
    #37
2018-12-22 00:19:53 +03:00
44595496be Fixed #37 2018-12-22 00:17:23 +03:00
9176bf903c Merge branch 'session-class' into release/1.4.3 2018-12-21 23:30:45 +03:00
fbfd7740a2 Merge remote-tracking branch 'origin/session-class' into session-class 2018-12-21 23:30:23 +03:00
ec9def19c4 Fixed bug and organize #39 #33 #11 2018-12-21 23:29:28 +03:00
003668dea4 Fixed bug and organize 2018-12-21 23:23:59 +03:00
a28e09de89 Formatting White Space Clean 2018-12-21 22:00:33 +03:00
52fce485f8 Matches not saved in JSON Bug fixed 2018-12-21 22:00:11 +03:00
035d9979d1 Formatting (White space) 2018-12-21 21:57:56 +03:00
2d5771beb8 Start new session and other fixes 2018-12-21 18:44:48 +03:00
5d7640c0f0 Improved LoadSave Function 2018-12-21 18:17:47 +03:00
20d6844f2d follow up 2018-12-21 17:30:47 +03:00
7b3348a723 add match function
Adds a match to the last session in the sessions list
2018-12-21 17:30:16 +03:00
7f10e36e25 Total matches functions 2018-12-21 17:29:17 +03:00
470e2399f1 incomplete implementation of sessions class 2018-12-21 15:51:42 +03:00
4906361a56 Session class (Not Implemented) 2018-12-21 15:34:11 +03:00
0434fc1f40 clean 2018-12-21 12:56:15 +03:00
7ba2694c95 cleanup 2018-12-21 12:52:50 +03:00
5b4578fede Settings & Match classes
- Added settings class
- Added Match class
2018-12-21 11:13:48 +03:00
b23cc399b4 Docs update 2018-12-20 19:13:15 +03:00
98031dbe48 Rename function GetGamePath 2018-12-20 19:13:03 +03:00
aa4a08c525 Merge branch 'saveNotLoading' into release/1.4.3 2018-12-20 19:11:56 +03:00
e788aaeea3 Fixed Readline Bug (MultiLine) 2018-12-20 19:11:31 +03:00
86efb124c6 Merge branch 'master' into saveNotLoading 2018-12-20 19:03:39 +03:00
20ea1ae1df Version 2018-12-18 07:17:12 +03:00
ece2a122dd fixed notify icon bug 2018-12-13 22:32:33 +03:00
c959fc2d84 clean & Check paths string 2018-12-10 15:55:26 +03:00
5818104335 cleanup 2018-12-10 11:06:32 +03:00
008b889ccd resolve 2018-12-10 10:56:29 +03:00
264ca744f3 removed messagebox 2018-12-10 10:48:55 +03:00
632325fcd0 Merge branch 'Improve-search' of Hesham/OWtrack into release/1.4.3 2018-12-10 10:44:02 +03:00
1ea9bf531c search function rework 2018-12-10 10:42:14 +03:00
bbd855af11 Merge branch 'indent-json' of Hesham/OWtrack into master 2018-12-10 09:31:58 +03:00
9a05516dad corrected 2018-12-10 09:23:47 +03:00
b9f9dd7cff Link 2018-12-09 16:53:35 +03:00
f1831c78a8 Rough code. Not tested. 2018-12-09 16:45:22 +03:00
0bbdf3eade Encapsulate 2018-12-08 20:52:26 +03:00
4916456924 Version bump 2018-12-08 08:50:52 +03:00
c279b98621 Refactor search loops 2018-12-08 08:44:49 +03:00
5136773351 new structs 2018-12-08 08:41:46 +03:00
c2f9d4a782 Merge branch 'Badges' of Hesham/OWtrack into master 2018-11-25 04:42:32 +03:00
f1fa5f944d Update 'README.md' 2018-11-25 04:41:36 +03:00
8c9bce0a2a Version bump 2018-11-24 03:39:54 +03:00
5314344474 Merge branch 'release/1.4.2' of Hesham/OWtrack into master 2018-11-24 03:34:43 +03:00
6e7de80233 Fixed #29 2018-11-24 03:24:50 +03:00
fdfd400d0a dummy 2018-10-04 09:08:41 +03:00
885d235b33 clean 2018-10-04 09:03:54 +03:00
19c1c1cd5d Update 'README.md' 2018-09-27 11:40:40 +03:00
d19a680054 Merge branch 'release/1.4' of Hesham/OWtrack into master 2018-09-27 11:31:10 +03:00
05ab987a68 Version 2018-09-27 11:30:11 +03:00
7be0e816f1 New Save Parameters 2018-09-27 11:24:32 +03:00
216f9d1d54 Merge branch 'feature/settingsForm' into release/1.4 2018-09-27 11:06:45 +03:00
b02b0ee65b settings form done 2018-09-27 11:06:24 +03:00
713b43b3a7 refactor 2018-09-27 10:34:14 +03:00
b7e1bf3792 fixed bug 2018-09-27 10:29:30 +03:00
b0846bc10a Merge branch 'refactor/usingSaveManeger' into release/1.4 2018-09-27 10:19:06 +03:00
ccc2028b7f Paths class 2018-09-27 10:17:17 +03:00
a77e5684c3 Paths enum (to be built) 2018-09-26 15:58:17 +03:00
f3f2b71d68 Design Done 2018-09-23 16:31:18 +03:00
3500430109 use of save maneger 2018-09-23 16:08:46 +03:00
f4c56e2bc2 saveManeger 2018-09-23 15:25:51 +03:00
c410f078b0 Tracker Update 2018-09-23 15:14:11 +03:00
0817dbea29 Version 2018-09-22 13:00:31 +03:00
1fcb053d99 Merge branch 'Bug-#24' of Hesham/OWtrack into release/1.4
- #24
2018-09-22 12:55:43 +03:00
294a6e02fe MIT Licance 2018-09-22 12:54:00 +03:00
09e1ea0969 Fixed #24 2018-09-22 12:41:42 +03:00
0958d3d467 Merge branch 'release/1.4' of Hesham/OWtrack into master (1.4.0a2)
- #22 incapsulate data.json save dir
- Refactoring
- #16 hidden Form Bug
- #21 Negative win/loss values
2018-09-20 11:35:45 +03:00
fae9d2f50c nigative win/loss 2018-09-20 11:33:26 +03:00
500f9c5852 Merge branch 'saveManegerClass' into release/1.4 2018-09-20 11:26:04 +03:00
d2cc397c69 refactor, saveManeger 2018-09-20 11:23:47 +03:00
5ce37c59c0 arrange 2018-09-20 09:56:16 +03:00
424983da5f refactor 2018-09-20 09:53:49 +03:00
ce4caa4b80 Merge branch 'feature/splash' into release/1.4 2018-09-20 09:11:12 +03:00
23ff1420e6 csproj 2018-09-14 15:39:53 +03:00
83fad4d6ca saveManeger class & splash Form 2018-09-14 15:38:42 +03:00
7aeecd511d assets folder 2018-09-14 14:56:18 +03:00
a1ee527747 cleanup 2018-09-14 14:53:54 +03:00
ce876b7430 version 2018-09-08 15:20:29 +03:00
ee39a3c7a5 fix files csproj 2018-09-08 15:12:27 +03:00
6e5e159ca4 Merge branch 'feature/savesDir' into release/1.4 2018-09-08 14:53:33 +03:00
9ffdd871b6 savesPath 2018-09-08 14:53:05 +03:00
0632089d19 rename fix 2018-09-08 14:33:07 +03:00
5e30eebda7 MainForm Rename 2018-09-08 14:32:12 +03:00
9d737dc41c icon, version 2018-09-04 22:46:50 +03:00
6f90e36838 Merge branch 'Badges' of Hesham/OWtrack into master 2018-09-04 21:35:40 +03:00
048a565ce1 Update 'README.md' 2018-09-04 21:32:52 +03:00
4f67aedceb Update 'README.md' 2018-09-04 21:31:55 +03:00
c44f532655 Update 'README.md' 2018-09-04 21:28:38 +03:00
88ddbc2a4e Merge branch 'Dev' of Hesham/OWtrack into master 2018-09-04 21:01:39 +03:00
cadb5dfea2 Admin access 2018-09-04 20:58:00 +03:00
89075aa941 app.manifest 2018-09-04 20:52:34 +03:00
e14682e26f Version 1.3 2018-09-04 20:50:02 +03:00
e818c5ebea Merge branch 'Bug/hiddenForm' of Hesham/OWtrack into Dev 2018-09-04 20:45:57 +03:00
7347c37ce6 Solved hidden Form 2018-09-04 20:45:09 +03:00
abfcb8a351 Labels 2018-09-04 19:13:56 +03:00
d152a05e48 attempt 1 (add Brakpoints) 2018-09-03 23:29:40 +03:00
cab6bfd573 Merge branch 'exeSearch' of Hesham/OWtrack into Dev 2018-09-03 22:34:33 +03:00
42e8b80999 exe search ready 2018-09-03 22:30:34 +03:00
9e33f09b8e LocateOW 2 + search algo 2018-09-03 22:11:05 +03:00
ef269da2cf Merge branch 'readme' of Hesham/OWtrack into master 2018-09-03 17:53:25 +03:00
be28deec5b Update 'README.md' 2018-09-03 17:52:13 +03:00
bf6132d617 Add 'README.md' 2018-09-03 17:51:37 +03:00
8248450127 Search Function (not tested) 2018-09-02 14:24:55 +03:00
a664f3db11 Merge branch 'Dev' of Hesham/OWtrack into master 2018-09-01 14:26:28 +03:00
f4e8ca73cf Version bump 2018-09-01 14:25:19 +03:00
7a8f24a4d9 Merge branch 'feature/saveSr' into Dev 2018-09-01 14:20:02 +03:00
3ac7799719 Merge branch 'feature/exeTrack' of Hesham/OWtrack into Dev 2018-09-01 14:17:55 +03:00
36018b35da load SR from JSON 2018-09-01 14:14:31 +03:00
d6c9b23f19 finalized exe Track 2018-09-01 14:11:08 +03:00
bc83f16ab2 working dialog 2018-08-31 20:56:47 +03:00
e948a1964a openFileDialog 2018-08-31 20:17:26 +03:00
e5b0fcf173 Assembly info 2 2018-08-31 19:32:44 +03:00
25d0789e76 Assembly info 2018-08-16 08:34:30 +03:00
790e1325d6 changes timer interval 2018-08-16 07:52:12 +03:00
77fefa6812 optimize OW status 2018-08-16 07:50:08 +03:00
16 changed files with 1367 additions and 362 deletions

57
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,57 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart",
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

View File

@ -1,163 +0,0 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using Newtonsoft.Json;
using System.IO;
namespace OWTrack
{
public partial class Form1 : Form
{
Tracker tr = new Tracker();
private const string IS_RUNNING = "Running";
private const string NOT_RUNNING = " Not running";
private bool SRonce = false;
public Form1()
{
InitializeComponent();
loadSave();
checkStatus();
label4.Text = Program.Version;
Text = "OWTrack " + Program.Version;
}
private void checkStatus()
{
try
{
Time.Text = DateTime.Now.ToString("h:mm tt");
if (tr.owRunning())
{
status.Text = IS_RUNNING;
status.ForeColor = Color.FromArgb(128, 255, 128);
}
else
{
status.Text = NOT_RUNNING;
status.ForeColor = Color.Red;
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
private void loadSave()
{
if (saveExist())
{
tr.wins = savedTracker().wins;
tr.losses = savedTracker().losses;
update();
}
else MessageBox.Show("no save");
}
private bool saveExist()
{
try
{
if (File.Exists(Directory.GetCurrentDirectory() + "/data.json")) { return true; }
else return false;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
private Tracker savedTracker()
{
try
{
return JsonConvert.DeserializeObject<Tracker>(File.ReadAllText(Directory.GetCurrentDirectory() + "/data.json"));
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return null;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
checkStatus();
}
private void button1_Click(object sender, EventArgs e)
{
tr.addWin();
update();
}
private void button2_Click(object sender, EventArgs e)
{
tr.addLoss();
update();
}
private void reduceWinBut_Click(object sender, EventArgs e)
{
tr.reduceWin();
update();
}
private void reduceLossBut_Click(object sender, EventArgs e)
{
tr.rediceLoss();
update();
}
private void update()
{
Wins.Text = tr.GetWins().ToString();
Losses.Text = tr.GetLosses().ToString();
if (tr.newSR == 0)
{
if (tr.srDiff() < 1) { srLabel.Text = tr.startSR.ToString() + " - 0"; }
else srLabel.Text = tr.startSR.ToString() + " - " + tr.srDiff();
}
else srLabel.Text = tr.startSR.ToString() + " - " + tr.srDiff();
srTextBox.Text = null;
File.WriteAllText(Directory.GetCurrentDirectory() + "/data.json", JsonConvert.SerializeObject(tr));
}
private void clearBut_Click(object sender, EventArgs e)
{
tr.reset();
update();
}
private void srBut_Click(object sender, EventArgs e)
{
int sr = 0;
try
{
sr = Convert.ToInt32(srTextBox.Text);
}
catch (FormatException)
{
MessageBox.Show("Enter a Number!");
return;
}
catch (OverflowException ex)
{
MessageBox.Show(ex.Message);
return;
}
finally
{
if (!SRonce)
{
tr.startSR = sr;
SRonce = true;
}
else tr.newSR = sr;
}
update();
}
}
}

View File

@ -1,123 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -1,6 +1,6 @@
namespace OWTrack namespace OWTrack
{ {
partial class Form1 partial class MainForm
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -29,6 +29,7 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.status = new System.Windows.Forms.Label(); this.status = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components); this.timer1 = new System.Windows.Forms.Timer(this.components);
@ -46,12 +47,20 @@
this.srTextBox = new System.Windows.Forms.TextBox(); this.srTextBox = new System.Windows.Forms.TextBox();
this.srBut = new System.Windows.Forms.Button(); this.srBut = new System.Windows.Forms.Button();
this.srLabel = new System.Windows.Forms.Label(); this.srLabel = new System.Windows.Forms.Label();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.SRInfoLabel = new System.Windows.Forms.Label();
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.SettingsGroup = new System.Windows.Forms.GroupBox();
this.ChngOWPathBtn = new System.Windows.Forms.Button();
this.ExeTrackCheckBx = new System.Windows.Forms.CheckBox();
this.SRCheckBx = new System.Windows.Forms.CheckBox();
this.SettingsGroup.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// label1 // label1
// //
this.label1.AutoSize = true; this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 36); this.label1.Location = new System.Drawing.Point(17, 36);
this.label1.Name = "label1"; this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(75, 13); this.label1.Size = new System.Drawing.Size(75, 13);
this.label1.TabIndex = 0; this.label1.TabIndex = 0;
@ -60,7 +69,7 @@
// status // status
// //
this.status.AutoSize = true; this.status.AutoSize = true;
this.status.ForeColor = System.Drawing.Color.Black; this.status.ForeColor = System.Drawing.Color.White;
this.status.Location = new System.Drawing.Point(93, 36); this.status.Location = new System.Drawing.Point(93, 36);
this.status.Name = "status"; this.status.Name = "status";
this.status.Size = new System.Drawing.Size(35, 13); this.status.Size = new System.Drawing.Size(35, 13);
@ -70,13 +79,13 @@
// timer1 // timer1
// //
this.timer1.Enabled = true; this.timer1.Enabled = true;
this.timer1.Interval = 3000; this.timer1.Interval = 6000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick); this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
// //
// Time // Time
// //
this.Time.AutoSize = true; this.Time.AutoSize = true;
this.Time.Location = new System.Drawing.Point(15, 13); this.Time.Location = new System.Drawing.Point(20, 13);
this.Time.Name = "Time"; this.Time.Name = "Time";
this.Time.Size = new System.Drawing.Size(35, 13); this.Time.Size = new System.Drawing.Size(35, 13);
this.Time.TabIndex = 2; this.Time.TabIndex = 2;
@ -85,80 +94,80 @@
// Wins // Wins
// //
this.Wins.AutoSize = true; this.Wins.AutoSize = true;
this.Wins.Font = new System.Drawing.Font("Miriam Mono CLM", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177))); this.Wins.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177)));
this.Wins.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); this.Wins.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
this.Wins.Location = new System.Drawing.Point(107, 78); this.Wins.Location = new System.Drawing.Point(162, 78);
this.Wins.Name = "Wins"; this.Wins.Name = "Wins";
this.Wins.Size = new System.Drawing.Size(40, 42); this.Wins.Size = new System.Drawing.Size(39, 42);
this.Wins.TabIndex = 3; this.Wins.TabIndex = 3;
this.Wins.Text = "0"; this.Wins.Text = "0";
// //
// Losses // Losses
// //
this.Losses.AutoSize = true; this.Losses.AutoSize = true;
this.Losses.Font = new System.Drawing.Font("Miriam Mono CLM", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177))); this.Losses.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177)));
this.Losses.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.Losses.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.Losses.Location = new System.Drawing.Point(176, 78); this.Losses.Location = new System.Drawing.Point(231, 78);
this.Losses.Name = "Losses"; this.Losses.Name = "Losses";
this.Losses.Size = new System.Drawing.Size(40, 42); this.Losses.Size = new System.Drawing.Size(39, 42);
this.Losses.TabIndex = 4; this.Losses.TabIndex = 4;
this.Losses.Text = "0"; this.Losses.Text = "0";
// //
// label3 // label3
// //
this.label3.AutoSize = true; this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Miriam Mono CLM", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177))); this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177)));
this.label3.ForeColor = System.Drawing.Color.Black; this.label3.ForeColor = System.Drawing.Color.Black;
this.label3.Location = new System.Drawing.Point(151, 75); this.label3.Location = new System.Drawing.Point(206, 75);
this.label3.Name = "label3"; this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(40, 42); this.label3.Size = new System.Drawing.Size(28, 42);
this.label3.TabIndex = 5; this.label3.TabIndex = 5;
this.label3.Text = ":"; this.label3.Text = ":";
// //
// WinBut // WinBut
// //
this.WinBut.Location = new System.Drawing.Point(106, 136); this.WinBut.Location = new System.Drawing.Point(161, 136);
this.WinBut.Name = "WinBut"; this.WinBut.Name = "WinBut";
this.WinBut.Size = new System.Drawing.Size(52, 26); this.WinBut.Size = new System.Drawing.Size(52, 26);
this.WinBut.TabIndex = 6; this.WinBut.TabIndex = 6;
this.WinBut.Text = "win"; this.WinBut.Text = "win";
this.WinBut.UseVisualStyleBackColor = true; this.WinBut.UseVisualStyleBackColor = true;
this.WinBut.Click += new System.EventHandler(this.button1_Click); this.WinBut.Click += new System.EventHandler(this.WinBtn_Click);
// //
// button2 // button2
// //
this.button2.Location = new System.Drawing.Point(164, 136); this.button2.Location = new System.Drawing.Point(219, 136);
this.button2.Name = "button2"; this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(52, 26); this.button2.Size = new System.Drawing.Size(52, 26);
this.button2.TabIndex = 6; this.button2.TabIndex = 6;
this.button2.Text = "loss"; this.button2.Text = "loss";
this.button2.UseVisualStyleBackColor = true; this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click); this.button2.Click += new System.EventHandler(this.LossBtn_Click);
// //
// label2 // label2
// //
this.label2.AutoSize = true; this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Monospac821 BT", 27.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.ForeColor = System.Drawing.Color.Black; this.label2.ForeColor = System.Drawing.Color.Black;
this.label2.Location = new System.Drawing.Point(142, 76); this.label2.Location = new System.Drawing.Point(197, 76);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(42, 45); this.label2.Size = new System.Drawing.Size(31, 42);
this.label2.TabIndex = 5; this.label2.TabIndex = 5;
this.label2.Text = "-"; this.label2.Text = "-";
// //
// label4 // label4
// //
this.label4.AutoSize = true; this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Monospac821 BT", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(12, 217); this.label4.Location = new System.Drawing.Point(12, 217);
this.label4.Name = "label4"; this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(35, 11); this.label4.Size = new System.Drawing.Size(29, 12);
this.label4.TabIndex = 7; this.label4.TabIndex = 7;
this.label4.Text = "label4"; this.label4.Text = "label4";
// //
// reduceLossBut // reduceLossBut
// //
this.reduceLossBut.Location = new System.Drawing.Point(222, 137); this.reduceLossBut.Location = new System.Drawing.Point(277, 137);
this.reduceLossBut.Name = "reduceLossBut"; this.reduceLossBut.Name = "reduceLossBut";
this.reduceLossBut.Size = new System.Drawing.Size(20, 24); this.reduceLossBut.Size = new System.Drawing.Size(20, 24);
this.reduceLossBut.TabIndex = 8; this.reduceLossBut.TabIndex = 8;
@ -168,7 +177,7 @@
// //
// reduceWinBut // reduceWinBut
// //
this.reduceWinBut.Location = new System.Drawing.Point(82, 137); this.reduceWinBut.Location = new System.Drawing.Point(137, 137);
this.reduceWinBut.Name = "reduceWinBut"; this.reduceWinBut.Name = "reduceWinBut";
this.reduceWinBut.Size = new System.Drawing.Size(20, 24); this.reduceWinBut.Size = new System.Drawing.Size(20, 24);
this.reduceWinBut.TabIndex = 9; this.reduceWinBut.TabIndex = 9;
@ -178,17 +187,17 @@
// //
// clearBut // clearBut
// //
this.clearBut.Location = new System.Drawing.Point(271, 200); this.clearBut.Location = new System.Drawing.Point(19, 103);
this.clearBut.Name = "clearBut"; this.clearBut.Name = "clearBut";
this.clearBut.Size = new System.Drawing.Size(49, 25); this.clearBut.Size = new System.Drawing.Size(75, 25);
this.clearBut.TabIndex = 10; this.clearBut.TabIndex = 10;
this.clearBut.Text = "clear"; this.clearBut.Text = "Clear stats";
this.clearBut.UseVisualStyleBackColor = true; this.clearBut.UseVisualStyleBackColor = true;
this.clearBut.Click += new System.EventHandler(this.clearBut_Click); this.clearBut.Click += new System.EventHandler(this.clearBut_Click);
// //
// srTextBox // srTextBox
// //
this.srTextBox.Location = new System.Drawing.Point(114, 168); this.srTextBox.Location = new System.Drawing.Point(169, 168);
this.srTextBox.Name = "srTextBox"; this.srTextBox.Name = "srTextBox";
this.srTextBox.Size = new System.Drawing.Size(100, 20); this.srTextBox.Size = new System.Drawing.Size(100, 20);
this.srTextBox.TabIndex = 11; this.srTextBox.TabIndex = 11;
@ -196,7 +205,7 @@
// //
// srBut // srBut
// //
this.srBut.Location = new System.Drawing.Point(129, 194); this.srBut.Location = new System.Drawing.Point(184, 194);
this.srBut.Name = "srBut"; this.srBut.Name = "srBut";
this.srBut.Size = new System.Drawing.Size(75, 23); this.srBut.Size = new System.Drawing.Size(75, 23);
this.srBut.TabIndex = 12; this.srBut.TabIndex = 12;
@ -207,26 +216,97 @@
// srLabel // srLabel
// //
this.srLabel.AutoSize = true; this.srLabel.AutoSize = true;
this.srLabel.Font = new System.Drawing.Font("Noto Mono", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.srLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.srLabel.ForeColor = System.Drawing.Color.DarkOrchid; this.srLabel.ForeColor = System.Drawing.Color.DarkOrchid;
this.srLabel.Location = new System.Drawing.Point(183, 26); this.srLabel.Location = new System.Drawing.Point(189, 36);
this.srLabel.Name = "srLabel"; this.srLabel.Name = "srLabel";
this.srLabel.Size = new System.Drawing.Size(21, 23); this.srLabel.Size = new System.Drawing.Size(46, 24);
this.srLabel.TabIndex = 13; this.srLabel.TabIndex = 13;
this.srLabel.Text = "0"; this.srLabel.Text = "0 - 0";
// //
// Form1 // openFileDialog1
//
this.openFileDialog1.FileName = "Overwatch.exe";
this.openFileDialog1.InitialDirectory = "C:\\";
this.openFileDialog1.RestoreDirectory = true;
//
// SRInfoLabel
//
this.SRInfoLabel.AutoSize = true;
this.SRInfoLabel.Location = new System.Drawing.Point(180, 13);
this.SRInfoLabel.Name = "SRInfoLabel";
this.SRInfoLabel.Size = new System.Drawing.Size(87, 13);
this.SRInfoLabel.TabIndex = 14;
this.SRInfoLabel.Text = "Start - Gain/Loss";
//
// notifyIcon1
//
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "OWtrack";
this.notifyIcon1.Visible = true;
//
// SettingsGroup
//
this.SettingsGroup.Controls.Add(this.ChngOWPathBtn);
this.SettingsGroup.Controls.Add(this.ExeTrackCheckBx);
this.SettingsGroup.Controls.Add(this.SRCheckBx);
this.SettingsGroup.Controls.Add(this.clearBut);
this.SettingsGroup.Location = new System.Drawing.Point(12, 62);
this.SettingsGroup.Name = "SettingsGroup";
this.SettingsGroup.Size = new System.Drawing.Size(116, 143);
this.SettingsGroup.TabIndex = 15;
this.SettingsGroup.TabStop = false;
this.SettingsGroup.Text = "Settings";
//
// ChngOWPathBtn
//
this.ChngOWPathBtn.Location = new System.Drawing.Point(19, 74);
this.ChngOWPathBtn.Name = "ChngOWPathBtn";
this.ChngOWPathBtn.Size = new System.Drawing.Size(75, 23);
this.ChngOWPathBtn.TabIndex = 1;
this.ChngOWPathBtn.Text = "OW Path";
this.ChngOWPathBtn.UseVisualStyleBackColor = true;
this.ChngOWPathBtn.Click += new System.EventHandler(this.ChngOWPathBtn_Click);
//
// ExeTrackCheckBx
//
this.ExeTrackCheckBx.AutoSize = true;
this.ExeTrackCheckBx.Checked = true;
this.ExeTrackCheckBx.CheckState = System.Windows.Forms.CheckState.Checked;
this.ExeTrackCheckBx.Location = new System.Drawing.Point(11, 44);
this.ExeTrackCheckBx.Name = "ExeTrackCheckBx";
this.ExeTrackCheckBx.Size = new System.Drawing.Size(90, 17);
this.ExeTrackCheckBx.TabIndex = 0;
this.ExeTrackCheckBx.Text = "OW Tracking";
this.ExeTrackCheckBx.UseVisualStyleBackColor = true;
this.ExeTrackCheckBx.CheckedChanged += new System.EventHandler(this.ExeTrackCheckBx_CheckedChanged);
//
// SRCheckBx
//
this.SRCheckBx.AutoSize = true;
this.SRCheckBx.Checked = true;
this.SRCheckBx.CheckState = System.Windows.Forms.CheckState.Checked;
this.SRCheckBx.Location = new System.Drawing.Point(11, 19);
this.SRCheckBx.Name = "SRCheckBx";
this.SRCheckBx.Size = new System.Drawing.Size(86, 17);
this.SRCheckBx.TabIndex = 0;
this.SRCheckBx.Text = "SR Tracking";
this.SRCheckBx.UseVisualStyleBackColor = true;
this.SRCheckBx.CheckedChanged += new System.EventHandler(this.SRCheckBx_CheckedChanged);
//
// MainForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(332, 237); this.ClientSize = new System.Drawing.Size(342, 237);
this.Controls.Add(this.SettingsGroup);
this.Controls.Add(this.SRInfoLabel);
this.Controls.Add(this.srLabel); this.Controls.Add(this.srLabel);
this.Controls.Add(this.srBut); this.Controls.Add(this.srBut);
this.Controls.Add(this.srTextBox); this.Controls.Add(this.srTextBox);
this.Controls.Add(this.Time); this.Controls.Add(this.Time);
this.Controls.Add(this.status); this.Controls.Add(this.status);
this.Controls.Add(this.label1); this.Controls.Add(this.label1);
this.Controls.Add(this.clearBut);
this.Controls.Add(this.reduceWinBut); this.Controls.Add(this.reduceWinBut);
this.Controls.Add(this.reduceLossBut); this.Controls.Add(this.reduceLossBut);
this.Controls.Add(this.label4); this.Controls.Add(this.label4);
@ -238,9 +318,13 @@
this.Controls.Add(this.label3); this.Controls.Add(this.label3);
this.DoubleBuffered = true; this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "Form1"; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "OWTrack"; this.Text = "OWTrack";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.SettingsGroup.ResumeLayout(false);
this.SettingsGroup.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -265,6 +349,13 @@
private System.Windows.Forms.TextBox srTextBox; private System.Windows.Forms.TextBox srTextBox;
private System.Windows.Forms.Button srBut; private System.Windows.Forms.Button srBut;
private System.Windows.Forms.Label srLabel; private System.Windows.Forms.Label srLabel;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Label SRInfoLabel;
private System.Windows.Forms.NotifyIcon notifyIcon1;
private System.Windows.Forms.GroupBox SettingsGroup;
private System.Windows.Forms.CheckBox ExeTrackCheckBx;
private System.Windows.Forms.CheckBox SRCheckBx;
private System.Windows.Forms.Button ChngOWPathBtn;
} }
} }

269
OWTrack/MainForm.cs Normal file
View File

@ -0,0 +1,269 @@
/*Copyright(c) 2018 Hesham Systems LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.*/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
namespace OWTrack
{
public partial class MainForm : Form
{
Tracker tr;
private const string IS_RUNNING = "Running";
private const string NOT_RUNNING = " Not running";
private bool SRonce = false;
private string Version = Program.Version.ToString();
public MainForm()
{
InitializeComponent();
tr = new Tracker();
loadSave();
checkStatus();
update();
label4.Text = Version;
Text = "OWTrack " + Version;
}
private void checkStatus()
{
Time.Text = DateTime.Now.ToString("h:mm tt");
try
{
if (tr.owRunning())
{
status.Text = IS_RUNNING;
status.ForeColor = Color.FromArgb(0, 192, 0);
}
else
{
if (tr.settings.TrackOW)
{
status.Text = NOT_RUNNING;
status.ForeColor = Color.Black;
}
else status.Text = "";
}
}
catch (Exception e)
{
status.Text = e.Message;
status.ForeColor = Color.Red;
}
}
//Move to saveManeger.cs ?
private void loadSave()
{
try
{
Directory.CreateDirectory("saves");
}
catch (Exception e)
{
MessageBox.Show("Can not create save directory.\n" + e.Message);
}
if (saveManeger.saveExist())
{
try
{
try
{
tr = saveManeger.GetSavedTracker();
}
catch (Exception)
{
MessageBox.Show("Could not load Save.\n" +
"Starting new save.");
tr = new Tracker();
}
if (tr.startSR > 0) SRonce = true;
if (tr.settings.GamePath == "" || tr.settings.GamePath == null)
{
if (!tr.LoacteOW())
{
tr.settings.GamePath = askForGamePath();
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
else if (!tr.LoacteOW())
{
tr.settings.GamePath = askForGamePath();
}
ExeTrackCheckBx.Checked = tr.settings.TrackOW;
SRCheckBx.Checked = tr.settings.TrackSR;
tr.StartNewSeission();
}
private string askForGamePath()
{
openFileDialog1.Title = "Select Overwatch.exe";
openFileDialog1.DefaultExt = "exe";
openFileDialog1.Filter = "exe Files (*.exe)|*.exe|All files (*.*)|*.*";
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
MessageBox.Show("Saved Overwatch.exe location.\nPress Clear to rest");
return openFileDialog1.FileName;
}
else return null;
}
private void SRSystem(bool state)
{
srBut.Enabled = state;
srTextBox.Enabled = state;
tr.settings.TrackSR = state;
}
private void OWTrackFunc(bool state) => tr.settings.TrackOW = state;
private void update()
{
Wins.Text = tr.GetWins().ToString();
Losses.Text = tr.GetLosses().ToString();
if (tr.newSR == 0)
{
if (tr.srDiff() < 1) { srLabel.Text = tr.startSR.ToString() + " - 0"; }
else srLabel.Text = tr.startSR.ToString() + " - " + tr.srDiff();
}
else srLabel.Text = tr.startSR.ToString() + " - " + tr.srDiff();
srTextBox.Text = null;
saveManeger.SaveJSON(tr);
}
private void AddMatch()
{
Match match = new Match
{
StartSR = tr.startSR,
newSR = tr.newSR,
ChangeInSR = tr.srDiff(),
dateTime = DateTime.Now.Date
};
tr.GetCurrentSession().AddMatch(match);
}
#region Events
private void timer1_Tick(object sender, EventArgs e) => checkStatus();
private void WinBtn_Click(object sender, EventArgs e)
{
tr.addWin();
update();
}
private void LossBtn_Click(object sender, EventArgs e)
{
tr.addLoss();
update();
}
private void reduceWinBut_Click(object sender, EventArgs e)
{
if (tr.wins > 0)
{
tr.reduceWin();
update();
}
}
private void reduceLossBut_Click(object sender, EventArgs e)
{
if (tr.losses > 0)
{
tr.rediceLoss();
update();
}
}
private void clearBut_Click(object sender, EventArgs e)
{
tr.reset();
update();
}
private void srBut_Click(object sender, EventArgs e)
{
int sr = 0;
try
{
sr = Convert.ToInt32(srTextBox.Text);
}
catch (FormatException)
{
MessageBox.Show("Enter a Number!");
return;
}
catch (OverflowException ex)
{
MessageBox.Show(ex.Message);
return;
}
finally
{
//if (!SRonce)
//{
// tr.startSR = sr;
// SRonce = true;
//}
//else tr.newSR = sr;
if (tr.GetCurrentSession().IsNewSession())
tr.startSR = sr;
else
tr.newSR = sr;
}
AddMatch();
update();
}
private void SRCheckBx_CheckedChanged(object sender, EventArgs e)
{
SRSystem(SRCheckBx.Checked);
update();
}
private void ExeTrackCheckBx_CheckedChanged(object sender, EventArgs e)
{
OWTrackFunc(ExeTrackCheckBx.Checked);
update();
}
private void ChngOWPathBtn_Click(object sender, EventArgs e)
{
tr.settings.GamePath = askForGamePath();
update();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
notifyIcon1.Icon = null;
notifyIcon1.Dispose();
}
#endregion
}
}

402
OWTrack/MainForm.resx Normal file
View File

@ -0,0 +1,402 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>244, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAMAICAAAAEAIACoEAAANgAAABgYAAABACAAiAkAAN4QAAAQEAAAAQAgAGgEAABmGgAAKAAAACAA
AABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA////zP///8z////M////zP///8z/AAAA/////////////////wAA
AP///8z////M////zP///8z////M////zP///8z/AAAA////zP///8z////M/wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD////M////zP8AAAD/AAAA////
/////////////wAAAP///8z////M////zP///8z////M////zP8AAAD////M////zP///8z/AAAA/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ZpnM/2aZzP8AAAD/AAAA/zPM
//8zzP//AAAA/////////////////wAAAP///8z////M////zP///8z////M////zP///8z////M////
zP8AAAD/AAAAAAAAAABERET/AAAA/wAAAP9ERET/AAAAAAAAAAAAAAAAAAAA/2aZzP9mmcz/ZpnM/2aZ
zP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAAAP8AAAD/AAAA////zP///8z////M////
zP///8z////M/wAAAP8AAAAAAAAA/5lm//8AM5n/ADOZ/wAzmf8AAAD/AAAAAAAAAAAAAAAAAAAA/wAA
AP8AAAD/AAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAAAP///8z////M////
zP///8z////M////zP///8z/AAAA/0RERP8AM5n/mWb//wAAAP8AAAD/mWb//wAzmf9ERET/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAA
AP///8z////M////zP///8z/AAAA/wAAAP8AAAAAAAAA/5lm//8AAAD/AAAAAAAAAAAAAAD/ADOZ/wAA
AP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP//////AAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA////
/////////////wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/mZn//wAAAP8AAAAAAAAAAAAA
AP8AM5n/AAAA/wAAAAAAAAAAAAAA/zMz//8zM///MzP//wAAAP8AAAD/AAAA/2aZzP8AAAD/M8z//zPM
//8zzP//AAAA//////8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERP+Zmf//mZn//wAA
AP8AAAD/ADOZ/wAzmf9ERET/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/MzP//zMz//8AAAD/ZpnM/wAA
AP8zzP//M8z//zPM//8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP/MzP//mZn//5lm//+ZZv//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAA
AP9mmcz/AAAA/zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAERERP8AAAD/AAAA/0RERP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA////
////////AAAA/2aZzP8AAAD/M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAD/AAAA////
////////AAAA/wAAAP9mmcz/ZpnM/wAAAP8AAAD/M8z//zPM//8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AAAA////
////////AAAA/wAAAP8AAAD/ZpnM/2aZzP8AAAD/M8z//zPM//8AAAD/M8z//wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/ZpnM/2aZzP9mmcz/AAAA/zPM//8AAAD/M8z//wAAAP8zzP//M8z//wAA
AP8AAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9mmcz/ZpnM/2aZ
zP9mmcz/ZpnM/2aZzP9mmcz/ZpnM/2aZzP9mmcz/AAAA/wAAAP8zzP//M8z//wAAAP8AAAD/M8z//zPM
//8AAAD/AAAA/wAAAP8AAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP9mmcz/ZpnM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM
//8AAAD/AAAA/zPM//8AAAD/AAAA/wAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP8AAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8AAAD/M8z//wAAAP8zzP//AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM//8zzP//M8z//wAAAP8AAAD/AAAA/wAAAP9VVVX/M8z//zPM
//8zzP//M8z//zPM//8AAAD/AAAA/zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8zzP//M8z//zPM//8AAAD////M////zP///8z////M/wAA
AP8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA////zP///8z/AAAA////
zP///////////wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7u7v/AAAA////
zP//////////////////////AAAA/zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD///////////////////////////8AAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAALu7u/8AAAD/////////////////AAAA/zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALu7u/8AAAD/VVVV/wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/zPM//8AAAD/AAAAAAAA
AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/zPM//8zzP//AAAA/zPM//8AAAD/AAAA/wAA
AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAA
AAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/4AAAP/A
AAD/wAAAw4AAAIHAAAAA/AABGOAABxjAAD8A4AD/gfwB/8PwAf/+QAH//AAB//AAAL/gAABf8AAAX/gA
AP/wAAB/8AAAP/gAAD/+AAAf/wAAH/8AAB//gAAf/+AAP//wAD//+AB///wAv//+Ab///4Z////5/ygA
AAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAJCxDPHx8Z/z8/M/8/PzP/Pz8z/xAQDP8/Pz//Pz8//w8PD/8/PzP/Pz8z/z8/M/8/PzP/Pz8z/w8P
DP8/PzP/Pz8z/w8PDP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsNU8fTE9Kv39/Zf6fn3///v7L/j8/
M/+fn5/+/v7+/p+fn/6fn3///v7L/v7+y/7//8z//v7L/j8/Mv7//8z//v7L/j8/Mv4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAGh8wfzlWcv5JZn//Pz8y/iyCnP8sgp/+n5+f/v7+/v6fn5z/n59//v7+
y/7//8z//v7L/s/Ppf7//8z//v7L/j8/Mv4rLlsQPThdnxYcOf8MGTP/KzRNnzI4VQ8sMksvLUFY30xy
mf9Mcpn/WYWy/yxDWf8ppc//H3+f/5Kcn///////n5+f/w8PD/9vb1n////M////zP///8z////M/z8/
Mv8qMlCfTD+l/iYsef4TJmz/JjKM/i43Tp8AAAAALDRIPx4lMX8gKzZ/Kj1Pv1mFsv8sUmz+Jpi//h9/
n/6fn5///v7+/p+fn/6fn3///v7L/v7+y/7f37L/f39l/l5eTJ8pI0b/TDmS/iIhPG8kIz1vEyZs/gwZ
Mv4AAAAAAAAAABkgK48PFRu/aGtu30JMVv9fj7/+LFJs/imlz/4sgp//n5+f/v7+/v6fn5z/Pz8y/j8/
Mv5KTUDPbnRjP5aWew8zM0z/X1+f/yUpQm8dJDxvAB9f/wwZM/8AAAAAJC4/XyAhlu8mJr//GRl//wwM
P/8ZJjP/Mkxl/yaZv/8zzP//GWV//4+Pj/8cJSW/SVxZXwAAAAAAAAAAAAAAAAAAAAA+QV2ff3+//mZm
n/5MOZL/JjKM/i06Up8AAAAAAAAAACEzRV8aLjx/GiRevxkZf/8ZJjP+Mkxl/iaZv/4zzP//GWV//iMz
Np8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsOV4PRUxgnzY2TP4zJkz/Pj9eny5BYA8AAAAAAAAAAAAA
AAANFx6/Zmtv37+/v/8ZJjP+Mkxl/iaZv/4zzP//GWV//kBjbD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAALkFbHzk9Q885P0XPMz9Lnz8/P/+/v7//X19f/xMcJv9fj7//LFJs/wwz
P/8ppc//GWV//zNfbj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbJjR/DRMav19f
X/5fX1//Pz8//n9/f/4MExn/M0xm/lmFsv8sUmz+GWV//iyy3/4MMz//Jpi//h1JWJ8xb4MfK15sPwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABkjL49Mcpn/THKZ/0xymf9Mcpn/THKZ/0xymf9SfKX/P19//xkm
M/8ppc//GWZ//wkmL/8ppc//H3+f/wMMD/8QLzqfFT5MfyJley8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAiMDzPTHKY/hxCVv4MMz//DDM//gwzP/4MMz//H3+f/jPM//8yy/7+LLLf/i+/7/4DDBD/GWZ//gkm
L/4QO0qPFlNoXxtqhS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkQEyfGWZ//iyy3/4sst//GWV//hll
f/4kcIr/O67U/jPM//8yy/7+Jpi//hllf/4MMz//Jpi//hlmf/4XV21fAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAMMz//Msv+/jLL/v45Vlb/v7+Z/r+/mf6UlHj/JHCK/jPM//8yy/7+Msv+/iml
z/4ppc//Msv+/jLL/v4fe5rvFldtXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEXGQvFh4gvygq
K+/Pz6X/n5+F/8/Psv//////f39//yaZv/8zzP//M8z//zPM//8zzP//M8z//zPM//8ppc//E09jnyCE
pg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmSml8/Pzn//v7y/v7+/v7/////f39//iaZ
v/8yy/7+Msv+/jLL/v4zzP//Msv+/jLL/v4zzP//GWV//hlogj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB5eXn/n5+f/v7+/v7Pz8//Mmx//i+/7/8yy/7+Msv+/jLL/v4zzP//Msv+/jLL
/v4zzP//GWV//hhlfj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmmKUvWm1zvzQ5
O+8WWW//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8vv+//F1933xxzkC8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJkcl8ff5//Msv+/jPM//8yy/7+Msv+/jLL
/v4zzP//Msv+/jLL/v4mmb//EkxffwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAwantvH3+f/jPM//8yy/7+Msv+/jLL/v4zzP//Msv+/jLL/v4RRFXPIoqtHwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALmh7XyF9
nO8ppc//M8z//ymlz/8mmb//E0xf/xFEVc8deJc/E01hfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmfF8cV2qfGWV//gYZH/4YYHffE05hfxNP
Y38TTmJ/HHKOPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAvlLYPInOOPx9wiz8YXnVfCScwvxdfeF8eepkvAAAAAAAAAAAAAAAAAAAAAAAA
AAD8AAAA/AAAAP4AAAAAAAAAAgAAAAMAAAACAA8AAwA/AAOAPwDwAD8A4AAPAMAABwDgAAcA4AAfAOAA
DwDgAAcA+AAHAPwABwD8AAcA/wAPAP+ADwD/wA8A/+APAP/wHwAoAAAAEAAAACAAAAABACAAAAAAAEAE
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwPFr9/f2b/f39m/z8/M/9/f3//Pz8//39/
Zv9/f2b/f39m/z8/M/9/f2b/Pz8z/wAAAAAAAAAAAAAAAAAAAAAAAAAAGSYz/1lmZv9McnL/THJ/////
//9/f3L////M////zP+/v5n////M/39/Zv8iJUg/Nzd3/xEqXf8oLEM/KS9FPzNMZv8zTGb/THKZ/yaZ
v/9Mcn///////z8/P/+/v5n////M////zP9/f2b/Nzd3/zElU78yJlS/ESpd/wAAAAAtOEo/ICw3f1lm
cv9Mcpn/Jpm//0xyf///////f39y/39/Zv9jZ1W/d3hiP11dkP8yNFa/DRs9vxEqXf8AAAAAHCFbvxkZ
f/8ZGX//M0xm/xlmf/8zzP//Pz8//zlLS38AAAAAAAAAAAAAAAAjLks/amqQ/11EkP8lNEw/AAAAAAAA
AAAbLz1/f39//zNMZv8ZZn//M8z//yxDSH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATFJZv01V
Xb9/f3//f39//xkmM/9Mcpn/GWZ//yaZv/8hP0p/AAAAAAAAAAAAAAAAAAAAAAAAAAAsPVE/M0xm/zNM
Zv8zTGb/M0xm/0xymf8zTGb/Jpm//wwzP/8mmb//DDM//xY+TX8iXW8/AAAAAAAAAAAAAAAAAAAAAC1A
Ub8mWXL/GWZ//xlmf/8ZZn//M8z//zPM//8mmb//DDM//wwzP/8bZoA/GWN8PwAAAAAAAAAAAAAAAAAA
AAAZZn//M8z//0xycv9/f2b/VVVI/zPM//8zzP//Jpm//yaZv/8zzP//FlZsvwAAAAAAAAAAAAAAAAAA
AAAAAAAAQVdeP0VNT7+/v5n/v7+y//////8ZZn//M8z//zPM//8zzP//M8z//yaZv/8aaoU/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAbm5u//////+/v7//Jpm//zPM//8zzP//M8z//zPM//8zzP//EENVfwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG6eqz8pPUO/Jpm//zPM//8zzP//M8z//zPM//8zzP//Jpm//xtt
iD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFcb78zzP//M8z//zPM//8zzP//M8z//xZb
cr8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHlxxvyaZv/8mmb//GWZ//xZb
cr8TUGR/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmd5I/FUtdfxNM
X38TTWF/HHGNPwAAAAAAAAAAAAAAAPAAAAD4AAAAAAAAAAgAAAAIBwAADA8AAOAPAACAAwAAwAMAAMAH
AADAAwAA8AMAAPADAAD8BwAA/gcAAP8HAAA=
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAMAICAAAAEAIACoEAAANgAAABgYAAABACAAiAkAAN4QAAAQEAAAAQAgAGgEAABmGgAAKAAAACAA
AABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA////zP///8z////M////zP///8z/AAAA/////////////////wAA
AP///8z////M////zP///8z////M////zP///8z/AAAA////zP///8z////M/wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD////M////zP8AAAD/AAAA////
/////////////wAAAP///8z////M////zP///8z////M////zP8AAAD////M////zP///8z/AAAA/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ZpnM/2aZzP8AAAD/AAAA/zPM
//8zzP//AAAA/////////////////wAAAP///8z////M////zP///8z////M////zP///8z////M////
zP8AAAD/AAAAAAAAAABERET/AAAA/wAAAP9ERET/AAAAAAAAAAAAAAAAAAAA/2aZzP9mmcz/ZpnM/2aZ
zP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAAAP8AAAD/AAAA////zP///8z////M////
zP///8z////M/wAAAP8AAAAAAAAA/5lm//8AM5n/ADOZ/wAzmf8AAAD/AAAAAAAAAAAAAAAAAAAA/wAA
AP8AAAD/AAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAAAP///8z////M////
zP///8z////M////zP///8z/AAAA/0RERP8AM5n/mWb//wAAAP8AAAD/mWb//wAzmf9ERET/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA/////////////////wAA
AP///8z////M////zP///8z/AAAA/wAAAP8AAAAAAAAA/5lm//8AAAD/AAAAAAAAAAAAAAD/ADOZ/wAA
AP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP//////AAAA/2aZzP9mmcz/AAAA/zPM//8zzP//AAAA////
/////////////wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/mZn//wAAAP8AAAAAAAAAAAAA
AP8AM5n/AAAA/wAAAAAAAAAAAAAA/zMz//8zM///MzP//wAAAP8AAAD/AAAA/2aZzP8AAAD/M8z//zPM
//8zzP//AAAA//////8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERP+Zmf//mZn//wAA
AP8AAAD/ADOZ/wAzmf9ERET/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/MzP//zMz//8AAAD/ZpnM/wAA
AP8zzP//M8z//zPM//8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP/MzP//mZn//5lm//+ZZv//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAA
AP9mmcz/AAAA/zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAERERP8AAAD/AAAA/0RERP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA////
////////AAAA/2aZzP8AAAD/M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAD/AAAA////
////////AAAA/wAAAP9mmcz/ZpnM/wAAAP8AAAD/M8z//zPM//8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AAAA////
////////AAAA/wAAAP8AAAD/ZpnM/2aZzP8AAAD/M8z//zPM//8AAAD/M8z//wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/ZpnM/2aZzP9mmcz/AAAA/zPM//8AAAD/M8z//wAAAP8zzP//M8z//wAA
AP8AAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9mmcz/ZpnM/2aZ
zP9mmcz/ZpnM/2aZzP9mmcz/ZpnM/2aZzP9mmcz/AAAA/wAAAP8zzP//M8z//wAAAP8AAAD/M8z//zPM
//8AAAD/AAAA/wAAAP8AAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP9mmcz/ZpnM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM
//8AAAD/AAAA/zPM//8AAAD/AAAA/wAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP8AAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8AAAD/M8z//wAAAP8zzP//AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM//8zzP//M8z//wAAAP8AAAD/AAAA/wAAAP9VVVX/M8z//zPM
//8zzP//M8z//zPM//8AAAD/AAAA/zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8zzP//M8z//zPM//8AAAD////M////zP///8z////M/wAA
AP8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA////zP///8z/AAAA////
zP///////////wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7u7v/AAAA////
zP//////////////////////AAAA/zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD///////////////////////////8AAAD/M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAALu7u/8AAAD/////////////////AAAA/zPM//8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALu7u/8AAAD/VVVV/wAAAP8zzP//M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM//8zzP//M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/M8z//zPM
//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//M8z//zPM//8zzP//AAAA/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AADAAwAA8AMAAPADAAD8BwAA/gcAAP8HAAA=
</value>
</data>
</root>

View File

@ -11,8 +11,9 @@
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl> <PublishUrl>publish\</PublishUrl>
<Install>true</Install> <Install>false</Install>
<InstallFrom>Disk</InstallFrom> <InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled> <UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode> <UpdateMode>Foreground</UpdateMode>
@ -21,10 +22,10 @@
<UpdatePeriodically>false</UpdatePeriodically> <UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired> <UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions> <MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision> <ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> <ApplicationVersion>1.3.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@ -67,9 +68,30 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit> <Prefer32Bit>true</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup>
<ManifestCertificateThumbprint>120F37EDC91FF77172D31673046260B265C70C5D</ManifestCertificateThumbprint>
</PropertyGroup>
<PropertyGroup>
<ManifestKeyFile>OWTrack_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>assets\Jeanette-Foshee-Simpsons-11-Rollover-Homer-donut-1.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
@ -84,17 +106,19 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Form1.cs"> <Compile Include="MainForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Form1.Designer.cs"> <Compile Include="MainForm.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Paths.cs" />
<Compile Include="saveManeger.cs" />
<Compile Include="Tracker.cs" /> <Compile Include="Tracker.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx"> <EmbeddedResource Include="MainForm.resx">
<DependentUpon>Form1.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
@ -105,6 +129,8 @@
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<None Include="app.manifest" />
<None Include="OWTrack_TemporaryKey.pfx" />
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
@ -131,5 +157,8 @@
<Install>false</Install> <Install>false</Install>
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="assets\Jeanette-Foshee-Simpsons-11-Rollover-Homer-donut-1.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

67
OWTrack/Paths.cs Normal file
View File

@ -0,0 +1,67 @@
/*Copyright(c) 2018 Hesham Systems LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.*/
using System.IO;
namespace OWTrack
{
public struct Paths
{
/// <summary>
/// Current Application directory.
/// </summary>
private static string curDir = Directory.GetCurrentDirectory();
/// <summary>
/// Saves Folder relative path. \n Relative to Application Directory.
/// </summary>
private static string SAVES = curDir + "/saves/data.json";
/// <summary>
/// Saves Folder relative path. \n Relative to Application Directory.
/// </summary>
private static string JSON = curDir + "/data.json";
public static string GetJSON() { return JSON; }//TODO: Unused var
/// <summary>
/// Get Saves file Path.
/// </summary>
/// <returns></returns>
public static string GetSaves() { return SAVES; }
/// <summary>
/// Get Current Application directory.
/// </summary>
/// <returns></returns>
public static string GetCurrentDir() { return curDir; }
/// <summary>
/// "Program Files" standered constant paths.
/// </summary>
public struct ProgramFiles
{
public const string C = "C:\\Program Files";
public const string D = "D:\\Program Files";
public const string E = "E:\\Program Files";
public const string F = "F:\\Program Files";
}
}
}

View File

@ -1,14 +1,12 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Deployment.Application;
namespace OWTrack namespace OWTrack
{ {
static class Program static class Program
{ {
public static string Version = "1.2.3";
/// <summary> /// <summary>
/// The main entry point for the application. /// The main entry point for the application.
/// </summary> /// </summary>
@ -17,8 +15,8 @@ namespace OWTrack
{ {
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); Application.Run(new MainForm());
} }
public static string Version { get; } = "1.4.4.a1";
} }
} }

View File

@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("OWTrack")] [assembly: AssemblyTitle("OWTrack")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("Shitty SR Tracker")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("Hesham Systems LLC")]
[assembly: AssemblyProduct("OWTrack")] [assembly: AssemblyProduct("OWTrack")]
[assembly: AssemblyCopyright("Copyright © 2018")] [assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
@ -33,7 +33,10 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")] //[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.3.0.3")]
[assembly: AssemblyFileVersion("1.3.0.3")]
[assembly: NeutralResourcesLanguage("")] [assembly: NeutralResourcesLanguage("")]

View File

@ -1,38 +1,220 @@
using System; /*Copyright(c) 2018 Hesham Systems LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.*/
using System;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.IO; using System.IO;
using System.Collections.Generic;
namespace OWTrack namespace OWTrack
{ {
class Tracker class Tracker
{ {
public int wins, losses, startSR, newSR = 0; //TODO: Encapsulate
public int wins, losses, startSR, newSR, totalMatches = 0;
public void Track() { } public void addWin() => wins++;
public void reset() { wins = 0; losses = 0; startSR = 0; newSR = 0; } public void addLoss() => losses++;
public void addWin() { wins++; } public void reduceWin() => wins--;
public void addLoss() { losses++; } public void rediceLoss() => losses--;
public void reduceWin() { wins--; }
public void rediceLoss() { losses--; }
public int GetWins() { return wins; } public int GetWins() { return wins; }
public int GetLosses() { return losses; } public int GetLosses() { return losses; }
public void setNewSR(int SR) { newSR = SR; } public void setNewSR(int SR) { newSR = SR; }
public int srDiff() { return newSR - startSR; } public int srDiff() { return newSR - startSR; }
public Settings settings = new Settings();
public List<Session> sessions = new List<Session>();
public int GetTotalMatches()
{
int number = 0;
foreach (var session in sessions)
{
number += session.TotalMatches;
}
return number;
}
public int GetCurrentSessionMatches()
{
return sessions.Last().TotalMatches;
}
public void reset()
{
wins = 0;
losses = 0;
startSR = 0;
newSR = 0;
settings.Reset();
sessions.Clear();
StartNewSeission();
}
public void StartNewSeission()
{
Session ses = new Session(startSR);
sessions.Add(ses);
}
public Session GetCurrentSession()
{
return sessions.Last();
}
public bool owRunning() public bool owRunning()
{
if (settings.TrackOW)
{
try
{
bool isRunning = Process.GetProcessesByName("Overwatch")
.FirstOrDefault(p => p.MainModule.FileName.StartsWith(settings.GamePath)) != default(Process);
return isRunning;
}
catch (Exception e)
{
throw e;
}
}
else return false;
}
public bool LoacteOW()
{ {
try try
{ {
bool isRunning = Process.GetProcessesByName("Overwatch") DriveInfo[] driveInfo = DriveInfo.GetDrives();
.FirstOrDefault(p => p.MainModule.FileName.StartsWith(@"D:\Hesham\installed Games\Overwatch")) != default(Process); List<string> paths = new List<string>();
return isRunning; //Searches all drives (too long)
//foreach (var drive in driveInfo)
//{
//paths.AddRange(GetFiles(drive.ToString(),"Overwatch.exe"));
//}
paths.AddRange(GetFiles(Paths.ProgramFiles.C, "Overwatch.exe"));
paths.AddRange(GetFiles(Paths.ProgramFiles.D, "Overwatch.exe"));
if (paths.Count > 1)
{
//TODO: ask about correct path
//New Form??
return true;
}
else if (paths.Count == 1
&& paths[0].Contains("Overwatch.exe"))
{
settings.GamePath = paths[0];
return true;
}
else return false;
} }
catch (Exception e) catch (Exception)
{ {
Exception ex = new Exception("Error in tracking Overwatch.exe"); return false;
throw ex;
} }
} }
public static IEnumerable<string> GetFiles(string root, string searchPattern)
{
Stack<string> pending = new Stack<string>();
pending.Push(root);
while (pending.Count != 0)
{
var path = pending.Pop();
string[] next = null;
try
{
next = Directory.GetFiles(path, searchPattern);
}
catch { }
if (next != null && next.Length != 0)
foreach (var file in next) yield return file;
try
{
next = Directory.GetDirectories(path);
foreach (var subdir in next) pending.Push(subdir);
}
catch { }
}
}
}
class Settings
{
public bool TrackSR, TrackOW = true;
public string GamePath = "";
/// <summary>
/// Reset All values to defult
/// </summary>
public void Reset()
{
TrackOW = true;
TrackSR = true;
GamePath = "";
}
}
class Session
{
public int TotalMatches;
public int SkillChange;
public int StartSR;
public DateTime date;
public List<Match> Matches = new List<Match>();
/// <summary>
/// Start a new session with a starting Skill Rating
///</summary>
public Session(int StartSR)
{
this.StartSR = StartSR;
date = DateTime.Now.Date;
TotalMatches = 0;
}
public bool IsNewSession()
{
if (Matches.Count == 0) return true;
else return false;
}
public Match GetLastMatch()
{
return Matches.Last();
}
public void AddMatch(Match match)
{
this.Matches.Add(match);
this.TotalMatches = Matches.Count();
}
}
class Match
{
public Match() { }
public DateTime dateTime { get; set; }
public int StartSR;
public int LastMatchSR;
public int newSR;
public int ChangeInSR;
} }
} }

70
OWTrack/app.manifest Normal file
View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet ID="Custom" SameSite="site" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net461" /> <package id="Newtonsoft.Json" version="12.0.1" targetFramework="net461" />
</packages> </packages>

103
OWTrack/saveManeger.cs Normal file
View File

@ -0,0 +1,103 @@
/*Copyright(c) 2018 Hesham Systems LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.*/
using Newtonsoft.Json;
using System;
using System.IO;
namespace OWTrack
{
class saveManeger
{
/// <summary>
/// Deserialize saved tracker instance.
/// </summary>
/// <returns>Tracker Object</returns>
public static Tracker GetSavedTracker()
{
try
{
return JsonConvert.DeserializeObject<Tracker>(File.ReadAllText(Paths.GetSaves()));
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// Deserialize saved tracker instance from a Custom path
/// </summary>
/// <param name="customPath"></param>
/// <returns></returns>
public static Tracker GetSavedTracker(string customPath)
{
try
{
return JsonConvert.DeserializeObject<Tracker>(File.ReadAllText(customPath));
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// Deserializes and Saves the Tracker Object.
/// </summary>
/// <param name="tracker"></param>
/// <returns>Boolean value that represents the success or failuer</returns>
public static bool SaveJSON(Tracker tracker)
{
try
{
File.WriteAllText(Paths.GetSaves(), JsonConvert.SerializeObject(tracker, Formatting.Indented));
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// Check if a 'data.json' exists in the default location '../saves/data.json'.
/// </summary>
/// <returns>Boolean Value</returns>
public static bool saveExist()
{
try
{
if (File.Exists(Paths.GetSaves()))
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
throw e;
}
}
}
}

20
README.md Normal file
View File

@ -0,0 +1,20 @@
# OWtrack ![CI status](https://img.shields.io/badge/build-passing-brightgreen.svg) [![GitHub](https://img.shields.io/badge/Version-1.4.3-blue.svg)](https://apollo-server.ddns.net/gitea/Hesham/OWtrack/releases) [![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)](https://opensource.org/licenses/MIT)
Track your Overwatch preformance with a shi#ty UI
## Installation
### Requirements
* Windows 7, 8, 8.1, 10
* .NET 4.0
## Usage
TBA
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
## License
[MIT](https://choosealicense.com/licenses/mit/)