From 4d7b022bdc2d2e0d8a9e392e1faac6cc351c473d Mon Sep 17 00:00:00 2001 From: David Palmer Date: Sun, 20 Sep 2020 18:40:53 -0500 Subject: [PATCH 01/65] Update Changelog --- .gitmoji-changelogrc | 2 +- CHANGELOG.md | 6 ++++++ Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.gitmoji-changelogrc b/.gitmoji-changelogrc index e638cba..0dc645a 100644 --- a/.gitmoji-changelogrc +++ b/.gitmoji-changelogrc @@ -2,7 +2,7 @@ "project": { "name": "quartz", "description": "An Integrated Development Environment for creating Battler-Based RPG and Dungeon Crawler games.", - "version": "1.1.5-alpha" + "version": "1.1.6-alpha" }, "commitMapping": [ { diff --git a/CHANGELOG.md b/CHANGELOG.md index 79b48ae..36dd8a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog + +## next + + + + ## 1.1.6-alpha (2020-09-20) diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index bcbd448..e299459 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.1.5.3 - 1.1.5.3 + 1.1.5.4 + 1.1.5.4 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 6117a95..d189039 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.1.5.3 - 1.1.5.3 + 1.1.5.4 + 1.1.5.4 \ No newline at end of file From fdfb673aefe93252bb2d21b84cffbbd41840998f Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:11:19 -0500 Subject: [PATCH 02/65] :rocket: Change Quartz Editor to Quartz IDE --- CHANGELOG.md | 3 +++ Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36dd8a6..6087a1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,10 @@ ## next +### Remove +- Update Changelog [[4d7b022](https://github.com/TheHeadmaster/Quartz/commit/4d7b022bdc2d2e0d8a9e392e1faac6cc351c473d)] +- Update CHANGELOG.md [[4cd7985](https://github.com/TheHeadmaster/Quartz/commit/4cd7985eb2b8e7de118395fae022933e7758c2e5)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index e299459..3c363c0 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.1.5.4 - 1.1.5.4 + 1.1.5.5 + 1.1.5.5 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index d189039..cc19fd5 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.1.5.4 - 1.1.5.4 + 1.1.5.5 + 1.1.5.5 \ No newline at end of file From e764051cf313a714ae3cac8cbd2672f128e4cb04 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:13:38 -0500 Subject: [PATCH 03/65] :building_construction: Add Quartz.Engine Library --- CHANGELOG.md | 7 ++++--- Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6087a1a..0bf3737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,11 @@ ## next -### Remove +### Breaking and Major Changes + +- πŸš€ Change Quartz Editor to Quartz IDE [[fdfb673](https://github.com/TheHeadmaster/Quartz/commit/fdfb673aefe93252bb2d21b84cffbbd41840998f)] + -- Update Changelog [[4d7b022](https://github.com/TheHeadmaster/Quartz/commit/4d7b022bdc2d2e0d8a9e392e1faac6cc351c473d)] -- Update CHANGELOG.md [[4cd7985](https://github.com/TheHeadmaster/Quartz/commit/4cd7985eb2b8e7de118395fae022933e7758c2e5)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 3c363c0..20e6e72 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.1.5.5 - 1.1.5.5 + 1.1.5.6 + 1.1.5.6 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index cc19fd5..27a60c4 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.1.5.5 - 1.1.5.5 + 1.1.5.6 + 1.1.5.6 \ No newline at end of file From 46dba05e9d7c4a9bfc1c79ae66cf9dd5e307a3b2 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:15:18 -0500 Subject: [PATCH 04/65] :bug: Selecting No to opening a new project while an existing unsaved project was open still opened the project and didn't save. Press F to pay respects --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bf3737..3976480 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Breaking and Major Changes +- πŸ—οΈ Add Quartz.Engine Library [[e764051](https://github.com/TheHeadmaster/Quartz/commit/e764051cf313a714ae3cac8cbd2672f128e4cb04)] - πŸš€ Change Quartz Editor to Quartz IDE [[fdfb673](https://github.com/TheHeadmaster/Quartz/commit/fdfb673aefe93252bb2d21b84cffbbd41840998f)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 20e6e72..fc5056e 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.1.5.6 - 1.1.5.6 + 1.1.5.7 + 1.1.5.7 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 27a60c4..af44515 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.1.5.6 - 1.1.5.6 + 1.1.5.7 + 1.1.5.7 \ No newline at end of file From 4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:30:56 -0500 Subject: [PATCH 05/65] :arrow_up: Upgrade Librarium and Librarium.WPF to Nuget package --- .gitmoji-changelogrc | 2 +- CHANGELOG.md | 8 ++++++-- Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitmoji-changelogrc b/.gitmoji-changelogrc index 0dc645a..fe4a667 100644 --- a/.gitmoji-changelogrc +++ b/.gitmoji-changelogrc @@ -2,7 +2,7 @@ "project": { "name": "quartz", "description": "An Integrated Development Environment for creating Battler-Based RPG and Dungeon Crawler games.", - "version": "1.1.6-alpha" + "version": "1.2.1-alpha" }, "commitMapping": [ { diff --git a/CHANGELOG.md b/CHANGELOG.md index 3976480..c00ae47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,17 @@ # Changelog - -## next + +## 1.2.1-alpha (2020-09-21) ### Breaking and Major Changes - πŸ—οΈ Add Quartz.Engine Library [[e764051](https://github.com/TheHeadmaster/Quartz/commit/e764051cf313a714ae3cac8cbd2672f128e4cb04)] - πŸš€ Change Quartz Editor to Quartz IDE [[fdfb673](https://github.com/TheHeadmaster/Quartz/commit/fdfb673aefe93252bb2d21b84cffbbd41840998f)] +### Bug Fixes + +- πŸ› Selecting No to opening a new project while an existing unsaved project was open still opened the project and didn't save. Press F to pay respects [[46dba05](https://github.com/TheHeadmaster/Quartz/commit/46dba05e9d7c4a9bfc1c79ae66cf9dd5e307a3b2)] + diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index fc5056e..98bd04a 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.1.5.7 - 1.1.5.7 + 1.2.1.2 + 1.2.1.2 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index af44515..7db88b1 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.1.5.7 - 1.1.5.7 + 1.2.1.2 + 1.2.1.2 \ No newline at end of file From 03b4966b2d30ac6139d5602ac518228d2c222722 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:34:09 -0500 Subject: [PATCH 06/65] :sparkles: Add backwards compatibility check for older projects, and versioning for projects moving forward --- CHANGELOG.md | 4 ++++ Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c00ae47..f25b305 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ - πŸ› Selecting No to opening a new project while an existing unsaved project was open still opened the project and didn't save. Press F to pay respects [[46dba05](https://github.com/TheHeadmaster/Quartz/commit/46dba05e9d7c4a9bfc1c79ae66cf9dd5e307a3b2)] +### Dependency Changes + +- ⬆️ Upgrade Librarium and Librarium.WPF to Nuget package [[4b82008](https://github.com/TheHeadmaster/Quartz/commit/4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe)] + diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 98bd04a..c4ffb81 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.2 - 1.2.1.2 + 1.2.1.3 + 1.2.1.3 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 7db88b1..b63c677 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.2 - 1.2.1.2 + 1.2.1.3 + 1.2.1.3 \ No newline at end of file From 48b5bcf6780bd0d3c4f9e2c7c33f755765094e21 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:35:40 -0500 Subject: [PATCH 07/65] :heavy_plus_sign: Add Serilog Logging Library --- CHANGELOG.md | 4 ++++ Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f25b305..c1c0ca6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ - πŸ› Selecting No to opening a new project while an existing unsaved project was open still opened the project and didn't save. Press F to pay respects [[46dba05](https://github.com/TheHeadmaster/Quartz/commit/46dba05e9d7c4a9bfc1c79ae66cf9dd5e307a3b2)] +### New Features + +- ✨ Add backwards compatibility check for older projects, and versioning for projects moving forward [[03b4966](https://github.com/TheHeadmaster/Quartz/commit/03b4966b2d30ac6139d5602ac518228d2c222722)] + ### Dependency Changes - ⬆️ Upgrade Librarium and Librarium.WPF to Nuget package [[4b82008](https://github.com/TheHeadmaster/Quartz/commit/4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index c4ffb81..a4cc38b 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.3 - 1.2.1.3 + 1.2.1.4 + 1.2.1.4 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index b63c677..094160f 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.3 - 1.2.1.3 + 1.2.1.4 + 1.2.1.4 \ No newline at end of file From 49a95ba462761db9ce5101b9426d4bd35fd659f3 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:37:39 -0500 Subject: [PATCH 08/65] :heavy_plus_sign: Add Serilog Debug Sink Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1c0ca6..471cceb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Logging Library [[48b5bcf](https://github.com/TheHeadmaster/Quartz/commit/48b5bcf6780bd0d3c4f9e2c7c33f755765094e21)] - ⬆️ Upgrade Librarium and Librarium.WPF to Nuget package [[4b82008](https://github.com/TheHeadmaster/Quartz/commit/4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index a4cc38b..29f693b 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.4 - 1.2.1.4 + 1.2.1.5 + 1.2.1.5 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 094160f..78ca220 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.4 - 1.2.1.4 + 1.2.1.5 + 1.2.1.5 \ No newline at end of file From 3edad910758b4cde528eda27a3e6abd50c863d05 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:38:57 -0500 Subject: [PATCH 09/65] :heavy_plus_sign: Add Serilog Console Sink Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 471cceb..5b65952 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Debug Sink Library [[49a95ba](https://github.com/TheHeadmaster/Quartz/commit/49a95ba462761db9ce5101b9426d4bd35fd659f3)] - βž• Add Serilog Logging Library [[48b5bcf](https://github.com/TheHeadmaster/Quartz/commit/48b5bcf6780bd0d3c4f9e2c7c33f755765094e21)] - ⬆️ Upgrade Librarium and Librarium.WPF to Nuget package [[4b82008](https://github.com/TheHeadmaster/Quartz/commit/4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 29f693b..759cbf9 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.5 - 1.2.1.5 + 1.2.1.6 + 1.2.1.6 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 78ca220..e6b657e 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.5 - 1.2.1.5 + 1.2.1.6 + 1.2.1.6 \ No newline at end of file From c913daa61ce5eeb4bd126adfd2285980d0348c28 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:40:29 -0500 Subject: [PATCH 10/65] :heavy_plus_sign: Add Serilog File Sink Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b65952..ba310ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Console Sink Library [[3edad91](https://github.com/TheHeadmaster/Quartz/commit/3edad910758b4cde528eda27a3e6abd50c863d05)] - βž• Add Serilog Debug Sink Library [[49a95ba](https://github.com/TheHeadmaster/Quartz/commit/49a95ba462761db9ce5101b9426d4bd35fd659f3)] - βž• Add Serilog Logging Library [[48b5bcf](https://github.com/TheHeadmaster/Quartz/commit/48b5bcf6780bd0d3c4f9e2c7c33f755765094e21)] - ⬆️ Upgrade Librarium and Librarium.WPF to Nuget package [[4b82008](https://github.com/TheHeadmaster/Quartz/commit/4b82008d5f40c0ad3f0f74c9dc17846b17d42ffe)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 759cbf9..f142079 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.6 - 1.2.1.6 + 1.2.1.7 + 1.2.1.7 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index e6b657e..a1e3740 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.6 - 1.2.1.6 + 1.2.1.7 + 1.2.1.7 \ No newline at end of file From 87a8b9fb8f50791b19b0f8fd160192c5e7e53137 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:41:12 -0500 Subject: [PATCH 11/65] :heavy_plus_sign: Add Serilog Seq Sink Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba310ac..6329815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog File Sink Library [[c913daa](https://github.com/TheHeadmaster/Quartz/commit/c913daa61ce5eeb4bd126adfd2285980d0348c28)] - βž• Add Serilog Console Sink Library [[3edad91](https://github.com/TheHeadmaster/Quartz/commit/3edad910758b4cde528eda27a3e6abd50c863d05)] - βž• Add Serilog Debug Sink Library [[49a95ba](https://github.com/TheHeadmaster/Quartz/commit/49a95ba462761db9ce5101b9426d4bd35fd659f3)] - βž• Add Serilog Logging Library [[48b5bcf](https://github.com/TheHeadmaster/Quartz/commit/48b5bcf6780bd0d3c4f9e2c7c33f755765094e21)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index f142079..04bd463 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.7 - 1.2.1.7 + 1.2.1.8 + 1.2.1.8 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index a1e3740..431214b 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.7 - 1.2.1.7 + 1.2.1.8 + 1.2.1.8 \ No newline at end of file From 355b7ad47ede98a1736197d57193db7b3d32d0cc Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:42:38 -0500 Subject: [PATCH 12/65] :heavy_plus_sign: Add Serilog Exception Logging Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6329815..e68a1a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Seq Sink Library [[87a8b9f](https://github.com/TheHeadmaster/Quartz/commit/87a8b9fb8f50791b19b0f8fd160192c5e7e53137)] - βž• Add Serilog File Sink Library [[c913daa](https://github.com/TheHeadmaster/Quartz/commit/c913daa61ce5eeb4bd126adfd2285980d0348c28)] - βž• Add Serilog Console Sink Library [[3edad91](https://github.com/TheHeadmaster/Quartz/commit/3edad910758b4cde528eda27a3e6abd50c863d05)] - βž• Add Serilog Debug Sink Library [[49a95ba](https://github.com/TheHeadmaster/Quartz/commit/49a95ba462761db9ce5101b9426d4bd35fd659f3)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 04bd463..8fa380d 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.8 - 1.2.1.8 + 1.2.1.9 + 1.2.1.9 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 431214b..4e5a189 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.8 - 1.2.1.8 + 1.2.1.9 + 1.2.1.9 \ No newline at end of file From 4c036a987785600d983c506644ba4ba0f520e127 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:43:20 -0500 Subject: [PATCH 13/65] :heavy_plus_sign: Add Serilog Compact Formatting Logging Library --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e68a1a4..8834061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Exception Logging Library [[355b7ad](https://github.com/TheHeadmaster/Quartz/commit/355b7ad47ede98a1736197d57193db7b3d32d0cc)] - βž• Add Serilog Seq Sink Library [[87a8b9f](https://github.com/TheHeadmaster/Quartz/commit/87a8b9fb8f50791b19b0f8fd160192c5e7e53137)] - βž• Add Serilog File Sink Library [[c913daa](https://github.com/TheHeadmaster/Quartz/commit/c913daa61ce5eeb4bd126adfd2285980d0348c28)] - βž• Add Serilog Console Sink Library [[3edad91](https://github.com/TheHeadmaster/Quartz/commit/3edad910758b4cde528eda27a3e6abd50c863d05)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 8fa380d..602653b 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.9 - 1.2.1.9 + 1.2.1.10 + 1.2.1.10 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 4e5a189..11c7833 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.9 - 1.2.1.9 + 1.2.1.10 + 1.2.1.10 \ No newline at end of file From 560d15c506ff41e7fe6e4a923c1be285010069e6 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:43:58 -0500 Subject: [PATCH 14/65] :heavy_plus_sign: Add Serilog Analyzers --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8834061..647fb49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Compact Formatting Logging Library [[4c036a9](https://github.com/TheHeadmaster/Quartz/commit/4c036a987785600d983c506644ba4ba0f520e127)] - βž• Add Serilog Exception Logging Library [[355b7ad](https://github.com/TheHeadmaster/Quartz/commit/355b7ad47ede98a1736197d57193db7b3d32d0cc)] - βž• Add Serilog Seq Sink Library [[87a8b9f](https://github.com/TheHeadmaster/Quartz/commit/87a8b9fb8f50791b19b0f8fd160192c5e7e53137)] - βž• Add Serilog File Sink Library [[c913daa](https://github.com/TheHeadmaster/Quartz/commit/c913daa61ce5eeb4bd126adfd2285980d0348c28)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 602653b..1364744 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.10 - 1.2.1.10 + 1.2.1.11 + 1.2.1.11 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 11c7833..0c1168a 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.10 - 1.2.1.10 + 1.2.1.11 + 1.2.1.11 \ No newline at end of file From 263f52a1ca2b85f86c873e43fcbe16544722f635 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:48:45 -0500 Subject: [PATCH 15/65] :test_tube: Add method-level logging and error catching utilizing Serilog and MethodBoundaryAspect --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 647fb49..eb3d050 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Analyzers [[560d15c](https://github.com/TheHeadmaster/Quartz/commit/560d15c506ff41e7fe6e4a923c1be285010069e6)] - βž• Add Serilog Compact Formatting Logging Library [[4c036a9](https://github.com/TheHeadmaster/Quartz/commit/4c036a987785600d983c506644ba4ba0f520e127)] - βž• Add Serilog Exception Logging Library [[355b7ad](https://github.com/TheHeadmaster/Quartz/commit/355b7ad47ede98a1736197d57193db7b3d32d0cc)] - βž• Add Serilog Seq Sink Library [[87a8b9f](https://github.com/TheHeadmaster/Quartz/commit/87a8b9fb8f50791b19b0f8fd160192c5e7e53137)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 1364744..224ab31 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.11 - 1.2.1.11 + 1.2.1.12 + 1.2.1.12 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 0c1168a..88bf619 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.11 - 1.2.1.11 + 1.2.1.12 + 1.2.1.12 \ No newline at end of file From ab97e2fa8e178bd3f8e95c4ea2668948ebfdaf50 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 12:48:45 -0500 Subject: [PATCH 16/65] :alembic: Add method-level logging and error catching utilizing Serilog and MethodBoundaryAspect --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 647fb49..eb3d050 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Dependency Changes +- βž• Add Serilog Analyzers [[560d15c](https://github.com/TheHeadmaster/Quartz/commit/560d15c506ff41e7fe6e4a923c1be285010069e6)] - βž• Add Serilog Compact Formatting Logging Library [[4c036a9](https://github.com/TheHeadmaster/Quartz/commit/4c036a987785600d983c506644ba4ba0f520e127)] - βž• Add Serilog Exception Logging Library [[355b7ad](https://github.com/TheHeadmaster/Quartz/commit/355b7ad47ede98a1736197d57193db7b3d32d0cc)] - βž• Add Serilog Seq Sink Library [[87a8b9f](https://github.com/TheHeadmaster/Quartz/commit/87a8b9fb8f50791b19b0f8fd160192c5e7e53137)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 1364744..224ab31 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.11 - 1.2.1.11 + 1.2.1.12 + 1.2.1.12 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 0c1168a..88bf619 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.11 - 1.2.1.11 + 1.2.1.12 + 1.2.1.12 \ No newline at end of file From 7f867f47734ee21e6db395c950ce515f0f5eff9e Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 13:48:06 -0500 Subject: [PATCH 17/65] :building_construction: Add Quartz.Testing Unit Test Project --- CHANGELOG.md | 4 ++++ Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb3d050..f6bc32b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ - ✨ Add backwards compatibility check for older projects, and versioning for projects moving forward [[03b4966](https://github.com/TheHeadmaster/Quartz/commit/03b4966b2d30ac6139d5602ac518228d2c222722)] +### Diagnostics + +- βš—οΈ Add method-level logging and error catching utilizing Serilog and MethodBoundaryAspect [[ab97e2f](https://github.com/TheHeadmaster/Quartz/commit/ab97e2fa8e178bd3f8e95c4ea2668948ebfdaf50)] + ### Dependency Changes - βž• Add Serilog Analyzers [[560d15c](https://github.com/TheHeadmaster/Quartz/commit/560d15c506ff41e7fe6e4a923c1be285010069e6)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 224ab31..8aeee3e 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.12 - 1.2.1.12 + 1.2.1.14 + 1.2.1.14 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 88bf619..dad00d0 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.12 - 1.2.1.12 + 1.2.1.15 + 1.2.1.15 \ No newline at end of file From 6fafdf35d357ef65683dd6c16e97b9a1e112430d Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 13:55:00 -0500 Subject: [PATCH 18/65] :boom: Previous projects are now incompatible moving forward, starting with 1.2.1 --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6bc32b..3cd0a90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Breaking and Major Changes +- πŸ—οΈ Add Quartz.Testing Unit Test Project [[7f867f4](https://github.com/TheHeadmaster/Quartz/commit/7f867f47734ee21e6db395c950ce515f0f5eff9e)] - πŸ—οΈ Add Quartz.Engine Library [[e764051](https://github.com/TheHeadmaster/Quartz/commit/e764051cf313a714ae3cac8cbd2672f128e4cb04)] - πŸš€ Change Quartz Editor to Quartz IDE [[fdfb673](https://github.com/TheHeadmaster/Quartz/commit/fdfb673aefe93252bb2d21b84cffbbd41840998f)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 8aeee3e..038f35f 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.14 - 1.2.1.14 + 1.2.1.15 + 1.2.1.15 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index dad00d0..b980c92 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.15 - 1.2.1.15 + 1.2.1.16 + 1.2.1.16 \ No newline at end of file From f6c6c0caea858f679fe6aeee95334c65ec24954d Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 14:54:38 -0500 Subject: [PATCH 19/65] :arrow_up: Update Coverlet.Collector 1.2.0 :arrow_right: 1.3.0 --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 +- Quartz.Engine/Content/Content.mgcb | 15 ++++ Quartz.Engine/Game1.cs | 83 +++++++++++++++++++++++ Quartz.Engine/Icon.bmp | Bin 0 -> 262282 bytes Quartz.Engine/Icon.ico | Bin 0 -> 147541 bytes Quartz.Engine/Program.cs | 20 ++++++ Quartz.Engine/Properties/AssemblyInfo.cs | 36 ++++++++++ Quartz.Engine/Quartz.Engine.csproj | 60 ++++++++++++++++ Quartz.Engine/app.manifest | 42 ++++++++++++ Quartz.IDE/Quartz.IDE.csproj | 4 +- Quartz.Testing/Quartz.Testing.csproj | 19 ++++++ Quartz.Testing/UnitTest1.cs | 14 ++++ Quartz.sln | 36 ++++++++++ 14 files changed, 330 insertions(+), 4 deletions(-) create mode 100644 Quartz.Engine/Content/Content.mgcb create mode 100644 Quartz.Engine/Game1.cs create mode 100644 Quartz.Engine/Icon.bmp create mode 100644 Quartz.Engine/Icon.ico create mode 100644 Quartz.Engine/Program.cs create mode 100644 Quartz.Engine/Properties/AssemblyInfo.cs create mode 100644 Quartz.Engine/Quartz.Engine.csproj create mode 100644 Quartz.Engine/app.manifest create mode 100644 Quartz.Testing/Quartz.Testing.csproj create mode 100644 Quartz.Testing/UnitTest1.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cd0a90..9ae3507 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Breaking and Major Changes +- πŸ’₯ Previous projects are now incompatible moving forward, starting with 1.2.1 [[6fafdf3](https://github.com/TheHeadmaster/Quartz/commit/6fafdf35d357ef65683dd6c16e97b9a1e112430d)] - πŸ—οΈ Add Quartz.Testing Unit Test Project [[7f867f4](https://github.com/TheHeadmaster/Quartz/commit/7f867f47734ee21e6db395c950ce515f0f5eff9e)] - πŸ—οΈ Add Quartz.Engine Library [[e764051](https://github.com/TheHeadmaster/Quartz/commit/e764051cf313a714ae3cac8cbd2672f128e4cb04)] - πŸš€ Change Quartz Editor to Quartz IDE [[fdfb673](https://github.com/TheHeadmaster/Quartz/commit/fdfb673aefe93252bb2d21b84cffbbd41840998f)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 038f35f..6cc3406 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.15 - 1.2.1.15 + 1.2.1.16 + 1.2.1.16 diff --git a/Quartz.Engine/Content/Content.mgcb b/Quartz.Engine/Content/Content.mgcb new file mode 100644 index 0000000..ddc4c36 --- /dev/null +++ b/Quartz.Engine/Content/Content.mgcb @@ -0,0 +1,15 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + diff --git a/Quartz.Engine/Game1.cs b/Quartz.Engine/Game1.cs new file mode 100644 index 0000000..b9250fa --- /dev/null +++ b/Quartz.Engine/Game1.cs @@ -0,0 +1,83 @@ +ο»Ώusing Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; + +namespace Quartz.Engine +{ + /// + /// This is the main type for your game. + /// + public class Game1 : Game + { + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + + public Game1() + { + graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + } + + /// + /// Allows the game to perform any initialization it needs to before starting to run. + /// This is where it can query for any required services and load any non-graphic + /// related content. Calling base.Initialize will enumerate through any components + /// and initialize them as well. + /// + protected override void Initialize() + { + // TODO: Add your initialization logic here + + base.Initialize(); + } + + /// + /// LoadContent will be called once per game and is the place to load + /// all of your content. + /// + protected override void LoadContent() + { + // Create a new SpriteBatch, which can be used to draw textures. + spriteBatch = new SpriteBatch(GraphicsDevice); + + // TODO: use this.Content to load your game content here + } + + /// + /// UnloadContent will be called once per game and is the place to unload + /// game-specific content. + /// + protected override void UnloadContent() + { + // TODO: Unload any non ContentManager content here + } + + /// + /// Allows the game to run logic such as updating the world, + /// checking for collisions, gathering input, and playing audio. + /// + /// Provides a snapshot of timing values. + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + Exit(); + + // TODO: Add your update logic here + + base.Update(gameTime); + } + + /// + /// This is called when the game should draw itself. + /// + /// Provides a snapshot of timing values. + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + // TODO: Add your drawing code here + + base.Draw(gameTime); + } + } +} diff --git a/Quartz.Engine/Icon.bmp b/Quartz.Engine/Icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2b481653e241818d2894e4ef33234eaff9aad701 GIT binary patch literal 262282 zcmeI5U#w--UB}l@N{bdGr9PBcCDGJ$nrI`=WH|TUUY#_NDiB0LqCT{g1`;L3KcJoR zB$bk?iHSS_+EQP9@eOEV)mmCZn@Z7_(T?-rw9}b;?{o%38)$^4jK5EtQ;%oXIrpry z_dfUcTkAXFaPC=W?{(JteZQZz*4}&VwGZF$(R6X*-$(6rKY#4|-fLgFI=zO^_WhMV zn7;e^?#J)_?|e$%|1TZ>g`0nG;=6_ZylA1V+Surdw0YuCTHCoTt#2Pm>pPF8(e{&R zbo%pYee0N|owd&|q_xxM?Qgx}#Q^Ql5G~OZZP6I5(H!mZKpSpvyOwWCo2PF~qn(eK z51uk#oHQSZ>3B>Jq1o5c+BTlR8+Zh-v`tI=+Fzayp1V1%ZPDJ-{tw|BoxR(1d)k=)wvF|~XT5x`Qd_))r|=dYtDmGeHKc96)7t2NHf>%_ z>tf#Guu3*s`z<_%*X~LqjSKd$nHZ&wGmqOb+e`Ahc;6!r;Jr`S3oq^=3eEiV#cA{W zuh}^4**(&`wZ2aEU3@HsC-Ej8Z3f5{RrHdy|0v_FuZVl~_0BzjNAW72T@fDD{tRvD z9cg1n*XkDUhty~Lh!vj2yBZHH*F4=|*ItfWJ1Rf>@UwJSP6s@UmzSfUy}jOUvHFzr zF`ighj)j)vhNtm%dqgi*@oD}`&Jf2KZPV;)`K$$9`bYMn2@ zIt!n+`TDK2>8hv3FUxoUMrvD=17VdzN3+J-mCWz52_t z{<6k+!QiUb4`9ub=QO`Z?5pp0;Q?4&#v?y@n2+Td<& zu;Qoq?WG4`cp3gVcKC|g{gCbcUiwYH?W?^zvE(`dy0_Ptj^avsEbD<~?h$@geZTsC zd7ugpz;ekk0P74d+t$>u-#Lrd({}FUQG4BIf4|pWx7h35X>IH0?3}7zeq(?}XoY6? z+H)w-5G~QP25&A~hmy6!KW;Hx_ID!g$Guamr*@CMembq4*_YD!lJ-*D`i}sbqAePu zb!+#q!t^34U7ik}d#RDO^0dv9K9bgV-jX&>EfO1TQ%?lY9PRNy#6GLE%rFhxyD4~Q z1AYHjEf!oC>2hs!w>awi7!kk&cmYq8G8Jum*xpT*&s7|Um#uExA9-mybaJ;i==-)J zfG6+<9*M^FqUD9{d8%HOMrUh1E@F+ex2AQC^XC~r-z7X!>)MvE4db(9zPr-4?_sO= zkn5t%il@?JMgXtinMM26NZY~qELFHp5~(h`mGwKO;rs11tG-HC1m;Bm@8F@`d=}|@ z7|+%DG8-4vw7$MW8eScrHTUIID~>Po1wwn>o;Nq0jw&XyQ1gtESpt5h#fO-kZf%gml=yE%0@J?q|~4 z9VL#{wtYt6M}w~;1p6Nhd@l1dn(Nc2ot4)T5x|2H`ubcMVW0I8bKgZsV=cEOB-1X6 zKyMNFoxsNcu>WM>a~SVPqwmjQ>P=8(qzDv501rm!D|2Oh!rHE9?B1r_ciz*Uw_}%! zv`%k^1=SGpk@E8=KBp{XXUv>1n^>xFYjrve>Ujx|6}5R38!k8 zAtHbmy|bPxAMC#nbnY+Dm3`uRyZZl9n`--kB7hgYvtC>I zc*fg6aw=OzpeO=*R`%-0KRoBLNF;5n2n-YfyjWZR>b*WZgLfb~m8~LB6al>GotN6m zC;p2ps*MMXfcRhi_+R`FXlP|!6an!s{)-HwjjM`)_!s{}8Jc@cxlXH>-x$0Y_#T?5 z=LK3B|6iRpb#5u>{FW)WIbSHP4PS`=Hgp!x(mCe=@h@NGe4(^9 zd?EhZ&{;f7=bQ(`zkHGNh0@yah4^nnXYnkZa~=@?@2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!jp!v7o7p_6}}*0&Sa{X{x+CZax+IRfjs zGPc71)oF7(SN{lUl)VN1@nQr$YAU1n_rETz`1h|-)HXr<`}dak_pg!o_dP<@_}{la zluqOS)wgr%|5qRL(!N6dzkiKNHTAN+`1kKE@$X+FFFco)L;U;qmiYItQ7Ly`wio~Y zy(RwrYvhIJ(sGD@|K1Y+{xvG)&dc`V-@muSzkiLq@LXCB@$cVT;@`hUrQCVhUi|y_ zmiYItkr$pz%OU>#drSQL*Qk^`FWZZM|K1Y+{x$N#b7?umzkhFufBzbla_41x@$cVT z;@`hUUU)7ohxqsJE%EPPqf+j?Y%l)(drSQL*T@UcrR5O+{=Fss{cBXpotN#!zkhFu zfBzbJ;kmRN;@`iw#J_)yO1bm0z4-U9<<86Y;@`iw#J_)yyzpFF4)O2bTjJlpMy1?&*Er|77UyC45_Y=T>QKylhX| zyGOu(4tUW^%v&kPEopt*zcad*@IbmYthWxPjV3g@HLY#8!kw3T-fl7PPM7~2em;%D zdh2i_{NqJ0T$GmMg|v3MbRQ4f-`7b0AGvR#?EYKW?j^*F9+)UC1MHs-+P^&3h_^l% zxNkX<)_1zoT+s0uUi`NP_{W2Iv6MXz+r$17X+7-u<#(jfDc|&VE8QE@p_8ws z^^oUh@Hb_r4&9>Qdv84Gf#qe&0Q-*y?qBY)^B2C|(XDhh1!jNj$6u~oBRn{+YqWRR zk9>aVGsZ_Z!hG-jvA|=qF$<4Z&OaU;*EQNZ?B5pj*o9a#zI;pCsPY)#QX4maGqAVD zEKmpP;=83?u5@@W^6?q$A4+RGW33{-f5`gC<<#@N*RKcHWztK(kw#UH)9~J8J)`{% z`&XpR6Vb{&S>7%4)+K5GQQtI|m+slX-$a*{4$tN4871wj6K(QSfzM$QZ`!X~jxqPy_2e%G*CWTk zznD(ct&B3CTjRCpeJ0G0qx)b5{mlat?b*0q5#QezbS_zr`RTMf(nb~Yf$`dO-J*T| zYd?FPkQBP3xhr1zed9oH|#5w`Q?G-Kb;4c6nT8Jcie1)iFvs%#Z7YCQ-^g zubj-4eOKkjuJ-l?hIC-yKtE3S9j_tW~+@R{>AUakwUUc~*CjVHT$ z1jdL7v6-hn1P8(nU`wHe-O~$p) zzljYon&r<`q~noVuJKK41KTh@FOE+KzZYP-&Xb>+xA8~zTJ>Dvi__-$57@m{HQdiT z8P6g9CPu`Hn9cKP-{0X0yivp4o>{uU_HJ>z)5c-5_OB)Vgw1{C{*9sU8)Q7oJ=XtT zahp1nCx{ub8~T_458wqnF;rc=OyO%N#S&may&m*=*^^c^@uk99> zlJ9@m#<3h{9XDSMS^gICCWge4n3ia;+qP(q_IRL$IKnh+?-m!n|5#(ks2mr4+S-5C za{DRs#4__!Ic}sMdBS4X(p;WZu|rIWEiqo^JPw+oEgGYBt>?LB=>gM=u+KKk%b1l< z3+dda!m$$TBi?JzuzHWZe%0c4qs4{m!F>K*`}`O7`bYC)^mQO2YD&zBJsO||nxG9D zp%tIe4h_)~O(WK`uQHd;wc>v5zJ6QzD3PoUQ_J-#eSLR zFmnB+g>$0vt3SU=lm0Y;;bpI-a;`;M^rwYlsaUSs128-u)0e(;Z8Z8iXRD64eou^h z@c`_0o#XOeod?u;PZGb$mCmw*kWx4HZzt^N&&a)0v&26me)^7jmReP9&y}mf^lFtvNcm224xE3Q` zS*fjDum*EonC*MtA4}J6ZR>pCo{R%)^SA0VyDxz;SnHeLKJvT9u0gi^JX`s8wr>@i z?y-R_80&-8q4GFn&u-FlZM$nNUKGPg55N>`4aIGr`5v}=kJSdqzmxve-^=>}mSCz+ zMu*NzZNTz+uZk7sjO$(w-#SHPf84e(UeWmgpZ_i#! zkC~r-=X`~(3oNerD){)O`D$`J$={@{;I?<@b^eE=(7ukp=de7AJwD`=kJ?%EH@2lt6xl}2Z0X~lPJGh`W* z_x$+6h_|^tv;0z;&U{7PFEC&Kq4@Y4^VJWeYcA;br!{07wjHV*%6GQ@u;FD+@3b%a z{LDQ|x_5ZC5Bg-}WsCK1FR>o%Z`nTV+hkVo1OjrHL z<1sz^p?7`oJlTX;-k&0ajVW&QQ_7R$bMB2V&GAAVsUUK$g;zN)o4 z`}V<5`LS;C0~QyaUr-uPZNI)vfAX-sE>8!~4W$uz^BWqkE!PI%Z9G2o8r?(bzlwZ$ zcFCtKMq+yL7(8q7>T;Z4sw=<6Z%U)ZV}PfJdM;0?ei63k`Gv=I9cnIPJm38{?HF=j zN-JLnhTr73DTCU9+3f%x?)zDs5%}$+j6A>ic02bZkNtmtowL5=4=gU1rb8$Dh;x@b zCxY z#+Eh0qj(k1_8sHa^P?@j)jZbPvFA}c=XOWh*m-^0JmK8~l##Mh=9bz4Jc&2e->=4@ zqqK46<93bvrAo)0%)R?t^V7T1`p#Y)-*;7!GE;WyQ0qKGyoU$zV%K-@P`pZRZ^?Om557=4|)Ghj$0FU7{JU8UE*43*N{};J` z?QYZNY4cf>c?9_B3--Ft%KhVMRDC}}9q+YkJJdN!dySXy6yCyP@kyz_2A7#mH<`yC zG0k``x~G1Jb3~8Z>ozObmFd8#`qjwSkh&8CVnIwiX@qC+4j#fw`5GuSN(2~#-k3%^ z585^Br_5`sx~9lFF8^TXga5?5#9CW#P8(m360=p8lh_a=VnxhWwQdw%z!M)aZ{U%d zj=ff`VWi)?!p>E*z8Zbd5j$7)sQKVY*SP*sNDHl0|CFz!@@Z9>Xho|^ zX)(&oghZPy%>SM@9z%l}GjCAu{C;oVGIu%KJ@?!l!{o4r7=Rq6i}`C}*jDuH?#_Sj z(ohc5(!wx%d;WXyUJM)FNe&w{sQCXO7?yEW4l^<;{=XB3wJty@=@!4Yz_1(bYu7&fPuJk|nzhy3Q(L-FbInCE!&koEwT+Nz3QDC=VaTw4ZBvK3)IcJncsYp*{AE`PBW!L95G))yFul z?-lXE>GGkuvm7^!8Eg5kO`8KcYn3~kT{rcB*41tf3mQ(_$ow+s`gZsB5p?cbUK`a+ z`Ct9!apHIbdPgqFJ8)o*OST*5@OS#-<p*PFK#mSvsSY!GY0>*?L8*+c77CPyq^ zCT{lK<=XN4?8ECWe>}f_dZ(0MI*T2O)JJlZ9kk`vX68qPZtJh5q_r!r!}n<35|8WW z%rg97OhCw^urtQU36TO}q9-UB7zw675d(-VV88jUEVAImQ2I{}I6|S;V zJHsBkVXEpiwT|;uZ*Tm(mNRzzlf^{?ls(OLJLz-kHG28KIh{m&V!{$F%wlxxhYJP$3YNw# zw?1dLXX_+A`(X=P4D6V6ug$k_t?nhoyqWD;kYI4uYh=0|Jg9y+PMd&rLm z=8D|W#{>0x8+Nzxx#D70=u4Y3bQ^Eq(fo@G*K2F+yOVU$sd4jkC%be!tx{UY>Ks}1(Cz5IL~uSVWfSUzH)msw)peeJ{a zV-I?cV%x1VpIqP*8*6egz0u%^@MhY6sS#_f8u%Q_=)UFtu2~NcjyP{($!=%M>=gi=|`wP@s4m%;wbQ-d5<*7be&59;Y*FI-w5p;ht_gqhpHc{Ue&zRMqn~Gf4x7E*; zbhiE*aI0yoORGtK`gZajHb;!VsK40JJ(0cQ^2tU+- zEsq`%H*nU4@DB#_R$?m_eKqagPe z4O32>v7@hT$llD9^k?mJJs)y+?7YXjADhp&nBCesZB4H2&?dbSw*)tEU!|G0 z%wws?!fT-^szKKoN;!8wT)F=IfA#Iw<}BHBwYS;YgQq={X6>n8>(O(S`&7&HH?H#CVQ>bw9RM0=&;}inb_uM+8 z;bz+jJ2AlZromy;-SwS%?2Mc-yP$XDbECpp-m^Az^}ibww&Ly9G=|6HZefPkJEcd> z3wo1nAH;JRuE3=0TzD}cZttlnR%?bh9pTRMzHF9%q{&y88JSKd&DS0rd?mqn|8cwJ z&91FnA>TXBln$AkIZg6 zhHgvx(I-STwabo=p>bvvZPpSqD)0b>k#fl~mPdrrgpo>Rzep@Sz%UN!t9>?)ar!F`X z60~Pk_{*5?dofmwh1KL^TL!&WU@pmCdvbi2DI1P|d%b{hc=DGogQhARJs+*KdeeIJ z?R!q6`;FI58?dUWUw5ov==!27Id9)svagoIk+AU43@Vw z&<@v|z&4&5oPuRpWInw3p=UtyNUH%wZ9F_19JWkzjP9g3C{#H~?s10RGiRsv9_ReN z$#tsl?lviqQ83|`jqd50YI~Qpp2@2YAN)saet0nUN#okD`mSsCXV+`_bg|z;?M?slYP0NmFm}K1hqm9GZ)97k zSe{!v$|39G#+$B8Iabnzd+E2mt~)CF-Y7Wav)|ZTfthx~8tqHQhKY6_SC$%CO;_>{)ajB*f2(kp-drVd zc!Em8aC6o7cbpr~yWYKbgSICkBOZKxl1dBqPZ*lQ{ngILBjxLO*Cgd{#zP_&cfUJ) z!HP@Hjd+htGgBWf+IhvIXy$2`r~5wS@9d~#5fgv4r-$B%Ia#~A+Rhx{T!eL1X>sbo zrhcPUZ~wPCW`%2O^Q9}Z)*hJp-J!nQ@mF$24s#Fo-D%t_^8rKtkzXgC)u~OZ?!D|B zZ%RLKYj{M_y30N6-+8JhTKXJjyqg&Dsqy@MJy?obJqsLob3?i%Y#ZbLMK5sev3j@E z<{UGzUfceE<8DSLq|gg)8ZaYw)nC2n>cCZVTHbxm{_2?bw#WV01{tX#?w8XOebw^} z`mN+8FP3}acem5Cb=RC&fo)BS0xUnySou|pQ$t{?W|TENhgY7e^i z$y}m-)}1e2!GtibeM>(o!KY0&$0;dcKOHmCG#oLA)pW~gFUTLtXyadULUt6jPJ zzv8^j*QLAHe>Lr2(=?q4cJZELzc=WgrTTXL_a%1P-<=DCjlX=(?DKNjw4QPv=^w6W zycv1zbV8B#kmTb7eD8F9=N3K@3o&c=`iuRfN!dGX4Pxl~RaRu(UY5%p){$mX;Ir9GmE-$;Cq#W%)nu8YZ3nYQJkI$AZ}Ot2j`sf?snY#Q*Emkm zpu7$}3DRKJHiwdoQ`*LC6h0x?W%sv(ZI@*}q2G; z*Wy=Z&zePCYJr_~WPDIxH!LEUX&ds{dFlL47Mab)9@F1-SN?#Go?nsUWY@(j8t81F z74J4>OZ-+X$A5>f4jGpaovAU+$aSrn?v~b;0sD*Yns{kA`X1@po0F5ca_^pypYuBP zUTqcOz3ksjUwcg%<>eYO_2uT7Yg4{%b?G}ePhsfw3(6m(uAjE>=+irJ&$f>j)4S~1 z5_W!4Yvn92?9xp{Iu8Aw_eMr{WGd6j#@fGU`KV669YqqMP zZxFY~_O%Uc_x+RYfswueTW^M+{5t0zD*}Sg^7B0#7kyW!W6w?B487azxzi+Z<>ukn z3zSnJ#D_f6c_>S45r3g-KE zmF12unJ4zWe0}lR7%zv6JG)%_jP2}l&_!$b@(Yi`PhNQ1^A$1!*xdUs*{T`sqf}GZ z_Q_sqacx2Sv*G&enI~Pe?kqF8p1Mlzxa;Ce+q@i-51zFf@#@4Dm($@-0-l6+XyFmx z@_UDAYn3~mI29BA{*>Lw7EhbGXDEyw7;HD}6*!umCttC2`k}sVki71}i)!s+&W7J_ z;Le>nAuQ;c;r`UoZyp%G&0Y1tQ}^+$+?4n&z9&ylv(cE>rsa|3hu6FoVxwN18l%SQ zn$auD&ne0{<-)iK??JPSjh^mcC(hYyHVr#9stId!25pl)X6-F!Z`#1UK?C))O;OOC3D;!J4L6Y)`DqIO--I3of2q>dv?xY^V71*3h?0&-=Ty z8Ek}YAG3Gt$5!f$e^C)@iXB(!iS;qU?yEG#nl;73>M0D`2xY2%WJ0J%aQB`6?YPB2 zrDFR+Y-*!zWJ zCmj3TC7&28{*90T8^*t-R-k?1$ZHB2}4^=Qdrvzo@gm}LZUOh)4d(7PWw9V&v z1)3cue2{yTHo|eZLi9zauGd_Yrp6zPvb}f90U7)I5yo@JsrHzkF!-X=q{bufX%!1irU1xMV~V&VrRUaXg#|4!ZG!fej$AeZh|Ya9D7Xlvk) z8KFP=+zBzCy(wha*G@v9jTM~^bp0xjk)^>@*- zq9;z+zgV+ie1tcuvd1|r9n=mx(c}B}*;&dN2ge-P-&}2*_Ib?a;@D$pmuJa0NEl$P z!QOc?J$Y5L?)z;UVyUrjJ6eRkG(6o=`{sf9w^k<38UHgjC@5)(^I7B6a^E^P&TN5?&6Ss{2Iqk*vp|hA{zlBea@Y}uGcx1o*%bUoZPph|M zd$TAS%AGUoDd*TIt#4f}Ir`U6}J3Amcf0fS+j>gx2 z7@8;TtpBxTJ=)sTFh11dw1rcLFV5~`k=l54@@(21_rTnG002&+M!H$l?-fO5(-wKQ0C>4V{;D zG(^YSr8^sZLI;Jsw!FLuejne)X5JoGTsF=*c)xk0jZNCfTm2KdkEa&KNpMV<(7b4k zW#+8g8>TMIo{_nt`EtW8r#gN-J$F~LRlls|;$LeW)h(DC$#^@dyG@b2+C$IJycyTS zmt%cCczw$<$cqJJl!J?pnC&e7C46 z{eM2XbNsqTSB8aq{siMknX}CMYNox}=k_zC5AWWn?~#k{J$A8q8q_)~oH6dXVZV+= z^@mvjMBiz5#RfGxmwNV`-;q>9wZwk)jZ&ix6`q;{Ri|L?<03%oJlO=5#=u`Awlai7ekXV0P(Uwu~N3Y^O zGWQ5vHr_WeY(e{MpS8KG993s@(;qw`BB1f=h)^w0-^a5i=ICU@oaJRZqz#u z?gEQe%FSNA_H3%1nrWsmu;rK`te&p9=d-PpEhCF`^?7X+Tt6}uba&=l)t(;gr|hx) zv~T+HiPzFIE#{tIt((~+&33+H{kOVG*Yg_q-dMc%Ebphn`sJ2#b2Q|X>&xp&cKh5)v#?t=^J~Ykn z?0h_fVSn<+uXCt7M!r7u9Zpt?+O$Bk|IRMUYz;JSG;0|*WJRlAXEq-CdS-&L)dtsN zAMJZ&r0SiX6zX-^A>HlmegnS-d4;?4zg~CPKWeIue}3~}59r@I)?2*KBJZEksHADZ&OV4|n9`WIkO2?-quUXx`&Am2-N79o5!!%=TpuMo7y?&s} zm29=4RzDfnznN?Pt8nPTh37uq-drfKZF%>qtAVq-<+Y^dmOqzm>}%e%rOHF=>E4g^ z(;qMvb=Axqu-bNreQ?a>p;mVs*hvnyhXdk1U_r|*}Z@EyJ%;5}&v|oDuhNpxp5fdFwa0?ti|kQKq5Yu^CSjE+U((t);7B?6xFw zY0s;N=>=;h_>NsuICS%;+l&CcL47do>4Rg^0R(WzYu@ZfI)Hg-d4^#CN~?F#wZw&IdjaD^t`b_w9r7)u-_n`NbQ6ewdJjs3>@;}ex&2JA3x{aY&<4c^3B_&ECPb^V^h54ibHpY6OQBzN+A+k`|cE05bOWa(F( z>Dn_qJPI$Sx6?3E(>H6Hq|RpD+s6o;BUe$i-G zC8trI zFVNW7h2|%074=-Ty;m?a?+o>_V$IwauFh-!?!LdK+T)b;U5n=5rDcS5J2qGTs9uq7 zClC74{qu~>Z*I>S6S+9VpyB9`_M5M38`^m)hYmh6`@E0KSt~|D^dXfWS}H%%=Zw8M zn3K82G3N4vg7tROc|)gdi@kjJ!ifnUOJ05AVcs_yb+me8G!P9qVxxzf4+|Y)zo`p) zc83pWG!lj@aX>?&wE|31v@jFSM2ybeh%q?97@hq9J%7X)+-!95{_rasrxj?%X-7N& zUI0)2R51R~2+7zI(R&!lHu(>iuO#}5c!PKZyaJxpb)d0L5G{cijs1g?xtMm1&$FY5 zcP4d94S4cM*4D_zJ)&eTrpzm<`}n-H#xTU&+6;8g1SI#Dl-#8x_wxDxyagWDHlU^G zAv=GAk~>Lq|4k1NuLrQf#jjyN_K411jnTNdlj2n%s@zM`uPfuYxQ&)hU4Z*~RDEBz zeANMa13sFhJ|W)5qx}3jCwsylfHqpS+lHubhic!;*lv?xS3ri<=_7)^B|?v=d)?Lp zyq{2vMgjEaQ+>L1Tjqjg7Gw!B6&0wloIgkQgdTuQMFD)C4hi)Tfd_T3Io$%;Rtord z9yNadr|KxoAE?Y1gn2uED(w_qgxx{&h$;XY_aP$g<5x=WfO(@f2#1 z+qE-m;0f?XR(3$JEy!P&Ba1p{QSD@YEy9YyT_hVFK*?iGt521ipvhW9pb-1L;ANjVFuP3_fiIBiEvfBkEYp_XdhtjzR36iM0 zm>dA!ky$p0_4nlF@%Ogx#T55%!3S^+NR>aa_X271NBw#fNX7vg=P7AAP`d91S#7@^ zk`YhEMzTl!;w072r0=90Ai|4&d9-8w1Ymd&= zMEN)V&=&1=ZA4un@_4$-6wYl>Ezc zj|{7I|RsQO9XdeS|BCIDsQ*y*UsO)={88Gn2J+8;Bk>Ht8aV%v z!HpwN{wQr(1KH<4^3MPztIm+^`LErcH$bu{QJ+!TkcTXR?DJpY3}CV9Kyl`a%J}?e zI(HCxv=q}#;|`Xk_%R0JAzAXlWzPvFEq%b7&XwKy?{v-~Qfa~IL3zjufOllc9#0p^ zp3dD!Y94g%L7A}2l-&x^@sm_q__D~xATL<}@QzIRgX~Q>6G_d3!Oq79u)C1XE;?s7 zxpWBBdyp5|06YWUktu(Wy-A7|sd)hYG%gdH#8V)RWejeAjK(e?oen}4{Ji>;Mi1}` zct+$$)*WOIz~Cm6o)?|FnG}98IIS@{JBf7s%gX@I6Xi_?0I$mDC;j*264V)-!!pPZ z+L((<@|4B{BUu@xNoIS$s&+BT8{r^L03JzS)C_TPso!;a-V~)uQJ28LfI2O zA>e{=!VqrN0pNu!>U)9?kTu9$5a{ec+42+lwlwYmk^2WmB`PBPtkLyYws;aU7U>SS zSz~~!C;;ty-~riwJ|TDF4zex}bT*^r_=@*&?Ld89wix}BF-A}Af$!gF!XAlmT8zF2 zBR*x;9DX9nzO;_TamD-97GppI>_-VS0d4&Le4v%Qemz3Y72QGB!hptoSZ8=#5pC4> zQau#L3y^U|z_+iJ#}}3+^{p=P%(^1+VGM^j8>Xr1s9%^%=|COT0gxTYP!fPXD;hV4(t$dr10XYyoiu>Ku|j>+ zg_I7|6&(OsA(=@NOg=eK@~s52kSyg-x=YQy1uDxSMKM|i+W4(FxMJ5TtLLAwwClcS*0I$XE z&lj0^2?D~L(%LeA0M=;GIRU7iZ(D7OATFdK%e5ty*&X1m;Jn>x6Gmo47&kz3AZuza z8Q$-O)@T~1c9a^GkQS^ht*LeopOeCqH124hbbK>AA zPFQ@c5#+&*A)OxJ8St*6xtikOUDILl_7$u#!Pgl{Ypq!}M&n%P*V8GTWlkak^7XJmI@qcGu!&pwFX z^HIB#F7tgjDq{z}?+C&P#|_~KxB|`$?q?x(A{(cb*n5FkgH5c(tSlcA{^Rj@xkR!$ z=mmj0@h*qI77?!)<^~_KO5c^>omKj-2=DHt?~s5%bUcBA(!VjxR3LZwu2Uv?3_}^P z1jC~Yn1b&LWwOICl%e3?sKP9hJwl*N_6ULU?#NPxjW$<2xt0+I}9RyblGT=uU5tqK8Cxn9x-jTdPtN8?@2kKoiey}hMY;g%c z%e=ecMiu>ETK<{1l_`EV#f>boI>q)v2RE|Fw1O>k$L$MxKx%>B!Tu=m6LKT$kpe%W zDVS>bUyfg#m7r#jL*Fnr_`wu#dxt;5D<2eC#1sFnSk-$OOM!4HZ?DV0m$&!j--~%b zVBuE2J`t?mfVAK0qcR91CYM1FDLEe@;0pr8T0R1bEO-S|%|}3qAI*(dT*2w!(V#x% z;UV4dU?5{W1N4VGijLO|@DKU}g1N!}@Q*2;4;~#bz#rTpcOGoaVvjB+y5ulj^owM? z7r&AG!;`}Xa1D?zCfeP1><5sGab=h6YW{pQ-Q%* zK+R!Avcc!^B3_WW50jwH8^GyXV|~D4+lvZxmyC3vFBf=28i0-GtU&Vq_1D=NQRM}^ z0Uk-ao*vF^g6vHg#dlH56XF%{Od5dC<&r_ayr?=>cfz5u3<>u!!^cIab>r18_xPB3 zHD!R?97^x2&HK`F8Y8|fLUk==@1@u_NA-a?bu!f9rSg*^9-`J?e_%M=FA||b#{GNB z$CSGMfp1z>`v7m(*66;Me|lMqtF)aAeF~J_Az23ykA(sBBT;LTN#;GO*MP^u`s|=D zkJ5ee`42n>UY7yr+aaqD8Lb_oac?8p?!fak;o4)h`Qq#04nEE#tw{u43;LrBjwuPc zkLEmawqvw(jWVLHOD}*s&>+2ea02BE@tgo@?^8}=-$y#$j!3@F-+>mONvif4jiccJ zZCz=O8KSnHsQcvBCBfkP6ic%Y81Woz5R5BJORk_Je~9;gOWKS)#kZ?+)zFBw*bFR7NEV_{3GV)NSGG*n046C5m#?;zepOs zDLWFCB{a{d+VbPe4gCAR4ft&u3H287UOMyAWP2WJZICscyHjGll@9NPw5MwWgGk1q zHucv)f5P7eK(nNFTUzlc{!3a9NEV+g{?j?SrtFR2dI<@l8TQ~F<*^;c5dDgCGPUs4^a%ke4wr}V!r>#wA^ zQ~FQozoa@;m*Z3V|A*>7*9^@MaQ>q&X_Py%^#5-dQ>OS|vr?w`Pw~HIIZ(5?Q~FQw zzh*g5v$@x1{fF}w=v;S+E=Yq6prsf|gcm_qZRWo;=3hY?WB~Zw(%_vm(jd$Kr}!^g zyPD#^Xnc}}t_w?p;y=ZIVR`}IDEnXi+K;mTqLnMk{)on>ipr>@-zol6{I5udDEm*@ z|B7@&THh)AL)o8-bcwP*)we$k&IQT)SWp^d0F?QPWG?IPzwKuxC4w2;C@IhwB_(Xi zCL^u&*V0)7PtN`W3@%Fw{AZPAoRr>RKRZeFyyTppTDbp)Nm?6;=_B|9X-ONTwf_bK z-vdR$`kRFPXQWlWK?c&ckJ8OW4S^!6W4DzTBkhT9L;8Gj*Up4t;f%g3ULL%?^GJrfFFL8j>{a11R zo034cX!{S-KN;7|Stn>ORmi(Ckk$UfV1s0{|2CY7Iuq>^x)O~G9zu5SEeUcbY>kL_ zgahCLI00^ae?+$XZ-Wj<&kqujZfW?ubu8s{MhAk=fMij6t{ZW_Rk?G1*!jg{jcASunxDx(%f=crO;slgtCDmf5B|Dt zbbby#zchi53&M$zP0748b|m`dkMMKCX(EB=JYE(bH6)zYg3?`Q=6jZuk%A82*eaxgwN2B_6JO3UE^d zodjJ)HwDmDcf=120pbNb6ClSVo=`Z!XIANVMZssmGKKOdpiH^L+0OsRv{X-#Jc!V! zEaT<@#{`upCi(-<9hE1@K#_%hP#J;@@RW7R#Z(;eB@%f&ttniD~SFH(7$*?8VK4hR>hJIVAFVXiNovjyeD zt^ry_^W6Y9z)_m>l6$ioBbw29+uWSmOLsZl!*NA81MZRl?b856voz-FizvTxbX2bY zqNK^ffQIUT$tQHNrcTv-OZ1#l9V4rnt$J5HQpEd`a$1nE8u<6B9?!k8QRV?_Ir`#5B@_tQji60XxDQeb>1S}Bh-_!Xk_lO~3QJc4`BU^$ z@~^deElk&ieWUch+UB1s|5W*>%DAx85UrPTe{jVkmDEq&Q#Bqk|kAKlPi6Y|#VXF(`kAI0X z23WoEPg7n!vE~=S{2Yi=9T0c?Qx@ajCfp$+%bxH@A&$6Eo$+s&13=^{%Dp=CA873V z#L5HkfH>kpb>=^iJ^zKqogy~vgd8BQs8HScFE9s)$WPR}sPms_pUhF(;@Fq+ZP9Er zU)8)y7DzJxNs{?*49;4i^I_<0Z8WdyAex_7BsOnmTXdTbN0TR!Mg74BsTB_4oMIU;juT$6x=tO)7dylZkEH8g2_C>*qV>=0=Sa4TMA}mZ_ML&S3_MQx_COWyB&>fHwkp843PE4-Z9k4QPKL{$6=rNbm0;oh7eMgS7d1puAwuK1ue)1H3uY5x%d` zRfT;a?f+Le4&u@Q=cn-bP*Zr9%@=S1oJ0XScM!5^nKj7svbYnn2b=)6%7Bl1Zmq+; zl!n|2X~56isfBzea3}5{hu?GwFRNf%gv+kBeTVWOSf=@Qrf%R)@Dgyw0r6fO8;Sd% zuvaAP11I9VpQ^&)`?{et#cMOZ!exNBwM5bz+?{~r{s9g8yoaIu*Pn5(U&)@MaizmO1t=yjhovevH zGa=8a%R}Y35OuM4hnzC zb2nF6mZXWlDE=FS5fz~9RfS(w|BF+8Dg4VyhT^~U{Rdg=KeXXQ1!?QQG}@2Qh87j* zZ09QN1%we5L~FlS-UlI0{|SS8x=Q>Zj3^*#|A|QBET~VfDu6z1k@jswdprKt|1BhO z=&P*SwnLw}JJ~v0{p!3&6>PH2CItGI{6@fVYhZ6PQLf`eLVQ5U`r5L#L+XHwU z6j!hxzdHT55TC(C=c0(nJG@U1m1#Qr1{(M0h#aq?^dSvM3(9KM{e^;Up@b6J>-6{q zC}ABRKLQf!^!ObRfS@jqpYkanXpqwQHD@atb3&JhwxP0cqKsb?G=MINRIgQl7tB?o zb0!eU;m?xHUjtl3sq;!Qga^D#i#dOT{SEPZyU;TS;jBUYKL}F+-M@dY-u#X7bnxpq zVyvvxU*gvVaK;$gKjza^k&}eSpjg z(gU>r2K$+4zGp>xk9<-*4U`t7Sry>tc5?qGMmZAnJF0%BL)sOb8)}@|5tZXNq~%>= z15h52mmu(Mhz#;3se-YN3S6@(6Vm(7#{@mo!GX=}$Rb0jd^DTK^BvxLP1;%kGNw<{O6_sz` zn&H9l%wsupWc|gh6HXFJG61=pb5CB@E~s&kFO0 z|AaxM{s(Fs2rYxqc0lKf6MhJ+O%rAB4G2T5V}rPmM#cT-KKOboq4^ivMZVtx{jj3U zTP64iVbOWgRrsHrrRHYLv`9;H10#hyNAN{M_9cE--NWkAb$YhgDA3~ zu?tW-yYTtD{J#BNNY?0EMR^js1nn$=b{9X_-+zgAiJ*VZ?~g%aDI7PUXVSyj^7wyf z45g&+2Feh$;VW)`qkb737V1%8qTU5})Kvf%27p$3!8yTjq19hZ1r$)|g?dR~iJn5P z4hmEDlFL$ZhYK4dk0M<$;dg2^W$~^0`=6LTgVPQ1r_^T`@3}0` zgz-mY1ridlynKYEZ~Q^!w{iyG$^+D;5MS^TC4FJ~1K-L6q+33{^6$d%uifdFFT=mv z2L^YX5W2^eXAcVVyM5r>pi&(wZ{NUIWw3Alo<90U_`r}+h4xLzcp%>n0xpZu75jVI zCH@Nh2Vp9<&t%sxIBncXmEc&)yYjkL`TL|Y@?oGnDyt{?ejM=3rBa`cpGMiViHwN) zlBjneO};GrF-A&fA{hS6;QHhL@$;?FKVe~t7!y;#+>6~aNJ9ZF&R682f83EXRsKR- z6DV#(|CPHGP$~pKT9777T@eF642Fkv(M9-SgX*CdVSwu@@JEC_O8H@2N^}^H%ef}L zoKYMiUqN}(xM=M%>iZCO!GD5bahVF>4Exx@{u~tn{3p2AoglrCc4cviG$G9Ic%b=@ z<@#$xY1<0YBK`QQh4QdGUkMz_=TFdE)xDzlu-{TiUg%j67~JHN|0<5}ULtGYr654M zL_FeNUVdfgyLpvFFE2kq9U$}v_bb?+O7nnc5Xl^+`W2eMf| zO7SSM@5pu*mmeUEC`SY>d|P%J8_4O3UoaPvu#x4;ue)4llmP!yWOYWP&7Cn#^iEtl RJoIeLznU7AhJ`o~_y6Yy51#-4 literal 0 HcmV?d00001 diff --git a/Quartz.Engine/Program.cs b/Quartz.Engine/Program.cs new file mode 100644 index 0000000..136978b --- /dev/null +++ b/Quartz.Engine/Program.cs @@ -0,0 +1,20 @@ +ο»Ώusing System; + +namespace Quartz.Engine +{ + /// + /// The main class. + /// + public static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + using (var game = new Game1()) + game.Run(); + } + } +} diff --git a/Quartz.Engine/Properties/AssemblyInfo.cs b/Quartz.Engine/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..107728b --- /dev/null +++ b/Quartz.Engine/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +ο»Ώusing System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Quartz.Engine")] +[assembly: AssemblyProduct("Quartz.Engine")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyCopyright("Copyright Β© HP Inc. 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d6a80775-6772-413c-8ade-0f789fd0604d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj new file mode 100644 index 0000000..22c1c1c --- /dev/null +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -0,0 +1,60 @@ + + + + + WinExe + netcoreapp3.1 + DesktopGL + 1.0.0.26 + 1.0.0.26 + Quartz.ico + + + + 1701;1702;NU1701 + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + all + + + + + + + + + + + + + + + + + + + NU1701 + + + \ No newline at end of file diff --git a/Quartz.Engine/app.manifest b/Quartz.Engine/app.manifest new file mode 100644 index 0000000..5f4c221 --- /dev/null +++ b/Quartz.Engine/app.manifest @@ -0,0 +1,42 @@ +ο»Ώ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + + + + diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index b980c92..a03f4be 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.16 - 1.2.1.16 + 1.2.1.17 + 1.2.1.17 \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj new file mode 100644 index 0000000..54c2f0a --- /dev/null +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + + false + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/Quartz.Testing/UnitTest1.cs b/Quartz.Testing/UnitTest1.cs new file mode 100644 index 0000000..b2a399c --- /dev/null +++ b/Quartz.Testing/UnitTest1.cs @@ -0,0 +1,14 @@ +using System; +using Xunit; + +namespace Quartz.Testing +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} diff --git a/Quartz.sln b/Quartz.sln index ca6b474..133074c 100644 --- a/Quartz.sln +++ b/Quartz.sln @@ -19,6 +19,10 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Quartz.Installer", "Quartz. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quartz.IDE", "Quartz.IDE\Quartz.IDE.csproj", "{C31E0CC9-F0C0-4331-87B1-7BA92BA636B3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quartz.Testing", "Quartz.Testing\Quartz.Testing.csproj", "{77659DFF-D5AA-4616-B7CD-AF83923BBDB4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quartz.Engine", "Quartz.Engine\Quartz.Engine.csproj", "{D00D1CC4-0674-4B42-9367-DDF2E0F8800F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -75,6 +79,38 @@ Global {C31E0CC9-F0C0-4331-87B1-7BA92BA636B3}.ReleaseInstallFolder|Any CPU.Build.0 = Release|Any CPU {C31E0CC9-F0C0-4331-87B1-7BA92BA636B3}.ReleaseInstallFolder|x86.ActiveCfg = Release|Any CPU {C31E0CC9-F0C0-4331-87B1-7BA92BA636B3}.ReleaseInstallFolder|x86.Build.0 = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Debug|x86.ActiveCfg = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Debug|x86.Build.0 = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.DebugInInstallFolder|Any CPU.ActiveCfg = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.DebugInInstallFolder|Any CPU.Build.0 = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.DebugInInstallFolder|x86.ActiveCfg = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.DebugInInstallFolder|x86.Build.0 = Debug|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Release|Any CPU.Build.0 = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Release|x86.ActiveCfg = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.Release|x86.Build.0 = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.ReleaseInstallFolder|Any CPU.ActiveCfg = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.ReleaseInstallFolder|Any CPU.Build.0 = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.ReleaseInstallFolder|x86.ActiveCfg = Release|Any CPU + {77659DFF-D5AA-4616-B7CD-AF83923BBDB4}.ReleaseInstallFolder|x86.Build.0 = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Debug|x86.ActiveCfg = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Debug|x86.Build.0 = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.DebugInInstallFolder|Any CPU.ActiveCfg = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.DebugInInstallFolder|Any CPU.Build.0 = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.DebugInInstallFolder|x86.ActiveCfg = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.DebugInInstallFolder|x86.Build.0 = Debug|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Release|Any CPU.Build.0 = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Release|x86.ActiveCfg = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.Release|x86.Build.0 = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.ReleaseInstallFolder|Any CPU.ActiveCfg = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.ReleaseInstallFolder|Any CPU.Build.0 = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.ReleaseInstallFolder|x86.ActiveCfg = Release|Any CPU + {D00D1CC4-0674-4B42-9367-DDF2E0F8800F}.ReleaseInstallFolder|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 0d66e8dad08363e5c41107ac9d2f022f109a08d5 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 14:57:33 -0500 Subject: [PATCH 20/65] :arrow_up: Update .NET Test SDK 16.5.0 :arrow_right: 16.7.1 --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.Engine/Quartz.Engine.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- Quartz.Testing/Quartz.Testing.csproj | 4 ++++ 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ae3507..044e377 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ ### Dependency Changes +- ⬆️ Update Coverlet.Collector 1.2.0 ➑️ 1.3.0 [[f6c6c0c](https://github.com/TheHeadmaster/Quartz/commit/f6c6c0caea858f679fe6aeee95334c65ec24954d)] - βž• Add Serilog Analyzers [[560d15c](https://github.com/TheHeadmaster/Quartz/commit/560d15c506ff41e7fe6e4a923c1be285010069e6)] - βž• Add Serilog Compact Formatting Logging Library [[4c036a9](https://github.com/TheHeadmaster/Quartz/commit/4c036a987785600d983c506644ba4ba0f520e127)] - βž• Add Serilog Exception Logging Library [[355b7ad](https://github.com/TheHeadmaster/Quartz/commit/355b7ad47ede98a1736197d57193db7b3d32d0cc)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 6cc3406..82e1dd3 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.16 - 1.2.1.16 + 1.2.1.17 + 1.2.1.17 diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 22c1c1c..6e38a09 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.0.0.26 - 1.0.0.26 + 1.0.0.27 + 1.0.0.27 Quartz.ico diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index a03f4be..b99243e 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.17 - 1.2.1.17 + 1.2.1.18 + 1.2.1.18 \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 54c2f0a..0355958 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -4,6 +4,10 @@ netcoreapp3.1 false + + 1.0.0.1 + + 1.0.0.1 From a9826d378a2ae457e815b44e6b972d584de1339d Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 14:58:56 -0500 Subject: [PATCH 21/65] :arrow_up: Update XUnit 2.4.0 :arrow_right: 2.4.1 --- Quartz.Testing/Quartz.Testing.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 0355958..fd20521 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -11,8 +11,8 @@ - - + + all From 0506e0758e62a0abd8e43f323a664e340701e7e6 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 14:59:52 -0500 Subject: [PATCH 22/65] :arrow_up: Update XUnit Visual Studio Runner 2.4.0 :arrow_right: 2.4.3 --- Quartz.Testing/Quartz.Testing.csproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index fd20521..43cabac 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -13,7 +13,10 @@ - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6ca9c8b305edfdb966823104807d9d540038e962 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 15:01:19 -0500 Subject: [PATCH 23/65] :heavy_plus_sign: Add XBehave Testing Library --- Quartz.Testing/Quartz.Testing.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 43cabac..f43e674 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -12,6 +12,7 @@ + all From f42ffa1550bf1ba14d7b1ac9ecfacba9a8ca3830 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 15:02:43 -0500 Subject: [PATCH 24/65] :heavy_plus_sign: Add FluentAssertions Testing Library --- Quartz.Testing/Quartz.Testing.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index f43e674..6748c20 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -11,6 +11,7 @@ + From 7f6458957193fcf13db252d4efe391c3ad756ef6 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 15:23:11 -0500 Subject: [PATCH 25/65] General inconsequential edits --- CHANGELOG.md | 5 ++ Quartz.Core/Quartz.Core.csproj | 4 +- Quartz.Engine/Content/Content.mgcb | 15 ----- Quartz.Engine/FodyWeavers.xml | 5 ++ Quartz.Engine/FodyWeavers.xsd | 76 +++++++++++++++++++++++ Quartz.Engine/Icon.bmp | Bin 262282 -> 4246 bytes Quartz.Engine/Icon.ico | Bin 147541 -> 0 bytes Quartz.Engine/Properties/AssemblyInfo.cs | 36 ----------- Quartz.Engine/Quartz.Engine.csproj | 22 ++++--- Quartz.Engine/Quartz.ico | Bin 0 -> 121442 bytes Quartz.IDE/Quartz.IDE.csproj | 4 +- Quartz.Testing/Quartz.Testing.csproj | 6 +- 12 files changed, 108 insertions(+), 65 deletions(-) delete mode 100644 Quartz.Engine/Content/Content.mgcb create mode 100644 Quartz.Engine/FodyWeavers.xml create mode 100644 Quartz.Engine/FodyWeavers.xsd delete mode 100644 Quartz.Engine/Icon.ico delete mode 100644 Quartz.Engine/Properties/AssemblyInfo.cs create mode 100644 Quartz.Engine/Quartz.ico diff --git a/CHANGELOG.md b/CHANGELOG.md index 044e377..12e23cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,11 @@ ### Dependency Changes +- βž• Add FluentAssertions Testing Library [[f42ffa1](https://github.com/TheHeadmaster/Quartz/commit/f42ffa1550bf1ba14d7b1ac9ecfacba9a8ca3830)] +- βž• Add XBehave Testing Library [[6ca9c8b](https://github.com/TheHeadmaster/Quartz/commit/6ca9c8b305edfdb966823104807d9d540038e962)] +- ⬆️ Update XUnit Visual Studio Runner 2.4.0 ➑️ 2.4.3 [[0506e07](https://github.com/TheHeadmaster/Quartz/commit/0506e0758e62a0abd8e43f323a664e340701e7e6)] +- ⬆️ Update XUnit 2.4.0 ➑️ 2.4.1 [[a9826d3](https://github.com/TheHeadmaster/Quartz/commit/a9826d378a2ae457e815b44e6b972d584de1339d)] +- ⬆️ Update .NET Test SDK 16.5.0 ➑️ 16.7.1 [[0d66e8d](https://github.com/TheHeadmaster/Quartz/commit/0d66e8dad08363e5c41107ac9d2f022f109a08d5)] - ⬆️ Update Coverlet.Collector 1.2.0 ➑️ 1.3.0 [[f6c6c0c](https://github.com/TheHeadmaster/Quartz/commit/f6c6c0caea858f679fe6aeee95334c65ec24954d)] - βž• Add Serilog Analyzers [[560d15c](https://github.com/TheHeadmaster/Quartz/commit/560d15c506ff41e7fe6e4a923c1be285010069e6)] - βž• Add Serilog Compact Formatting Logging Library [[4c036a9](https://github.com/TheHeadmaster/Quartz/commit/4c036a987785600d983c506644ba4ba0f520e127)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 82e1dd3..08ae12d 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.17 - 1.2.1.17 + 1.2.1.19 + 1.2.1.19 diff --git a/Quartz.Engine/Content/Content.mgcb b/Quartz.Engine/Content/Content.mgcb deleted file mode 100644 index ddc4c36..0000000 --- a/Quartz.Engine/Content/Content.mgcb +++ /dev/null @@ -1,15 +0,0 @@ - -#----------------------------- Global Properties ----------------------------# - -/outputDir:bin/$(Platform) -/intermediateDir:obj/$(Platform) -/platform:DesktopGL -/config: -/profile:Reach -/compress:False - -#-------------------------------- References --------------------------------# - - -#---------------------------------- Content ---------------------------------# - diff --git a/Quartz.Engine/FodyWeavers.xml b/Quartz.Engine/FodyWeavers.xml new file mode 100644 index 0000000..ac77733 --- /dev/null +++ b/Quartz.Engine/FodyWeavers.xml @@ -0,0 +1,5 @@ +ο»Ώ + + + + \ No newline at end of file diff --git a/Quartz.Engine/FodyWeavers.xsd b/Quartz.Engine/FodyWeavers.xsd new file mode 100644 index 0000000..a097b30 --- /dev/null +++ b/Quartz.Engine/FodyWeavers.xsd @@ -0,0 +1,76 @@ +ο»Ώ + + + + + + + + + + + Used to control if the On_PropertyName_Changed feature is enabled. + + + + + Used to control if the Dependent properties feature is enabled. + + + + + Used to control if the IsChanged property feature is enabled. + + + + + Used to change the name of the method that fires the notify event. This is a string that accepts multiple values in a comma separated form. + + + + + Used to control if equality checks should be inserted. If false, equality checking will be disabled for the project. + + + + + Used to control if equality checks should use the Equals method resolved from the base class. + + + + + Used to control if equality checks should use the static Equals method resolved from the base class. + + + + + Used to turn off build warnings from this weaver. + + + + + Used to turn off build warnings about mismatched On_PropertyName_Changed methods. + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/Quartz.Engine/Icon.bmp b/Quartz.Engine/Icon.bmp index 2b481653e241818d2894e4ef33234eaff9aad701..9dc7e2489da7a62625d549f08b0614c5c6d0db6b 100644 GIT binary patch literal 4246 zcmcgvYe?Kj5U;Pp#|LYC#|J8+wLYSr#>XkXK&tg|zV4zCdqq!agF%GW;uHL4D;25) zlYUVQD5M{%6hfhX6N6$9TN){qqiMov<5f8g(bMy$Gpql9S9AXF6x+qU|LpF}{AOoo zXV(1Ed+)x(+CBX3#vXRk9guQDn%bvc$NhLjzaadvLD=0-)c>wsjzW!0=gE)VN>*1_ z@9gjIN7yZJ#f;6(%}celwSVsI?L}U(YMbf+;96c@o*5aTrl#iQ?(S~1O`$7f(ChU| zcXxL>I@T*IEA>XBG3E*(BvlO!4SgeE3*Ykc@{O&ntvD$`^qaHEWXfD#UhcP8EY(uH zQfrNkjlT%E{I{f}9N~6&cpo*BeGgM!rTne@#tIwKzFBv2*hE^@X~+I#4Q=yQoKIFDB2Y)9G%> zWHRyWd2E3$C@6sB{Mh$SA=#l;1(v$H7|u}=H;@$rGCrY2CU z)qwHJI>~f&bbNmblpFl@=8fiy?rt;Y6N*u`Uml0_3uE#{RaF(JR4T?B7#Jw7d3boR zy$1vYKyGd>o6pF|U^dRq&feu9-y)~y=5D_i7kB9B=*VK2Y@uFORtAHEgA9)_@m>M( z2=)kH%8OVVn4d5ofSa3}$U`=)t*vR^0zEVF!;>fK_Y)Eh1)cPbPe_2Vu`y_EZDl?# zEiDDQ&pZ!d5w>t{yuSoKw0j@(UkQ#S+vCN>>bS(j17u2XO4JOQqN=XB7@yDl6l?igWiDYV(bNNYz?nruix&?F8&!eNGU+wJdAEM@8HL%JIER)KS#CVY@D5E2jv9xl~`w8 zU0oqRKOfrL+cqaBCwt9ibJ}^ipU33s>FH^zm6CfG)~UYs_4UET#DtimsO}F8bW_c~ zR6BVqoQv=2>B;WBN_AX&;^X5_R{~~MRu=gC`!gFF8|&z;dZ~u*{NnNP@qYY2OM#d!QcAYBe~VKpKiEJXmiMS$ z5h($ literal 262282 zcmeI5U#w--UB}l@N{bdGr9PBcCDGJ$nrI`=WH|TUUY#_NDiB0LqCT{g1`;L3KcJoR zB$bk?iHSS_+EQP9@eOEV)mmCZn@Z7_(T?-rw9}b;?{o%38)$^4jK5EtQ;%oXIrpry z_dfUcTkAXFaPC=W?{(JteZQZz*4}&VwGZF$(R6X*-$(6rKY#4|-fLgFI=zO^_WhMV zn7;e^?#J)_?|e$%|1TZ>g`0nG;=6_ZylA1V+Surdw0YuCTHCoTt#2Pm>pPF8(e{&R zbo%pYee0N|owd&|q_xxM?Qgx}#Q^Ql5G~OZZP6I5(H!mZKpSpvyOwWCo2PF~qn(eK z51uk#oHQSZ>3B>Jq1o5c+BTlR8+Zh-v`tI=+Fzayp1V1%ZPDJ-{tw|BoxR(1d)k=)wvF|~XT5x`Qd_))r|=dYtDmGeHKc96)7t2NHf>%_ z>tf#Guu3*s`z<_%*X~LqjSKd$nHZ&wGmqOb+e`Ahc;6!r;Jr`S3oq^=3eEiV#cA{W zuh}^4**(&`wZ2aEU3@HsC-Ej8Z3f5{RrHdy|0v_FuZVl~_0BzjNAW72T@fDD{tRvD z9cg1n*XkDUhty~Lh!vj2yBZHH*F4=|*ItfWJ1Rf>@UwJSP6s@UmzSfUy}jOUvHFzr zF`ighj)j)vhNtm%dqgi*@oD}`&Jf2KZPV;)`K$$9`bYMn2@ zIt!n+`TDK2>8hv3FUxoUMrvD=17VdzN3+J-mCWz52_t z{<6k+!QiUb4`9ub=QO`Z?5pp0;Q?4&#v?y@n2+Td<& zu;Qoq?WG4`cp3gVcKC|g{gCbcUiwYH?W?^zvE(`dy0_Ptj^avsEbD<~?h$@geZTsC zd7ugpz;ekk0P74d+t$>u-#Lrd({}FUQG4BIf4|pWx7h35X>IH0?3}7zeq(?}XoY6? z+H)w-5G~QP25&A~hmy6!KW;Hx_ID!g$Guamr*@CMembq4*_YD!lJ-*D`i}sbqAePu zb!+#q!t^34U7ik}d#RDO^0dv9K9bgV-jX&>EfO1TQ%?lY9PRNy#6GLE%rFhxyD4~Q z1AYHjEf!oC>2hs!w>awi7!kk&cmYq8G8Jum*xpT*&s7|Um#uExA9-mybaJ;i==-)J zfG6+<9*M^FqUD9{d8%HOMrUh1E@F+ex2AQC^XC~r-z7X!>)MvE4db(9zPr-4?_sO= zkn5t%il@?JMgXtinMM26NZY~qELFHp5~(h`mGwKO;rs11tG-HC1m;Bm@8F@`d=}|@ z7|+%DG8-4vw7$MW8eScrHTUIID~>Po1wwn>o;Nq0jw&XyQ1gtESpt5h#fO-kZf%gml=yE%0@J?q|~4 z9VL#{wtYt6M}w~;1p6Nhd@l1dn(Nc2ot4)T5x|2H`ubcMVW0I8bKgZsV=cEOB-1X6 zKyMNFoxsNcu>WM>a~SVPqwmjQ>P=8(qzDv501rm!D|2Oh!rHE9?B1r_ciz*Uw_}%! zv`%k^1=SGpk@E8=KBp{XXUv>1n^>xFYjrve>Ujx|6}5R38!k8 zAtHbmy|bPxAMC#nbnY+Dm3`uRyZZl9n`--kB7hgYvtC>I zc*fg6aw=OzpeO=*R`%-0KRoBLNF;5n2n-YfyjWZR>b*WZgLfb~m8~LB6al>GotN6m zC;p2ps*MMXfcRhi_+R`FXlP|!6an!s{)-HwjjM`)_!s{}8Jc@cxlXH>-x$0Y_#T?5 z=LK3B|6iRpb#5u>{FW)WIbSHP4PS`=Hgp!x(mCe=@h@NGe4(^9 zd?EhZ&{;f7=bQ(`zkHGNh0@yah4^nnXYnkZa~=@?@2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!j7|7I+ziVhfo2(0JIDE2A# zEUJnQ7=Z|^=gKJl2Q-DUZYBabwj!jp!v7o7p_6}}*0&Sa{X{x+CZax+IRfjs zGPc71)oF7(SN{lUl)VN1@nQr$YAU1n_rETz`1h|-)HXr<`}dak_pg!o_dP<@_}{la zluqOS)wgr%|5qRL(!N6dzkiKNHTAN+`1kKE@$X+FFFco)L;U;qmiYItQ7Ly`wio~Y zy(RwrYvhIJ(sGD@|K1Y+{xvG)&dc`V-@muSzkiLq@LXCB@$cVT;@`hUrQCVhUi|y_ zmiYItkr$pz%OU>#drSQL*Qk^`FWZZM|K1Y+{x$N#b7?umzkhFufBzbla_41x@$cVT z;@`hUUU)7ohxqsJE%EPPqf+j?Y%l)(drSQL*T@UcrR5O+{=Fss{cBXpotN#!zkhFu zfBzbJ;kmRN;@`iw#J_)yO1bm0z4-U9<<86Y;@`iw#J_)yyzpFF4)O2bTjJlpMy1?&*Er|77UyC45_Y=T>QKylhX| zyGOu(4tUW^%v&kPEopt*zcad*@IbmYthWxPjV3g@HLY#8!kw3T-fl7PPM7~2em;%D zdh2i_{NqJ0T$GmMg|v3MbRQ4f-`7b0AGvR#?EYKW?j^*F9+)UC1MHs-+P^&3h_^l% zxNkX<)_1zoT+s0uUi`NP_{W2Iv6MXz+r$17X+7-u<#(jfDc|&VE8QE@p_8ws z^^oUh@Hb_r4&9>Qdv84Gf#qe&0Q-*y?qBY)^B2C|(XDhh1!jNj$6u~oBRn{+YqWRR zk9>aVGsZ_Z!hG-jvA|=qF$<4Z&OaU;*EQNZ?B5pj*o9a#zI;pCsPY)#QX4maGqAVD zEKmpP;=83?u5@@W^6?q$A4+RGW33{-f5`gC<<#@N*RKcHWztK(kw#UH)9~J8J)`{% z`&XpR6Vb{&S>7%4)+K5GQQtI|m+slX-$a*{4$tN4871wj6K(QSfzM$QZ`!X~jxqPy_2e%G*CWTk zznD(ct&B3CTjRCpeJ0G0qx)b5{mlat?b*0q5#QezbS_zr`RTMf(nb~Yf$`dO-J*T| zYd?FPkQBP3xhr1zed9oH|#5w`Q?G-Kb;4c6nT8Jcie1)iFvs%#Z7YCQ-^g zubj-4eOKkjuJ-l?hIC-yKtE3S9j_tW~+@R{>AUakwUUc~*CjVHT$ z1jdL7v6-hn1P8(nU`wHe-O~$p) zzljYon&r<`q~noVuJKK41KTh@FOE+KzZYP-&Xb>+xA8~zTJ>Dvi__-$57@m{HQdiT z8P6g9CPu`Hn9cKP-{0X0yivp4o>{uU_HJ>z)5c-5_OB)Vgw1{C{*9sU8)Q7oJ=XtT zahp1nCx{ub8~T_458wqnF;rc=OyO%N#S&may&m*=*^^c^@uk99> zlJ9@m#<3h{9XDSMS^gICCWge4n3ia;+qP(q_IRL$IKnh+?-m!n|5#(ks2mr4+S-5C za{DRs#4__!Ic}sMdBS4X(p;WZu|rIWEiqo^JPw+oEgGYBt>?LB=>gM=u+KKk%b1l< z3+dda!m$$TBi?JzuzHWZe%0c4qs4{m!F>K*`}`O7`bYC)^mQO2YD&zBJsO||nxG9D zp%tIe4h_)~O(WK`uQHd;wc>v5zJ6QzD3PoUQ_J-#eSLR zFmnB+g>$0vt3SU=lm0Y;;bpI-a;`;M^rwYlsaUSs128-u)0e(;Z8Z8iXRD64eou^h z@c`_0o#XOeod?u;PZGb$mCmw*kWx4HZzt^N&&a)0v&26me)^7jmReP9&y}mf^lFtvNcm224xE3Q` zS*fjDum*EonC*MtA4}J6ZR>pCo{R%)^SA0VyDxz;SnHeLKJvT9u0gi^JX`s8wr>@i z?y-R_80&-8q4GFn&u-FlZM$nNUKGPg55N>`4aIGr`5v}=kJSdqzmxve-^=>}mSCz+ zMu*NzZNTz+uZk7sjO$(w-#SHPf84e(UeWmgpZ_i#! zkC~r-=X`~(3oNerD){)O`D$`J$={@{;I?<@b^eE=(7ukp=de7AJwD`=kJ?%EH@2lt6xl}2Z0X~lPJGh`W* z_x$+6h_|^tv;0z;&U{7PFEC&Kq4@Y4^VJWeYcA;br!{07wjHV*%6GQ@u;FD+@3b%a z{LDQ|x_5ZC5Bg-}WsCK1FR>o%Z`nTV+hkVo1OjrHL z<1sz^p?7`oJlTX;-k&0ajVW&QQ_7R$bMB2V&GAAVsUUK$g;zN)o4 z`}V<5`LS;C0~QyaUr-uPZNI)vfAX-sE>8!~4W$uz^BWqkE!PI%Z9G2o8r?(bzlwZ$ zcFCtKMq+yL7(8q7>T;Z4sw=<6Z%U)ZV}PfJdM;0?ei63k`Gv=I9cnIPJm38{?HF=j zN-JLnhTr73DTCU9+3f%x?)zDs5%}$+j6A>ic02bZkNtmtowL5=4=gU1rb8$Dh;x@b zCxY z#+Eh0qj(k1_8sHa^P?@j)jZbPvFA}c=XOWh*m-^0JmK8~l##Mh=9bz4Jc&2e->=4@ zqqK46<93bvrAo)0%)R?t^V7T1`p#Y)-*;7!GE;WyQ0qKGyoU$zV%K-@P`pZRZ^?Om557=4|)Ghj$0FU7{JU8UE*43*N{};J` z?QYZNY4cf>c?9_B3--Ft%KhVMRDC}}9q+YkJJdN!dySXy6yCyP@kyz_2A7#mH<`yC zG0k``x~G1Jb3~8Z>ozObmFd8#`qjwSkh&8CVnIwiX@qC+4j#fw`5GuSN(2~#-k3%^ z585^Br_5`sx~9lFF8^TXga5?5#9CW#P8(m360=p8lh_a=VnxhWwQdw%z!M)aZ{U%d zj=ff`VWi)?!p>E*z8Zbd5j$7)sQKVY*SP*sNDHl0|CFz!@@Z9>Xho|^ zX)(&oghZPy%>SM@9z%l}GjCAu{C;oVGIu%KJ@?!l!{o4r7=Rq6i}`C}*jDuH?#_Sj z(ohc5(!wx%d;WXyUJM)FNe&w{sQCXO7?yEW4l^<;{=XB3wJty@=@!4Yz_1(bYu7&fPuJk|nzhy3Q(L-FbInCE!&koEwT+Nz3QDC=VaTw4ZBvK3)IcJncsYp*{AE`PBW!L95G))yFul z?-lXE>GGkuvm7^!8Eg5kO`8KcYn3~kT{rcB*41tf3mQ(_$ow+s`gZsB5p?cbUK`a+ z`Ct9!apHIbdPgqFJ8)o*OST*5@OS#-<p*PFK#mSvsSY!GY0>*?L8*+c77CPyq^ zCT{lK<=XN4?8ECWe>}f_dZ(0MI*T2O)JJlZ9kk`vX68qPZtJh5q_r!r!}n<35|8WW z%rg97OhCw^urtQU36TO}q9-UB7zw675d(-VV88jUEVAImQ2I{}I6|S;V zJHsBkVXEpiwT|;uZ*Tm(mNRzzlf^{?ls(OLJLz-kHG28KIh{m&V!{$F%wlxxhYJP$3YNw# zw?1dLXX_+A`(X=P4D6V6ug$k_t?nhoyqWD;kYI4uYh=0|Jg9y+PMd&rLm z=8D|W#{>0x8+Nzxx#D70=u4Y3bQ^Eq(fo@G*K2F+yOVU$sd4jkC%be!tx{UY>Ks}1(Cz5IL~uSVWfSUzH)msw)peeJ{a zV-I?cV%x1VpIqP*8*6egz0u%^@MhY6sS#_f8u%Q_=)UFtu2~NcjyP{($!=%M>=gi=|`wP@s4m%;wbQ-d5<*7be&59;Y*FI-w5p;ht_gqhpHc{Ue&zRMqn~Gf4x7E*; zbhiE*aI0yoORGtK`gZajHb;!VsK40JJ(0cQ^2tU+- zEsq`%H*nU4@DB#_R$?m_eKqagPe z4O32>v7@hT$llD9^k?mJJs)y+?7YXjADhp&nBCesZB4H2&?dbSw*)tEU!|G0 z%wws?!fT-^szKKoN;!8wT)F=IfA#Iw<}BHBwYS;YgQq={X6>n8>(O(S`&7&HH?H#CVQ>bw9RM0=&;}inb_uM+8 z;bz+jJ2AlZromy;-SwS%?2Mc-yP$XDbECpp-m^Az^}ibww&Ly9G=|6HZefPkJEcd> z3wo1nAH;JRuE3=0TzD}cZttlnR%?bh9pTRMzHF9%q{&y88JSKd&DS0rd?mqn|8cwJ z&91FnA>TXBln$AkIZg6 zhHgvx(I-STwabo=p>bvvZPpSqD)0b>k#fl~mPdrrgpo>Rzep@Sz%UN!t9>?)ar!F`X z60~Pk_{*5?dofmwh1KL^TL!&WU@pmCdvbi2DI1P|d%b{hc=DGogQhARJs+*KdeeIJ z?R!q6`;FI58?dUWUw5ov==!27Id9)svagoIk+AU43@Vw z&<@v|z&4&5oPuRpWInw3p=UtyNUH%wZ9F_19JWkzjP9g3C{#H~?s10RGiRsv9_ReN z$#tsl?lviqQ83|`jqd50YI~Qpp2@2YAN)saet0nUN#okD`mSsCXV+`_bg|z;?M?slYP0NmFm}K1hqm9GZ)97k zSe{!v$|39G#+$B8Iabnzd+E2mt~)CF-Y7Wav)|ZTfthx~8tqHQhKY6_SC$%CO;_>{)ajB*f2(kp-drVd zc!Em8aC6o7cbpr~yWYKbgSICkBOZKxl1dBqPZ*lQ{ngILBjxLO*Cgd{#zP_&cfUJ) z!HP@Hjd+htGgBWf+IhvIXy$2`r~5wS@9d~#5fgv4r-$B%Ia#~A+Rhx{T!eL1X>sbo zrhcPUZ~wPCW`%2O^Q9}Z)*hJp-J!nQ@mF$24s#Fo-D%t_^8rKtkzXgC)u~OZ?!D|B zZ%RLKYj{M_y30N6-+8JhTKXJjyqg&Dsqy@MJy?obJqsLob3?i%Y#ZbLMK5sev3j@E z<{UGzUfceE<8DSLq|gg)8ZaYw)nC2n>cCZVTHbxm{_2?bw#WV01{tX#?w8XOebw^} z`mN+8FP3}acem5Cb=RC&fo)BS0xUnySou|pQ$t{?W|TENhgY7e^i z$y}m-)}1e2!GtibeM>(o!KY0&$0;dcKOHmCG#oLA)pW~gFUTLtXyadULUt6jPJ zzv8^j*QLAHe>Lr2(=?q4cJZELzc=WgrTTXL_a%1P-<=DCjlX=(?DKNjw4QPv=^w6W zycv1zbV8B#kmTb7eD8F9=N3K@3o&c=`iuRfN!dGX4Pxl~RaRu(UY5%p){$mX;Ir9GmE-$;Cq#W%)nu8YZ3nYQJkI$AZ}Ot2j`sf?snY#Q*Emkm zpu7$}3DRKJHiwdoQ`*LC6h0x?W%sv(ZI@*}q2G; z*Wy=Z&zePCYJr_~WPDIxH!LEUX&ds{dFlL47Mab)9@F1-SN?#Go?nsUWY@(j8t81F z74J4>OZ-+X$A5>f4jGpaovAU+$aSrn?v~b;0sD*Yns{kA`X1@po0F5ca_^pypYuBP zUTqcOz3ksjUwcg%<>eYO_2uT7Yg4{%b?G}ePhsfw3(6m(uAjE>=+irJ&$f>j)4S~1 z5_W!4Yvn92?9xp{Iu8Aw_eMr{WGd6j#@fGU`KV669YqqMP zZxFY~_O%Uc_x+RYfswueTW^M+{5t0zD*}Sg^7B0#7kyW!W6w?B487azxzi+Z<>ukn z3zSnJ#D_f6c_>S45r3g-KE zmF12unJ4zWe0}lR7%zv6JG)%_jP2}l&_!$b@(Yi`PhNQ1^A$1!*xdUs*{T`sqf}GZ z_Q_sqacx2Sv*G&enI~Pe?kqF8p1Mlzxa;Ce+q@i-51zFf@#@4Dm($@-0-l6+XyFmx z@_UDAYn3~mI29BA{*>Lw7EhbGXDEyw7;HD}6*!umCttC2`k}sVki71}i)!s+&W7J_ z;Le>nAuQ;c;r`UoZyp%G&0Y1tQ}^+$+?4n&z9&ylv(cE>rsa|3hu6FoVxwN18l%SQ zn$auD&ne0{<-)iK??JPSjh^mcC(hYyHVr#9stId!25pl)X6-F!Z`#1UK?C))O;OOC3D;!J4L6Y)`DqIO--I3of2q>dv?xY^V71*3h?0&-=Ty z8Ek}YAG3Gt$5!f$e^C)@iXB(!iS;qU?yEG#nl;73>M0D`2xY2%WJ0J%aQB`6?YPB2 zrDFR+Y-*!zWJ zCmj3TC7&28{*90T8^*t-R-k?1$ZHB2}4^=Qdrvzo@gm}LZUOh)4d(7PWw9V&v z1)3cue2{yTHo|eZLi9zauGd_Yrp6zPvb}f90U7)I5yo@JsrHzkF!-X=q{bufX%!1irU1xMV~V&VrRUaXg#|4!ZG!fej$AeZh|Ya9D7Xlvk) z8KFP=+zBzCy(wha*G@v9jTM~^bp0xjk)^>@*- zq9;z+zgV+ie1tcuvd1|r9n=mx(c}B}*;&dN2ge-P-&}2*_Ib?a;@D$pmuJa0NEl$P z!QOc?J$Y5L?)z;UVyUrjJ6eRkG(6o=`{sf9w^k<38UHgjC@5)(^I7B6a^E^P&TN5?&6Ss{2Iqk*vp|hA{zlBea@Y}uGcx1o*%bUoZPph|M zd$TAS%AGUoDd*TIt#4f}Ir`U6}J3Amcf0fS+j>gx2 z7@8;TtpBxTJ=)sTFh11dw1rcLFV5~`k=l54@@(21_rTnG002&+M!H$l?-fO5(-wKQ0C>4V{;D zG(^YSr8^sZLI;Jsw!FLuejne)X5JoGTsF=*c)xk0jZNCfTm2KdkEa&KNpMV<(7b4k zW#+8g8>TMIo{_nt`EtW8r#gN-J$F~LRlls|;$LeW)h(DC$#^@dyG@b2+C$IJycyTS zmt%cCczw$<$cqJJl!J?pnC&e7C46 z{eM2XbNsqTSB8aq{siMknX}CMYNox}=k_zC5AWWn?~#k{J$A8q8q_)~oH6dXVZV+= z^@mvjMBiz5#RfGxmwNV`-;q>9wZwk)jZ&ix6`q;{Ri|L?<03%oJlO=5#=u`Awlai7ekXV0P(Uwu~N3Y^O zGWQ5vHr_WeY(e{MpS8KG993s@(;qw`BB1f=h)^w0-^a5i=ICU@oaJRZqz#u z?gEQe%FSNA_H3%1nrWsmu;rK`te&p9=d-PpEhCF`^?7X+Tt6}uba&=l)t(;gr|hx) zv~T+HiPzFIE#{tIt((~+&33+H{kOVG*Yg_q-dMc%Ebphn`sJ2#b2Q|X>&xp&cKh5)v#?t=^J~Ykn z?0h_fVSn<+uXCt7M!r7u9Zpt?+O$Bk|IRMUYz;JSG;0|*WJRlAXEq-CdS-&L)dtsN zAMJZ&r0SiX6zX-^A>HlmegnS-d4;?4zg~CPKWeIue}3~}59r@I)?2*KBJZEksHADZ&OV4|n9`WIkO2?-quUXx`&Am2-N79o5!!%=TpuMo7y?&s} zm29=4RzDfnznN?Pt8nPTh37uq-drfKZF%>qtAVq-<+Y^dmOqzm>}%e%rOHF=>E4g^ z(;qMvb=Axqu-bNreQ?a>p;mVs*hvnyhXdk1U_r|*}Z@EyJ%;5}&v|oDuhNpxp5fdFwa0?ti|kQKq5Yu^CSjE+U((t);7B?6xFw zY0s;N=>=;h_>NsuICS%;+l&CcL47do>4Rg^0R(WzYu@ZfI)Hg-d4^#CN~?F#wZw&IdjaD^t`b_w9r7)u-_n`NbQ6ewdJjs3>@;}ex&2JA3x{aY&<4c^3B_&ECPb^V^h54ibHpY6OQBzN+A+k`|cE05bOWa(F( z>Dn_qJPI$Sx6?3E(>H6Hq|RpD+s6o;BUe$i-G zC8trI zFVNW7h2|%074=-Ty;m?a?+o>_V$IwauFh-!?!LdK+T)b;U5n=5rDcS5J2qGTs9uq7 zClC74{qu~>Z*I>S6S+9VpyB9`_M5M38`^m)hYmh6`@E0KSt~|D^dXfWS}H%%=Zw8M zn3K82G3N4vg7tROc|)gdi@kjJ!ifnUOJ05AVcs_yb+me8G!P9qVxxzf4+|Y)zo`p) zc83pWG!lj@aX>?&wE|31v@jFSM2ybeh%q?97@hq9J%7X)+-!95{_rasrxj?%X-7N& zUI0)2R51R~2+7zI(R&!lHu(>iuO#}5c!PKZyaJxpb)d0L5G{cijs1g?xtMm1&$FY5 zcP4d94S4cM*4D_zJ)&eTrpzm<`}n-H#xTU&+6;8g1SI#Dl-#8x_wxDxyagWDHlU^G zAv=GAk~>Lq|4k1NuLrQf#jjyN_K411jnTNdlj2n%s@zM`uPfuYxQ&)hU4Z*~RDEBz zeANMa13sFhJ|W)5qx}3jCwsylfHqpS+lHubhic!;*lv?xS3ri<=_7)^B|?v=d)?Lp zyq{2vMgjEaQ+>L1Tjqjg7Gw!B6&0wloIgkQgdTuQMFD)C4hi)Tfd_T3Io$%;Rtord z9yNadr|KxoAE?Y1gn2uED(w_qgxx{&h$;XY_aP$g<5x=WfO(@f2#1 z+qE-m;0f?XR(3$JEy!P&Ba1p{QSD@YEy9YyT_hVFK*?iGt521ipvhW9pb-1L;ANjVFuP3_fiIBiEvfBkEYp_XdhtjzR36iM0 zm>dA!ky$p0_4nlF@%Ogx#T55%!3S^+NR>aa_X271NBw#fNX7vg=P7AAP`d91S#7@^ zk`YhEMzTl!;w072r0=90Ai|4&d9-8w1Ymd&= zMEN)V&=&1=ZA4un@_4$-6wYl>Ezc zj|{7I|RsQO9XdeS|BCIDsQ*y*UsO)={88Gn2J+8;Bk>Ht8aV%v z!HpwN{wQr(1KH<4^3MPztIm+^`LErcH$bu{QJ+!TkcTXR?DJpY3}CV9Kyl`a%J}?e zI(HCxv=q}#;|`Xk_%R0JAzAXlWzPvFEq%b7&XwKy?{v-~Qfa~IL3zjufOllc9#0p^ zp3dD!Y94g%L7A}2l-&x^@sm_q__D~xATL<}@QzIRgX~Q>6G_d3!Oq79u)C1XE;?s7 zxpWBBdyp5|06YWUktu(Wy-A7|sd)hYG%gdH#8V)RWejeAjK(e?oen}4{Ji>;Mi1}` zct+$$)*WOIz~Cm6o)?|FnG}98IIS@{JBf7s%gX@I6Xi_?0I$mDC;j*264V)-!!pPZ z+L((<@|4B{BUu@xNoIS$s&+BT8{r^L03JzS)C_TPso!;a-V~)uQJ28LfI2O zA>e{=!VqrN0pNu!>U)9?kTu9$5a{ec+42+lwlwYmk^2WmB`PBPtkLyYws;aU7U>SS zSz~~!C;;ty-~riwJ|TDF4zex}bT*^r_=@*&?Ld89wix}BF-A}Af$!gF!XAlmT8zF2 zBR*x;9DX9nzO;_TamD-97GppI>_-VS0d4&Le4v%Qemz3Y72QGB!hptoSZ8=#5pC4> zQau#L3y^U|z_+iJ#}}3+^{p=P%(^1+VGM^j8>Xr1s9%^%=|COT0gxTYP!fPXD;hV4(t$dr10XYyoiu>Ku|j>+ zg_I7|6&(OsA(=@NOg=eK@~s52kSyg-x=YQy1uDxSMKM|i+W4(FxMJ5TtLLAwwClcS*0I$XE z&lj0^2?D~L(%LeA0M=;GIRU7iZ(D7OATFdK%e5ty*&X1m;Jn>x6Gmo47&kz3AZuza z8Q$-O)@T~1c9a^GkQS^ht*LeopOeCqH124hbbK>AA zPFQ@c5#+&*A)OxJ8St*6xtikOUDILl_7$u#!Pgl{Ypq!}M&n%P*V8GTWlkak^7XJmI@qcGu!&pwFX z^HIB#F7tgjDq{z}?+C&P#|_~KxB|`$?q?x(A{(cb*n5FkgH5c(tSlcA{^Rj@xkR!$ z=mmj0@h*qI77?!)<^~_KO5c^>omKj-2=DHt?~s5%bUcBA(!VjxR3LZwu2Uv?3_}^P z1jC~Yn1b&LWwOICl%e3?sKP9hJwl*N_6ULU?#NPxjW$<2xt0+I}9RyblGT=uU5tqK8Cxn9x-jTdPtN8?@2kKoiey}hMY;g%c z%e=ecMiu>ETK<{1l_`EV#f>boI>q)v2RE|Fw1O>k$L$MxKx%>B!Tu=m6LKT$kpe%W zDVS>bUyfg#m7r#jL*Fnr_`wu#dxt;5D<2eC#1sFnSk-$OOM!4HZ?DV0m$&!j--~%b zVBuE2J`t?mfVAK0qcR91CYM1FDLEe@;0pr8T0R1bEO-S|%|}3qAI*(dT*2w!(V#x% z;UV4dU?5{W1N4VGijLO|@DKU}g1N!}@Q*2;4;~#bz#rTpcOGoaVvjB+y5ulj^owM? z7r&AG!;`}Xa1D?zCfeP1><5sGab=h6YW{pQ-Q%* zK+R!Avcc!^B3_WW50jwH8^GyXV|~D4+lvZxmyC3vFBf=28i0-GtU&Vq_1D=NQRM}^ z0Uk-ao*vF^g6vHg#dlH56XF%{Od5dC<&r_ayr?=>cfz5u3<>u!!^cIab>r18_xPB3 zHD!R?97^x2&HK`F8Y8|fLUk==@1@u_NA-a?bu!f9rSg*^9-`J?e_%M=FA||b#{GNB z$CSGMfp1z>`v7m(*66;Me|lMqtF)aAeF~J_Az23ykA(sBBT;LTN#;GO*MP^u`s|=D zkJ5ee`42n>UY7yr+aaqD8Lb_oac?8p?!fak;o4)h`Qq#04nEE#tw{u43;LrBjwuPc zkLEmawqvw(jWVLHOD}*s&>+2ea02BE@tgo@?^8}=-$y#$j!3@F-+>mONvif4jiccJ zZCz=O8KSnHsQcvBCBfkP6ic%Y81Woz5R5BJORk_Je~9;gOWKS)#kZ?+)zFBw*bFR7NEV_{3GV)NSGG*n046C5m#?;zepOs zDLWFCB{a{d+VbPe4gCAR4ft&u3H287UOMyAWP2WJZICscyHjGll@9NPw5MwWgGk1q zHucv)f5P7eK(nNFTUzlc{!3a9NEV+g{?j?SrtFR2dI<@l8TQ~F<*^;c5dDgCGPUs4^a%ke4wr}V!r>#wA^ zQ~FQozoa@;m*Z3V|A*>7*9^@MaQ>q&X_Py%^#5-dQ>OS|vr?w`Pw~HIIZ(5?Q~FQw zzh*g5v$@x1{fF}w=v;S+E=Yq6prsf|gcm_qZRWo;=3hY?WB~Zw(%_vm(jd$Kr}!^g zyPD#^Xnc}}t_w?p;y=ZIVR`}IDEnXi+K;mTqLnMk{)on>ipr>@-zol6{I5udDEm*@ z|B7@&THh)AL)o8-bcwP*)we$k&IQT)SWp^d0F?QPWG?IPzwKuxC4w2;C@IhwB_(Xi zCL^u&*V0)7PtN`W3@%Fw{AZPAoRr>RKRZeFyyTppTDbp)Nm?6;=_B|9X-ONTwf_bK z-vdR$`kRFPXQWlWK?c&ckJ8OW4S^!6W4DzTBkhT9L;8Gj*Up4t;f%g3ULL%?^GJrfFFL8j>{a11R zo034cX!{S-KN;7|Stn>ORmi(Ckk$UfV1s0{|2CY7Iuq>^x)O~G9zu5SEeUcbY>kL_ zgahCLI00^ae?+$XZ-Wj<&kqujZfW?ubu8s{MhAk=fMij6t{ZW_Rk?G1*!jg{jcASunxDx(%f=crO;slgtCDmf5B|Dt zbbby#zchi53&M$zP0748b|m`dkMMKCX(EB=JYE(bH6)zYg3?`Q=6jZuk%A82*eaxgwN2B_6JO3UE^d zodjJ)HwDmDcf=120pbNb6ClSVo=`Z!XIANVMZssmGKKOdpiH^L+0OsRv{X-#Jc!V! zEaT<@#{`upCi(-<9hE1@K#_%hP#J;@@RW7R#Z(;eB@%f&ttniD~SFH(7$*?8VK4hR>hJIVAFVXiNovjyeD zt^ry_^W6Y9z)_m>l6$ioBbw29+uWSmOLsZl!*NA81MZRl?b856voz-FizvTxbX2bY zqNK^ffQIUT$tQHNrcTv-OZ1#l9V4rnt$J5HQpEd`a$1nE8u<6B9?!k8QRV?_Ir`#5B@_tQji60XxDQeb>1S}Bh-_!Xk_lO~3QJc4`BU^$ z@~^deElk&ieWUch+UB1s|5W*>%DAx85UrPTe{jVkmDEq&Q#Bqk|kAKlPi6Y|#VXF(`kAI0X z23WoEPg7n!vE~=S{2Yi=9T0c?Qx@ajCfp$+%bxH@A&$6Eo$+s&13=^{%Dp=CA873V z#L5HkfH>kpb>=^iJ^zKqogy~vgd8BQs8HScFE9s)$WPR}sPms_pUhF(;@Fq+ZP9Er zU)8)y7DzJxNs{?*49;4i^I_<0Z8WdyAex_7BsOnmTXdTbN0TR!Mg74BsTB_4oMIU;juT$6x=tO)7dylZkEH8g2_C>*qV>=0=Sa4TMA}mZ_ML&S3_MQx_COWyB&>fHwkp843PE4-Z9k4QPKL{$6=rNbm0;oh7eMgS7d1puAwuK1ue)1H3uY5x%d` zRfT;a?f+Le4&u@Q=cn-bP*Zr9%@=S1oJ0XScM!5^nKj7svbYnn2b=)6%7Bl1Zmq+; zl!n|2X~56isfBzea3}5{hu?GwFRNf%gv+kBeTVWOSf=@Qrf%R)@Dgyw0r6fO8;Sd% zuvaAP11I9VpQ^&)`?{et#cMOZ!exNBwM5bz+?{~r{s9g8yoaIu*Pn5(U&)@MaizmO1t=yjhovevH zGa=8a%R}Y35OuM4hnzC zb2nF6mZXWlDE=FS5fz~9RfS(w|BF+8Dg4VyhT^~U{Rdg=KeXXQ1!?QQG}@2Qh87j* zZ09QN1%we5L~FlS-UlI0{|SS8x=Q>Zj3^*#|A|QBET~VfDu6z1k@jswdprKt|1BhO z=&P*SwnLw}JJ~v0{p!3&6>PH2CItGI{6@fVYhZ6PQLf`eLVQ5U`r5L#L+XHwU z6j!hxzdHT55TC(C=c0(nJG@U1m1#Qr1{(M0h#aq?^dSvM3(9KM{e^;Up@b6J>-6{q zC}ABRKLQf!^!ObRfS@jqpYkanXpqwQHD@atb3&JhwxP0cqKsb?G=MINRIgQl7tB?o zb0!eU;m?xHUjtl3sq;!Qga^D#i#dOT{SEPZyU;TS;jBUYKL}F+-M@dY-u#X7bnxpq zVyvvxU*gvVaK;$gKjza^k&}eSpjg z(gU>r2K$+4zGp>xk9<-*4U`t7Sry>tc5?qGMmZAnJF0%BL)sOb8)}@|5tZXNq~%>= z15h52mmu(Mhz#;3se-YN3S6@(6Vm(7#{@mo!GX=}$Rb0jd^DTK^BvxLP1;%kGNw<{O6_sz` zn&H9l%wsupWc|gh6HXFJG61=pb5CB@E~s&kFO0 z|AaxM{s(Fs2rYxqc0lKf6MhJ+O%rAB4G2T5V}rPmM#cT-KKOboq4^ivMZVtx{jj3U zTP64iVbOWgRrsHrrRHYLv`9;H10#hyNAN{M_9cE--NWkAb$YhgDA3~ zu?tW-yYTtD{J#BNNY?0EMR^js1nn$=b{9X_-+zgAiJ*VZ?~g%aDI7PUXVSyj^7wyf z45g&+2Feh$;VW)`qkb737V1%8qTU5})Kvf%27p$3!8yTjq19hZ1r$)|g?dR~iJn5P z4hmEDlFL$ZhYK4dk0M<$;dg2^W$~^0`=6LTgVPQ1r_^T`@3}0` zgz-mY1ridlynKYEZ~Q^!w{iyG$^+D;5MS^TC4FJ~1K-L6q+33{^6$d%uifdFFT=mv z2L^YX5W2^eXAcVVyM5r>pi&(wZ{NUIWw3Alo<90U_`r}+h4xLzcp%>n0xpZu75jVI zCH@Nh2Vp9<&t%sxIBncXmEc&)yYjkL`TL|Y@?oGnDyt{?ejM=3rBa`cpGMiViHwN) zlBjneO};GrF-A&fA{hS6;QHhL@$;?FKVe~t7!y;#+>6~aNJ9ZF&R682f83EXRsKR- z6DV#(|CPHGP$~pKT9777T@eF642Fkv(M9-SgX*CdVSwu@@JEC_O8H@2N^}^H%ef}L zoKYMiUqN}(xM=M%>iZCO!GD5bahVF>4Exx@{u~tn{3p2AoglrCc4cviG$G9Ic%b=@ z<@#$xY1<0YBK`QQh4QdGUkMz_=TFdE)xDzlu-{TiUg%j67~JHN|0<5}ULtGYr654M zL_FeNUVdfgyLpvFFE2kq9U$}v_bb?+O7nnc5Xl^+`W2eMf| zO7SSM@5pu*mmeUEC`SY>d|P%J8_4O3UoaPvu#x4;ue)4llmP!yWOYWP&7Cn#^iEtl RJoIeLznU7AhJ`o~_y6Yy51#-4 diff --git a/Quartz.Engine/Properties/AssemblyInfo.cs b/Quartz.Engine/Properties/AssemblyInfo.cs deleted file mode 100644 index 107728b..0000000 --- a/Quartz.Engine/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -ο»Ώusing System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Quartz.Engine")] -[assembly: AssemblyProduct("Quartz.Engine")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("HP Inc.")] -[assembly: AssemblyCopyright("Copyright Β© HP Inc. 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d6a80775-6772-413c-8ade-0f789fd0604d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 6e38a09..1651578 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.0.0.27 - 1.0.0.27 + 1.2.1.3 + 1.2.1.3 Quartz.ico @@ -14,30 +14,36 @@ 1701;1702;NU1701 + + + + + + - + - + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all - + diff --git a/Quartz.Engine/Quartz.ico b/Quartz.Engine/Quartz.ico new file mode 100644 index 0000000000000000000000000000000000000000..ec8289a1cd04226f20c9572267e417b9ebc91cda GIT binary patch literal 121442 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 KMz~WinExe netcoreapp3.1 true - 1.2.1.18 - 1.2.1.18 + 1.2.1.20 + 1.2.1.20 \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 6748c20..e59db02 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,11 @@ false - 1.0.0.1 + 1.2.1.3 - 1.0.0.1 + 1.2.1.3 + + true From f16ceb7bde0954c33f627831c16f6c87ba151b88 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 16:13:57 -0500 Subject: [PATCH 26/65] :heavy_plus_sign: Add PersistentEntity Database Library --- Quartz.Core/Quartz.Core.csproj | 8 ++++++-- Quartz.Engine/Quartz.Engine.csproj | 5 +++-- Quartz.IDE/Quartz.IDE.csproj | 8 ++++++-- Quartz.Testing/Quartz.Testing.csproj | 5 +++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 08ae12d..1dde405 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,12 +2,16 @@ netcoreapp3.1 - 1.2.1.19 - 1.2.1.19 + 1.2.1.20 + 1.2.1.20 + + + + diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 1651578..5857b57 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.3 - 1.2.1.3 + 1.2.1.4 + 1.2.1.4 Quartz.ico @@ -40,6 +40,7 @@ + all diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index fe1c841..bc8dda4 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,12 @@ WinExe netcoreapp3.1 true - 1.2.1.20 - 1.2.1.20 + 1.2.1.21 + 1.2.1.21 + + + + \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index e59db02..9524d71 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,9 @@ false - 1.2.1.3 + 1.2.1.4 - 1.2.1.3 + 1.2.1.4 true @@ -15,6 +15,7 @@ + From be3afff9a840c2c8663ab2039691c4674fd83e95 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 16:58:57 -0500 Subject: [PATCH 27/65] :recycle: Common functionality between Quartz.IDE and Quartz.Engine moved to Quartz.Core --- CHANGELOG.md | 1 + Quartz.Core/Diagnostics/LogAttribute.cs | 115 ++++++++++++++++++++++++ Quartz.Core/Diagnostics/LogManager.cs | 72 +++++++++++++++ Quartz.Core/FodyWeavers.xml | 5 ++ Quartz.Core/FodyWeavers.xsd | 76 ++++++++++++++++ Quartz.Core/Quartz.Core.csproj | 24 ++++- Quartz.Engine/Quartz.Engine.csproj | 6 +- Quartz.IDE/App.xaml | 6 +- Quartz.IDE/App.xaml.cs | 92 ++++++++++++++++++- Quartz.IDE/FodyWeavers.xml | 5 ++ Quartz.IDE/FodyWeavers.xsd | 76 ++++++++++++++++ Quartz.IDE/Quartz.IDE.csproj | 43 ++++++++- Quartz.Testing/Quartz.Testing.csproj | 17 +++- 13 files changed, 525 insertions(+), 13 deletions(-) create mode 100644 Quartz.Core/Diagnostics/LogAttribute.cs create mode 100644 Quartz.Core/Diagnostics/LogManager.cs create mode 100644 Quartz.Core/FodyWeavers.xml create mode 100644 Quartz.Core/FodyWeavers.xsd create mode 100644 Quartz.IDE/FodyWeavers.xml create mode 100644 Quartz.IDE/FodyWeavers.xsd diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e23cf..20fd02e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ ### Dependency Changes +- βž• Add PersistentEntity Database Library [[f16ceb7](https://github.com/TheHeadmaster/Quartz/commit/f16ceb7bde0954c33f627831c16f6c87ba151b88)] - βž• Add FluentAssertions Testing Library [[f42ffa1](https://github.com/TheHeadmaster/Quartz/commit/f42ffa1550bf1ba14d7b1ac9ecfacba9a8ca3830)] - βž• Add XBehave Testing Library [[6ca9c8b](https://github.com/TheHeadmaster/Quartz/commit/6ca9c8b305edfdb966823104807d9d540038e962)] - ⬆️ Update XUnit Visual Studio Runner 2.4.0 ➑️ 2.4.3 [[0506e07](https://github.com/TheHeadmaster/Quartz/commit/0506e0758e62a0abd8e43f323a664e340701e7e6)] diff --git a/Quartz.Core/Diagnostics/LogAttribute.cs b/Quartz.Core/Diagnostics/LogAttribute.cs new file mode 100644 index 0000000..6039ffb --- /dev/null +++ b/Quartz.Core/Diagnostics/LogAttribute.cs @@ -0,0 +1,115 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Librarium.Core; +using MethodBoundaryAspect.Fody.Attributes; +using Serilog; + +namespace Quartz.Core.Diagnostics +{ + /// + /// Logs a message to the sink pool before and/or after a method call. + /// + public sealed class LogAttribute : OnMethodBoundaryAspect + { + /// + /// The message to log before the method is called. + /// + public string EntryMessage { get; private set; } + + /// + /// The message to log if the method throws an exception. + /// + public string ExceptionMessage { get; private set; } + + /// + /// The message to log after a method is called. + /// + public string ExitMessage { get; private set; } + + /// + /// Determines whether the thrown exception should be considered a fatal exception. + /// + public bool IsExceptionFatal { get; private set; } + + /// + /// Logs a message to the sink pool before and/or after a method call. + /// + /// + /// The message to log before the method is called. + /// + /// + /// The message to log after a method is completed. + /// + /// + /// The message to log in the event that the method throws an exception. + /// + /// + /// Tells the logger that any exception thrown in this method is considered a fatal + /// exception, and should be logged as such. + /// + public LogAttribute(string entryMessage = "", string exitMessage = "", string exceptionMessage = "", bool IsExceptionFatal = false) + { + this.EntryMessage = entryMessage; + this.ExitMessage = exitMessage; + this.ExceptionMessage = exceptionMessage; + this.IsExceptionFatal = IsExceptionFatal; + } + + public override void OnEntry(MethodExecutionArgs args) + { + if (!this.EntryMessage.IsNullOrWhiteSpace()) + { + Log.Information("{EntryMessage}", this.EntryMessage); + } + } + + public override void OnException(MethodExecutionArgs args) + { + if (this.IsExceptionFatal) + { + if (!this.ExceptionMessage.IsNullOrWhiteSpace()) + { + Log.Fatal(args.Exception, ""); + } + else + { + Log.Fatal(args.Exception, "{Exception}", this.ExceptionMessage); + } + } + else + { + if (!this.ExceptionMessage.IsNullOrWhiteSpace()) + { + Log.Error(args.Exception, ""); + } + else + { + Log.Error(args.Exception, "{Exception}", this.ExceptionMessage); + } + } + } + + public override void OnExit(MethodExecutionArgs args) + { + if (args.ReturnValue is Task t) + { + t.ContinueWith(task => + { + if (!this.ExitMessage.IsNullOrWhiteSpace()) + { + Log.Information("{ExitMessage}", this.ExitMessage); + } + }); + } + else + { + if (!this.ExitMessage.IsNullOrWhiteSpace()) + { + Log.Information("{ExitMessage}", this.ExitMessage); + } + } + } + } +} \ No newline at end of file diff --git a/Quartz.Core/Diagnostics/LogManager.cs b/Quartz.Core/Diagnostics/LogManager.cs new file mode 100644 index 0000000..9058db6 --- /dev/null +++ b/Quartz.Core/Diagnostics/LogManager.cs @@ -0,0 +1,72 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Librarium.Core; +using Serilog; +using Serilog.Formatting.Compact; +using Serilog.Sinks.SystemConsole.Themes; + +namespace Quartz.Core.Diagnostics +{ + /// + /// Manages logging setup and functions. + /// + public static class LogManager + { + private static string logPath = ""; + + /// + /// Sets up the color theme for ESDashboard. + /// + private static AnsiConsoleTheme QuartzTheme { get; } = new AnsiConsoleTheme( + new Dictionary + { + [ConsoleThemeStyle.Text] = "\x1b[38;5;0229m", + [ConsoleThemeStyle.SecondaryText] = "\x1b[38;5;0246m", + [ConsoleThemeStyle.TertiaryText] = "\x1b[38;5;0242m", + [ConsoleThemeStyle.Invalid] = "\x1b[33;1m", + [ConsoleThemeStyle.Null] = "\x1b[38;5;0038m", + [ConsoleThemeStyle.Name] = "\x1b[38;5;0081m", + [ConsoleThemeStyle.String] = "\x1b[38;5;0216m", + [ConsoleThemeStyle.Number] = "\x1b[38;5;151m", + [ConsoleThemeStyle.Boolean] = "\x1b[38;5;0038m", + [ConsoleThemeStyle.Scalar] = "\x1b[38;5;0079m", + [ConsoleThemeStyle.LevelVerbose] = "\x1b[197m", + [ConsoleThemeStyle.LevelDebug] = "\x1b[089m", + [ConsoleThemeStyle.LevelInformation] = "\x1b[37;163m", + [ConsoleThemeStyle.LevelWarning] = "\x1b[38;5;0226m", + [ConsoleThemeStyle.LevelError] = "\x1b[38;5;0160m", + [ConsoleThemeStyle.LevelFatal] = "\x1b[38;5;0124m", + }); + + /// + /// Initializes the log manager. Logging sinks are set up here. + /// + public static void Initialize() + { + if (logPath.IsNullOrWhiteSpace()) + { + DateTime dt = DateTime.UtcNow; + string filename = $"{dt.Month}-{dt.Day}-{dt.Year} {dt.Hour}-{dt.Minute}-{dt.Second}"; + logPath = Path.Combine(AppMeta.AssemblyDirectory, "Logs", $"{filename}.json"); + } + if (!Directory.Exists(Path.Combine(AppMeta.AssemblyDirectory, "Logs"))) + { + Directory.CreateDirectory(Path.Combine(AppMeta.AssemblyDirectory, "Logs")); + } + + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {Message:lj}{NewLine}{Exception}", theme: QuartzTheme) + .WriteTo.Debug(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {Message:lj}{NewLine}{Exception}") + .WriteTo.Seq("http://localhost:5341") + .WriteTo.File(new CompactJsonFormatter(), logPath) + .CreateLogger(); + + Log.Information("Logging to the output tab."); + Log.Information("Logging to Seq. Open http://localhost:5341 for more details."); + Log.Information("Logging to compact json file. Check the 'Logs' folder."); + } + } +} \ No newline at end of file diff --git a/Quartz.Core/FodyWeavers.xml b/Quartz.Core/FodyWeavers.xml new file mode 100644 index 0000000..d510074 --- /dev/null +++ b/Quartz.Core/FodyWeavers.xml @@ -0,0 +1,5 @@ +ο»Ώ + + + + \ No newline at end of file diff --git a/Quartz.Core/FodyWeavers.xsd b/Quartz.Core/FodyWeavers.xsd new file mode 100644 index 0000000..a097b30 --- /dev/null +++ b/Quartz.Core/FodyWeavers.xsd @@ -0,0 +1,76 @@ +ο»Ώ + + + + + + + + + + + Used to control if the On_PropertyName_Changed feature is enabled. + + + + + Used to control if the Dependent properties feature is enabled. + + + + + Used to control if the IsChanged property feature is enabled. + + + + + Used to change the name of the method that fires the notify event. This is a string that accepts multiple values in a comma separated form. + + + + + Used to control if equality checks should be inserted. If false, equality checking will be disabled for the project. + + + + + Used to control if equality checks should use the Equals method resolved from the base class. + + + + + Used to control if equality checks should use the static Equals method resolved from the base class. + + + + + Used to turn off build warnings from this weaver. + + + + + Used to turn off build warnings about mismatched On_PropertyName_Changed methods. + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 1dde405..41a2c14 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,9 @@ netcoreapp3.1 - 1.2.1.20 - 1.2.1.20 + 1.2.1.21 + 1.2.1.21 + 8.0 @@ -11,7 +12,26 @@ + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 5857b57..b8d7ece 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,9 +5,10 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.4 - 1.2.1.4 + 1.2.1.5 + 1.2.1.5 Quartz.ico + 8.0 @@ -40,6 +41,7 @@ + all diff --git a/Quartz.IDE/App.xaml b/Quartz.IDE/App.xaml index 1b696b0..1c9c645 100644 --- a/Quartz.IDE/App.xaml +++ b/Quartz.IDE/App.xaml @@ -2,8 +2,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Quartz.IDE" - StartupUri="MainWindow.xaml"> + Startup="AppStartup" + ShutdownMode="OnExplicitShutdown"> - - + \ No newline at end of file diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index f594f16..c55778c 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -5,13 +5,101 @@ using System.Linq; using System.Threading.Tasks; using System.Windows; +using Quartz.Core.Diagnostics; +using Serilog; namespace Quartz.IDE { /// - /// Interaction logic for App.xaml + /// Houses global application data and the entry point of the application. /// public partial class App : Application { + /// + /// Gets the metadata for the application. + /// + public static Meta Metadata { get; } = new Meta(); + + /// + /// Gets the currently loaded preferences for the user. + /// + public static Preferences Preferences { get; set; } + + /// + /// When the application ends from anywhere, the log needs to be closed and flushed. + /// + [Log("Quartz will now flush the logger and shut down.")] + private static void OnExit(object sender, EventArgs args) => Log.CloseAndFlush(); + + /// + /// Serves as the application entry point. + /// + /// + /// The source of the event. + /// + /// + /// Contains the arguments pertaining to the application startup event. + /// + private void AppStartup(object sender, StartupEventArgs args) + { + DefineDebugFlag(); + + InitializeLogging(); + + AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnExit); + + EnterProgram(); + } + + /// + /// Enters the program. + /// + [Log("Starting...", "S")] + private static void EnterProgram() + { + UpdateManager.Initialize(); + + using (Stream s = App.GetResourceStream(new Uri("/Quartz;component/Resources/Poketext.xshd", UriKind.Relative)).Stream) + { + using (XmlTextReader reader = new XmlTextReader(s)) + { + HighlightingManager.Instance.RegisterHighlighting("Poketext", new string[0], + HighlightingLoader.Load(reader, + HighlightingManager.Instance)); + } + } + + Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); + + Metadata = JFile.Load(AppMeta.AssemblyDirectory, "metadata.json").CreateModel(); + Metadata.Save(); + UserMeta.Load(); + + new MainWindow().Show(); + } + + /// + /// Initializes the logging manager and logs the welcome messages. + /// + private static void InitializeLogging() + { + LogManager.Initialize(); + + Log.Information("Welcome to Quartz IDE Version {Version}.", Metadata.Version); + + if (Metadata.IsDebug) + { + Log.Warning("This assembly is running in DEBUG mode."); + } + } + + /// + /// Defines the flag that determines whether or not the program is running in debug mode. + /// + private static void DefineDebugFlag() => +#if DEBUG + Metadata.IsDebug = true; + +#endif } -} +} \ No newline at end of file diff --git a/Quartz.IDE/FodyWeavers.xml b/Quartz.IDE/FodyWeavers.xml new file mode 100644 index 0000000..d510074 --- /dev/null +++ b/Quartz.IDE/FodyWeavers.xml @@ -0,0 +1,5 @@ +ο»Ώ + + + + \ No newline at end of file diff --git a/Quartz.IDE/FodyWeavers.xsd b/Quartz.IDE/FodyWeavers.xsd new file mode 100644 index 0000000..a097b30 --- /dev/null +++ b/Quartz.IDE/FodyWeavers.xsd @@ -0,0 +1,76 @@ +ο»Ώ + + + + + + + + + + + Used to control if the On_PropertyName_Changed feature is enabled. + + + + + Used to control if the Dependent properties feature is enabled. + + + + + Used to control if the IsChanged property feature is enabled. + + + + + Used to change the name of the method that fires the notify event. This is a string that accepts multiple values in a comma separated form. + + + + + Used to control if equality checks should be inserted. If false, equality checking will be disabled for the project. + + + + + Used to control if equality checks should use the Equals method resolved from the base class. + + + + + Used to control if equality checks should use the static Equals method resolved from the base class. + + + + + Used to turn off build warnings from this weaver. + + + + + Used to turn off build warnings about mismatched On_PropertyName_Changed methods. + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index bc8dda4..044eb13 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,12 +4,51 @@ WinExe netcoreapp3.1 true - 1.2.1.21 - 1.2.1.21 + 1.2.1.22 + 1.2.1.22 + 8.0 + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 9524d71..61420c5 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,17 +5,30 @@ false - 1.2.1.4 + 1.2.1.5 - 1.2.1.4 + 1.2.1.5 true + 8.0 + + + + + + + + + + + + From 27e4ffcc71830e594aa5a2529ce5dd3dee1a12b6 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 17:25:06 -0500 Subject: [PATCH 28/65] :arrow_up: Update Librarium 1.0.2 :arrow_right: 1.0.3 --- CHANGELOG.md | 4 +++ Quartz.Core/Quartz.Core.csproj | 10 ++++--- Quartz.Engine/Quartz.Engine.csproj | 6 ++-- Quartz.IDE/App.xaml.cs | 19 +++++------- Quartz.IDE/MainWindow.xaml.cs | 4 +-- Quartz.IDE/Meta.cs | 43 ++++++++++++++++++++++++++++ Quartz.IDE/Quartz.IDE.csproj | 6 ++-- Quartz.Testing/Quartz.Testing.csproj | 6 ++-- 8 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 Quartz.IDE/Meta.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 20fd02e..63bb3d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ ## 1.2.1-alpha (2020-09-21) +### Optimization + +- ♻️ Common functionality between Quartz.IDE and Quartz.Engine moved to Quartz.Core [[be3afff](https://github.com/TheHeadmaster/Quartz/commit/be3afff9a840c2c8663ab2039691c4674fd83e95)] + ### Breaking and Major Changes - πŸ’₯ Previous projects are now incompatible moving forward, starting with 1.2.1 [[6fafdf3](https://github.com/TheHeadmaster/Quartz/commit/6fafdf35d357ef65683dd6c16e97b9a1e112430d)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 41a2c14..4dc1755 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.21 - 1.2.1.21 + 1.2.1.22 + 1.2.1.22 8.0 @@ -17,11 +17,13 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + - + + All + diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index b8d7ece..27677be 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.5 - 1.2.1.5 + 1.2.1.6 + 1.2.1.6 Quartz.ico 8.0 @@ -37,7 +37,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index c55778c..903c77e 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -3,10 +3,15 @@ using System.Configuration; using System.Data; using System.Linq; +using System.Reflection; using System.Threading.Tasks; using System.Windows; +using Librarium.Core; +using Librarium.Json; using Quartz.Core.Diagnostics; +using ReactiveUI; using Serilog; +using Splat; namespace Quartz.IDE { @@ -59,21 +64,11 @@ private static void EnterProgram() { UpdateManager.Initialize(); - using (Stream s = App.GetResourceStream(new Uri("/Quartz;component/Resources/Poketext.xshd", UriKind.Relative)).Stream) - { - using (XmlTextReader reader = new XmlTextReader(s)) - { - HighlightingManager.Instance.RegisterHighlighting("Poketext", new string[0], - HighlightingLoader.Load(reader, - HighlightingManager.Instance)); - } - } - Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); - Metadata = JFile.Load(AppMeta.AssemblyDirectory, "metadata.json").CreateModel(); + Metadata = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); Metadata.Save(); - UserMeta.Load(); + Preferences.Load(); new MainWindow().Show(); } diff --git a/Quartz.IDE/MainWindow.xaml.cs b/Quartz.IDE/MainWindow.xaml.cs index f6da4d3..cc95140 100644 --- a/Quartz.IDE/MainWindow.xaml.cs +++ b/Quartz.IDE/MainWindow.xaml.cs @@ -22,7 +22,7 @@ public partial class MainWindow : Window { public MainWindow() { - InitializeComponent(); + this.InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/Quartz.IDE/Meta.cs b/Quartz.IDE/Meta.cs new file mode 100644 index 0000000..6d70a21 --- /dev/null +++ b/Quartz.IDE/Meta.cs @@ -0,0 +1,43 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using Librarium.Core; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; + +namespace Quartz.IDE +{ + /// + /// Houses the metadata for the application. + /// + public class Meta : ReactiveObject + { + /// + /// Gets the Directory for Quartz that lies inside of the user's AppData directory. + /// + public string AppDataDirectory => Path.Combine(AppMeta.AppDataDirectory, "Quartz"); + + /// + /// Gets the root directory that the program is contained in. + /// + public string AssemblyDirectory => AppMeta.AssemblyDirectory; + + /// + /// Gets or sets the current project. + /// + [Reactive] + public Project CurrentProject { get; set; } + + /// + /// Gets whether the program is running in debug mode or not. + /// + public bool IsDebug { get; set; } = false; + + /// + /// Gets the assembly version of the entry assembly. + /// + public Version Version => Assembly.GetEntryAssembly().GetName().Version; + } +} \ No newline at end of file diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 044eb13..764eb64 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.22 - 1.2.1.22 + 1.2.1.23 + 1.2.1.23 8.0 @@ -24,7 +24,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 61420c5..63de18e 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,9 @@ false - 1.2.1.5 + 1.2.1.6 - 1.2.1.5 + 1.2.1.6 true 8.0 @@ -16,7 +16,7 @@ - + From 84689031040eb0f2505aa73df434ae6846bb0518 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 17:26:30 -0500 Subject: [PATCH 29/65] :refactor: Preferences now save to the user's AppData directory instead of directly inside the Program Files folder --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.Engine/Quartz.Engine.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- Quartz.Testing/Quartz.Testing.csproj | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63bb3d1..0d0cd81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ ### Dependency Changes +- ⬆️ Update Librarium 1.0.2 ➑️ 1.0.3 [[27e4ffc](https://github.com/TheHeadmaster/Quartz/commit/27e4ffcc71830e594aa5a2529ce5dd3dee1a12b6)] - βž• Add PersistentEntity Database Library [[f16ceb7](https://github.com/TheHeadmaster/Quartz/commit/f16ceb7bde0954c33f627831c16f6c87ba151b88)] - βž• Add FluentAssertions Testing Library [[f42ffa1](https://github.com/TheHeadmaster/Quartz/commit/f42ffa1550bf1ba14d7b1ac9ecfacba9a8ca3830)] - βž• Add XBehave Testing Library [[6ca9c8b](https://github.com/TheHeadmaster/Quartz/commit/6ca9c8b305edfdb966823104807d9d540038e962)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 4dc1755..8927452 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.22 - 1.2.1.22 + 1.2.1.23 + 1.2.1.23 8.0 diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 27677be..998d7bf 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.6 - 1.2.1.6 + 1.2.1.7 + 1.2.1.7 Quartz.ico 8.0 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 764eb64..bcb0822 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.23 - 1.2.1.23 + 1.2.1.24 + 1.2.1.24 8.0 diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 63de18e..a77bc71 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,9 @@ false - 1.2.1.6 + 1.2.1.7 - 1.2.1.6 + 1.2.1.7 true 8.0 From e85e3f8ae401c829ceffe325f5a45e20ee4f6da3 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 17:33:31 -0500 Subject: [PATCH 30/65] :refactor: Move Logs output directory from Program Files to AppData --- Quartz.Core/Diagnostics/LogManager.cs | 6 +++--- Quartz.IDE/App.xaml.cs | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Quartz.Core/Diagnostics/LogManager.cs b/Quartz.Core/Diagnostics/LogManager.cs index 9058db6..a91bbd7 100644 --- a/Quartz.Core/Diagnostics/LogManager.cs +++ b/Quartz.Core/Diagnostics/LogManager.cs @@ -49,11 +49,11 @@ public static void Initialize() { DateTime dt = DateTime.UtcNow; string filename = $"{dt.Month}-{dt.Day}-{dt.Year} {dt.Hour}-{dt.Minute}-{dt.Second}"; - logPath = Path.Combine(AppMeta.AssemblyDirectory, "Logs", $"{filename}.json"); + logPath = Path.Combine(AppMeta.AppDataDirectory, "Logs", $"{filename}.json"); } - if (!Directory.Exists(Path.Combine(AppMeta.AssemblyDirectory, "Logs"))) + if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "Logs"))) { - Directory.CreateDirectory(Path.Combine(AppMeta.AssemblyDirectory, "Logs")); + Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "Logs")); } Log.Logger = new LoggerConfiguration() diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index 903c77e..9bab37b 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Configuration; using System.Data; +using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; @@ -66,13 +67,25 @@ private static void EnterProgram() Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); - Metadata = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); - Metadata.Save(); - Preferences.Load(); - new MainWindow().Show(); } + /// + /// Loads the Preferences from disk or creates default preferences if none exists. + /// + [Log("Initializing Preferences...")] + private static void InitializePreferences() + { + if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "metadata.json"))) + { + Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "metadata.json")); + } + + Preferences = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); + Preferences.Save(); + Preferences.Load(); + } + /// /// Initializes the logging manager and logs the welcome messages. /// From 7dc0c43e3ca19f4d4997224a42cef9cc6ac9c099 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 17:33:31 -0500 Subject: [PATCH 31/65] :recycle: Move Logs output directory from Program Files to AppData --- Quartz.Core/Diagnostics/LogManager.cs | 6 +++--- Quartz.IDE/App.xaml.cs | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Quartz.Core/Diagnostics/LogManager.cs b/Quartz.Core/Diagnostics/LogManager.cs index 9058db6..a91bbd7 100644 --- a/Quartz.Core/Diagnostics/LogManager.cs +++ b/Quartz.Core/Diagnostics/LogManager.cs @@ -49,11 +49,11 @@ public static void Initialize() { DateTime dt = DateTime.UtcNow; string filename = $"{dt.Month}-{dt.Day}-{dt.Year} {dt.Hour}-{dt.Minute}-{dt.Second}"; - logPath = Path.Combine(AppMeta.AssemblyDirectory, "Logs", $"{filename}.json"); + logPath = Path.Combine(AppMeta.AppDataDirectory, "Logs", $"{filename}.json"); } - if (!Directory.Exists(Path.Combine(AppMeta.AssemblyDirectory, "Logs"))) + if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "Logs"))) { - Directory.CreateDirectory(Path.Combine(AppMeta.AssemblyDirectory, "Logs")); + Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "Logs")); } Log.Logger = new LoggerConfiguration() diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index 903c77e..9bab37b 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Configuration; using System.Data; +using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; @@ -66,13 +67,25 @@ private static void EnterProgram() Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); - Metadata = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); - Metadata.Save(); - Preferences.Load(); - new MainWindow().Show(); } + /// + /// Loads the Preferences from disk or creates default preferences if none exists. + /// + [Log("Initializing Preferences...")] + private static void InitializePreferences() + { + if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "metadata.json"))) + { + Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "metadata.json")); + } + + Preferences = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); + Preferences.Save(); + Preferences.Load(); + } + /// /// Initializes the logging manager and logs the welcome messages. /// From 609d511f626c70ab2d7946ff75e4dfb2961d09ca Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 17:35:12 -0500 Subject: [PATCH 32/65] :recycle: Preferences now save to the user's AppData directory instead of directly inside the Program Files folder --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.Engine/Quartz.Engine.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- Quartz.Testing/Quartz.Testing.csproj | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d0cd81..6c660ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Optimization +- ♻️ Move Logs output directory from Program Files to AppData [[7dc0c43](https://github.com/TheHeadmaster/Quartz/commit/7dc0c43e3ca19f4d4997224a42cef9cc6ac9c099)] - ♻️ Common functionality between Quartz.IDE and Quartz.Engine moved to Quartz.Core [[be3afff](https://github.com/TheHeadmaster/Quartz/commit/be3afff9a840c2c8663ab2039691c4674fd83e95)] ### Breaking and Major Changes diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 8927452..083defc 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.23 - 1.2.1.23 + 1.2.1.24 + 1.2.1.24 8.0 diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 998d7bf..fedc355 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.7 - 1.2.1.7 + 1.2.1.8 + 1.2.1.8 Quartz.ico 8.0 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index bcb0822..e38a9bb 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.24 - 1.2.1.24 + 1.2.1.25 + 1.2.1.25 8.0 diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index a77bc71..c56cdc0 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,9 @@ false - 1.2.1.7 + 1.2.1.8 - 1.2.1.7 + 1.2.1.8 true 8.0 From 69f7e031df2d2e90c584ce510abbbd96549cc7f2 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 19:47:58 -0500 Subject: [PATCH 33/65] :recycle: Remove and refactor a metric shit-ton of boilerplate code --- CHANGELOG.md | 1 + Quartz.Core/Quartz.Core.csproj | 5 +- Quartz.Engine/Quartz.Engine.csproj | 4 +- Quartz.IDE/App.xaml.cs | 8 +- Quartz.IDE/Json/PreferencesFile.cs | 42 ++++++++ Quartz.IDE/Json/ProjectFile.cs | 44 +++++++++ Quartz.IDE/Meta.cs | 1 + Quartz.IDE/ObjectModel/Preferences.cs | 87 +++++++++++++++++ Quartz.IDE/ObjectModel/Project.cs | 39 ++++++++ Quartz.IDE/Quartz.IDE.csproj | 5 +- Quartz.IDE/RecentItem.cs | 34 +++++++ Quartz.IDE/UpdateManager.cs | 134 ++++++++++++++++++++++++++ Quartz.Testing/Quartz.Testing.csproj | 5 +- 13 files changed, 398 insertions(+), 11 deletions(-) create mode 100644 Quartz.IDE/Json/PreferencesFile.cs create mode 100644 Quartz.IDE/Json/ProjectFile.cs create mode 100644 Quartz.IDE/ObjectModel/Preferences.cs create mode 100644 Quartz.IDE/ObjectModel/Project.cs create mode 100644 Quartz.IDE/RecentItem.cs create mode 100644 Quartz.IDE/UpdateManager.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c660ee..9763bfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Optimization +- ♻️ Preferences now save to the user's AppData directory instead of directly inside the Program Files folder [[609d511](https://github.com/TheHeadmaster/Quartz/commit/609d511f626c70ab2d7946ff75e4dfb2961d09ca)] - ♻️ Move Logs output directory from Program Files to AppData [[7dc0c43](https://github.com/TheHeadmaster/Quartz/commit/7dc0c43e3ca19f4d4997224a42cef9cc6ac9c099)] - ♻️ Common functionality between Quartz.IDE and Quartz.Engine moved to Quartz.Core [[be3afff](https://github.com/TheHeadmaster/Quartz/commit/be3afff9a840c2c8663ab2039691c4674fd83e95)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 083defc..1a9990e 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.24 - 1.2.1.24 + 1.2.1.25 + 1.2.1.25 8.0 @@ -12,6 +12,7 @@ + all diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index fedc355..9b9d0af 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.8 - 1.2.1.8 + 1.2.1.9 + 1.2.1.9 Quartz.ico 8.0 diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index 9bab37b..d840c70 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -10,6 +10,8 @@ using Librarium.Core; using Librarium.Json; using Quartz.Core.Diagnostics; +using Quartz.IDE.Json; +using Quartz.IDE.ObjectModel; using ReactiveUI; using Serilog; using Splat; @@ -76,12 +78,12 @@ private static void EnterProgram() [Log("Initializing Preferences...")] private static void InitializePreferences() { - if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "metadata.json"))) + if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "preferences.json"))) { - Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "metadata.json")); + Directory.CreateDirectory(Path.Combine(AppMeta.AppDataDirectory, "preferences.json")); } - Preferences = JFile.Load(Metadata.AppDataDirectory, "metadata.json").CreateModel(); + Preferences = JFile.Load(Metadata.AppDataDirectory, "preferences.json").CreateModel(); Preferences.Save(); Preferences.Load(); } diff --git a/Quartz.IDE/Json/PreferencesFile.cs b/Quartz.IDE/Json/PreferencesFile.cs new file mode 100644 index 0000000..9167653 --- /dev/null +++ b/Quartz.IDE/Json/PreferencesFile.cs @@ -0,0 +1,42 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using DynamicData; +using Librarium.Json; +using Quartz.IDE.ObjectModel; + +namespace Quartz.IDE.Json +{ + public class PreferencesFile : JFile, IFileToModel + { + public bool OpenLastProjectOnStartup { get; set; } + + public bool PreferMetric { get; set; } + + public List RecentlyOpenedProjects { get; set; } = new List(); + + public Preferences CreateModel() + { + Preferences preferences = new Preferences + { + OpenLastProjectOnStartup = this.OpenLastProjectOnStartup, + RecentlyOpenedProjects = new SourceCache(x => x.Path), + FilePath = this.FilePath, + FileName = this.FileName, + PreferMetric = this.PreferMetric, + }; + preferences.RecentlyOpenedProjects.AddOrUpdate(this.RecentlyOpenedProjects); + return preferences; + } + + public void PopulateFile(Preferences model) + { + this.OpenLastProjectOnStartup = model.OpenLastProjectOnStartup; + this.RecentlyOpenedProjects = model.RecentlyOpenedProjects.Items.ToList(); + this.FilePath = model.FilePath; + this.FileName = model.FileName; + this.PreferMetric = model.PreferMetric; + } + } +} \ No newline at end of file diff --git a/Quartz.IDE/Json/ProjectFile.cs b/Quartz.IDE/Json/ProjectFile.cs new file mode 100644 index 0000000..e047e6d --- /dev/null +++ b/Quartz.IDE/Json/ProjectFile.cs @@ -0,0 +1,44 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Text; +using Librarium.Json; +using Quartz.IDE.ObjectModel; + +namespace Quartz.IDE.Json +{ + /// + /// Represents a Quartz project file on disk. + /// + public class ProjectFile : JFile, IFileToModel + { + public string Name { get; set; } + + public string Version { get; set; } + + public Project CreateModel() => throw new NotImplementedException(); + + public void PopulateFile(Project model) => throw new NotImplementedException(); + + //public Project CreateModel() + //{ + // //System.Version.TryParse(this.Version, out Version version); + // //Project project = new Project() + // //{ + // // Name = this.Name, + // // FileName = this.FileName, + // // FilePath = this.FilePath, + // // Version = version, + // //}; + // //project.IsSaved = true; + // //return project; + //} + // + //public void PopulateFile(Project model) + //{ + // //this.Name = model.Name; + // //this.FileName = model.FileName; + // //this.FilePath = model.FilePath; + // //this.Version = model.Version?.ToString() ?? null; + //} + } +} \ No newline at end of file diff --git a/Quartz.IDE/Meta.cs b/Quartz.IDE/Meta.cs index 6d70a21..a5b62be 100644 --- a/Quartz.IDE/Meta.cs +++ b/Quartz.IDE/Meta.cs @@ -4,6 +4,7 @@ using System.Reflection; using System.Text; using Librarium.Core; +using Quartz.IDE.ObjectModel; using ReactiveUI; using ReactiveUI.Fody.Helpers; diff --git a/Quartz.IDE/ObjectModel/Preferences.cs b/Quartz.IDE/ObjectModel/Preferences.cs new file mode 100644 index 0000000..5e5c1c5 --- /dev/null +++ b/Quartz.IDE/ObjectModel/Preferences.cs @@ -0,0 +1,87 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Text; +using Librarium.Json; +using ReactiveUI; +using DynamicData; +using System.Windows; +using System.Linq; +using Quartz.IDE.Json; + +namespace Quartz.IDE.ObjectModel +{ + /// + /// Houses the options defined by the user. + /// + public class Preferences : ReactiveObject, IModelToFile + { + /// + /// Gets or sets the name of the json file saved to disk. + /// + public string FileName { get; set; } + + /// + /// Gets or sets the path of the json file saved to disk. + /// + public string FilePath { get; set; } + + /// + /// Gets or sets whether to automatically open the most recently opened project when the + /// program starts. + /// + public bool OpenLastProjectOnStartup { get; set; } = false; + + /// + /// Gets or sets whether to use the Metric system or the Imperial system for measurements. + /// + public bool PreferMetric { get; set; } + + /// + /// Gets a list of most recently opened projects. The list will keep no more than 10 + /// recently opened projects. + /// + public SourceCache RecentlyOpenedProjects { get; } = new SourceCache(x => x.Path); + + public Preferences() + { + this.RecentlyOpenedProjects.LimitSizeTo(10); + } + + /// + /// Loads Preferences from disk. + /// + public static void Load() + { + RecentItem firstItem = App.Preferences.RecentlyOpenedProjects.Items.FirstOrDefault(); + if (App.Preferences.OpenLastProjectOnStartup && firstItem is { }) + { + ProjectFile projectFile = JFile.Load(firstItem.Path, "Project.json"); + if (projectFile.Version is null) + { + Xceed.Wpf.Toolkit.MessageBox.Show($"This project file was made using 1.1, and is not compatible with the current release ({App.Metadata.Version}). Your project will not be harmed, but if you want to open it, you will have to revert back to 1.1.", "Incompatible Project", MessageBoxButton.OK); + } + else + { + App.Metadata.CurrentProject = projectFile.CreateModel(); + + App.Metadata.CurrentProject.Load(); + } + } + } + + /// + /// Gets a memberwise copy of the object. + /// + public Preferences GetCopy() => (Preferences)this.MemberwiseClone(); + + /// + /// Saves the to disk. + /// + public void Save() + { + PreferencesFile file = new PreferencesFile(); + file.PopulateFile(this); + file.Save(); + } + } +} \ No newline at end of file diff --git a/Quartz.IDE/ObjectModel/Project.cs b/Quartz.IDE/ObjectModel/Project.cs new file mode 100644 index 0000000..261be79 --- /dev/null +++ b/Quartz.IDE/ObjectModel/Project.cs @@ -0,0 +1,39 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Text; +using Librarium.Json; + +namespace Quartz.IDE.ObjectModel +{ + /// + /// Represents a Quartz project. + /// + public class Project : IModelToFile + { + /// + /// The filename of the project file on disk. + /// + public string FileName { get; set; } + + /// + /// The path to the project file on disk. + /// + public string FilePath { get; set; } + + /// + /// The name of the project. + /// + public string Name { get; set; } + + /// + /// The version of Quartz that the project was made with. + /// + public Version Version { get; set; } + + public void Load() + { + } + + public void Save() => throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index e38a9bb..c5561ed 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.25 - 1.2.1.25 + 1.2.1.26 + 1.2.1.26 8.0 @@ -18,6 +18,7 @@ + all diff --git a/Quartz.IDE/RecentItem.cs b/Quartz.IDE/RecentItem.cs new file mode 100644 index 0000000..1b79f77 --- /dev/null +++ b/Quartz.IDE/RecentItem.cs @@ -0,0 +1,34 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Text; + +namespace Quartz.IDE +{ + /// + /// Represents a recently loaded project. + /// + public class RecentItem + { + /// + /// The name of the project. + /// + public string Name { get; } + + /// + /// The path to the project file. + /// + public string Path { get; } + + /// + /// The date the project was last accessed. + /// + public DateTime Timestamp { get; } + + public RecentItem(string name, string path, DateTime timestamp) + { + this.Name = name; + this.Path = path; + this.Timestamp = timestamp; + } + } +} \ No newline at end of file diff --git a/Quartz.IDE/UpdateManager.cs b/Quartz.IDE/UpdateManager.cs new file mode 100644 index 0000000..e095a22 --- /dev/null +++ b/Quartz.IDE/UpdateManager.cs @@ -0,0 +1,134 @@ +ο»Ώusing System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Text; +using System.Windows; +using Librarium.Core; +using Octokit; + +namespace Quartz.IDE +{ + public static class UpdateManager + { + /// + /// The title of the application. + /// + private const string applicationTitle = "Quartz"; + + /// + /// The name of the Github repository to pull updates from. + /// + private const string repositoryName = "Quartz"; + + /// + /// The owner of the Github repository to pull updates from. + /// + private const string repositoryOwner = "TheHeadmaster"; + + /// + /// The name of the update file to download. + /// + private const string updateFilename = "Quartz.Installer.msi"; + + /// + /// The Github client that connects to the repository. + /// + private static GitHubClient Client { get; set; } + + /// + /// The url that points to the most recent release version in the Github repository. + /// + private static string UpdateUrl { get; } = $"https://github.com/{repositoryOwner}/{repositoryName}/releases/download"; + + /// + /// Prompts the user for permission to update the software. + /// + /// + /// + /// + /// + private static bool GetPermissionToUpdate(string updateName) + { + MessageBoxResult messageBoxResult = Xceed.Wpf.Toolkit.MessageBox.Show("A new version of Quartz IDE (" + updateName + ") is available. Do you wish to install it?", "Quartz IDE Update", MessageBoxButton.YesNo); + if (messageBoxResult == MessageBoxResult.Yes && App.Metadata.CurrentProject is { }) + { + messageBoxResult = Xceed.Wpf.Toolkit.MessageBox.Show("Quartz IDE will need to close during the updating procedure. Press \"Yes\" to save your work and continue, or \"No\" to cancel.", "Quartz IDE Update", MessageBoxButton.YesNo); + } + + return messageBoxResult == MessageBoxResult.Yes; + } + + /// + /// Determines if the current version of the program needs an update. + /// + /// + /// The version to check against. + /// + private static bool NeedsUpdate(string[] version) => + AppMeta.CurrentVersion.Major < Convert.ToInt32(version[0]) + || (AppMeta.CurrentVersion.Major == Convert.ToInt32(version[0]) + && AppMeta.CurrentVersion.Minor < Convert.ToInt32(version[1])) + || (AppMeta.CurrentVersion.Major == Convert.ToInt32(version[0]) + && AppMeta.CurrentVersion.Minor == Convert.ToInt32(version[1]) + && AppMeta.CurrentVersion.Build < Convert.ToInt32(version[2])); + + /// + /// Checks to see if there are any available updates for the current running version of + /// Quartz IDE. + /// + /// + /// + public static void CheckForUpdates(bool silentMode) + { + try + { + Release release = Client.Repository.Release.GetAll("TheHeadmaster", "Quartz").Result[0]; + string[] version = release.TagName.Split('.', '-'); + version[0] = version[0].Replace("v", string.Empty); + if (NeedsUpdate(version)) + { + if (!GetPermissionToUpdate(release.TagName)) { return; } + + string address = $"{UpdateUrl}/{release.TagName}/{updateFilename}"; + string fileName = Path.Combine(Path.GetTempPath(), updateFilename); + using (WebClient webClient = new WebClient()) + { + webClient.DownloadFile(address, fileName); + } + + new Process() + { + StartInfo = new ProcessStartInfo() + { + Arguments = "/i " + fileName, + FileName = "msiexec" + } + }.Start(); + App.Current.Shutdown(); + } + else if (!silentMode) + { + Xceed.Wpf.Toolkit.MessageBox.Show("Quartz IDE is already at the latest version.", "Quartz IDE Up to Date", MessageBoxButton.OK); + } + } + catch (Exception) + { + if (!silentMode) + { + Xceed.Wpf.Toolkit.MessageBox.Show($"Something went wrong. Check your internet connection. If the problem persists, please open an issue at https://github/{repositoryOwner}/{repositoryName}/issues.", "Quartz IDE", MessageBoxButton.OK); + } + } + } + + /// + /// Initializes the update manager. + /// + public static void Initialize() + { + UpdateManager.Client = new GitHubClient(new ProductHeaderValue(applicationTitle, AppMeta.CurrentVersion.ToString())); + UpdateManager.CheckForUpdates(true); + } + } +} \ No newline at end of file diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index c56cdc0..19f1b91 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,15 +5,16 @@ false - 1.2.1.8 + 1.2.1.9 - 1.2.1.8 + 1.2.1.9 true 8.0 + From 764803cd13508fdbf1c89a5ae1b9419eb5228a5c Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 19:49:34 -0500 Subject: [PATCH 34/65] :boom: Project files are now in Database format instead of Json file format --- CHANGELOG.md | 3 ++- Quartz.Core/Quartz.Core.csproj | 4 ++-- Quartz.Engine/Quartz.Engine.csproj | 4 ++-- Quartz.IDE/Quartz.IDE.csproj | 4 ++-- Quartz.Testing/Quartz.Testing.csproj | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9763bfc..956679c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,11 @@ # Changelog -## 1.2.1-alpha (2020-09-21) +## 1.2.1-alpha (2020-09-22) ### Optimization +- ♻️ Remove and refactor a metric shit-ton of boilerplate code [[69f7e03](https://github.com/TheHeadmaster/Quartz/commit/69f7e031df2d2e90c584ce510abbbd96549cc7f2)] - ♻️ Preferences now save to the user's AppData directory instead of directly inside the Program Files folder [[609d511](https://github.com/TheHeadmaster/Quartz/commit/609d511f626c70ab2d7946ff75e4dfb2961d09ca)] - ♻️ Move Logs output directory from Program Files to AppData [[7dc0c43](https://github.com/TheHeadmaster/Quartz/commit/7dc0c43e3ca19f4d4997224a42cef9cc6ac9c099)] - ♻️ Common functionality between Quartz.IDE and Quartz.Engine moved to Quartz.Core [[be3afff](https://github.com/TheHeadmaster/Quartz/commit/be3afff9a840c2c8663ab2039691c4674fd83e95)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 1a9990e..11b60b0 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.25 - 1.2.1.25 + 1.2.1.26 + 1.2.1.26 8.0 diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 9b9d0af..4d75698 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,8 +5,8 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.9 - 1.2.1.9 + 1.2.1.10 + 1.2.1.10 Quartz.ico 8.0 diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index c5561ed..e2a53a7 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,8 +4,8 @@ WinExe netcoreapp3.1 true - 1.2.1.26 - 1.2.1.26 + 1.2.1.27 + 1.2.1.27 8.0 diff --git a/Quartz.Testing/Quartz.Testing.csproj b/Quartz.Testing/Quartz.Testing.csproj index 19f1b91..d135e84 100644 --- a/Quartz.Testing/Quartz.Testing.csproj +++ b/Quartz.Testing/Quartz.Testing.csproj @@ -5,9 +5,9 @@ false - 1.2.1.9 + 1.2.1.10 - 1.2.1.9 + 1.2.1.10 true 8.0 From 29d06f678ec5271a88c9d211a69012e517b58c76 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 22:28:19 -0500 Subject: [PATCH 35/65] :heavy_plus_sign: Add Microsoft.Build Compiler Library --- CHANGELOG.md | 1 + Quartz.IDE/App.xaml.cs | 4 +- Quartz.IDE/Commands/CompileAndRunCommand.cs | 27 ++++++++ Quartz.IDE/ObjectModel/Preferences.cs | 10 ++- Quartz.IDE/Quartz.IDE.csproj | 17 ++++- Quartz.IDE/Resources/Images/Quartz.ico | Bin 0 -> 121442 bytes Quartz.IDE/Resources/Images/Quartz.png | Bin 0 -> 31121 bytes Quartz.IDE/app.manifest | 73 ++++++++++++++++++++ 8 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 Quartz.IDE/Commands/CompileAndRunCommand.cs create mode 100644 Quartz.IDE/Resources/Images/Quartz.ico create mode 100644 Quartz.IDE/Resources/Images/Quartz.png create mode 100644 Quartz.IDE/app.manifest diff --git a/CHANGELOG.md b/CHANGELOG.md index 956679c..ea255c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### Breaking and Major Changes +- πŸ’₯ Project files are now in Database format instead of Json file format [[764803c](https://github.com/TheHeadmaster/Quartz/commit/764803cd13508fdbf1c89a5ae1b9419eb5228a5c)] - πŸ’₯ Previous projects are now incompatible moving forward, starting with 1.2.1 [[6fafdf3](https://github.com/TheHeadmaster/Quartz/commit/6fafdf35d357ef65683dd6c16e97b9a1e112430d)] - πŸ—οΈ Add Quartz.Testing Unit Test Project [[7f867f4](https://github.com/TheHeadmaster/Quartz/commit/7f867f47734ee21e6db395c950ce515f0f5eff9e)] - πŸ—οΈ Add Quartz.Engine Library [[e764051](https://github.com/TheHeadmaster/Quartz/commit/e764051cf313a714ae3cac8cbd2672f128e4cb04)] diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index d840c70..c4a4706 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -62,7 +62,7 @@ private void AppStartup(object sender, StartupEventArgs args) /// /// Enters the program. /// - [Log("Starting...", "S")] + [Log("Starting...", "Quartz is now running.", "An unhandled exception has occurred.")] private static void EnterProgram() { UpdateManager.Initialize(); @@ -75,7 +75,7 @@ private static void EnterProgram() /// /// Loads the Preferences from disk or creates default preferences if none exists. /// - [Log("Initializing Preferences...")] + [Log("Initializing Preferences...", "Preferences initialization complete.")] private static void InitializePreferences() { if (!Directory.Exists(Path.Combine(AppMeta.AppDataDirectory, "preferences.json"))) diff --git a/Quartz.IDE/Commands/CompileAndRunCommand.cs b/Quartz.IDE/Commands/CompileAndRunCommand.cs new file mode 100644 index 0000000..1065d5b --- /dev/null +++ b/Quartz.IDE/Commands/CompileAndRunCommand.cs @@ -0,0 +1,27 @@ +ο»Ώusing System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Input; +using Librarium.Commands; +using Microsoft.CSharp; + +namespace Quartz.IDE.Commands +{ + /// + /// Compiles the project from source and runs a debugger-attached instance of the compiled game. + /// + public class CompileAndRunCommand : RelayCommand + { + public static ICommand Instance { get; } = new CompileAndRunCommand(); + + public override bool CanExecute(object parameter) => true; + + public override void Execute(object parameter) + { + CSharpCodeProvider codeProvider = new CSharpCodeProvider(); + ICodeCompiler codeCompiler = CodeDomProvider.CreateProvider() + } + } +} \ No newline at end of file diff --git a/Quartz.IDE/ObjectModel/Preferences.cs b/Quartz.IDE/ObjectModel/Preferences.cs index 5e5c1c5..2de446d 100644 --- a/Quartz.IDE/ObjectModel/Preferences.cs +++ b/Quartz.IDE/ObjectModel/Preferences.cs @@ -7,6 +7,7 @@ using System.Windows; using System.Linq; using Quartz.IDE.Json; +using ReactiveUI.Fody.Helpers; namespace Quartz.IDE.ObjectModel { @@ -40,11 +41,16 @@ public class Preferences : ReactiveObject, IModelToFile /// Gets a list of most recently opened projects. The list will keep no more than 10 /// recently opened projects. /// - public SourceCache RecentlyOpenedProjects { get; } = new SourceCache(x => x.Path); + [Reactive] + public SourceCache RecentlyOpenedProjects { get; set; } = new SourceCache(x => x.Path); public Preferences() { - this.RecentlyOpenedProjects.LimitSizeTo(10); + this.WhenAnyValue(x => x.RecentlyOpenedProjects) + .Subscribe(x => + { + this.RecentlyOpenedProjects.LimitSizeTo(10); + }); } /// diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index e2a53a7..5a58468 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -4,13 +4,16 @@ WinExe netcoreapp3.1 true - 1.2.1.27 - 1.2.1.27 + 1.2.1.29 + 1.2.1.29 8.0 + Resources\Images\Quartz.ico + + @@ -29,6 +32,7 @@ + @@ -52,4 +56,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Quartz.IDE/Resources/Images/Quartz.ico b/Quartz.IDE/Resources/Images/Quartz.ico new file mode 100644 index 0000000000000000000000000000000000000000..ec8289a1cd04226f20c9572267e417b9ebc91cda GIT binary patch literal 121442 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 KMz~rAv?oK@Ci6 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 z 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7c724592a0fe3cd0a6c886e1f125c7a4cefb1d56 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 22:29:41 -0500 Subject: [PATCH 36/65] :heavy_plus_sign: Add Microsoft.Build.Engine Compiler Library --- Quartz.IDE/Quartz.IDE.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 5a58468..b6af8ec 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -33,6 +33,7 @@ + From 918f3686fdfb87e4e97e19cf554b030f2acfd1a4 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 22:29:41 -0500 Subject: [PATCH 37/65] Revert add Microsoft.Build.Engine Compiler Library --- Quartz.IDE/Quartz.IDE.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index 5a58468..b6af8ec 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -33,6 +33,7 @@ + From 51efa8993dbe3b1bef5f22f96939f82c312956ba Mon Sep 17 00:00:00 2001 From: David Palmer Date: Mon, 21 Sep 2020 22:34:11 -0500 Subject: [PATCH 38/65] :heavy_plus_sign: Add Microsoft.Build.Runtime Compiler Library --- Quartz.IDE/Quartz.IDE.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Quartz.IDE/Quartz.IDE.csproj b/Quartz.IDE/Quartz.IDE.csproj index b6af8ec..b1fb76b 100644 --- a/Quartz.IDE/Quartz.IDE.csproj +++ b/Quartz.IDE/Quartz.IDE.csproj @@ -33,7 +33,7 @@ - + From 376c4732c627cbcde6ed34c6957cdbca92411f49 Mon Sep 17 00:00:00 2001 From: David Palmer Date: Tue, 22 Sep 2020 11:17:38 -0500 Subject: [PATCH 39/65] :heavy_plus_sign: Add Microsoft.Build.Framework Compiler Library --- CHANGELOG.md | 3 ++ Quartz.Core/Quartz.Core.csproj | 4 +- Quartz.Engine/Quartz.Engine.csproj | 7 +-- Quartz.IDE/App.xaml.cs | 8 +++- Quartz.IDE/Commands/CompileAndRunCommand.cs | 51 ++++++++++++++++++++- Quartz.IDE/MainWindow.xaml | 5 +- Quartz.IDE/Quartz.IDE.csproj | 22 +++++++-- Quartz.Testing/Quartz.Testing.csproj | 4 +- 8 files changed, 86 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea255c6..f6dbd1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ ### Dependency Changes +- βž• Add Microsoft.Build.Runtime Compiler Library [[51efa89](https://github.com/TheHeadmaster/Quartz/commit/51efa8993dbe3b1bef5f22f96939f82c312956ba)] +- βž• Add Microsoft.Build.Engine Compiler Library [[7c72459](https://github.com/TheHeadmaster/Quartz/commit/7c724592a0fe3cd0a6c886e1f125c7a4cefb1d56)] +- βž• Add Microsoft.Build Compiler Library [[29d06f6](https://github.com/TheHeadmaster/Quartz/commit/29d06f678ec5271a88c9d211a69012e517b58c76)] - ⬆️ Update Librarium 1.0.2 ➑️ 1.0.3 [[27e4ffc](https://github.com/TheHeadmaster/Quartz/commit/27e4ffcc71830e594aa5a2529ce5dd3dee1a12b6)] - βž• Add PersistentEntity Database Library [[f16ceb7](https://github.com/TheHeadmaster/Quartz/commit/f16ceb7bde0954c33f627831c16f6c87ba151b88)] - βž• Add FluentAssertions Testing Library [[f42ffa1](https://github.com/TheHeadmaster/Quartz/commit/f42ffa1550bf1ba14d7b1ac9ecfacba9a8ca3830)] diff --git a/Quartz.Core/Quartz.Core.csproj b/Quartz.Core/Quartz.Core.csproj index 11b60b0..7cd3d27 100644 --- a/Quartz.Core/Quartz.Core.csproj +++ b/Quartz.Core/Quartz.Core.csproj @@ -2,8 +2,8 @@ netcoreapp3.1 - 1.2.1.26 - 1.2.1.26 + 1.2.1.28 + 1.2.1.28 8.0 diff --git a/Quartz.Engine/Quartz.Engine.csproj b/Quartz.Engine/Quartz.Engine.csproj index 4d75698..474c136 100644 --- a/Quartz.Engine/Quartz.Engine.csproj +++ b/Quartz.Engine/Quartz.Engine.csproj @@ -5,12 +5,12 @@ WinExe netcoreapp3.1 DesktopGL - 1.2.1.10 - 1.2.1.10 + 1.2.1.13 + 1.2.1.13 Quartz.ico 8.0 - + 1701;1702;NU1701 @@ -42,6 +42,7 @@ + all diff --git a/Quartz.IDE/App.xaml.cs b/Quartz.IDE/App.xaml.cs index c4a4706..702460d 100644 --- a/Quartz.IDE/App.xaml.cs +++ b/Quartz.IDE/App.xaml.cs @@ -9,6 +9,7 @@ using System.Windows; using Librarium.Core; using Librarium.Json; +using Microsoft.Build.Locator; using Quartz.Core.Diagnostics; using Quartz.IDE.Json; using Quartz.IDE.ObjectModel; @@ -67,6 +68,8 @@ private static void EnterProgram() { UpdateManager.Initialize(); + MSBuildLocator.RegisterDefaults(); + Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); new MainWindow().Show(); @@ -106,10 +109,11 @@ private static void InitializeLogging() ///

/// Defines the flag that determines whether or not the program is running in debug mode. /// - private static void DefineDebugFlag() => + private static void DefineDebugFlag() + { #if DEBUG Metadata.IsDebug = true; - #endif + } } } \ No newline at end of file diff --git a/Quartz.IDE/Commands/CompileAndRunCommand.cs b/Quartz.IDE/Commands/CompileAndRunCommand.cs index 1065d5b..b33494e 100644 --- a/Quartz.IDE/Commands/CompileAndRunCommand.cs +++ b/Quartz.IDE/Commands/CompileAndRunCommand.cs @@ -5,7 +5,14 @@ using System.Windows; using System.Windows.Input; using Librarium.Commands; +using Microsoft.Build.Evaluation; +using Microsoft.Build.Execution; +using Microsoft.Build.Framework; +using Microsoft.Build.Locator; +using Microsoft.Build.Logging; using Microsoft.CSharp; +using Quartz.Core.Diagnostics; +using Serilog; namespace Quartz.IDE.Commands { @@ -16,12 +23,52 @@ public class CompileAndRunCommand : RelayCommand { public static ICommand Instance { get; } = new CompileAndRunCommand(); + public static BuildResult RunMsBuild(string projectFile, string target, IDictionary properties) + { + BuildParameters parameters = new BuildParameters(new ProjectCollection()) + { + Loggers = new Microsoft.Build.Framework.ILogger[] { new BuildLogger() } + }; + return BuildManager.DefaultBuildManager.Build( + parameters, + new BuildRequestData(projectFile, properties, null, new[] { target }, null)); + } + public override bool CanExecute(object parameter) => true; public override void Execute(object parameter) { - CSharpCodeProvider codeProvider = new CSharpCodeProvider(); - ICodeCompiler codeCompiler = CodeDomProvider.CreateProvider() + string projectDirectory = @"C:\users\david\Dropbox\Development\Visual Studio\Quartz\Quartz.Engine"; + IDictionary properties = new Dictionary + { + { "Configuration", "Release" } + }; + BuildResult result = RunMsBuild($@"{projectDirectory}\Quartz.Engine.csproj", "Build", properties); + } + + public class BuildLogger : Microsoft.Build.Framework.ILogger + { + public string Parameters { get; set; } + + public LoggerVerbosity Verbosity { get; set; } + + private void EventSource_ErrorRaised(object sender, BuildErrorEventArgs e) + { + Log.Error(e.Message); + } + + private void EventSource_MessageRaised(object sender, BuildMessageEventArgs e) + { + Log.Information(e.Message); + } + + public void Initialize(IEventSource eventSource) + { + eventSource.MessageRaised += this.EventSource_MessageRaised; + eventSource.ErrorRaised += this.EventSource_ErrorRaised; + } + + public void Shutdown() { } } } } \ No newline at end of file diff --git a/Quartz.IDE/MainWindow.xaml b/Quartz.IDE/MainWindow.xaml index a4f5988..864c260 100644 --- a/Quartz.IDE/MainWindow.xaml +++ b/Quartz.IDE/MainWindow.xaml @@ -4,9 +4,10 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Quartz.IDE" + xmlns:commands="clr-namespace:Quartz.IDE.Commands" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> - +