From d7123f6dc547812e6302025d80fae8fec1f217fa Mon Sep 17 00:00:00 2001 From: Hector Frohlich Cortez Date: Thu, 23 Dec 2021 18:18:51 +0100 Subject: [PATCH] Refactoring --- .editorconfig | 4 + .../DesignTimeBuild/.dtbcache.v2 | Bin 96927 -> 183451 bytes .vs/Superlocal.Agile/project-colors.json | 37 +- .vs/Superlocal.Agile/v17/.futdcache.v1 | Bin 172 -> 1290 bytes .vs/Superlocal.Agile/v17/.suo | Bin 137728 -> 191488 bytes README.md | 10 +- Superlocal.Agile.WinApp/Form1.Designer.cs | 333 -------------- Superlocal.Agile.WinApp/Program.cs | 15 - .../Superlocal.Agile.WinApp.csproj | 22 - .../Superlocal.Agile.WinApp.csproj.user | 12 - ...ocal.Agile.WinApp.csproj.nuget.dgspec.json | 89 ---- ...perlocal.Agile.WinApp.csproj.nuget.g.props | 20 - ...rlocal.Agile.WinApp.csproj.nuget.g.targets | 2 - .../obj/project.assets.json | 414 ------------------ .../obj/project.nuget.cache | 18 - Superlocal.Agile.sln | 60 ++- .../Superlocal.Agile.Application.csproj | 13 + .../Models/IAppWindowInfo.cs | 20 + .../Models/IProcessInfo.cs | 10 + src/lib/Superlocal.Agile.Domain/README.md | 21 + .../Superlocal.Agile.Domain.csproj | 9 + .../Database/SqliteDbContext.cs | 22 + .../Entities/AppWindowInfo.cs | 17 + .../Entities/ProcessInfo.cs | 18 + .../GlobalUsings.cs | 3 + ...20211223171100_First migration.Designer.cs | 87 ++++ .../20211223171100_First migration.cs | 63 +++ .../SqliteDbContextModelSnapshot.cs | 85 ++++ .../Superlocal.Agile.Infrastructure.csproj | 30 ++ .../Constants/ApplicationState.cs | 0 .../Constants/KnowApplication.cs | 0 .../DebugControl.Designer.cs | 0 .../Superlocal.Agile.WinApp}/DebugControl.cs | 0 .../DebugControl.resx | 0 .../Entities/ApplicationInfo.cs | 0 .../Entities/ApplicationWindow.cs | 0 .../Forms/MainForm.Designer.cs | 187 ++++++++ .../Superlocal.Agile.WinApp/Forms/MainForm.cs | 98 +---- .../Forms/MainForm.resx | 0 .../Models/Settings.cs | 8 + src/ui/Superlocal.Agile.WinApp/Program.cs | 67 +++ .../Records/ProcessInfo.cs | 0 .../Records/TimePeriod.cs | 0 .../Records/WindowInfo.cs | 13 +- .../Superlocal.Agile.WinApp.csproj | 50 +++ .../Superlocal.Agile.WinApp/appsettings.json | 5 + tests/Superlocal.Agile.Tests/README.md | 3 + .../Superlocal.Agile.Tests.csproj | 23 + tests/Superlocal.Agile.Tests/UnitTest1.cs | 13 + 49 files changed, 880 insertions(+), 1021 deletions(-) create mode 100644 .editorconfig delete mode 100644 Superlocal.Agile.WinApp/Form1.Designer.cs delete mode 100644 Superlocal.Agile.WinApp/Program.cs delete mode 100644 Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj delete mode 100644 Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj.user delete mode 100644 Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.dgspec.json delete mode 100644 Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.props delete mode 100644 Superlocal.Agile.WinApp/obj/Superlocal.Agile.WinApp.csproj.nuget.g.targets delete mode 100644 Superlocal.Agile.WinApp/obj/project.assets.json delete mode 100644 Superlocal.Agile.WinApp/obj/project.nuget.cache create mode 100644 src/lib/Superlocal.Agile.Application/Superlocal.Agile.Application.csproj create mode 100644 src/lib/Superlocal.Agile.Domain/Models/IAppWindowInfo.cs create mode 100644 src/lib/Superlocal.Agile.Domain/Models/IProcessInfo.cs create mode 100644 src/lib/Superlocal.Agile.Domain/README.md create mode 100644 src/lib/Superlocal.Agile.Domain/Superlocal.Agile.Domain.csproj create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Database/SqliteDbContext.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Entities/AppWindowInfo.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Entities/ProcessInfo.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/GlobalUsings.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.Designer.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Migrations/20211223171100_First migration.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Migrations/SqliteDbContextModelSnapshot.cs create mode 100644 src/lib/Superlocal.Agile.Infrastructure/Superlocal.Agile.Infrastructure.csproj rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Constants/ApplicationState.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Constants/KnowApplication.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/DebugControl.Designer.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/DebugControl.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/DebugControl.resx (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Entities/ApplicationInfo.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Entities/ApplicationWindow.cs (100%) create mode 100644 src/ui/Superlocal.Agile.WinApp/Forms/MainForm.Designer.cs rename Superlocal.Agile.WinApp/Form1.cs => src/ui/Superlocal.Agile.WinApp/Forms/MainForm.cs (52%) rename Superlocal.Agile.WinApp/Form1.resx => src/ui/Superlocal.Agile.WinApp/Forms/MainForm.resx (100%) create mode 100644 src/ui/Superlocal.Agile.WinApp/Models/Settings.cs create mode 100644 src/ui/Superlocal.Agile.WinApp/Program.cs rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Records/ProcessInfo.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Records/TimePeriod.cs (100%) rename {Superlocal.Agile.WinApp => src/ui/Superlocal.Agile.WinApp}/Records/WindowInfo.cs (82%) create mode 100644 src/ui/Superlocal.Agile.WinApp/Superlocal.Agile.WinApp.csproj create mode 100644 src/ui/Superlocal.Agile.WinApp/appsettings.json create mode 100644 tests/Superlocal.Agile.Tests/README.md create mode 100644 tests/Superlocal.Agile.Tests/Superlocal.Agile.Tests.csproj create mode 100644 tests/Superlocal.Agile.Tests/UnitTest1.cs 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 7cd43c0bee5eeb2c0ccd76d13fa915591ac7c9e6..b7e2d57a4abee84a36e2c8712d535d96bfe69439 100644 GIT binary patch literal 183451 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 FNN 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 M!J&-cpE)`I2jio)hyVZp literal 96927 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 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 47c70093c80e8a02ce0792f97477a4017c17b9ad..67434b2e59ff2e259dc207659557646834dc3a91 100644 GIT binary patch literal 1290 zcmd;JU|=YAv5HAc&WK4#EsIIcPf3j_E-gqc%E?bo%!vtxGxZ$PGjmc23+RPs<~bG= zU?_x&>m?T#6y;|z0qx~=&d*EBOfM};EXmBzV|7VQDoy7I$Vn_o%P-1hbIhxB4hUVD zuPX2TVC^=Kqc=H{C~+tCodxs(7*vtstm2~Nn4HWc%+T@7ODjq&E-5NaE-5X-3}!u4 zc@jgBLqN)~>4{~M!7)lh(Ir1OF*6U-`4Djuowd*6o7>4%clrJSBR7qdP%KF;E-A)z zLEhR0zsBCz0>v@_3ZLMk delta 9 QcmeC;TEoc5IFWHR01Q?FfdBvi diff --git a/.vs/Superlocal.Agile/v17/.suo b/.vs/Superlocal.Agile/v17/.suo index 31b18b591c876a0a9b8a5a5d4087fd5196975eab..b9a8d28ec114381d7ebd984a4a26b98ac219f1ea 100644 GIT binary patch literal 191488 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 O_kJeAoC9|Q%>M&b*WQW% delta 16878 zcmeHO30zdyxu5R<;{d}xfS>{@iKu`K45KI#kdZ`9zy)LD&Su1*AWKwSz`Q2!C9SD& zE2qtSPYuzeslL_(EorI=re>+JRuh}0jj6U-OkUDPYg*A7`~U8pVTNHqT+;X6@AdNg zbI(2d_O0hk<2(M1dkvd2qk?rhofq)cl`B{9Qo}>=PL>-3sNtEaL~0gy(gU*D#UNN-%A)a&yN-Uy=P6(wY7ym&>Y{6%cgTM&2FN2&L!59mZNFarPZ%vZ=e ztf|U-Mi4$W0MUQ};PU*eLO9I+&E4T=2EO&cARrvzx&{Kv0e{lUE>+4669(oZ<}M%= zm~9X=V-L^8dmgX|SPNX{ zL_CWTE&_^yQh?*j@LmGk3)~0rn3mz40aWO8GjuBuSP4`Ckw7)D9;gMl($)4ihZ_)H z1JnaeKqbKOjd=S40|4hrEq=~0#dW1beb2>da9td(iXT5z!+qy9a;yQzJJyQF%xf0~ z@LF;AIUnzX835-UgtzNj1>&36iih9>!~nN)kQ-7~d&k8;jF{2DNWjxNsu_756Oe(M za9zj69C0J-$mJc+Vl?2ojvTLS_A%Y#vT*9UaYBFAjq~-jZvM*UZLb^K(Cl7-r&2kw zJv)j6j`{xu5)K2e1D`WlE>gbzcxh83Q#NBBefPN`NjFVT(&sMy3L$a(05cOavtsBG|e8uJ~wh~L*h1hj{x2K#BQin#~ zN?mY150bo;FM}KO>rj6=IvFz6n1^7xOLKajX`Qa^;vl_f9+s;XN|kjfG|MpDC7X|$ zP3auAmQs|u;SIsJAn_rAe|Wg-ZQcV%-58~`GXtyW2jpq$AM^cBLJoXCY4bDlMSyvQ$#W_2H?DA`hk@HM zeCHgteKkTDnlld>dGVPGW0Ev7KcA^>^faYzVu6tvGVcdRvbI^Yf$ z)wslo=|4wkA$o};^!fR2fKVf zg7CM1Zv&fvM}hAE(}6930!ZMy0B@YFcz=(>%7XU>g=|CUae!-X#rp~6;q8NryX`R? ztL)i6aH50lG8_B}&<;EY{1i9vSPcm(V~NH%HtrADvItvS=g4 z%Of9)$?|xthzxFd_Zyp551tczG;z`4&yW1JQ#Ng-M0wJy!GKVVRZZ2 zI_{EV!ggWb%=yT@kPxhWzD6vK0NS4ZJi|pLYw#7ltUtg;*`4m1tMI_NwLb8`wNWRi#U64 zcx(H_;A5b&=0Jgg*)}J0w2{RQ??--GSBvH|cNpRkbfk-7$euHIdFlML+Vw9Wu`OS@ zcxI}Rc~+21UOg*7p9!V@lX{xo_T^gtnC6)_<77lKSF_icpsb#Gr;%F>aYn`~=Vulg z9NS+b&shatG{io5%$Lrqt@Gap2)WFUGK}W5#8hh^OQ|lpUt#(3vgu{j<&~xKi@7w~ zi1kl1Yo&I0+$xv-$fTcBzM`~pm0H5zlA4&I6?mez0=Y(uHPK?$*k5W zvrXhnP43y^&QqxT^IS>@Hd_+yT?FΜsy63JcJwoP=k=TX#yyS=b=Y&ZSY;+`Zo0 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 C@SOnw 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