Refactoring

This commit is contained in:
Hector Frohlich Cortez 2021-12-23 18:18:51 +01:00
parent 88adda5e76
commit d7123f6dc5
49 changed files with 880 additions and 1021 deletions

4
.editorconfig Normal file
View File

@ -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

View File

@ -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
}

Binary file not shown.

View File

@ -2,4 +2,12 @@
Helper for devs on an agile team.
## Test
## Features
- Integration with
- Redmine
- Gitlab
### Windows only
- Tracks your time in different apps and let you sync with project management tools

View File

@ -1,333 +0,0 @@
namespace Superlocal.Agile.WinApp
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@ -1,15 +0,0 @@
namespace Superlocal.Agile.WinApp
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@ -1,22 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MaterialSkin.2" Version="2.3.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="PInvoke.User32" Version="0.7.104" />
<PackageReference Include="PInvoke.Windows.Core" Version="0.7.104" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />
</ItemGroup>
</Project>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="DebugControl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@ -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"
}
}
}
}
}

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\fch\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files (x86)\Microsoft\Xamarin\NuGet\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.0.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\fch\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft\Xamarin\NuGet\" />
</ItemGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgValidation Condition=" '$(PkgValidation)' == '' ">C:\Users\fch\.nuget\packages\validation\2.4.15</PkgValidation>
</PropertyGroup>
</Project>

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@ -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"
}
}
}
}

View File

@ -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": []
}

View File

@ -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

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Services\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,20 @@
namespace Superlocal.Agile.Domain.Models
{
public interface IAppWindowInfo
{
/// <summary>
/// App window title
/// </summary>
string Title { get; }
/// <summary>
/// When user interacted with app window
/// </summary>
DateTimeOffset Start { get; }
/// <summary>
/// When user moved to another app
/// </summary>
DateTimeOffset End { get; }
}
}

View File

@ -0,0 +1,10 @@
namespace Superlocal.Agile.Domain.Models;
public partial interface IProcessInfo
{
int LastCapturedId { get; }
string Name { get; }
string? Path { get; }
}

View File

@ -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

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore;
using Superlocal.Agile.Infrastructure.Entities;
namespace Superlocal.Agile.Infrastructure.Database
{
public class SqliteDbContext : DbContext
{
public DbSet<ProcessInfo> ProcessInfos { get; set; }
public DbSet<AppWindowInfo> AppWindowInfos { get; set; }
public SqliteDbContext(DbContextOptions<SqliteDbContext> options) : base(options)
{
}
//protected override void OnConfiguring(DbContextOptionsBuilder options)
//{
// base.OnConfiguring(options);
//}
}
}

View File

@ -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; }
}

View File

@ -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<AppWindowInfo> AppWindowsInfo { get; set; }
}

View File

@ -0,0 +1,3 @@
global using Superlocal.Agile.Domain.Models;
namespace Superlocal.Agile.Infrastructure;

View File

@ -0,0 +1,87 @@
// <auto-generated />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<DateTimeOffset>("End")
.HasColumnType("TEXT");
b.Property<Guid>("ProcessInfoGuid")
.HasColumnType("TEXT");
b.Property<DateTimeOffset>("Start")
.HasColumnType("TEXT");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("ProcessInfoGuid");
b.ToTable("AppWindowInfos");
});
modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b =>
{
b.Property<Guid>("Guid")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<int>("LastCapturedId")
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("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
}
}
}

View File

@ -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<Guid>(type: "TEXT", nullable: false),
LastCapturedId = table.Column<int>(type: "INTEGER", nullable: false),
Name = table.Column<string>(type: "TEXT", nullable: false),
Path = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_ProcessInfos", x => x.Guid);
});
migrationBuilder.CreateTable(
name: "AppWindowInfos",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
ProcessInfoGuid = table.Column<Guid>(type: "TEXT", nullable: false),
Title = table.Column<string>(type: "TEXT", nullable: false),
Start = table.Column<DateTimeOffset>(type: "TEXT", nullable: false),
End = table.Column<DateTimeOffset>(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");
}
}
}

View File

@ -0,0 +1,85 @@
// <auto-generated />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<DateTimeOffset>("End")
.HasColumnType("TEXT");
b.Property<Guid>("ProcessInfoGuid")
.HasColumnType("TEXT");
b.Property<DateTimeOffset>("Start")
.HasColumnType("TEXT");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("ProcessInfoGuid");
b.ToTable("AppWindowInfos");
});
modelBuilder.Entity("Superlocal.Agile.Infrastructure.Entities.ProcessInfo", b =>
{
b.Property<Guid>("Guid")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<int>("LastCapturedId")
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("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
}
}
}

View File

@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Repositories\" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\.editorconfig" Link=".editorconfig" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Superlocal.Agile.Domain\Superlocal.Agile.Domain.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,187 @@
namespace Superlocal.Agile.WinApp
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@ -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<ApplicationInfo> Applications = new List<ApplicationInfo>();
private List<WindowInfo> WindowsInfo = new List<WindowInfo>();
public Form1()
public MainForm(ILogger<MainForm> 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<char> Buff = new Span<char>();
// 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<TimePeriod>? 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<TimePeriod>();
// 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);

View File

@ -0,0 +1,8 @@

namespace Superlocal.Agile.WinApp.Models
{
internal class Settings
{
public string DbPath { get; set; }
}
}

View File

@ -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
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
Settings = config.GetRequiredSection("Settings").Get<Settings>();
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<MainForm>()
.AddLogging(configure => configure.AddConsole())
.AddDbContext<SqliteDbContext>(options => options.UseSqlite(connectionString))
;
});
var host = builder.Build();
using (var serviceScope = host.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
try
{
var mainForm = services.GetRequiredService<MainForm>();
Application.Run(mainForm);
}
catch (Exception ex)
{
Console.WriteLine("Error Occured");
}
}
}
}
}

View File

@ -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);
}

View File

@ -0,0 +1,50 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="MaterialSkin.2" Version="2.3.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="PInvoke.User32" Version="0.7.104" />
<PackageReference Include="PInvoke.Windows.Core" Version="0.7.104" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controls\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\Superlocal.Agile.Application\Superlocal.Agile.Application.csproj" />
<ProjectReference Include="..\..\lib\Superlocal.Agile.Domain\Superlocal.Agile.Domain.csproj" />
<ProjectReference Include="..\..\lib\Superlocal.Agile.Infrastructure\Superlocal.Agile.Infrastructure.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,5 @@
{
"Settings": {
"DbPath": "superlocal_agile.db"
}
}

View File

@ -0,0 +1,3 @@
# References
https://www.lambdatest.com/blog/nunit-vs-xunit-vs-mstest/

View File

@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@ -0,0 +1,13 @@
using Xunit;
namespace Superlocal.Agile.Tests
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}