diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e84e194 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. +dotnet_diagnostic.CS8618.severity = suggestion diff --git a/.vs/Superlocal.Agile/DesignTimeBuild/.dtbcache.v2 b/.vs/Superlocal.Agile/DesignTimeBuild/.dtbcache.v2 index 7cd43c0..b7e2d57 100644 Binary files a/.vs/Superlocal.Agile/DesignTimeBuild/.dtbcache.v2 and b/.vs/Superlocal.Agile/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/Superlocal.Agile/project-colors.json b/.vs/Superlocal.Agile/project-colors.json index 563f207..92c78ad 100644 --- a/.vs/Superlocal.Agile/project-colors.json +++ b/.vs/Superlocal.Agile/project-colors.json @@ -10,7 +10,42 @@ "ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3", "DisplayName": "Miscellaneous Files", "ColorIndex": -1 + }, + "14ea4223-1f26-42b0-aa2b-2eea8c47543d": { + "ProjectGuid": "14ea4223-1f26-42b0-aa2b-2eea8c47543d", + "DisplayName": "doc", + "ColorIndex": 1 + }, + "e95d303a-9855-4bc6-a25f-e1fc08a3381d": { + "ProjectGuid": "e95d303a-9855-4bc6-a25f-e1fc08a3381d", + "DisplayName": "Superlocal.Agile.Infrastructure", + "ColorIndex": 2 + }, + "b36d8eae-3a2c-45cc-a4ca-85057ac7125e": { + "ProjectGuid": "b36d8eae-3a2c-45cc-a4ca-85057ac7125e", + "DisplayName": "Superlocal.Agile.Domain", + "ColorIndex": 3 + }, + "6524ad6e-4a33-4051-a751-7d08b7ab0d9c": { + "ProjectGuid": "6524ad6e-4a33-4051-a751-7d08b7ab0d9c", + "DisplayName": "Superlocal.Agile.Tests", + "ColorIndex": 4 + }, + "36915115-0c09-41fb-8b6f-ff786b88a2d1": { + "ProjectGuid": "36915115-0c09-41fb-8b6f-ff786b88a2d1", + "DisplayName": "Superlocal.Agile.WinApp", + "ColorIndex": 5 + }, + "7ca284de-c6a3-484b-9605-066134ac571b": { + "ProjectGuid": "7ca284de-c6a3-484b-9605-066134ac571b", + "DisplayName": "Superlocal.Agile.Application", + "ColorIndex": 6 + }, + "376bbf07-2e54-44d5-9b80-649b0798240e": { + "ProjectGuid": "376bbf07-2e54-44d5-9b80-649b0798240e", + "DisplayName": "Superlocal.Agile.Domain", + "ColorIndex": 7 } }, - "NextColorIndex": 1 + "NextColorIndex": 8 } \ No newline at end of file diff --git a/.vs/Superlocal.Agile/v17/.futdcache.v1 b/.vs/Superlocal.Agile/v17/.futdcache.v1 index 47c7009..67434b2 100644 Binary files a/.vs/Superlocal.Agile/v17/.futdcache.v1 and b/.vs/Superlocal.Agile/v17/.futdcache.v1 differ diff --git a/.vs/Superlocal.Agile/v17/.suo b/.vs/Superlocal.Agile/v17/.suo index 31b18b5..b9a8d28 100644 Binary files a/.vs/Superlocal.Agile/v17/.suo and b/.vs/Superlocal.Agile/v17/.suo differ diff --git a/README.md b/README.md index e690005..6835d60 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,12 @@ Helper for devs on an agile team. -## Test \ No newline at end of file +## Features + +- Integration with + - Redmine + - Gitlab + +### Windows only + +- Tracks your time in different apps and let you sync with project management tools \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Form1.Designer.cs b/Superlocal.Agile.WinApp/Form1.Designer.cs deleted file mode 100644 index 64095c6..0000000 --- a/Superlocal.Agile.WinApp/Form1.Designer.cs +++ /dev/null @@ -1,333 +0,0 @@ -namespace Superlocal.Agile.WinApp -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.listBox2 = new System.Windows.Forms.ListBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.materialCheckbox1 = new MaterialSkin.Controls.MaterialCheckbox(); - this.materialCheckbox2 = new MaterialSkin.Controls.MaterialCheckbox(); - this.materialCheckbox3 = new MaterialSkin.Controls.MaterialCheckbox(); - this.materialCheckbox4 = new MaterialSkin.Controls.MaterialCheckbox(); - this.materialDrawer1 = new MaterialSkin.Controls.MaterialDrawer(); - this.materialTabControl1 = new MaterialSkin.Controls.MaterialTabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.materialCard1 = new MaterialSkin.Controls.MaterialCard(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.materialExpansionPanel1 = new MaterialSkin.Controls.MaterialExpansionPanel(); - this.materialLabel1 = new MaterialSkin.Controls.MaterialLabel(); - this.materialCheckedListBox1 = new MaterialSkin.Controls.MaterialCheckedListBox(); - this.materialDivider1 = new MaterialSkin.Controls.MaterialDivider(); - this.materialTextBox1 = new MaterialSkin.Controls.MaterialTextBox(); - this.materialTabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.Location = new System.Drawing.Point(1056, 76); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 1; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // treeView1 - // - this.treeView1.Location = new System.Drawing.Point(12, 106); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(1119, 603); - this.treeView1.TabIndex = 2; - // - // listBox2 - // - this.listBox2.FormattingEnabled = true; - this.listBox2.ItemHeight = 15; - this.listBox2.Location = new System.Drawing.Point(12, 715); - this.listBox2.Name = "listBox2"; - this.listBox2.Size = new System.Drawing.Size(1119, 64); - this.listBox2.TabIndex = 3; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(12, 77); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(521, 23); - this.textBox1.TabIndex = 4; - // - // materialCheckbox1 - // - this.materialCheckbox1.AutoSize = true; - this.materialCheckbox1.Depth = 0; - this.materialCheckbox1.Location = new System.Drawing.Point(0, 0); - this.materialCheckbox1.Margin = new System.Windows.Forms.Padding(0); - this.materialCheckbox1.MouseLocation = new System.Drawing.Point(-1, -1); - this.materialCheckbox1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckbox1.Name = "materialCheckbox1"; - this.materialCheckbox1.ReadOnly = false; - this.materialCheckbox1.Ripple = true; - this.materialCheckbox1.Size = new System.Drawing.Size(10, 10); - this.materialCheckbox1.TabIndex = 0; - this.materialCheckbox1.Text = "materialCheckbox1"; - this.materialCheckbox1.UseVisualStyleBackColor = true; - // - // materialCheckbox2 - // - this.materialCheckbox2.AutoSize = true; - this.materialCheckbox2.Depth = 0; - this.materialCheckbox2.Location = new System.Drawing.Point(0, 0); - this.materialCheckbox2.Margin = new System.Windows.Forms.Padding(0); - this.materialCheckbox2.MouseLocation = new System.Drawing.Point(-1, -1); - this.materialCheckbox2.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckbox2.Name = "materialCheckbox2"; - this.materialCheckbox2.ReadOnly = false; - this.materialCheckbox2.Ripple = true; - this.materialCheckbox2.Size = new System.Drawing.Size(10, 10); - this.materialCheckbox2.TabIndex = 0; - this.materialCheckbox2.Text = "materialCheckbox2"; - this.materialCheckbox2.UseVisualStyleBackColor = true; - // - // materialCheckbox3 - // - this.materialCheckbox3.AutoSize = true; - this.materialCheckbox3.Depth = 0; - this.materialCheckbox3.Location = new System.Drawing.Point(0, 0); - this.materialCheckbox3.Margin = new System.Windows.Forms.Padding(0); - this.materialCheckbox3.MouseLocation = new System.Drawing.Point(-1, -1); - this.materialCheckbox3.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckbox3.Name = "materialCheckbox3"; - this.materialCheckbox3.ReadOnly = false; - this.materialCheckbox3.Ripple = true; - this.materialCheckbox3.Size = new System.Drawing.Size(10, 10); - this.materialCheckbox3.TabIndex = 0; - this.materialCheckbox3.Text = "materialCheckbox3"; - this.materialCheckbox3.UseVisualStyleBackColor = true; - // - // materialCheckbox4 - // - this.materialCheckbox4.AutoSize = true; - this.materialCheckbox4.Depth = 0; - this.materialCheckbox4.Location = new System.Drawing.Point(0, 0); - this.materialCheckbox4.Margin = new System.Windows.Forms.Padding(0); - this.materialCheckbox4.MouseLocation = new System.Drawing.Point(-1, -1); - this.materialCheckbox4.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckbox4.Name = "materialCheckbox4"; - this.materialCheckbox4.ReadOnly = false; - this.materialCheckbox4.Ripple = true; - this.materialCheckbox4.Size = new System.Drawing.Size(10, 10); - this.materialCheckbox4.TabIndex = 0; - this.materialCheckbox4.Text = "materialCheckbox4"; - this.materialCheckbox4.UseVisualStyleBackColor = true; - // - // materialDrawer1 - // - this.materialDrawer1.AutoHide = false; - this.materialDrawer1.AutoShow = false; - this.materialDrawer1.BackgroundWithAccent = false; - this.materialDrawer1.BaseTabControl = null; - this.materialDrawer1.Depth = 0; - this.materialDrawer1.HighlightWithAccent = true; - this.materialDrawer1.IndicatorWidth = 0; - this.materialDrawer1.IsOpen = false; - this.materialDrawer1.Location = new System.Drawing.Point(-103, 20); - this.materialDrawer1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialDrawer1.Name = "materialDrawer1"; - this.materialDrawer1.ShowIconsWhenHidden = false; - this.materialDrawer1.Size = new System.Drawing.Size(103, 548); - this.materialDrawer1.TabIndex = 6; - this.materialDrawer1.Text = "materialDrawer1"; - this.materialDrawer1.UseColors = false; - // - // materialTabControl1 - // - this.materialTabControl1.Controls.Add(this.tabPage1); - this.materialTabControl1.Controls.Add(this.tabPage2); - this.materialTabControl1.Depth = 0; - this.materialTabControl1.Location = new System.Drawing.Point(321, 154); - this.materialTabControl1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialTabControl1.Multiline = true; - this.materialTabControl1.Name = "materialTabControl1"; - this.materialTabControl1.SelectedIndex = 0; - this.materialTabControl1.Size = new System.Drawing.Size(517, 310); - this.materialTabControl1.TabIndex = 7; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.materialCard1); - this.tabPage1.Location = new System.Drawing.Point(4, 24); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(509, 282); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "tabPage1"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // materialCard1 - // - this.materialCard1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.materialCard1.Depth = 0; - this.materialCard1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.materialCard1.Location = new System.Drawing.Point(21, 33); - this.materialCard1.Margin = new System.Windows.Forms.Padding(14); - this.materialCard1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCard1.Name = "materialCard1"; - this.materialCard1.Padding = new System.Windows.Forms.Padding(14); - this.materialCard1.Size = new System.Drawing.Size(200, 100); - this.materialCard1.TabIndex = 0; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.materialExpansionPanel1); - this.tabPage2.Controls.Add(this.materialLabel1); - this.tabPage2.Controls.Add(this.materialCheckedListBox1); - this.tabPage2.Controls.Add(this.materialDivider1); - this.tabPage2.Controls.Add(this.materialTextBox1); - this.tabPage2.Location = new System.Drawing.Point(4, 24); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(509, 282); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "tabPage2"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // materialExpansionPanel1 - // - this.materialExpansionPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.materialExpansionPanel1.Depth = 0; - this.materialExpansionPanel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); - this.materialExpansionPanel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.materialExpansionPanel1.Location = new System.Drawing.Point(50, 154); - this.materialExpansionPanel1.Margin = new System.Windows.Forms.Padding(3, 16, 3, 16); - this.materialExpansionPanel1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialExpansionPanel1.Name = "materialExpansionPanel1"; - this.materialExpansionPanel1.Padding = new System.Windows.Forms.Padding(24, 64, 24, 16); - this.materialExpansionPanel1.Size = new System.Drawing.Size(480, 240); - this.materialExpansionPanel1.TabIndex = 4; - // - // materialLabel1 - // - this.materialLabel1.AutoSize = true; - this.materialLabel1.Depth = 0; - this.materialLabel1.Font = new System.Drawing.Font("Roboto", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); - this.materialLabel1.Location = new System.Drawing.Point(335, 23); - this.materialLabel1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialLabel1.Name = "materialLabel1"; - this.materialLabel1.Size = new System.Drawing.Size(107, 19); - this.materialLabel1.TabIndex = 3; - this.materialLabel1.Text = "materialLabel1"; - // - // materialCheckedListBox1 - // - this.materialCheckedListBox1.AutoScroll = true; - this.materialCheckedListBox1.BackColor = System.Drawing.Color.Transparent; - this.materialCheckedListBox1.Depth = 0; - this.materialCheckedListBox1.Location = new System.Drawing.Point(70, 41); - this.materialCheckedListBox1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialCheckedListBox1.Name = "materialCheckedListBox1"; - this.materialCheckedListBox1.Size = new System.Drawing.Size(200, 100); - this.materialCheckedListBox1.Striped = false; - this.materialCheckedListBox1.StripeDarkColor = System.Drawing.Color.Empty; - this.materialCheckedListBox1.TabIndex = 2; - // - // materialDivider1 - // - this.materialDivider1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.materialDivider1.Depth = 0; - this.materialDivider1.Location = new System.Drawing.Point(413, 99); - this.materialDivider1.MouseState = MaterialSkin.MouseState.HOVER; - this.materialDivider1.Name = "materialDivider1"; - this.materialDivider1.Size = new System.Drawing.Size(75, 23); - this.materialDivider1.TabIndex = 1; - this.materialDivider1.Text = "materialDivider1"; - // - // materialTextBox1 - // - this.materialTextBox1.AnimateReadOnly = false; - this.materialTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.materialTextBox1.Depth = 0; - this.materialTextBox1.Font = new System.Drawing.Font("Roboto", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); - this.materialTextBox1.LeadingIcon = null; - this.materialTextBox1.Location = new System.Drawing.Point(303, 99); - this.materialTextBox1.MaxLength = 50; - this.materialTextBox1.MouseState = MaterialSkin.MouseState.OUT; - this.materialTextBox1.Multiline = false; - this.materialTextBox1.Name = "materialTextBox1"; - this.materialTextBox1.Size = new System.Drawing.Size(100, 50); - this.materialTextBox1.TabIndex = 0; - this.materialTextBox1.Text = ""; - this.materialTextBox1.TrailingIcon = null; - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1162, 794); - this.Controls.Add(this.materialTabControl1); - this.Controls.Add(this.materialDrawer1); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.listBox2); - this.Controls.Add(this.treeView1); - this.Controls.Add(this.button1); - this.DrawerIsOpen = true; - this.DrawerTabControl = this.materialTabControl1; - this.Name = "Form1"; - this.Text = "Form1"; - this.materialTabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private Button button1; - private TreeView treeView1; - private ListBox listBox2; - private TextBox textBox1; - private MaterialSkin.Controls.MaterialCheckbox materialCheckbox1; - private MaterialSkin.Controls.MaterialCheckbox materialCheckbox2; - private MaterialSkin.Controls.MaterialCheckbox materialCheckbox3; - private MaterialSkin.Controls.MaterialCheckbox materialCheckbox4; - private MaterialSkin.Controls.MaterialDrawer materialDrawer1; - private MaterialSkin.Controls.MaterialTabControl materialTabControl1; - private TabPage tabPage1; - private MaterialSkin.Controls.MaterialCard materialCard1; - private TabPage tabPage2; - private MaterialSkin.Controls.MaterialExpansionPanel materialExpansionPanel1; - private MaterialSkin.Controls.MaterialLabel materialLabel1; - private MaterialSkin.Controls.MaterialCheckedListBox materialCheckedListBox1; - private MaterialSkin.Controls.MaterialDivider materialDivider1; - private MaterialSkin.Controls.MaterialTextBox materialTextBox1; - } -} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Program.cs b/Superlocal.Agile.WinApp/Program.cs deleted file mode 100644 index 994de73..0000000 --- a/Superlocal.Agile.WinApp/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Superlocal.Agile.WinApp -{ - internal static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); - } - } -} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj b/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj deleted file mode 100644 index 9293037..0000000 --- a/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - WinExe - net6.0-windows - enable - true - enable - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj.user b/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj.user deleted file mode 100644 index 485b518..0000000 --- a/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj.user +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Component - - - Form - - - \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.dgspec.json b/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.dgspec.json deleted file mode 100644 index 28a29d2..0000000 --- a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.dgspec.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "format": 1, - "restore": { - "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj": {} - }, - "projects": { - "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj", - "projectName": "Superlocal.Agile.WinApp", - "projectPath": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj", - "packagesPath": "C:\\Users\\fch\\.nuget\\packages\\", - "outputPath": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", - "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\" - ], - "configFilePaths": [ - "C:\\Users\\fch\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config" - ], - "originalTargetFrameworks": [ - "net6.0-windows7.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net6.0-windows7.0": { - "targetAlias": "net6.0-windows", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - } - }, - "frameworks": { - "net6.0-windows7.0": { - "targetAlias": "net6.0-windows", - "dependencies": { - "MaterialSkin.2": { - "target": "Package", - "version": "[2.3.1, )" - }, - "Newtonsoft.Json": { - "target": "Package", - "version": "[13.0.1, )" - }, - "PInvoke.User32": { - "target": "Package", - "version": "[0.7.104, )" - }, - "PInvoke.Windows.Core": { - "target": "Package", - "version": "[0.7.104, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - }, - "Microsoft.WindowsDesktop.App.WindowsForms": { - "privateAssets": "none" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.100\\RuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.props b/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.props deleted file mode 100644 index 7ec2416..0000000 --- a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.props +++ /dev/null @@ -1,20 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\fch\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\ - PackageReference - 6.0.1 - - - - - - - - C:\Users\fch\.nuget\packages\validation\2.4.15 - - \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.targets b/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef..0000000 --- a/Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/obj/project.assets.json b/Superlocal.Agile.WinApp/obj/project.assets.json deleted file mode 100644 index 874a380..0000000 --- a/Superlocal.Agile.WinApp/obj/project.assets.json +++ /dev/null @@ -1,414 +0,0 @@ -{ - "version": 3, - "targets": { - "net6.0-windows7.0": { - "MaterialSkin.2/2.3.1": { - "type": "package", - "compile": { - "lib/net5.0-windows7.0/MaterialSkin.dll": {} - }, - "runtime": { - "lib/net5.0-windows7.0/MaterialSkin.dll": {} - }, - "frameworkReferences": [ - "Microsoft.WindowsDesktop.App.WindowsForms" - ] - }, - "Newtonsoft.Json/13.0.1": { - "type": "package", - "compile": { - "lib/netstandard2.0/Newtonsoft.Json.dll": {} - }, - "runtime": { - "lib/netstandard2.0/Newtonsoft.Json.dll": {} - } - }, - "PInvoke.Kernel32/0.7.104": { - "type": "package", - "dependencies": { - "PInvoke.Windows.Core": "0.7.104", - "System.Threading.Tasks.Extensions": "4.5.4" - }, - "compile": { - "lib/netstandard2.0/PInvoke.Kernel32.dll": {} - }, - "runtime": { - "lib/netstandard2.0/PInvoke.Kernel32.dll": {} - } - }, - "PInvoke.User32/0.7.104": { - "type": "package", - "dependencies": { - "PInvoke.Kernel32": "0.7.104", - "PInvoke.Windows.Core": "0.7.104", - "PInvoke.Windows.ShellScalingApi": "0.7.104", - "Validation": "2.4.15" - }, - "compile": { - "lib/netstandard2.0/PInvoke.User32.dll": {} - }, - "runtime": { - "lib/netstandard2.0/PInvoke.User32.dll": {} - } - }, - "PInvoke.Windows.Core/0.7.104": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.4" - }, - "compile": { - "lib/netstandard2.0/PInvoke.Windows.Core.dll": {} - }, - "runtime": { - "lib/netstandard2.0/PInvoke.Windows.Core.dll": {} - } - }, - "PInvoke.Windows.ShellScalingApi/0.7.104": { - "type": "package", - "dependencies": { - "PInvoke.Windows.Core": "0.7.104" - }, - "compile": { - "lib/netstandard2.0/PInvoke.Windows.ShellScalingApi.dll": {} - }, - "runtime": { - "lib/netstandard2.0/PInvoke.Windows.ShellScalingApi.dll": {} - } - }, - "System.Memory/4.5.4": { - "type": "package", - "compile": { - "ref/netcoreapp2.1/_._": {} - }, - "runtime": { - "lib/netcoreapp2.1/_._": {} - } - }, - "System.Threading.Tasks.Extensions/4.5.4": { - "type": "package", - "compile": { - "ref/netcoreapp2.1/_._": {} - }, - "runtime": { - "lib/netcoreapp2.1/_._": {} - } - }, - "Validation/2.4.15": { - "type": "package", - "compile": { - "lib/netstandard1.3/Validation.dll": {} - }, - "runtime": { - "lib/netstandard1.3/Validation.dll": {} - } - } - } - }, - "libraries": { - "MaterialSkin.2/2.3.1": { - "sha512": "w2vFxLNk4InCDU7pXDfBqPfv55HhBtuu8HRfEqQpeS3sNTS1pUzDs/hS0b5JW2/tKvt+P1of9OINP8a9omWDBg==", - "type": "package", - "path": "materialskin.2/2.3.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "README.md", - "lib/net45/MaterialSkin.dll", - "lib/net461/MaterialSkin.dll", - "lib/net48/MaterialSkin.dll", - "lib/net5.0-windows7.0/MaterialSkin.dll", - "materialskin.2.2.3.1.nupkg.sha512", - "materialskin.2.nuspec", - "nugetIcon.png" - ] - }, - "Newtonsoft.Json/13.0.1": { - "sha512": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", - "type": "package", - "path": "newtonsoft.json/13.0.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.md", - "lib/net20/Newtonsoft.Json.dll", - "lib/net20/Newtonsoft.Json.xml", - "lib/net35/Newtonsoft.Json.dll", - "lib/net35/Newtonsoft.Json.xml", - "lib/net40/Newtonsoft.Json.dll", - "lib/net40/Newtonsoft.Json.xml", - "lib/net45/Newtonsoft.Json.dll", - "lib/net45/Newtonsoft.Json.xml", - "lib/netstandard1.0/Newtonsoft.Json.dll", - "lib/netstandard1.0/Newtonsoft.Json.xml", - "lib/netstandard1.3/Newtonsoft.Json.dll", - "lib/netstandard1.3/Newtonsoft.Json.xml", - "lib/netstandard2.0/Newtonsoft.Json.dll", - "lib/netstandard2.0/Newtonsoft.Json.xml", - "newtonsoft.json.13.0.1.nupkg.sha512", - "newtonsoft.json.nuspec", - "packageIcon.png" - ] - }, - "PInvoke.Kernel32/0.7.104": { - "sha512": "xU9Wp22ej6NcVg4Uqelnhz27X6HdHaroAPOk5IsG8nTi82zHOznTOW2KIYCdpAGf67rHpQW6UtmjrG+5HPlnvA==", - "type": "package", - "path": "pinvoke.kernel32/0.7.104", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net45/PInvoke.Kernel32.dll", - "lib/net45/PInvoke.Kernel32.xml", - "lib/net46/PInvoke.Kernel32.dll", - "lib/net46/PInvoke.Kernel32.xml", - "lib/netstandard2.0/PInvoke.Kernel32.dll", - "lib/netstandard2.0/PInvoke.Kernel32.xml", - "lib/uap10.0.16299/PInvoke.Kernel32.dll", - "lib/uap10.0.16299/PInvoke.Kernel32.pri", - "lib/uap10.0.16299/PInvoke.Kernel32.xml", - "pinvoke.kernel32.0.7.104.nupkg.sha512", - "pinvoke.kernel32.nuspec" - ] - }, - "PInvoke.User32/0.7.104": { - "sha512": "MPJICVOtkCCuLY0hbu7tgBFE3S3WHVrym5ZF2NjGAMluhKdkWFSIOi+wadnMwX2PI7nhCQ4bPK/REKZtfYdgaQ==", - "type": "package", - "path": "pinvoke.user32/0.7.104", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net45/PInvoke.User32.dll", - "lib/net45/PInvoke.User32.xml", - "lib/netstandard2.0/PInvoke.User32.dll", - "lib/netstandard2.0/PInvoke.User32.xml", - "lib/uap10.0.16299/PInvoke.User32.dll", - "lib/uap10.0.16299/PInvoke.User32.pri", - "lib/uap10.0.16299/PInvoke.User32.xml", - "pinvoke.user32.0.7.104.nupkg.sha512", - "pinvoke.user32.nuspec" - ] - }, - "PInvoke.Windows.Core/0.7.104": { - "sha512": "WI8ht+k0nk7YmeWD6OewGI+TzRdgtJSaO+e+PMPeYSBVwU9jl4ZlelizZNz271ZY4k4J8lk+mTWg5bo+I71mTA==", - "type": "package", - "path": "pinvoke.windows.core/0.7.104", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net45/PInvoke.Windows.Core.dll", - "lib/net45/PInvoke.Windows.Core.xml", - "lib/netstandard2.0/PInvoke.Windows.Core.dll", - "lib/netstandard2.0/PInvoke.Windows.Core.xml", - "lib/uap10.0.16299/PInvoke.Windows.Core.dll", - "lib/uap10.0.16299/PInvoke.Windows.Core.pri", - "lib/uap10.0.16299/PInvoke.Windows.Core.xml", - "pinvoke.windows.core.0.7.104.nupkg.sha512", - "pinvoke.windows.core.nuspec" - ] - }, - "PInvoke.Windows.ShellScalingApi/0.7.104": { - "sha512": "rgCP4i9U6oEHlBY1uOGEuw+aaS5U9zfNMs1Vj6dlgCgW5Rq1fazENQuAvf6GCHSAl4Cann4A90z+fCcXbwLqtg==", - "type": "package", - "path": "pinvoke.windows.shellscalingapi/0.7.104", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net45/PInvoke.Windows.ShellScalingApi.dll", - "lib/net45/PInvoke.Windows.ShellScalingApi.xml", - "lib/netstandard2.0/PInvoke.Windows.ShellScalingApi.dll", - "lib/netstandard2.0/PInvoke.Windows.ShellScalingApi.xml", - "lib/uap10.0.16299/PInvoke.Windows.ShellScalingApi.dll", - "lib/uap10.0.16299/PInvoke.Windows.ShellScalingApi.pri", - "lib/uap10.0.16299/PInvoke.Windows.ShellScalingApi.xml", - "pinvoke.windows.shellscalingapi.0.7.104.nupkg.sha512", - "pinvoke.windows.shellscalingapi.nuspec" - ] - }, - "System.Memory/4.5.4": { - "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", - "type": "package", - "path": "system.memory/4.5.4", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/net461/System.Memory.dll", - "lib/net461/System.Memory.xml", - "lib/netcoreapp2.1/_._", - "lib/netstandard1.1/System.Memory.dll", - "lib/netstandard1.1/System.Memory.xml", - "lib/netstandard2.0/System.Memory.dll", - "lib/netstandard2.0/System.Memory.xml", - "ref/netcoreapp2.1/_._", - "system.memory.4.5.4.nupkg.sha512", - "system.memory.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Threading.Tasks.Extensions/4.5.4": { - "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", - "type": "package", - "path": "system.threading.tasks.extensions/4.5.4", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net461/System.Threading.Tasks.Extensions.dll", - "lib/net461/System.Threading.Tasks.Extensions.xml", - "lib/netcoreapp2.1/_._", - "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", - "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", - "lib/netstandard2.0/System.Threading.Tasks.Extensions.dll", - "lib/netstandard2.0/System.Threading.Tasks.Extensions.xml", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/netcoreapp2.1/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.threading.tasks.extensions.4.5.4.nupkg.sha512", - "system.threading.tasks.extensions.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "Validation/2.4.15": { - "sha512": "KQFOtJKKhaXzuSiZhkFaFzQEdYsA+EN/XqKZDYwsGDOrS0Nxu6qzCvNTsDF4xtkiZbBA6u7I59QnsuP2O2fZgg==", - "type": "package", - "path": "validation/2.4.15", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "README.md", - "lib/net20/Validation.dll", - "lib/net20/Validation.xml", - "lib/net40/Validation.dll", - "lib/net40/Validation.xml", - "lib/net45/Validation.dll", - "lib/net45/Validation.xml", - "lib/netstandard1.0/Validation.dll", - "lib/netstandard1.0/Validation.xml", - "lib/netstandard1.3/Validation.dll", - "lib/netstandard1.3/Validation.xml", - "lib/portable-net40+sl5+win8+wp8+wpa81/Validation.dll", - "lib/portable-net40+sl5+win8+wp8+wpa81/Validation.xml", - "lib/portable-net45+win8+wp8+wpa81/Validation.dll", - "lib/portable-net45+win8+wp8+wpa81/Validation.xml", - "tools/2013/RequiresNotNull.snippet", - "tools/2013/RequiresNotNullOrEmpty.snippet", - "tools/2015/RequiresNotNull.snippet", - "tools/2015/RequiresNotNullOrEmpty.snippet", - "tools/install_snippets.cmd", - "tools/uninstall_snippets.cmd", - "validation.2.4.15.nupkg.sha512", - "validation.nuspec" - ] - } - }, - "projectFileDependencyGroups": { - "net6.0-windows7.0": [ - "MaterialSkin.2 >= 2.3.1", - "Newtonsoft.Json >= 13.0.1", - "PInvoke.User32 >= 0.7.104", - "PInvoke.Windows.Core >= 0.7.104" - ] - }, - "packageFolders": { - "C:\\Users\\fch\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, - "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj", - "projectName": "Superlocal.Agile.WinApp", - "projectPath": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj", - "packagesPath": "C:\\Users\\fch\\.nuget\\packages\\", - "outputPath": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", - "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet\\" - ], - "configFilePaths": [ - "C:\\Users\\fch\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config" - ], - "originalTargetFrameworks": [ - "net6.0-windows7.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net6.0-windows7.0": { - "targetAlias": "net6.0-windows", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - } - }, - "frameworks": { - "net6.0-windows7.0": { - "targetAlias": "net6.0-windows", - "dependencies": { - "MaterialSkin.2": { - "target": "Package", - "version": "[2.3.1, )" - }, - "Newtonsoft.Json": { - "target": "Package", - "version": "[13.0.1, )" - }, - "PInvoke.User32": { - "target": "Package", - "version": "[0.7.104, )" - }, - "PInvoke.Windows.Core": { - "target": "Package", - "version": "[0.7.104, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - }, - "Microsoft.WindowsDesktop.App.WindowsForms": { - "privateAssets": "none" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.100\\RuntimeIdentifierGraph.json" - } - } - } -} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/obj/project.nuget.cache b/Superlocal.Agile.WinApp/obj/project.nuget.cache deleted file mode 100644 index 061b3e9..0000000 --- a/Superlocal.Agile.WinApp/obj/project.nuget.cache +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "UAQCboT4WaHqFZGweBG/1hD20QM4tP0IKjrCrVSyCbQ8A2mmAI2tLrpLDTkYy+7oXgb2RFvNSYGr11UUTzgD+Q==", - "success": true, - "projectFilePath": "D:\\fch\\dev\\code\\superlocal\\Superlocal.Agile\\Superlocal.Agile.WinApp\\Superlocal.Agile.WinApp.csproj", - "expectedPackageFiles": [ - "C:\\Users\\fch\\.nuget\\packages\\materialskin.2\\2.3.1\\materialskin.2.2.3.1.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\newtonsoft.json\\13.0.1\\newtonsoft.json.13.0.1.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\pinvoke.kernel32\\0.7.104\\pinvoke.kernel32.0.7.104.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\pinvoke.user32\\0.7.104\\pinvoke.user32.0.7.104.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\pinvoke.windows.core\\0.7.104\\pinvoke.windows.core.0.7.104.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\pinvoke.windows.shellscalingapi\\0.7.104\\pinvoke.windows.shellscalingapi.0.7.104.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", - "C:\\Users\\fch\\.nuget\\packages\\validation\\2.4.15\\validation.2.4.15.nupkg.sha512" - ], - "logs": [] -} \ No newline at end of file diff --git a/Superlocal.Agile.sln b/Superlocal.Agile.sln index b3e883f..1948dc2 100644 --- a/Superlocal.Agile.sln +++ b/Superlocal.Agile.sln @@ -3,7 +3,32 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31919.166 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Superlocal.Agile.WinApp", "Superlocal.Agile.WinApp\Superlocal.Agile.WinApp.csproj", "{C649167F-241E-41D2-8DDE-7EA56C4DF414}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AE77267E-504F-4E69-89F4-A360CC23CD11}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ui", "ui", "{6F2B93E2-A129-4289-B38D-5FD691AD3780}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{F5C307F1-4695-4981-8806-3ADBC6B00000}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{14EA4223-1F26-42B0-AA2B-2EEA8C47543D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A07BA421-AC02-4420-8435-59EF367CC107}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Superlocal.Agile.Infrastructure", "src\lib\Superlocal.Agile.Infrastructure\Superlocal.Agile.Infrastructure.csproj", "{E95D303A-9855-4BC6-A25F-E1FC08A3381D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Superlocal.Agile.Tests", "tests\Superlocal.Agile.Tests\Superlocal.Agile.Tests.csproj", "{6524AD6E-4A33-4051-A751-7D08B7AB0D9C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Superlocal.Agile.Domain", "src\lib\Superlocal.Agile.Domain\Superlocal.Agile.Domain.csproj", "{376BBF07-2E54-44D5-9B80-649B0798240E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Superlocal.Agile.WinApp", "src\ui\Superlocal.Agile.WinApp\Superlocal.Agile.WinApp.csproj", "{36915115-0C09-41FB-8B6F-FF786B88A2D1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Superlocal.Agile.Application", "src\lib\Superlocal.Agile.Application\Superlocal.Agile.Application.csproj", "{7CA284DE-C6A3-484B-9605-066134AC571B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{97C5D9A4-73BE-464C-9E04-79FAF8EAAE2F}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + LICENSE = LICENSE + README.md = README.md + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,14 +36,39 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C649167F-241E-41D2-8DDE-7EA56C4DF414}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C649167F-241E-41D2-8DDE-7EA56C4DF414}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C649167F-241E-41D2-8DDE-7EA56C4DF414}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C649167F-241E-41D2-8DDE-7EA56C4DF414}.Release|Any CPU.Build.0 = Release|Any CPU + {E95D303A-9855-4BC6-A25F-E1FC08A3381D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E95D303A-9855-4BC6-A25F-E1FC08A3381D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E95D303A-9855-4BC6-A25F-E1FC08A3381D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E95D303A-9855-4BC6-A25F-E1FC08A3381D}.Release|Any CPU.Build.0 = Release|Any CPU + {6524AD6E-4A33-4051-A751-7D08B7AB0D9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6524AD6E-4A33-4051-A751-7D08B7AB0D9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6524AD6E-4A33-4051-A751-7D08B7AB0D9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6524AD6E-4A33-4051-A751-7D08B7AB0D9C}.Release|Any CPU.Build.0 = Release|Any CPU + {376BBF07-2E54-44D5-9B80-649B0798240E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {376BBF07-2E54-44D5-9B80-649B0798240E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {376BBF07-2E54-44D5-9B80-649B0798240E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {376BBF07-2E54-44D5-9B80-649B0798240E}.Release|Any CPU.Build.0 = Release|Any CPU + {36915115-0C09-41FB-8B6F-FF786B88A2D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36915115-0C09-41FB-8B6F-FF786B88A2D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36915115-0C09-41FB-8B6F-FF786B88A2D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36915115-0C09-41FB-8B6F-FF786B88A2D1}.Release|Any CPU.Build.0 = Release|Any CPU + {7CA284DE-C6A3-484B-9605-066134AC571B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CA284DE-C6A3-484B-9605-066134AC571B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CA284DE-C6A3-484B-9605-066134AC571B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CA284DE-C6A3-484B-9605-066134AC571B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6F2B93E2-A129-4289-B38D-5FD691AD3780} = {AE77267E-504F-4E69-89F4-A360CC23CD11} + {F5C307F1-4695-4981-8806-3ADBC6B00000} = {AE77267E-504F-4E69-89F4-A360CC23CD11} + {E95D303A-9855-4BC6-A25F-E1FC08A3381D} = {F5C307F1-4695-4981-8806-3ADBC6B00000} + {6524AD6E-4A33-4051-A751-7D08B7AB0D9C} = {A07BA421-AC02-4420-8435-59EF367CC107} + {376BBF07-2E54-44D5-9B80-649B0798240E} = {F5C307F1-4695-4981-8806-3ADBC6B00000} + {36915115-0C09-41FB-8B6F-FF786B88A2D1} = {6F2B93E2-A129-4289-B38D-5FD691AD3780} + {7CA284DE-C6A3-484B-9605-066134AC571B} = {F5C307F1-4695-4981-8806-3ADBC6B00000} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B9990170-CF12-4BAF-8CDD-65FF14245F91} EndGlobalSection diff --git a/src/lib/Superlocal.Agile.Application/Superlocal.Agile.Application.csproj b/src/lib/Superlocal.Agile.Application/Superlocal.Agile.Application.csproj new file mode 100644 index 0000000..01e979d --- /dev/null +++ b/src/lib/Superlocal.Agile.Application/Superlocal.Agile.Application.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/src/lib/Superlocal.Agile.Domain/Models/IAppWindowInfo.cs b/src/lib/Superlocal.Agile.Domain/Models/IAppWindowInfo.cs new file mode 100644 index 0000000..0c5bf6d --- /dev/null +++ b/src/lib/Superlocal.Agile.Domain/Models/IAppWindowInfo.cs @@ -0,0 +1,20 @@ +namespace Superlocal.Agile.Domain.Models +{ + public interface IAppWindowInfo + { + /// + /// App window title + /// + string Title { get; } + + /// + /// When user interacted with app window + /// + DateTimeOffset Start { get; } + + /// + /// When user moved to another app + /// + DateTimeOffset End { get; } + } +} diff --git a/src/lib/Superlocal.Agile.Domain/Models/IProcessInfo.cs b/src/lib/Superlocal.Agile.Domain/Models/IProcessInfo.cs new file mode 100644 index 0000000..5d32251 --- /dev/null +++ b/src/lib/Superlocal.Agile.Domain/Models/IProcessInfo.cs @@ -0,0 +1,10 @@ +namespace Superlocal.Agile.Domain.Models; + +public partial interface IProcessInfo +{ + int LastCapturedId { get; } + + string Name { get; } + + string? Path { get; } +} \ No newline at end of file diff --git a/src/lib/Superlocal.Agile.Domain/README.md b/src/lib/Superlocal.Agile.Domain/README.md new file mode 100644 index 0000000..5e19d33 --- /dev/null +++ b/src/lib/Superlocal.Agile.Domain/README.md @@ -0,0 +1,21 @@ +# Domain + +Add info about DDD and Clean Archictecture + +## Model + +People often confuse entity with model. However, these two are quite different. + +A model typically represents a real world object that is related to the problem or domain space. +While programming, we create classes to represent them. These classes, known as models, +have some properties and methods (defining their behavior) in a particular domain space. +For instance, in any customer oriented problem, we may have a customer class that has some properties and methods. + +In some ORM (Object Relational Mapper) frameworks, a model is tightly bound to an entity. +This means that every scalar property maps to an entity attribute. +However, if you are familiar with Entity Framework, you must know that, not all properties in your domain class map to an entity column. +And that's one way in which an entity is different from a model. + +### References + +https://www.c-sharpcorner.com/blogs/entity-vs-model-vs-viewmodel-vs-datamodel diff --git a/src/lib/Superlocal.Agile.Domain/Superlocal.Agile.Domain.csproj b/src/lib/Superlocal.Agile.Domain/Superlocal.Agile.Domain.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/src/lib/Superlocal.Agile.Domain/Superlocal.Agile.Domain.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/src/lib/Superlocal.Agile.Infrastructure/Database/SqliteDbContext.cs b/src/lib/Superlocal.Agile.Infrastructure/Database/SqliteDbContext.cs new file mode 100644 index 0000000..165292e --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Database/SqliteDbContext.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore; +using Superlocal.Agile.Infrastructure.Entities; + +namespace Superlocal.Agile.Infrastructure.Database +{ + public class SqliteDbContext : DbContext + { + public DbSet ProcessInfos { get; set; } + + public DbSet AppWindowInfos { get; set; } + + public SqliteDbContext(DbContextOptions options) : base(options) + { + + } + + //protected override void OnConfiguring(DbContextOptionsBuilder options) + //{ + // base.OnConfiguring(options); + //} + } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/Entities/AppWindowInfo.cs b/src/lib/Superlocal.Agile.Infrastructure/Entities/AppWindowInfo.cs new file mode 100644 index 0000000..f4e4be2 --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Entities/AppWindowInfo.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Superlocal.Agile.Infrastructure.Entities; + +public class AppWindowInfo : IAppWindowInfo +{ + [Key] + public int Id { get; set; } + + public ProcessInfo ProcessInfo { get; set; } + + public string Title { get; set; } + + public DateTimeOffset Start { get; set; } + + public DateTimeOffset End { get; set; } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/Entities/ProcessInfo.cs b/src/lib/Superlocal.Agile.Infrastructure/Entities/ProcessInfo.cs new file mode 100644 index 0000000..45e5e55 --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Entities/ProcessInfo.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace Superlocal.Agile.Infrastructure.Entities; + +public class ProcessInfo : IProcessInfo +{ + [Key] + public Guid Guid { get; set; } + + public int LastCapturedId { get; set; } + + [Required] + public string Name { get; set; } + + public string? Path { get; set; } + + public virtual IEnumerable AppWindowsInfo { get; set; } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/GlobalUsings.cs b/src/lib/Superlocal.Agile.Infrastructure/GlobalUsings.cs new file mode 100644 index 0000000..b1a7827 --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/GlobalUsings.cs @@ -0,0 +1,3 @@ +global using Superlocal.Agile.Domain.Models; + +namespace Superlocal.Agile.Infrastructure; \ No newline at end of file diff --git a/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.Designer.cs b/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.Designer.cs new file mode 100644 index 0000000..a9aedac --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.Designer.cs @@ -0,0 +1,87 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Superlocal.Agile.Infrastructure.Database; + +#nullable disable + +namespace Superlocal.Agile.Infrastructure.Migrations +{ + [DbContext(typeof(SqliteDbContext))] + [Migration("20211223171100_First migration")] + partial class Firstmigration + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "6.0.1"); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.AppWindowInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("End") + .HasColumnType("TEXT"); + + b.Property("ProcessInfoGuid") + .HasColumnType("TEXT"); + + b.Property("Start") + .HasColumnType("TEXT"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProcessInfoGuid"); + + b.ToTable("AppWindowInfos"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b => + { + b.Property("Guid") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("LastCapturedId") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.HasKey("Guid"); + + b.ToTable("ProcessInfos"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.AppWindowInfo", b => + { + b.HasOne("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", "ProcessInfo") + .WithMany("AppWindowsInfo") + .HasForeignKey("ProcessInfoGuid") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProcessInfo"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b => + { + b.Navigation("AppWindowsInfo"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.cs b/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.cs new file mode 100644 index 0000000..c093bbb --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.cs @@ -0,0 +1,63 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Superlocal.Agile.Infrastructure.Migrations +{ + public partial class Firstmigration : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ProcessInfos", + columns: table => new + { + Guid = table.Column(type: "TEXT", nullable: false), + LastCapturedId = table.Column(type: "INTEGER", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Path = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ProcessInfos", x => x.Guid); + }); + + migrationBuilder.CreateTable( + name: "AppWindowInfos", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + ProcessInfoGuid = table.Column(type: "TEXT", nullable: false), + Title = table.Column(type: "TEXT", nullable: false), + Start = table.Column(type: "TEXT", nullable: false), + End = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AppWindowInfos", x => x.Id); + table.ForeignKey( + name: "FK_AppWindowInfos_ProcessInfos_ProcessInfoGuid", + column: x => x.ProcessInfoGuid, + principalTable: "ProcessInfos", + principalColumn: "Guid", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AppWindowInfos_ProcessInfoGuid", + table: "AppWindowInfos", + column: "ProcessInfoGuid"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AppWindowInfos"); + + migrationBuilder.DropTable( + name: "ProcessInfos"); + } + } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/Migrations/SqliteDbContextModelSnapshot.cs b/src/lib/Superlocal.Agile.Infrastructure/Migrations/SqliteDbContextModelSnapshot.cs new file mode 100644 index 0000000..64b2c8b --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Migrations/SqliteDbContextModelSnapshot.cs @@ -0,0 +1,85 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Superlocal.Agile.Infrastructure.Database; + +#nullable disable + +namespace Superlocal.Agile.Infrastructure.Migrations +{ + [DbContext(typeof(SqliteDbContext))] + partial class SqliteDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "6.0.1"); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.AppWindowInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("End") + .HasColumnType("TEXT"); + + b.Property("ProcessInfoGuid") + .HasColumnType("TEXT"); + + b.Property("Start") + .HasColumnType("TEXT"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProcessInfoGuid"); + + b.ToTable("AppWindowInfos"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b => + { + b.Property("Guid") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("LastCapturedId") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.HasKey("Guid"); + + b.ToTable("ProcessInfos"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.AppWindowInfo", b => + { + b.HasOne("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", "ProcessInfo") + .WithMany("AppWindowsInfo") + .HasForeignKey("ProcessInfoGuid") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProcessInfo"); + }); + + modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b => + { + b.Navigation("AppWindowsInfo"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/lib/Superlocal.Agile.Infrastructure/Superlocal.Agile.Infrastructure.csproj b/src/lib/Superlocal.Agile.Infrastructure/Superlocal.Agile.Infrastructure.csproj new file mode 100644 index 0000000..308dc31 --- /dev/null +++ b/src/lib/Superlocal.Agile.Infrastructure/Superlocal.Agile.Infrastructure.csproj @@ -0,0 +1,30 @@ + + + + net6.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + diff --git a/Superlocal.Agile.WinApp/Constants/ApplicationState.cs b/src/ui/Superlocal.Agile.WinApp/Constants/ApplicationState.cs similarity index 100% rename from Superlocal.Agile.WinApp/Constants/ApplicationState.cs rename to src/ui/Superlocal.Agile.WinApp/Constants/ApplicationState.cs diff --git a/Superlocal.Agile.WinApp/Constants/KnowApplication.cs b/src/ui/Superlocal.Agile.WinApp/Constants/KnowApplication.cs similarity index 100% rename from Superlocal.Agile.WinApp/Constants/KnowApplication.cs rename to src/ui/Superlocal.Agile.WinApp/Constants/KnowApplication.cs diff --git a/Superlocal.Agile.WinApp/DebugControl.Designer.cs b/src/ui/Superlocal.Agile.WinApp/DebugControl.Designer.cs similarity index 100% rename from Superlocal.Agile.WinApp/DebugControl.Designer.cs rename to src/ui/Superlocal.Agile.WinApp/DebugControl.Designer.cs diff --git a/Superlocal.Agile.WinApp/DebugControl.cs b/src/ui/Superlocal.Agile.WinApp/DebugControl.cs similarity index 100% rename from Superlocal.Agile.WinApp/DebugControl.cs rename to src/ui/Superlocal.Agile.WinApp/DebugControl.cs diff --git a/Superlocal.Agile.WinApp/DebugControl.resx b/src/ui/Superlocal.Agile.WinApp/DebugControl.resx similarity index 100% rename from Superlocal.Agile.WinApp/DebugControl.resx rename to src/ui/Superlocal.Agile.WinApp/DebugControl.resx diff --git a/Superlocal.Agile.WinApp/Entities/ApplicationInfo.cs b/src/ui/Superlocal.Agile.WinApp/Entities/ApplicationInfo.cs similarity index 100% rename from Superlocal.Agile.WinApp/Entities/ApplicationInfo.cs rename to src/ui/Superlocal.Agile.WinApp/Entities/ApplicationInfo.cs diff --git a/Superlocal.Agile.WinApp/Entities/ApplicationWindow.cs b/src/ui/Superlocal.Agile.WinApp/Entities/ApplicationWindow.cs similarity index 100% rename from Superlocal.Agile.WinApp/Entities/ApplicationWindow.cs rename to src/ui/Superlocal.Agile.WinApp/Entities/ApplicationWindow.cs diff --git a/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.Designer.cs b/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.Designer.cs new file mode 100644 index 0000000..67ddd72 --- /dev/null +++ b/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.Designer.cs @@ -0,0 +1,187 @@ +namespace Superlocal.Agile.WinApp +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.listBox2 = new System.Windows.Forms.ListBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.materialCheckbox1 = new MaterialSkin.Controls.MaterialCheckbox(); + this.materialCheckbox2 = new MaterialSkin.Controls.MaterialCheckbox(); + this.materialCheckbox3 = new MaterialSkin.Controls.MaterialCheckbox(); + this.materialCheckbox4 = new MaterialSkin.Controls.MaterialCheckbox(); + this.materialDrawer1 = new MaterialSkin.Controls.MaterialDrawer(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(1056, 76); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // treeView1 + // + this.treeView1.Location = new System.Drawing.Point(12, 106); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(1119, 603); + this.treeView1.TabIndex = 2; + // + // listBox2 + // + this.listBox2.FormattingEnabled = true; + this.listBox2.ItemHeight = 15; + this.listBox2.Location = new System.Drawing.Point(12, 715); + this.listBox2.Name = "listBox2"; + this.listBox2.Size = new System.Drawing.Size(1119, 64); + this.listBox2.TabIndex = 3; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 77); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(521, 23); + this.textBox1.TabIndex = 4; + // + // materialCheckbox1 + // + this.materialCheckbox1.AutoSize = true; + this.materialCheckbox1.Depth = 0; + this.materialCheckbox1.Location = new System.Drawing.Point(0, 0); + this.materialCheckbox1.Margin = new System.Windows.Forms.Padding(0); + this.materialCheckbox1.MouseLocation = new System.Drawing.Point(-1, -1); + this.materialCheckbox1.MouseState = MaterialSkin.MouseState.HOVER; + this.materialCheckbox1.Name = "materialCheckbox1"; + this.materialCheckbox1.ReadOnly = false; + this.materialCheckbox1.Ripple = true; + this.materialCheckbox1.Size = new System.Drawing.Size(10, 10); + this.materialCheckbox1.TabIndex = 0; + this.materialCheckbox1.Text = "materialCheckbox1"; + this.materialCheckbox1.UseVisualStyleBackColor = true; + // + // materialCheckbox2 + // + this.materialCheckbox2.AutoSize = true; + this.materialCheckbox2.Depth = 0; + this.materialCheckbox2.Location = new System.Drawing.Point(0, 0); + this.materialCheckbox2.Margin = new System.Windows.Forms.Padding(0); + this.materialCheckbox2.MouseLocation = new System.Drawing.Point(-1, -1); + this.materialCheckbox2.MouseState = MaterialSkin.MouseState.HOVER; + this.materialCheckbox2.Name = "materialCheckbox2"; + this.materialCheckbox2.ReadOnly = false; + this.materialCheckbox2.Ripple = true; + this.materialCheckbox2.Size = new System.Drawing.Size(10, 10); + this.materialCheckbox2.TabIndex = 0; + this.materialCheckbox2.Text = "materialCheckbox2"; + this.materialCheckbox2.UseVisualStyleBackColor = true; + // + // materialCheckbox3 + // + this.materialCheckbox3.AutoSize = true; + this.materialCheckbox3.Depth = 0; + this.materialCheckbox3.Location = new System.Drawing.Point(0, 0); + this.materialCheckbox3.Margin = new System.Windows.Forms.Padding(0); + this.materialCheckbox3.MouseLocation = new System.Drawing.Point(-1, -1); + this.materialCheckbox3.MouseState = MaterialSkin.MouseState.HOVER; + this.materialCheckbox3.Name = "materialCheckbox3"; + this.materialCheckbox3.ReadOnly = false; + this.materialCheckbox3.Ripple = true; + this.materialCheckbox3.Size = new System.Drawing.Size(10, 10); + this.materialCheckbox3.TabIndex = 0; + this.materialCheckbox3.Text = "materialCheckbox3"; + this.materialCheckbox3.UseVisualStyleBackColor = true; + // + // materialCheckbox4 + // + this.materialCheckbox4.AutoSize = true; + this.materialCheckbox4.Depth = 0; + this.materialCheckbox4.Location = new System.Drawing.Point(0, 0); + this.materialCheckbox4.Margin = new System.Windows.Forms.Padding(0); + this.materialCheckbox4.MouseLocation = new System.Drawing.Point(-1, -1); + this.materialCheckbox4.MouseState = MaterialSkin.MouseState.HOVER; + this.materialCheckbox4.Name = "materialCheckbox4"; + this.materialCheckbox4.ReadOnly = false; + this.materialCheckbox4.Ripple = true; + this.materialCheckbox4.Size = new System.Drawing.Size(10, 10); + this.materialCheckbox4.TabIndex = 0; + this.materialCheckbox4.Text = "materialCheckbox4"; + this.materialCheckbox4.UseVisualStyleBackColor = true; + // + // materialDrawer1 + // + this.materialDrawer1.AutoHide = false; + this.materialDrawer1.AutoShow = false; + this.materialDrawer1.BackgroundWithAccent = false; + this.materialDrawer1.BaseTabControl = null; + this.materialDrawer1.Depth = 0; + this.materialDrawer1.HighlightWithAccent = true; + this.materialDrawer1.IndicatorWidth = 0; + this.materialDrawer1.IsOpen = false; + this.materialDrawer1.Location = new System.Drawing.Point(-103, 20); + this.materialDrawer1.MouseState = MaterialSkin.MouseState.HOVER; + this.materialDrawer1.Name = "materialDrawer1"; + this.materialDrawer1.ShowIconsWhenHidden = false; + this.materialDrawer1.Size = new System.Drawing.Size(103, 548); + this.materialDrawer1.TabIndex = 6; + this.materialDrawer1.Text = "materialDrawer1"; + this.materialDrawer1.UseColors = false; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1162, 794); + this.Controls.Add(this.materialDrawer1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.listBox2); + this.Controls.Add(this.treeView1); + this.Controls.Add(this.button1); + this.DrawerIsOpen = true; + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private Button button1; + private TreeView treeView1; + private ListBox listBox2; + private TextBox textBox1; + private MaterialSkin.Controls.MaterialCheckbox materialCheckbox1; + private MaterialSkin.Controls.MaterialCheckbox materialCheckbox2; + private MaterialSkin.Controls.MaterialCheckbox materialCheckbox3; + private MaterialSkin.Controls.MaterialCheckbox materialCheckbox4; + private MaterialSkin.Controls.MaterialDrawer materialDrawer1; + } +} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Form1.cs b/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.cs similarity index 52% rename from Superlocal.Agile.WinApp/Form1.cs rename to src/ui/Superlocal.Agile.WinApp/Forms/MainForm.cs index 3146e87..4cc2e7b 100644 --- a/Superlocal.Agile.WinApp/Form1.cs +++ b/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.cs @@ -3,12 +3,15 @@ using Superlocal.Agile.WinApp.Records; using Superlocal.Agile.WinApp.Entities; using MaterialSkin.Controls; using MaterialSkin; +using Microsoft.Extensions.Logging; +using Superlocal.Agile.Infrastructure.Database; namespace Superlocal.Agile.WinApp { - public partial class Form1 : MaterialForm + public partial class MainForm : MaterialForm { - + private readonly ILogger _logger; + private readonly SqliteDbContext _dbContext; private WindowInfo? _activeWindowsInfo; private readonly SynchronizationContext? synchronizationContext; @@ -16,14 +19,16 @@ namespace Superlocal.Agile.WinApp private List Applications = new List(); private List WindowsInfo = new List(); - public Form1() + public MainForm(ILogger logger, SqliteDbContext dbContext) { + _logger = logger; + _dbContext = dbContext; InitializeComponent(); var materialSkinManager = MaterialSkinManager.Instance; materialSkinManager.AddFormToManage(this); materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT; materialSkinManager.ColorScheme = new ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE); - materialTabControl1.TabPages.Add(new TabPage()); + synchronizationContext = SynchronizationContext.Current; //context from UI thread Task.Run(() => { @@ -35,89 +40,6 @@ namespace Superlocal.Agile.WinApp }); } - //private void GetActiveWindow() - //{ - // int processId; - // Span Buff = new Span(); - - // IntPtr handle = PInvoke.User32.GetForegroundWindow(); - - // PInvoke.User32.GetWindowThreadProcessId(handle, out processId); - // Process process = Process.GetProcessById(processId); - // var processName = ""; - // string? processExecutable = ""; - // int programId = 0; - - // if (process != null) - // { - // processName = process.ProcessName; - // if (process.MainModule != null) - // { - // processExecutable = process.MainModule.FileName; - // programId = !string.IsNullOrWhiteSpace(processExecutable) ? processExecutable.GetHashCode() : 0; - // } - // } - - // var hasText = PInvoke.User32.GetWindowText(handle, Buff) > 0; - // string windowTitle = hasText ? Buff.ToString() : process != null ? process.ProcessName : "Untitled"; - - // if (handle == IntPtr.Zero || (handle == ActiveWindowHandle && windowTitle == ActiveWindowTitle)) - // return; - - // List? timeSheet = null; - - // void CloseTimeEntry(string key) - // { - // if (key == null || !timeSpent.ContainsKey(key)) - // return; - - // timeSheet = timeSpent[key]; - // var v = timeSheet.FirstOrDefault(x => x.End.Equals(DateTime.MaxValue)); - // if (v != null) - // v.End = DateTime.Now; - // } - - // void AddNewEntry(string key) - // { - // ActiveWindowHandle = handle; - // ActiveWindowTitle = key; - // if (timeSpent.ContainsKey(key)) - // { - // timeSheet = timeSpent[key]; - // timeSheet.Add(new TimePeriod(DateTime.Now)); - // timeSpent[ActiveWindowTitle] = timeSheet; - // } - // else - // { - // timeSheet = new List(); - // timeSheet.Add(new TimePeriod(DateTime.Now)); - // timeSpent.Add(ActiveWindowTitle, timeSheet); - // } - - // } - - // CloseTimeEntry(ActiveWindowTitle); - // AddNewEntry(windowTitle); - - - // synchronizationContext.Post(new SendOrPostCallback(o => - // { - - // textBox1.Text = o != null ? o.ToString() : "Untitled"; - - // treeView1.Nodes.Clear(); - // foreach (var entry in timeSpent) - // { - // var p = treeView1.Nodes.Add(entry.Key); - // foreach (var time in entry.Value) - // { - // p.Nodes.Add(time.Start.ToString() + " - " + time.End.ToString() + ": " + time.End.Subtract(time.Start).TotalMinutes); - // } - // } - // treeView1.ExpandAll(); - // }), Buff.ToString()); - //} - private void WatchActiveWindow() { var windowInfo = WindowInfoHelper.GetActiveWindowInfo(); @@ -128,6 +50,8 @@ namespace Superlocal.Agile.WinApp if (!WindowsInfo.Contains(windowInfo)) WindowsInfo.Add(windowInfo); + _logger.LogDebug(JsonConvert.SerializeObject(WindowsInfo)); + StopRunningWindow(); StartWindowActivation(windowInfo); diff --git a/Superlocal.Agile.WinApp/Form1.resx b/src/ui/Superlocal.Agile.WinApp/Forms/MainForm.resx similarity index 100% rename from Superlocal.Agile.WinApp/Form1.resx rename to src/ui/Superlocal.Agile.WinApp/Forms/MainForm.resx diff --git a/src/ui/Superlocal.Agile.WinApp/Models/Settings.cs b/src/ui/Superlocal.Agile.WinApp/Models/Settings.cs new file mode 100644 index 0000000..c57f678 --- /dev/null +++ b/src/ui/Superlocal.Agile.WinApp/Models/Settings.cs @@ -0,0 +1,8 @@ + +namespace Superlocal.Agile.WinApp.Models +{ + internal class Settings + { + public string DbPath { get; set; } + } +} diff --git a/src/ui/Superlocal.Agile.WinApp/Program.cs b/src/ui/Superlocal.Agile.WinApp/Program.cs new file mode 100644 index 0000000..5d45833 --- /dev/null +++ b/src/ui/Superlocal.Agile.WinApp/Program.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Superlocal.Agile.Infrastructure.Database; +using Superlocal.Agile.WinApp.Models; + +namespace Superlocal.Agile.WinApp +{ + internal static class Program + { + #region Properties + + public static Settings Settings { get; private set; } + + #endregion + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + ApplicationConfiguration.Initialize(); + + IConfiguration config = new ConfigurationBuilder() + .AddJsonFile("appsettings.json") + .AddEnvironmentVariables() + .Build(); + + Settings = config.GetRequiredSection("Settings").Get(); + + var dbPath = Settings.DbPath; + if (string.IsNullOrWhiteSpace(Path.GetDirectoryName(dbPath))) + { + dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Superlocal.Agile", dbPath); + } + var connectionString = string.Format("Data Source={0};", dbPath); + + var builder = new HostBuilder() + .ConfigureServices((hostContext, services) => + { + services.AddSingleton() + .AddLogging(configure => configure.AddConsole()) + .AddDbContext(options => options.UseSqlite(connectionString)) + ; + }); + + var host = builder.Build(); + + using (var serviceScope = host.Services.CreateScope()) + { + var services = serviceScope.ServiceProvider; + try + { + var mainForm = services.GetRequiredService(); + Application.Run(mainForm); + } + catch (Exception ex) + { + Console.WriteLine("Error Occured"); + } + } + } + } +} \ No newline at end of file diff --git a/Superlocal.Agile.WinApp/Records/ProcessInfo.cs b/src/ui/Superlocal.Agile.WinApp/Records/ProcessInfo.cs similarity index 100% rename from Superlocal.Agile.WinApp/Records/ProcessInfo.cs rename to src/ui/Superlocal.Agile.WinApp/Records/ProcessInfo.cs diff --git a/Superlocal.Agile.WinApp/Records/TimePeriod.cs b/src/ui/Superlocal.Agile.WinApp/Records/TimePeriod.cs similarity index 100% rename from Superlocal.Agile.WinApp/Records/TimePeriod.cs rename to src/ui/Superlocal.Agile.WinApp/Records/TimePeriod.cs diff --git a/Superlocal.Agile.WinApp/Records/WindowInfo.cs b/src/ui/Superlocal.Agile.WinApp/Records/WindowInfo.cs similarity index 82% rename from Superlocal.Agile.WinApp/Records/WindowInfo.cs rename to src/ui/Superlocal.Agile.WinApp/Records/WindowInfo.cs index 84dbc80..b11fb6e 100644 --- a/Superlocal.Agile.WinApp/Records/WindowInfo.cs +++ b/src/ui/Superlocal.Agile.WinApp/Records/WindowInfo.cs @@ -55,8 +55,17 @@ namespace Superlocal.Agile.WinApp.Records int processId; PInvoke.User32.GetWindowThreadProcessId(handle, out processId); var process = ProcessInfoHelper.GetProcessInfo(processId); - var s = PInvoke.User32.GetWindowText(handle); - string windowTitle = !string.IsNullOrWhiteSpace(s) ? s.ToString() : process != null && !string.IsNullOrEmpty(process.ProcessName) ? process.ProcessName : "Untitled"; + var windowTitle = string.Empty; + try + { + windowTitle = PInvoke.User32.GetWindowText(handle); + } + catch (Exception) + { + // TODO add logger + } + + windowTitle = !string.IsNullOrWhiteSpace(windowTitle) ? windowTitle.ToString() : process != null && !string.IsNullOrEmpty(process.ProcessName) ? process.ProcessName : "Untitled"; return new WindowInfo(handle, windowTitle, process); } diff --git a/src/ui/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj b/src/ui/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj new file mode 100644 index 0000000..7e2d7a2 --- /dev/null +++ b/src/ui/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj @@ -0,0 +1,50 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + + + + + PreserveNewest + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ui/Superlocal.Agile.WinApp/appsettings.json b/src/ui/Superlocal.Agile.WinApp/appsettings.json new file mode 100644 index 0000000..3b085ba --- /dev/null +++ b/src/ui/Superlocal.Agile.WinApp/appsettings.json @@ -0,0 +1,5 @@ +{ + "Settings": { + "DbPath": "superlocal_agile.db" + } +} \ No newline at end of file diff --git a/tests/Superlocal.Agile.Tests/README.md b/tests/Superlocal.Agile.Tests/README.md new file mode 100644 index 0000000..eb8321e --- /dev/null +++ b/tests/Superlocal.Agile.Tests/README.md @@ -0,0 +1,3 @@ +# References + +https://www.lambdatest.com/blog/nunit-vs-xunit-vs-mstest/ \ No newline at end of file diff --git a/tests/Superlocal.Agile.Tests/Superlocal.Agile.Tests.csproj b/tests/Superlocal.Agile.Tests/Superlocal.Agile.Tests.csproj new file mode 100644 index 0000000..9f77f5f --- /dev/null +++ b/tests/Superlocal.Agile.Tests/Superlocal.Agile.Tests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/tests/Superlocal.Agile.Tests/UnitTest1.cs b/tests/Superlocal.Agile.Tests/UnitTest1.cs new file mode 100644 index 0000000..07e9b53 --- /dev/null +++ b/tests/Superlocal.Agile.Tests/UnitTest1.cs @@ -0,0 +1,13 @@ +using Xunit; + +namespace Superlocal.Agile.Tests +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} \ No newline at end of file