diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index ef68ed7..b7060f1 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -16,7 +16,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
- dotnet-version: 5.0.x
+ dotnet-version: 7.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
diff --git a/SynoAI.Tests/SynoAI.Tests.csproj b/SynoAI.Tests/SynoAI.Tests.csproj
index 4e0ecdf..d6b4d64 100644
--- a/SynoAI.Tests/SynoAI.Tests.csproj
+++ b/SynoAI.Tests/SynoAI.Tests.csproj
@@ -1,16 +1,40 @@
-
+
-
- net5.0
+
+ net7.0
+ latest
+ enable
+ false
+ enable
+ true
+ 6.0-recommended
+
- false
-
+
+ True
+ True
+
-
-
-
-
-
-
+
+ True
+ True
+
-
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SynoAI.Tests/UnitTest1.cs b/SynoAI.Tests/UnitTest1.cs
index 10dbd88..0d523eb 100644
--- a/SynoAI.Tests/UnitTest1.cs
+++ b/SynoAI.Tests/UnitTest1.cs
@@ -1,18 +1,6 @@
-using NUnit.Framework;
-
namespace SynoAI.Tests
{
public class Tests
{
- [SetUp]
- public void Setup()
- {
- }
-
- [Test]
- public void Test1()
- {
- Assert.Pass();
- }
}
}
\ No newline at end of file
diff --git a/SynoAI.Tests/packages.lock.json b/SynoAI.Tests/packages.lock.json
new file mode 100644
index 0000000..c40f903
--- /dev/null
+++ b/SynoAI.Tests/packages.lock.json
@@ -0,0 +1,1185 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net7.0": {
+ "coverlet.collector": {
+ "type": "Direct",
+ "requested": "[3.2.0, )",
+ "resolved": "3.2.0",
+ "contentHash": "xjY8xBigSeWIYs4I7DgUHqSNoGqnHi7Fv7/7RZD02rvZyG3hlsjnQKiVKVWKgr9kRKgmV+dEfu8KScvysiC0Wg=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.4.1, )",
+ "resolved": "17.4.1",
+ "contentHash": "kJ5/v2ad+VEg1fL8UH18nD71Eu+Fq6dM4RKBVqlV2MLSEK/AW4LUkqlk7m7G+BrxEDJVwPjxHam17nldxV80Ow==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.4.1",
+ "Microsoft.TestPlatform.TestHost": "17.4.1"
+ }
+ },
+ "xunit": {
+ "type": "Direct",
+ "requested": "[2.4.2, )",
+ "resolved": "2.4.2",
+ "contentHash": "6Mj73Ont3zj2CJuoykVJfE0ZmRwn7C+pTuRP8c4bnaaTFjwNG6tGe0prJ1yIbMe9AHrpDys63ctWacSsFJWK/w==",
+ "dependencies": {
+ "xunit.analyzers": "1.0.0",
+ "xunit.assert": "2.4.2",
+ "xunit.core": "[2.4.2]"
+ }
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[2.4.5, )",
+ "resolved": "2.4.5",
+ "contentHash": "OwHamvBdUKgqsXfBzWiCW/O98BTx81UKzx2bieIOQI7CZFE5NEQZGi8PBQGIKawDW96xeRffiNf20SjfC0x9hw=="
+ },
+ "MailKit": {
+ "type": "Transitive",
+ "resolved": "3.4.3",
+ "contentHash": "Iewef8mcE1B1LrVudxQjQ0LcriPPeTbxmWMoHQzFS+P6TpEY2eVDbdKdB0Qnbmqr/5w7WfK2mNWuoSX9pI470g==",
+ "dependencies": {
+ "MimeKit": "3.4.3"
+ }
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.4.1",
+ "contentHash": "T21KxaiFawbrrjm0uXjxAStXaBm5P9H6Nnf8BUtBTvIpd8q57lrChVBCY2dnazmSu9/kuX4z5+kAOT78Dod7vA=="
+ },
+ "Microsoft.Extensions.ApiDescription.Server": {
+ "type": "Transitive",
+ "resolved": "6.0.5",
+ "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw=="
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.NETCore.Targets": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
+ },
+ "Microsoft.OpenApi": {
+ "type": "Transitive",
+ "resolved": "1.2.3",
+ "contentHash": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.4.1",
+ "contentHash": "v2CwoejusooZa/DZYt7UXo+CJOvwAmqg6ZyFJeIBu+DCRDqpEtf7WYhZ/AWii0EKzANPPLU9+m148aipYQkTuA==",
+ "dependencies": {
+ "NuGet.Frameworks": "5.11.0",
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.4.1",
+ "contentHash": "K7QXM4P4qrDKdPs/VSEKXR08QEru7daAK8vlIbhwENM3peXJwb9QgrAbtbYyyfVnX+F1m+1hntTH6aRX+h/f8g==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.4.1",
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
+ "type": "Transitive",
+ "resolved": "1.17.0",
+ "contentHash": "gfDtAL1WhkjbRdbZlt/ZeQYCbgRpNCZCGj+yeqHObsNFRDHjq8qZJOX9AyTxJpSRYMi9SJk7JDyAbbVYRgEhAA=="
+ },
+ "Microsoft.Win32.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ=="
+ },
+ "MimeKit": {
+ "type": "Transitive",
+ "resolved": "3.4.3",
+ "contentHash": "7TSAcziEwk0bGWODpFTQASghXfYNBBa5VdM8KO4s5SBp5LYgIVXcQsdLBpPQ2XhZW74wfaX8RBUMs1GTMlLJcA==",
+ "dependencies": {
+ "Portable.BouncyCastle": "1.9.0",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Security.Cryptography.Pkcs": "6.0.0",
+ "System.Text.Encoding.CodePages": "6.0.0"
+ }
+ },
+ "MQTTnet": {
+ "type": "Transitive",
+ "resolved": "4.1.4.563",
+ "contentHash": "gO9segUcKyQJcjV7w7OOdoAIkec7cUN65vEhYutbdWcj4rbtz/oL/RDvQVVbameXc6ChkjKx7/HbO+R8ejAUZQ=="
+ },
+ "NETStandard.Library": {
+ "type": "Transitive",
+ "resolved": "1.6.1",
+ "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.Win32.Primitives": "4.3.0",
+ "System.AppContext": "4.3.0",
+ "System.Collections": "4.3.0",
+ "System.Collections.Concurrent": "4.3.0",
+ "System.Console": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tools": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Calendars": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.Compression": "4.3.0",
+ "System.IO.Compression.ZipFile": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Linq.Expressions": "4.3.0",
+ "System.Net.Http": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Net.Sockets": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Security.Cryptography.X509Certificates": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Text.Encoding.Extensions": "4.3.0",
+ "System.Text.RegularExpressions": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "System.Threading.Timer": "4.3.0",
+ "System.Xml.ReaderWriter": "4.3.0",
+ "System.Xml.XDocument": "4.3.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.2",
+ "contentHash": "R2pZ3B0UjeyHShm9vG+Tu0EBb2lC8b0dFzV9gVn50ofHXh9Smjk6kTn7A/FdAsC8B5cKib1OnGYOXxRBz5XQDg=="
+ },
+ "NuGet.Frameworks": {
+ "type": "Transitive",
+ "resolved": "5.11.0",
+ "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q=="
+ },
+ "Portable.BouncyCastle": {
+ "type": "Transitive",
+ "resolved": "1.9.0",
+ "contentHash": "eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw=="
+ },
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q=="
+ },
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA=="
+ },
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw=="
+ },
+ "runtime.native.System": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.IO.Compression": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.Net.Http": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.Security.Cryptography.Apple": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
+ "dependencies": {
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
+ }
+ },
+ "runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
+ "dependencies": {
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A=="
+ },
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ=="
+ },
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
+ },
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g=="
+ },
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg=="
+ },
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ=="
+ },
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A=="
+ },
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg=="
+ },
+ "SkiaSharp": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "GG8X3EdfwyBfwjl639UIiOVOKEdeoqDgYrz0P1MUCnefXt9cofN+AK8YB/v1+5cLMr03ieWCQdDmPqnFIzSxZw==",
+ "dependencies": {
+ "SkiaSharp.NativeAssets.Win32": "2.88.3",
+ "SkiaSharp.NativeAssets.macOS": "2.88.3"
+ }
+ },
+ "SkiaSharp.NativeAssets.Linux": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "wz29evZVWRqN7WHfenFwQIgqtr8f5vHCutcl1XuhWrHTRZeaIBk7ngjhyHpjUMcQxtIEAdq34ZRvMQshsBYjqg==",
+ "dependencies": {
+ "SkiaSharp": "2.88.3"
+ }
+ },
+ "SkiaSharp.NativeAssets.macOS": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "CEbWAXMGFkPV3S1snBKK7jEG3+xud/9kmSAhu0BEUKKtlMdxx+Qal0U9bntQREM9QpqP5xLWZooodi8IlV8MEg=="
+ },
+ "SkiaSharp.NativeAssets.Win32": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "MU4ASL8VAbTv5vSw1PoiWjjjpjtGhWtFYuJnrN4sNHFCePb2ohQij9JhSdqLLxk7RpRtWPdV93fbA53Pt+J0yw=="
+ },
+ "Swashbuckle.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==",
+ "dependencies": {
+ "Microsoft.Extensions.ApiDescription.Server": "6.0.5",
+ "Swashbuckle.AspNetCore.Swagger": "6.4.0",
+ "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0",
+ "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.Swagger": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==",
+ "dependencies": {
+ "Microsoft.OpenApi": "1.2.3"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerGen": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==",
+ "dependencies": {
+ "Swashbuckle.AspNetCore.Swagger": "6.4.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerUI": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ=="
+ },
+ "System.AppContext": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Collections": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Collections.Concurrent": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Console": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Debug": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Tools": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Tracing": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Drawing.Common": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
+ "dependencies": {
+ "Microsoft.Win32.SystemEvents": "7.0.0"
+ }
+ },
+ "System.Formats.Asn1": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA=="
+ },
+ "System.Globalization": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Globalization.Calendars": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Globalization.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0"
+ }
+ },
+ "System.IO": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.IO.Compression": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Buffers": "4.3.0",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.IO.Compression": "4.3.0"
+ }
+ },
+ "System.IO.Compression.ZipFile": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
+ "dependencies": {
+ "System.Buffers": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.Compression": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.IO.FileSystem": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.IO.FileSystem.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Linq": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0"
+ }
+ },
+ "System.Linq.Expressions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Emit.Lightweight": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Reflection.TypeExtensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Net.Http": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.DiagnosticSource": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Extensions": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.OpenSsl": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Security.Cryptography.X509Certificates": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.Net.Http": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Net.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0"
+ }
+ },
+ "System.Net.Sockets": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Reflection": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
+ "dependencies": {
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "System.Reflection.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.TypeExtensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Resources.ResourceManager": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime.Handles": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime.InteropServices": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0"
+ }
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Threading": "4.3.0",
+ "runtime.native.System": "4.3.0"
+ }
+ },
+ "System.Runtime.Numerics": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
+ "dependencies": {
+ "System.Globalization": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Algorithms": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.Apple": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Cng": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Csp": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.Collections.Concurrent": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Pkcs": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "elM3x+xSRhzQysiqo85SbidJJ2YbZlnvmh+53TuSZHsD7dNuuEWser+9EFtY+rYupBwkq2avc6ZCO3/6qACgmg==",
+ "dependencies": {
+ "System.Formats.Asn1": "6.0.0"
+ }
+ },
+ "System.Security.Cryptography.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.X509Certificates": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Calendars": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Cng": "4.3.0",
+ "System.Security.Cryptography.Csp": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.OpenSsl": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.Net.Http": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Text.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Text.Encoding.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.Text.RegularExpressions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Threading": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
+ "dependencies": {
+ "System.Runtime": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Threading.Tasks": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Threading.Timer": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Xml.ReaderWriter": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Text.Encoding.Extensions": "4.3.0",
+ "System.Text.RegularExpressions": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "System.Threading.Tasks.Extensions": "4.3.0"
+ }
+ },
+ "System.Xml.XDocument": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tools": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Xml.ReaderWriter": "4.3.0"
+ }
+ },
+ "Telegram.Bot": {
+ "type": "Transitive",
+ "resolved": "18.0.0",
+ "contentHash": "BD0UchUXINymCGS+1O1tv2enCRyv+VbSJQAgfnueTZs3j7K4XXyJyW0CgyJleTrqB1oq1hS1ux6gBpi3Ajp+ZQ==",
+ "dependencies": {
+ "Newtonsoft.Json": "12.0.2"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.analyzers": {
+ "type": "Transitive",
+ "resolved": "1.0.0",
+ "contentHash": "BeO8hEgs/c8Ls2647fPfieMngncvf0D0xYNDfIO59MolxtCtVjFRd6SRc+7tj8VMqkVOuJcnc9eh4ngI2cAmLQ=="
+ },
+ "xunit.assert": {
+ "type": "Transitive",
+ "resolved": "2.4.2",
+ "contentHash": "pxJISOFjn2XTTi1mcDCkRZrTFb9OtRRCtx2kZFNF51GdReLr1ls2rnyxvAS4JO247K3aNtflvh5Q0346K5BROA==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "xunit.core": {
+ "type": "Transitive",
+ "resolved": "2.4.2",
+ "contentHash": "KB4yGCxNqIVyekhJLXtKSEq6BaXVp/JO3mbGVE1hxypZTLEe7h+sTbAhpA+yZW2dPtXTuiW+C1B2oxxHEkrmOw==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.4.2]",
+ "xunit.extensibility.execution": "[2.4.2]"
+ }
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.4.2",
+ "contentHash": "W1BoXTIN1C6kpVSMw25huSet25ky6IAQUNovu3zGOGN/jWnbgSoTyCrlIhmXSg0tH5nEf8q7h3OjNHOjyu5PfA==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1",
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.4.2",
+ "contentHash": "CZmgcKkwpyo8FlupZdWpJCryrAOWLh1FBPG6gmVZuPQkGQsim/oL4PcP4nfrC2hHgXUFtluvaJ0Sp9PQKUMNpg==",
+ "dependencies": {
+ "NETStandard.Library": "1.6.1",
+ "xunit.extensibility.core": "[2.4.2]"
+ }
+ },
+ "synoai": {
+ "type": "Project",
+ "dependencies": {
+ "MQTTnet": "[4.1.4.563, )",
+ "MailKit": "[3.4.3, )",
+ "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "[1.17.0, )",
+ "Newtonsoft.Json": "[13.0.2, )",
+ "SkiaSharp": "[2.88.3, )",
+ "SkiaSharp.NativeAssets.Linux": "[2.88.3, )",
+ "Swashbuckle.AspNetCore": "[6.4.0, )",
+ "System.Drawing.Common": "[7.0.0, )",
+ "Telegram.Bot": "[18.0.0, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/SynoAI/AIs/AI.cs b/SynoAI/AIs/AI.cs
index 7aa36a7..3a14ec1 100644
--- a/SynoAI/AIs/AI.cs
+++ b/SynoAI/AIs/AI.cs
@@ -1,13 +1,8 @@
-using Microsoft.Extensions.Logging;
-using SynoAI.Models;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+using SynoAI.Models;
namespace SynoAI.AIs
{
- public abstract class AI
+ internal abstract class AI
{
public abstract Task> Process(ILogger logger, Camera camera, byte[] image);
}
diff --git a/SynoAI/AIs/AIType.cs b/SynoAI/AIs/AIType.cs
index 8c441aa..3d49d52 100644
--- a/SynoAI/AIs/AIType.cs
+++ b/SynoAI/AIs/AIType.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.AIs
+namespace SynoAI.AIs
{
///
/// A list of support AI types.
diff --git a/SynoAI/AIs/DeepStack/DeepStackAI.cs b/SynoAI/AIs/DeepStack/DeepStackAI.cs
index fff13b8..3c7c38d 100644
--- a/SynoAI/AIs/DeepStack/DeepStackAI.cs
+++ b/SynoAI/AIs/DeepStack/DeepStackAI.cs
@@ -1,20 +1,13 @@
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
+using Newtonsoft.Json;
using SynoAI.App;
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Threading.Tasks;
namespace SynoAI.AIs.DeepStack
{
- public class DeepStackAI : AI
+ internal class DeepStackAI : AI
{
- public async override Task> Process(ILogger logger, Camera camera, byte[] image)
+ public override async Task> Process(ILogger logger, Camera camera, byte[] image)
{
Stopwatch stopwatch = Stopwatch.StartNew();
@@ -76,7 +69,7 @@ public async override Task> Process(ILogger logger, Ca
///
///
/// A for the combined base and resource.
- protected Uri GetUri(string basePath, string resourcePath)
+ protected static Uri GetUri(string basePath, string resourcePath)
{
Uri baseUri = new(basePath);
return new Uri(baseUri, resourcePath);
@@ -85,9 +78,11 @@ protected Uri GetUri(string basePath, string resourcePath)
///
/// Fetches the response content and parses it a DeepStack object.
///
+ ///
/// The message to parse.
+ ///
/// A usable object.
- private async Task GetResponse(ILogger logger, Camera camera, HttpResponseMessage message)
+ private static async Task GetResponse(ILogger logger, Camera camera, HttpResponseMessage message)
{
string content = await message.Content.ReadAsStringAsync();
logger.LogDebug($"{camera.Name}: DeepStackAI: Responded with {content}.");
diff --git a/SynoAI/AIs/DeepStack/DeepStackPrediction.cs b/SynoAI/AIs/DeepStack/DeepStackPrediction.cs
index b785d5a..e63860b 100644
--- a/SynoAI/AIs/DeepStack/DeepStackPrediction.cs
+++ b/SynoAI/AIs/DeepStack/DeepStackPrediction.cs
@@ -1,8 +1,4 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.AIs.DeepStack
{
diff --git a/SynoAI/AIs/DeepStack/DeepStackRequest.cs b/SynoAI/AIs/DeepStack/DeepStackRequest.cs
index a9e10c9..47be985 100644
--- a/SynoAI/AIs/DeepStack/DeepStackRequest.cs
+++ b/SynoAI/AIs/DeepStack/DeepStackRequest.cs
@@ -1,8 +1,4 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.AIs.DeepStack
{
diff --git a/SynoAI/AIs/DeepStack/DeepStackResponse.cs b/SynoAI/AIs/DeepStack/DeepStackResponse.cs
index 3490000..d969afa 100644
--- a/SynoAI/AIs/DeepStack/DeepStackResponse.cs
+++ b/SynoAI/AIs/DeepStack/DeepStackResponse.cs
@@ -1,6 +1,4 @@
-using System.Collections.Generic;
-
-namespace SynoAI.AIs.DeepStack
+namespace SynoAI.AIs.DeepStack
{
///
/// An object representing a response from DeepStack.
diff --git a/SynoAI/App/HttpClientWrapper.cs b/SynoAI/App/HttpClientWrapper.cs
index affdc6f..531249c 100644
--- a/SynoAI/App/HttpClientWrapper.cs
+++ b/SynoAI/App/HttpClientWrapper.cs
@@ -1,8 +1,6 @@
-using System.Net.Http;
-
-namespace SynoAI.App
+namespace SynoAI.App
{
- public class HttpClientWrapper : HttpClient, IHttpClient
+ internal class HttpClientWrapper : HttpClient, IHttpClient
{
}
}
diff --git a/SynoAI/App/IHttpClient.cs b/SynoAI/App/IHttpClient.cs
index afa4dbf..320c639 100644
--- a/SynoAI/App/IHttpClient.cs
+++ b/SynoAI/App/IHttpClient.cs
@@ -1,8 +1,4 @@
-using System;
-using System.Net.Http;
-using System.Threading.Tasks;
-
-namespace SynoAI.App
+namespace SynoAI.App
{
public interface IHttpClient
{
diff --git a/SynoAI/App/Shared.cs b/SynoAI/App/Shared.cs
index 7f68f0b..34d4260 100644
--- a/SynoAI/App/Shared.cs
+++ b/SynoAI/App/Shared.cs
@@ -1,8 +1,6 @@
-using System.Net.Http;
-
-namespace SynoAI.App
+namespace SynoAI.App
{
- public static class Shared
+ internal static class Shared
{
public static IHttpClient HttpClient = new HttpClientWrapper();
}
diff --git a/SynoAI/Config.cs b/SynoAI/Config.cs
index 0cb1a51..31f9fac 100644
--- a/SynoAI/Config.cs
+++ b/SynoAI/Config.cs
@@ -1,18 +1,14 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using SkiaSharp;
+using SkiaSharp;
using SynoAI.AIs;
using SynoAI.Models;
using SynoAI.Notifiers;
-using System;
-using System.Collections.Generic;
namespace SynoAI
{
///
/// Represents the system configuration.
///
- public static class Config
+ internal static class Config
{
///
/// The URL to the synology API.
@@ -177,6 +173,7 @@ public static class Config
///
/// Generates the configuration from the provided IConfiguration.
///
+ ///
/// The configuration from which to pull the values.
public static void Generate(ILogger logger, IConfiguration configuration)
{
diff --git a/SynoAI/Constants.cs b/SynoAI/Constants.cs
index b05b575..6853309 100644
--- a/SynoAI/Constants.cs
+++ b/SynoAI/Constants.cs
@@ -1,6 +1,6 @@
namespace SynoAI
{
- public static class Constants
+ internal static class Constants
{
public const string DIRECTORY_CAPTURES = "Captures";
}
diff --git a/SynoAI/Controllers/CameraController.cs b/SynoAI/Controllers/CameraController.cs
index 2a82ca8..892e89e 100644
--- a/SynoAI/Controllers/CameraController.cs
+++ b/SynoAI/Controllers/CameraController.cs
@@ -1,17 +1,10 @@
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
using SkiaSharp;
using SynoAI.Models;
using SynoAI.Notifiers;
using SynoAI.Services;
-using System;
using System.Collections.Concurrent;
-using System.Collections.Generic;
using System.Diagnostics;
-using SynoAI.Extensions;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
using SynoAI.Hubs;
using System.Drawing;
@@ -34,10 +27,10 @@ public class CameraController : ControllerBase
private readonly ISynologyService _synologyService;
private readonly ILogger _logger;
- private static ConcurrentDictionary _runningCameraChecks = new(StringComparer.OrdinalIgnoreCase);
- private static ConcurrentDictionary _delayedCameraChecks = new(StringComparer.OrdinalIgnoreCase);
+ private static readonly ConcurrentDictionary _runningCameraChecks = new(StringComparer.OrdinalIgnoreCase);
+ private static readonly ConcurrentDictionary _delayedCameraChecks = new(StringComparer.OrdinalIgnoreCase);
- private static ConcurrentDictionary _enabledCameras = new(StringComparer.OrdinalIgnoreCase);
+ private static readonly ConcurrentDictionary _enabledCameras = new(StringComparer.OrdinalIgnoreCase);
public CameraController(IAIService aiService, ISynologyService synologyService, ILogger logger, IHubContext hubContext)
{
@@ -189,8 +182,8 @@ public async void Get(string id)
// Save the original unprocessed image if required
if (Config.SaveOriginalSnapshot == SaveSnapshotMode.Always ||
- (Config.SaveOriginalSnapshot == SaveSnapshotMode.WithPredictions && predictions.Count() > 0) ||
- (Config.SaveOriginalSnapshot == SaveSnapshotMode.WithValidPredictions && validPredictions.Count() > 0))
+ (Config.SaveOriginalSnapshot == SaveSnapshotMode.WithPredictions && predictions.Any()) ||
+ (Config.SaveOriginalSnapshot == SaveSnapshotMode.WithValidPredictions && validPredictions.Any()))
{
_logger.LogInformation($"{id}: Saving original image");
SnapshotManager.SaveOriginalImage(_logger, camera, snapshot);
@@ -278,7 +271,7 @@ public void Post(string id, [FromBody]CameraOptionsDto options)
private bool ShouldIncludePrediction(string id, Camera camera, Stopwatch overallStopwatch, AIPrediction prediction)
{
// Check if the prediction falls within the exclusion zones
- if (camera.Exclusions != null && camera.Exclusions.Count() > 0)
+ if (camera.Exclusions != null && camera.Exclusions.Any())
{
Rectangle boundary = new(prediction.MinX, prediction.MinY, prediction.SizeX, prediction.SizeY);
foreach (Zone exclusion in camera.Exclusions)
@@ -397,7 +390,7 @@ private byte[] PreProcessSnapshot(Camera camera, byte[] snapshot)
/// The bitmap to rotate.
/// The angle to rotate to.
/// The rotated bitmap.
- private SKBitmap Rotate(SKBitmap bitmap, double angle)
+ private static SKBitmap Rotate(SKBitmap bitmap, double angle)
{
double radians = Math.PI * angle / 180;
float sine = (float)Math.Abs(Math.Sin(radians));
diff --git a/SynoAI/Controllers/HomeController.cs b/SynoAI/Controllers/HomeController.cs
index 2d5fc2e..31a9007 100644
--- a/SynoAI/Controllers/HomeController.cs
+++ b/SynoAI/Controllers/HomeController.cs
@@ -1,17 +1,11 @@
using Microsoft.AspNetCore.Mvc;
-using System.IO;
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
-using System.Linq;
-
namespace SynoAI.Controllers
{
-
public class HomeController : Controller
{
static readonly string[] byteSizes = { "bytes", "Kb", "Mb", "Gb", "Tb" };
@@ -63,7 +57,7 @@ public IActionResult Minute(string cameraname, string year, string month, string
try
{
- ViewData["date"] = new DateTime(Int16.Parse(year),Int16.Parse(month),Int16.Parse(day),Int16.Parse(hour),Int16.Parse(minute),59,999);;
+ ViewData["date"] = new DateTime(Int16.Parse(year),Int16.Parse(month),Int16.Parse(day),Int16.Parse(hour),Int16.Parse(minute),59,999);
}
catch (Exception)
{
@@ -75,8 +69,8 @@ public IActionResult Minute(string cameraname, string year, string month, string
///
/// Return snapshot image as JPEG, either in original size or a scaled down version, if asked.
- //// In order to use System.Drawing.Common
- //// In Terminal, issue: dotnet add SynoAI package System.Drawing.Common
+ /// In order to use System.Drawing.Common
+ /// In Terminal, issue: dotnet add SynoAI package System.Drawing.Common
///
[Route("{cameraName}/{filename}/{width}")]
[Route("{cameraName}/{filename}")]
@@ -149,7 +143,7 @@ public static GraphData GetData(string cameraName, DateTime date, bool GraphHour
//User is asking for global 24 hours report, so I also meter the general storage / snapshots / hours counters.
if (!GraphHour)
- data.Snapshots = snapshots.Count();
+ data.Snapshots = snapshots.Length;
foreach (FileInfo snapshot in snapshots)
{
@@ -259,7 +253,7 @@ private static int GetObjects(string filename)
if (index != -1)
{
//try to extract the number of valid objects predicted inside this snapshot
- if (!int.TryParse(name.Substring(index + 1), out objects))
+ if (!int.TryParse(name.AsSpan(index + 1), out objects))
objects = 0;
}
else
@@ -315,7 +309,7 @@ public static string NiceByteSize(long numberOfBytes)
///
public static string GetTypes(Camera camera)
{
- if (camera.Types.Count() == 0)
+ if (!camera.Types.Any())
{
return "Any";
}
diff --git a/SynoAI/Controllers/ImageController.cs b/SynoAI/Controllers/ImageController.cs
index c40e09b..e07d531 100644
--- a/SynoAI/Controllers/ImageController.cs
+++ b/SynoAI/Controllers/ImageController.cs
@@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Mvc;
-using System.IO;
namespace SynoAI.Controllers
{
diff --git a/SynoAI/Dockerfile b/SynoAI/Dockerfile
index f6552bf..a21603e 100644
--- a/SynoAI/Dockerfile
+++ b/SynoAI/Dockerfile
@@ -1,10 +1,10 @@
-FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
RUN apt-get update && apt-get install -y libgdiplus
WORKDIR /app
EXPOSE 80
EXPOSE 443
-FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["SynoAI.csproj", "./"]
RUN dotnet restore "SynoAI.csproj"
diff --git a/SynoAI/Extensions/StringExtensions.cs b/SynoAI/Extensions/StringExtensions.cs
index 0dd9584..8920e7f 100644
--- a/SynoAI/Extensions/StringExtensions.cs
+++ b/SynoAI/Extensions/StringExtensions.cs
@@ -1,16 +1,13 @@
-using System;
-using System.Linq;
-
namespace SynoAI.Extensions
{
- public static class StringExtensions
+ internal static class StringExtensions
{
public static string FirstCharToUpper(this string input) =>
input switch
{
null => throw new ArgumentNullException(nameof(input)),
"" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)),
- _ => input.First().ToString().ToUpper() + input.Substring(1)
+ _ => string.Concat(input.First().ToString().ToUpper(), input.AsSpan(1))
};
}
}
\ No newline at end of file
diff --git a/SynoAI/Hubs/SynoAIHub.cs b/SynoAI/Hubs/SynoAIHub.cs
index b73e30f..7458865 100644
--- a/SynoAI/Hubs/SynoAIHub.cs
+++ b/SynoAI/Hubs/SynoAIHub.cs
@@ -1,5 +1,4 @@
using Microsoft.AspNetCore.SignalR;
-using System.Threading.Tasks;
namespace SynoAI.Hubs
{
diff --git a/SynoAI/Models/AIPrediction.cs b/SynoAI/Models/AIPrediction.cs
index 67cb1f0..714fc64 100644
--- a/SynoAI/Models/AIPrediction.cs
+++ b/SynoAI/Models/AIPrediction.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
public class AIPrediction
{
diff --git a/SynoAI/Models/Camera.cs b/SynoAI/Models/Camera.cs
index a78c735..907d22b 100644
--- a/SynoAI/Models/Camera.cs
+++ b/SynoAI/Models/Camera.cs
@@ -1,7 +1,4 @@
-using System.Collections.Generic;
-
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
///
/// Represents a camera object.
@@ -118,6 +115,7 @@ public int GetDelayAfterSuccess()
return DelayAfterSuccess ?? Config.DelayAfterSuccess ?? GetDelay();
}
+ ///
public override string ToString()
{
return Name;
diff --git a/SynoAI/Models/CameraQuality.cs b/SynoAI/Models/CameraQuality.cs
index e54c3b9..d8c421f 100644
--- a/SynoAI/Models/CameraQuality.cs
+++ b/SynoAI/Models/CameraQuality.cs
@@ -1,6 +1,6 @@
namespace SynoAI.Models
{
- public enum CameraQuality
+ internal enum CameraQuality
{
High = 0,
Balanced = 1,
diff --git a/SynoAI/Models/DTOs/UpdateDto.cs b/SynoAI/Models/DTOs/UpdateDto.cs
index 66ad402..2846ecd 100644
--- a/SynoAI/Models/DTOs/UpdateDto.cs
+++ b/SynoAI/Models/DTOs/UpdateDto.cs
@@ -1,7 +1,5 @@
-using System.Collections.Generic;
-using System.Linq.Expressions;
+using System.Linq.Expressions;
using System.Runtime.CompilerServices;
-using System;
namespace SynoAI.Models.DTOs
{
diff --git a/SynoAI/Models/Graph.cs b/SynoAI/Models/Graph.cs
index 6e64024..1e814a2 100644
--- a/SynoAI/Models/Graph.cs
+++ b/SynoAI/Models/Graph.cs
@@ -1,6 +1,3 @@
-using System;
-using System.Collections.Generic;
-
namespace SynoAI.Models
{
///
@@ -155,7 +152,7 @@ public int GraphBarHeight(int yMax, int value)
///
- /// Since Y axis shows reference values, if there are less than GraphYSteps snapshots, we need to adjust way of displaying the y-axis ref
+ /// Since Y axis shows 'NumberOfSteps' reference values, if there are less than GraphYSteps snapshots, we need to adjust way of displaying the y-axis ref
///
public String yStepping(int yMax, int Step)
{
diff --git a/SynoAI/Models/Notification.cs b/SynoAI/Models/Notification.cs
index afa6e78..bf42cbc 100644
--- a/SynoAI/Models/Notification.cs
+++ b/SynoAI/Models/Notification.cs
@@ -1,11 +1,8 @@
using SynoAI.Extensions;
-using System;
-using System.Collections.Generic;
-using System.Linq;
namespace SynoAI.Models
{
- public class Notification
+ internal class Notification
{
///
/// Object for fetching the processed image
@@ -30,7 +27,6 @@ public IEnumerable FoundTypes
///
/// Gets the labels from the predictions to use in the notifications.
///
- /// The predictions to process.
/// A list of labels.
private IEnumerable GetLabels()
{
diff --git a/SynoAI/Models/ProcessedImage.cs b/SynoAI/Models/ProcessedImage.cs
index ce6e6e5..583d5af 100644
--- a/SynoAI/Models/ProcessedImage.cs
+++ b/SynoAI/Models/ProcessedImage.cs
@@ -1,6 +1,3 @@
-using System;
-using System.IO;
-
namespace SynoAI.Models
{
///
@@ -17,6 +14,11 @@ public class ProcessedImage
///
public readonly string FileName;
+ ///
+ /// Create a ProcessedImage
+ ///
+ ///
+ /// When filePath is null
public ProcessedImage(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath)) throw new ArgumentNullException(nameof(filePath));
diff --git a/SynoAI/Models/SaveSnapshotMode.cs b/SynoAI/Models/SaveSnapshotMode.cs
index ca11e19..10d35ae 100644
--- a/SynoAI/Models/SaveSnapshotMode.cs
+++ b/SynoAI/Models/SaveSnapshotMode.cs
@@ -1,6 +1,6 @@
namespace SynoAI.Models
{
- public enum SaveSnapshotMode
+ internal enum SaveSnapshotMode
{
///
/// The snapshots are never saved.
diff --git a/SynoAI/Models/SynologyApiInfoResponse.cs b/SynoAI/Models/SynologyApiInfoResponse.cs
index c833e0e..32cf9c3 100644
--- a/SynoAI/Models/SynologyApiInfoResponse.cs
+++ b/SynoAI/Models/SynologyApiInfoResponse.cs
@@ -1,8 +1,6 @@
-using System.Collections.Generic;
-
namespace SynoAI.Models
{
- public class SynologyApiInfoResponse : Dictionary
+ internal class SynologyApiInfoResponse : Dictionary
{
}
}
\ No newline at end of file
diff --git a/SynoAI/Models/SynologyCamera.cs b/SynoAI/Models/SynologyCamera.cs
index a9fe8a9..8677961 100644
--- a/SynoAI/Models/SynologyCamera.cs
+++ b/SynoAI/Models/SynologyCamera.cs
@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Newtonsoft.Json;
+using Newtonsoft.Json;
namespace SynoAI.Models
{
diff --git a/SynoAI/Models/SynologyCameras.cs b/SynoAI/Models/SynologyCameras.cs
index 6d36ae5..dd62ed6 100644
--- a/SynoAI/Models/SynologyCameras.cs
+++ b/SynoAI/Models/SynologyCameras.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
- public class SynologyCameras
+ internal class SynologyCameras
{
public IEnumerable Cameras { get; set; }
}
diff --git a/SynoAI/Models/SynologyError.cs b/SynoAI/Models/SynologyError.cs
index 40b8a2c..b2f011f 100644
--- a/SynoAI/Models/SynologyError.cs
+++ b/SynoAI/Models/SynologyError.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
- public class SynologyError
+ internal class SynologyError
{
public string Code { get; set; }
}
diff --git a/SynoAI/Models/SynologyLogin.cs b/SynoAI/Models/SynologyLogin.cs
index 011a86f..cba8f43 100644
--- a/SynoAI/Models/SynologyLogin.cs
+++ b/SynoAI/Models/SynologyLogin.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
- public class SynologyLogin
+ internal class SynologyLogin
{
public string SID { get; set; }
}
diff --git a/SynoAI/Models/SynologyResponse.cs b/SynoAI/Models/SynologyResponse.cs
index 2e8a3fc..2acff8d 100644
--- a/SynoAI/Models/SynologyResponse.cs
+++ b/SynoAI/Models/SynologyResponse.cs
@@ -1,16 +1,11 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Models
+namespace SynoAI.Models
{
- public class SynologyResponse : SynologyResponse
+ internal class SynologyResponse : SynologyResponse
{
public T Data { get; set; }
}
- public class SynologyResponse
+ internal class SynologyResponse
{
public bool Success { get; set; }
public SynologyError Error { get; set; }
diff --git a/SynoAI/Notifiers/Discord/Discord.cs b/SynoAI/Notifiers/Discord/Discord.cs
index cc2f7ed..5624251 100644
--- a/SynoAI/Notifiers/Discord/Discord.cs
+++ b/SynoAI/Notifiers/Discord/Discord.cs
@@ -1,19 +1,9 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Net.Http;
-using System.Net.Http.Json;
-using System.Text;
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
-using SynoAI.App;
+using SynoAI.App;
using SynoAI.Models;
namespace SynoAI.Notifiers.Discord
{
- public class Discord : NotifierBase
+ internal class Discord : NotifierBase
{
///
/// Discord Webhook Url.
@@ -35,7 +25,7 @@ public override async Task SendAsync(Camera camera, Notification notification, I
HttpResponseMessage responseMessage = await Shared.HttpClient.PostAsync(Url, formData);
if (responseMessage.IsSuccessStatusCode)
{
- logger.LogInformation($"{camera.Name}: Discord: Notification sent successfully");
+ logger.LogInformation("{CameraName}: Discord: Notification sent successfully", camera.Name);
}
else
{
diff --git a/SynoAI/Notifiers/Discord/DiscordFactory.cs b/SynoAI/Notifiers/Discord/DiscordFactory.cs
index 8ab6967..4c27d75 100644
--- a/SynoAI/Notifiers/Discord/DiscordFactory.cs
+++ b/SynoAI/Notifiers/Discord/DiscordFactory.cs
@@ -1,9 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
-namespace SynoAI.Notifiers.Discord
+namespace SynoAI.Notifiers.Discord
{
- public class DiscordFactory : NotifierFactory
+ internal class DiscordFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/Email/Email.cs b/SynoAI/Notifiers/Email/Email.cs
index 4548054..3211a69 100644
--- a/SynoAI/Notifiers/Email/Email.cs
+++ b/SynoAI/Notifiers/Email/Email.cs
@@ -1,25 +1,14 @@
using MailKit.Net.Smtp;
using MailKit.Security;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
using MimeKit;
-using MimeKit.Text;
-using Newtonsoft.Json;
using SynoAI.Models;
-using SynoAI.Services;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Email
{
///
/// Calls a third party API.
///
- public class Email : NotifierBase
+ internal class Email : NotifierBase
{
///
/// The email address to send the notification from.
diff --git a/SynoAI/Notifiers/Email/EmailFactory.cs b/SynoAI/Notifiers/Email/EmailFactory.cs
index ed883dc..55370e4 100644
--- a/SynoAI/Notifiers/Email/EmailFactory.cs
+++ b/SynoAI/Notifiers/Email/EmailFactory.cs
@@ -1,12 +1,8 @@
-using System;
-using System.Net.Http;
using MailKit.Security;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
namespace SynoAI.Notifiers.Email
{
- public class EmailFactory : NotifierFactory
+ internal class EmailFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
@@ -35,7 +31,7 @@ public override INotifier Create(ILogger logger, IConfigurationSection section)
}
}
- private SecureSocketOptions GetSecureSocketOptions(ILogger logger, IConfigurationSection section)
+ private static SecureSocketOptions GetSecureSocketOptions(ILogger logger, IConfigurationSection section)
{
string options = section.GetValue("Encryption", "None").ToUpper();
diff --git a/SynoAI/Notifiers/INotifier.cs b/SynoAI/Notifiers/INotifier.cs
index 4ba54a8..8ef4c6f 100644
--- a/SynoAI/Notifiers/INotifier.cs
+++ b/SynoAI/Notifiers/INotifier.cs
@@ -1,12 +1,8 @@
-using Microsoft.Extensions.Logging;
-using SynoAI.Models;
-using SynoAI.Services;
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using SynoAI.Models;
namespace SynoAI.Notifiers
{
- public interface INotifier
+ internal interface INotifier
{
///
/// The list of camera names that the notifier is for.
diff --git a/SynoAI/Notifiers/Mqtt/Mqtt.cs b/SynoAI/Notifiers/Mqtt/Mqtt.cs
index 8073d8b..c0101b9 100644
--- a/SynoAI/Notifiers/Mqtt/Mqtt.cs
+++ b/SynoAI/Notifiers/Mqtt/Mqtt.cs
@@ -1,17 +1,13 @@
-using Microsoft.Extensions.Logging;
-using SynoAI.Models;
-using System.Threading.Tasks;
+using SynoAI.Models;
using MQTTnet.Client;
using MQTTnet;
-using System.Threading;
-using System;
namespace SynoAI.Notifiers.Mqtt
{
///
/// Sends a message over MQTT.
///
- public sealed class Mqtt : NotifierBase
+ internal sealed class Mqtt : NotifierBase
{
///
/// The username when using Basic authentication.
diff --git a/SynoAI/Notifiers/Mqtt/MqttFactory.cs b/SynoAI/Notifiers/Mqtt/MqttFactory.cs
index 97f5fa6..bfe355b 100644
--- a/SynoAI/Notifiers/Mqtt/MqttFactory.cs
+++ b/SynoAI/Notifiers/Mqtt/MqttFactory.cs
@@ -1,10 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using SynoAI.Notifiers.Webhook;
-
-namespace SynoAI.Notifiers.Mqtt
+namespace SynoAI.Notifiers.Mqtt
{
- public class MqttFactory : NotifierFactory
+ internal class MqttFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/NotifierBase.cs b/SynoAI/Notifiers/NotifierBase.cs
index e68364e..510ca78 100644
--- a/SynoAI/Notifiers/NotifierBase.cs
+++ b/SynoAI/Notifiers/NotifierBase.cs
@@ -1,18 +1,10 @@
-using System;
-using System.Collections.Generic;
using System.Dynamic;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SynoAI.Models;
-using SynoAI.Services;
namespace SynoAI.Notifiers
{
- public abstract class NotifierBase : INotifier
+ internal abstract class NotifierBase : INotifier
{
public IEnumerable Cameras { get; set; }
public IEnumerable Types { get; set; }
@@ -24,7 +16,7 @@ public abstract class NotifierBase : INotifier
public virtual Task CleanupAsync(ILogger logger) { return Task.CompletedTask; }
- protected string GetMessage(Camera camera, IEnumerable foundTypes, string errorMessage = null)
+ protected static string GetMessage(Camera camera, IEnumerable foundTypes, string errorMessage = null)
{
string result ;
if (Config.AlternativeLabelling && Config.DrawMode == DrawMode.Matches)
@@ -61,7 +53,7 @@ protected string GetMessage(Camera camera, IEnumerable foundTypes, strin
return result;
}
- protected string GetImageUrl(Camera camera, Notification notification)
+ protected static string GetImageUrl(Camera camera, Notification notification)
{
if (Config.SynoAIUrL == null)
{
@@ -77,7 +69,7 @@ protected string GetImageUrl(Camera camera, Notification notification)
///
/// Generates a JSON representation of the notification.
///
- protected string GenerateJSON(Camera camera, Notification notification, bool sendImage)
+ protected static string GenerateJSON(Camera camera, Notification notification, bool sendImage)
{
dynamic jsonObject = new ExpandoObject();
@@ -103,7 +95,7 @@ protected string GenerateJSON(Camera camera, Notification notification, bool sen
///
/// Returns FileStream data as a base64-encoded string
///
- private string ToBase64String(FileStream fileStream)
+ private static string ToBase64String(FileStream fileStream)
{
byte[] buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, (int)fileStream.Length);
@@ -116,7 +108,7 @@ private string ToBase64String(FileStream fileStream)
///
/// The message to parse.
/// A usable object.
- protected async Task GetResponse(HttpResponseMessage message)
+ protected static async Task GetResponse(HttpResponseMessage message)
{
string content = await message.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject(content);
diff --git a/SynoAI/Notifiers/NotifierFactory.cs b/SynoAI/Notifiers/NotifierFactory.cs
index 8d9defd..9cccf0e 100644
--- a/SynoAI/Notifiers/NotifierFactory.cs
+++ b/SynoAI/Notifiers/NotifierFactory.cs
@@ -1,6 +1,4 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using SynoAI.Notifiers.Email;
+using SynoAI.Notifiers.Email;
using SynoAI.Notifiers.Pushbullet;
using SynoAI.Notifiers.Pushover;
using SynoAI.Notifiers.SynologyChat;
@@ -8,15 +6,13 @@
using SynoAI.Notifiers.Webhook;
using SynoAI.Notifiers.Discord;
using SynoAI.Notifiers.Mqtt;
-using System;
-using System.Collections.Generic;
namespace SynoAI.Notifiers
{
///
/// Handles the construction of the notifiers.
///
- public abstract class NotifierFactory
+ internal abstract class NotifierFactory
{
public abstract INotifier Create(ILogger logger, IConfigurationSection section);
diff --git a/SynoAI/Notifiers/Pushbullet/Pushbullet.cs b/SynoAI/Notifiers/Pushbullet/Pushbullet.cs
index c03e51f..5bc56ea 100644
--- a/SynoAI/Notifiers/Pushbullet/Pushbullet.cs
+++ b/SynoAI/Notifiers/Pushbullet/Pushbullet.cs
@@ -1,14 +1,6 @@
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
+using Newtonsoft.Json;
using SynoAI.App;
using SynoAI.Models;
-using SynoAI.Services;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushbullet
{
@@ -16,7 +8,7 @@ namespace SynoAI.Notifiers.Pushbullet
/// Configuration for sending a Pushbullet notification.
/// https://docs.pushbullet.com/
///
- public class Pushbullet : NotifierBase
+ internal class Pushbullet : NotifierBase
{
//private const int MAX_FILE_SIZE = 26214400;
@@ -32,6 +24,7 @@ public class Pushbullet : NotifierBase
/// Sends a message and an image using the Pushbullet API.
///
/// The camera that triggered the notification.
+ ///
/// A logger.
public override async Task SendAsync(Camera camera, Notification notification, ILogger logger)
{
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletError.cs b/SynoAI/Notifiers/Pushbullet/PushbulletError.cs
index c7aa059..a96cbc8 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletError.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletError.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace SynoAI.Notifiers.Pushbullet
+namespace SynoAI.Notifiers.Pushbullet
{
- public class PushbulletError
+ internal class PushbulletError
{
public string Code { get; set; }
public string Type { get; set; }
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletErrorResponse.cs b/SynoAI/Notifiers/Pushbullet/PushbulletErrorResponse.cs
index 3e06d5d..aee5cf7 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletErrorResponse.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletErrorResponse.cs
@@ -1,12 +1,8 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushbullet
{
- public class PushbulletErrorResponse
+ internal class PushbulletErrorResponse
{
public PushbulletError Error { get; set; }
[JsonProperty("error_code")]
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletFactory.cs b/SynoAI/Notifiers/Pushbullet/PushbulletFactory.cs
index 85de71d..391c8de 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletFactory.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletFactory.cs
@@ -1,9 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
-namespace SynoAI.Notifiers.Pushbullet
+namespace SynoAI.Notifiers.Pushbullet
{
- public class PushbulletFactory : NotifierFactory
+ internal class PushbulletFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletPush.cs b/SynoAI/Notifiers/Pushbullet/PushbulletPush.cs
index eee8360..b6c50dc 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletPush.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletPush.cs
@@ -1,12 +1,8 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushbullet
{
- public class PushbulletPush
+ internal class PushbulletPush
{
[JsonProperty("type")]
public string Type { get; set; }
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequest.cs b/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequest.cs
index a69ca2b..d566228 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequest.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequest.cs
@@ -1,8 +1,4 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushbullet
{
diff --git a/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequestResponse.cs b/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequestResponse.cs
index 65e80d1..b6ea7a5 100644
--- a/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequestResponse.cs
+++ b/SynoAI/Notifiers/Pushbullet/PushbulletUploadRequestResponse.cs
@@ -1,8 +1,4 @@
using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushbullet
{
diff --git a/SynoAI/Notifiers/Pushover/Pushover.cs b/SynoAI/Notifiers/Pushover/Pushover.cs
index bf63890..5c89ea4 100644
--- a/SynoAI/Notifiers/Pushover/Pushover.cs
+++ b/SynoAI/Notifiers/Pushover/Pushover.cs
@@ -1,20 +1,10 @@
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-using SynoAI.App;
+using SynoAI.App;
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
using System.Net.Http.Headers;
-using System.Net.Http.Json;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Pushover
{
- public class Pushover : NotifierBase
+ internal class Pushover : NotifierBase
{
private readonly string URI_MESSAGE = "https://api.pushover.net/1/messages.json";
diff --git a/SynoAI/Notifiers/Pushover/PushoverFactory.cs b/SynoAI/Notifiers/Pushover/PushoverFactory.cs
index 17396e8..908d3c1 100644
--- a/SynoAI/Notifiers/Pushover/PushoverFactory.cs
+++ b/SynoAI/Notifiers/Pushover/PushoverFactory.cs
@@ -1,10 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-using System.Collections.Generic;
-
-namespace SynoAI.Notifiers.Pushover
+namespace SynoAI.Notifiers.Pushover
{
- public class PushoverFactory : NotifierFactory
+ internal class PushoverFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/SynologyChat/SynologyChat.cs b/SynoAI/Notifiers/SynologyChat/SynologyChat.cs
index fd58f52..f692ab1 100644
--- a/SynoAI/Notifiers/SynologyChat/SynologyChat.cs
+++ b/SynoAI/Notifiers/SynologyChat/SynologyChat.cs
@@ -1,23 +1,12 @@
-using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SynoAI.Models;
-using SynoAI.Services;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Net.Http.Headers;
-using System.Net.Http.Json;
-using System.Text;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.SynologyChat
{
///
/// Calls a third party API.
///
- public class SynologyChat : NotifierBase
+ internal class SynologyChat : NotifierBase
{
///
/// The URL to send the request to including the token.
diff --git a/SynoAI/Notifiers/SynologyChat/SynologyChatErrorReasonResponse.cs b/SynoAI/Notifiers/SynologyChat/SynologyChatErrorReasonResponse.cs
index 37c815c..767d891 100644
--- a/SynoAI/Notifiers/SynologyChat/SynologyChatErrorReasonResponse.cs
+++ b/SynoAI/Notifiers/SynologyChat/SynologyChatErrorReasonResponse.cs
@@ -2,7 +2,7 @@
namespace SynoAI.Notifiers.SynologyChat
{
- public class SynologyChatErrorReasonResponse
+ internal class SynologyChatErrorReasonResponse
{
[JsonProperty("name")]
public string Name { get; set; }
diff --git a/SynoAI/Notifiers/SynologyChat/SynologyChatErrorResponse.cs b/SynoAI/Notifiers/SynologyChat/SynologyChatErrorResponse.cs
index 46afb1e..3c8fb5d 100644
--- a/SynoAI/Notifiers/SynologyChat/SynologyChatErrorResponse.cs
+++ b/SynoAI/Notifiers/SynologyChat/SynologyChatErrorResponse.cs
@@ -1,9 +1,8 @@
using Newtonsoft.Json;
-using System.Collections.Generic;
namespace SynoAI.Notifiers.SynologyChat
{
- public class SynologyChatErrorResponse
+ internal class SynologyChatErrorResponse
{
[JsonProperty("code")]
public string Code { get; set; }
diff --git a/SynoAI/Notifiers/SynologyChat/SynologyChatFactory.cs b/SynoAI/Notifiers/SynologyChat/SynologyChatFactory.cs
index 65ca11f..b80cbb8 100644
--- a/SynoAI/Notifiers/SynologyChat/SynologyChatFactory.cs
+++ b/SynoAI/Notifiers/SynologyChat/SynologyChatFactory.cs
@@ -1,9 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
namespace SynoAI.Notifiers.SynologyChat
{
- public class SynologyChatFactory : NotifierFactory
+ internal class SynologyChatFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/SynologyChat/SynologyChatResponse.cs b/SynoAI/Notifiers/SynologyChat/SynologyChatResponse.cs
index db6e00d..460a643 100644
--- a/SynoAI/Notifiers/SynologyChat/SynologyChatResponse.cs
+++ b/SynoAI/Notifiers/SynologyChat/SynologyChatResponse.cs
@@ -2,7 +2,7 @@
namespace SynoAI.Notifiers.SynologyChat
{
- public class SynologyChatResponse
+ internal class SynologyChatResponse
{
[JsonProperty("success")]
public bool Success { get; set; }
diff --git a/SynoAI/Notifiers/Telegram/Telegram.cs b/SynoAI/Notifiers/Telegram/Telegram.cs
index cc6fdba..8be2a34 100644
--- a/SynoAI/Notifiers/Telegram/Telegram.cs
+++ b/SynoAI/Notifiers/Telegram/Telegram.cs
@@ -1,18 +1,4 @@
-using MailKit.Net.Smtp;
-using MailKit.Security;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
-using MimeKit;
-using MimeKit.Text;
-using Newtonsoft.Json;
using SynoAI.Models;
-using SynoAI.Services;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Net.Http;
-using System.Threading.Tasks;
using Telegram.Bot;
namespace SynoAI.Notifiers.Telegram
@@ -20,7 +6,7 @@ namespace SynoAI.Notifiers.Telegram
///
/// Calls a third party API.
///
- public class Telegram : NotifierBase
+ internal class Telegram : NotifierBase
{
///
/// The ID of the chat to send notifications to
diff --git a/SynoAI/Notifiers/Telegram/TelegramFactory.cs b/SynoAI/Notifiers/Telegram/TelegramFactory.cs
index 45f0a31..2edc824 100644
--- a/SynoAI/Notifiers/Telegram/TelegramFactory.cs
+++ b/SynoAI/Notifiers/Telegram/TelegramFactory.cs
@@ -1,12 +1,6 @@
-using System;
-using System.Net.Http;
-using MailKit.Security;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
namespace SynoAI.Notifiers.Telegram
{
- public class TelegramFactory : NotifierFactory
+ internal class TelegramFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Notifiers/Webhook/AuthorizationMethod.cs b/SynoAI/Notifiers/Webhook/AuthorizationMethod.cs
index 6efec82..cbe4b73 100644
--- a/SynoAI/Notifiers/Webhook/AuthorizationMethod.cs
+++ b/SynoAI/Notifiers/Webhook/AuthorizationMethod.cs
@@ -1,6 +1,6 @@
namespace SynoAI.Notifiers.Webhook
{
- public enum AuthorizationMethod
+ internal enum AuthorizationMethod
{
None,
Basic,
diff --git a/SynoAI/Notifiers/Webhook/Webhook.cs b/SynoAI/Notifiers/Webhook/Webhook.cs
index f83a6a6..fce9931 100644
--- a/SynoAI/Notifiers/Webhook/Webhook.cs
+++ b/SynoAI/Notifiers/Webhook/Webhook.cs
@@ -1,4 +1,3 @@
-using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SynoAI.Models;
using SynoAI.Services;
@@ -9,14 +8,13 @@
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
-using System.Threading.Tasks;
namespace SynoAI.Notifiers.Webhook
{
///
/// Calls a third party API.
///
- public class Webhook : NotifierBase
+ internal class Webhook : NotifierBase
{
///
/// The URL to send the request to.
diff --git a/SynoAI/Notifiers/Webhook/WebhookFactory.cs b/SynoAI/Notifiers/Webhook/WebhookFactory.cs
index 22c7048..34629c0 100644
--- a/SynoAI/Notifiers/Webhook/WebhookFactory.cs
+++ b/SynoAI/Notifiers/Webhook/WebhookFactory.cs
@@ -1,9 +1,6 @@
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
-
namespace SynoAI.Notifiers.Webhook
{
- public class WebhookFactory : NotifierFactory
+ internal class WebhookFactory : NotifierFactory
{
public override INotifier Create(ILogger logger, IConfigurationSection section)
{
diff --git a/SynoAI/Program.cs b/SynoAI/Program.cs
index 223af64..bedf57b 100644
--- a/SynoAI/Program.cs
+++ b/SynoAI/Program.cs
@@ -1,7 +1,3 @@
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Hosting;
-
-
namespace SynoAI
{
public class Program
diff --git a/SynoAI/Services/AIService.cs b/SynoAI/Services/AIService.cs
index 1cf0cb7..7816c58 100644
--- a/SynoAI/Services/AIService.cs
+++ b/SynoAI/Services/AIService.cs
@@ -1,14 +1,10 @@
-using Microsoft.Extensions.Logging;
-using SynoAI.AIs;
+using SynoAI.AIs;
using SynoAI.AIs.DeepStack;
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
namespace SynoAI.Services
{
- public class AIService : IAIService
+ internal class AIService : IAIService
{
private readonly ILogger _logger;
@@ -23,7 +19,7 @@ public async Task> ProcessAsync(Camera camera, byte[]
return await ai.Process(_logger, camera, image);
}
- private AI GetAI()
+ private static AI GetAI()
{
switch (Config.AI)
{
diff --git a/SynoAI/Services/IAIService.cs b/SynoAI/Services/IAIService.cs
index 496e8ce..9deeba7 100644
--- a/SynoAI/Services/IAIService.cs
+++ b/SynoAI/Services/IAIService.cs
@@ -1,8 +1,4 @@
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
namespace SynoAI.Services
{
diff --git a/SynoAI/Services/ISynologyService.cs b/SynoAI/Services/ISynologyService.cs
index 01fc38d..3441db3 100644
--- a/SynoAI/Services/ISynologyService.cs
+++ b/SynoAI/Services/ISynologyService.cs
@@ -1,7 +1,5 @@
using SynoAI.Models;
-using System.Collections.Generic;
using System.Net;
-using System.Threading.Tasks;
namespace SynoAI.Services
{
diff --git a/SynoAI/Services/SnapshotManager.cs b/SynoAI/Services/SnapshotManager.cs
index 0098b6b..08b1165 100644
--- a/SynoAI/Services/SnapshotManager.cs
+++ b/SynoAI/Services/SnapshotManager.cs
@@ -1,26 +1,20 @@
-using System;
-using System.Collections.Generic;
using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using Microsoft.Extensions.Logging;
using SkiaSharp;
using SynoAI.Models;
using SynoAI.Extensions;
namespace SynoAI.Services
{
-
- public class SnapshotManager
+ internal class SnapshotManager
{
-
///
/// Dresses the source image by adding the boundary boxes and saves the file locally.
///
/// The camera the image came from.
/// The image data.
/// The list of predictions with the right size (but may or may not be the types configured as interest for this camera).
- /// The list of predictions with the right size and matching the type of objects of interest for this camera.
+ /// The list of predictions with the right size and matching the type of objects of interest for this camera.
+ ///
public static ProcessedImage DressImage(Camera camera, byte[] snapshot, IEnumerable predictions, IEnumerable validPredictions, ILogger logger)
{
Stopwatch stopwatch = Stopwatch.StartNew();
@@ -154,6 +148,7 @@ public static ProcessedImage DressImage(Camera camera, byte[] snapshot, IEnumera
///
/// Saves the original unprocessed image from the provided byte array to the camera's capture directory.
///
+ ///
/// The camera to save the image for.
/// The image to save.
public static string SaveOriginalImage(ILogger logger, Camera camera, byte[] snapshot)
@@ -166,8 +161,10 @@ public static string SaveOriginalImage(ILogger logger, Camera camera, byte[] sna
///
/// Saves the image to the camera's capture directory.
///
+ ///
/// The camera to save the image for.
/// The image to save.
+ ///
private static string SaveImage(ILogger logger, Camera camera, SKBitmap image, string suffix = null)
{
Stopwatch stopwatch = Stopwatch.StartNew();
@@ -228,9 +225,9 @@ private static string SaveImage(ILogger logger, Camera camera, SKBitmap image, s
///
- /// Parses the provided colour name into an SKColor.
+ /// Parses the provided hex name into an SKColor.
///
- /// The string to parse.
+ /// The string to parse.
private static SKColor GetColour(string hex)
{
if (!SKColor.TryParse(hex, out SKColor colour))
diff --git a/SynoAI/Services/SynologyService.cs b/SynoAI/Services/SynologyService.cs
index abb1319..15b7d4c 100644
--- a/SynoAI/Services/SynologyService.cs
+++ b/SynoAI/Services/SynologyService.cs
@@ -1,18 +1,11 @@
-using Microsoft.Extensions.Hosting;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
+using Newtonsoft.Json;
using SynoAI.Models;
-using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Net;
-using System.Net.Http;
-using System.Threading.Tasks;
using System.Web;
namespace SynoAI.Services
{
- public class SynologyService : ISynologyService
+ internal class SynologyService : ISynologyService
{
///
/// The current cookie with valid authentication.
@@ -40,8 +33,8 @@ public class SynologyService : ISynologyService
///
private static string _cameraPath { get; set; }
- private IHostApplicationLifetime _applicationLifetime;
- private ILogger _logger;
+ private readonly IHostApplicationLifetime _applicationLifetime;
+ private readonly ILogger _logger;
public SynologyService(IHostApplicationLifetime applicationLifetime, ILogger logger)
{
@@ -258,7 +251,7 @@ public async Task TakeSnapshotAsync(string cameraName)
/// The type of the return 'data'.
/// The message to parse.
/// A Synology response object.
- private async Task> GetResponse(HttpResponseMessage message)
+ private static async Task> GetResponse(HttpResponseMessage message)
{
string content = await message.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject>(content);
@@ -269,7 +262,7 @@ private async Task> GetResponse(HttpResponseMessage messa
///
/// The message to parse.
/// A Synology response object.
- private async Task GetErrorResponse(HttpResponseMessage message)
+ private static async Task GetErrorResponse(HttpResponseMessage message)
{
string content = await message.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject(content);
@@ -353,7 +346,7 @@ public async Task InitialiseAsync()
/// The base URI.
/// The container for the cookies.
/// An HttpClient.
- private HttpClient GetHttpClient(string baseAddress, CookieContainer cookieContainer = null)
+ private static HttpClient GetHttpClient(string baseAddress, CookieContainer cookieContainer = null)
{
Uri uri = new Uri(baseAddress);
return GetHttpClient(uri, cookieContainer);
@@ -365,7 +358,7 @@ private HttpClient GetHttpClient(string baseAddress, CookieContainer cookieConta
/// The base URI.
/// The container for the cookies.
/// An HttpClient.
- private HttpClient GetHttpClient(Uri baseUri, CookieContainer cookieContainer = null)
+ private static HttpClient GetHttpClient(Uri baseUri, CookieContainer cookieContainer = null)
{
HttpClientHandler httpClientHandler = new HttpClientHandler();
if (cookieContainer != null)
diff --git a/SynoAI/Startup.cs b/SynoAI/Startup.cs
index fd91a24..b04d624 100644
--- a/SynoAI/Startup.cs
+++ b/SynoAI/Startup.cs
@@ -1,15 +1,6 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using SynoAI.Services;
-using System.Threading.Tasks;
using SynoAI.Hubs;
-using System.Collections.Generic;
-using System.Linq;
namespace SynoAI
{
diff --git a/SynoAI/SynoAI.csproj b/SynoAI/SynoAI.csproj
index 2e5484e..57bdfb2 100644
--- a/SynoAI/SynoAI.csproj
+++ b/SynoAI/SynoAI.csproj
@@ -1,25 +1,44 @@
-
+
-
- net5.0
- 28d148b3-8b53-4408-a54f-bf5663c58802
- Linux
-
+
+ net7.0
+ latest
+ strict
+ disable
+ true
+ 28d148b3-8b53-4408-a54f-bf5663c58802
+ Linux
+ enable
+ true
+ 6.0-minimum
+
-
-
-
+
+ True
+ True
+ CS1591;CA1416;CA2254
+
-
-
-
-
-
-
-
-
-
-
-
+
+ True
+ True
+ CS1591;CA1416;CA2254
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SynoAI/Views/Home/Hour.cshtml b/SynoAI/Views/Home/Hour.cshtml
index 0f7a085..cec73b7 100644
--- a/SynoAI/Views/Home/Hour.cshtml
+++ b/SynoAI/Views/Home/Hour.cshtml
@@ -1,5 +1,4 @@
@using SynoAI.Models
-@using System
@{
GraphDraw graphDraw = new GraphDraw();
graphDraw.GraphWidth = 648;
diff --git a/SynoAI/Views/Home/Index.cshtml b/SynoAI/Views/Home/Index.cshtml
index faa2ea2..9348acf 100644
--- a/SynoAI/Views/Home/Index.cshtml
+++ b/SynoAI/Views/Home/Index.cshtml
@@ -1,5 +1,4 @@
@using SynoAI.Models
-@using System
@{
GraphDraw graphDraw = new GraphDraw();
graphDraw.GraphWidth = 648;
diff --git a/SynoAI/Views/Home/Minute.cshtml b/SynoAI/Views/Home/Minute.cshtml
index e90b308..6a819fc 100644
--- a/SynoAI/Views/Home/Minute.cshtml
+++ b/SynoAI/Views/Home/Minute.cshtml
@@ -1,5 +1,3 @@
-@using SynoAI.Models
-@using System
@{
DateTime date = (DateTime)ViewData["date"];
string camera = ViewData["camera"].ToString();
diff --git a/SynoAI/Views/Home/Realtime.cshtml b/SynoAI/Views/Home/Realtime.cshtml
index a707668..7ef0d21 100644
--- a/SynoAI/Views/Home/Realtime.cshtml
+++ b/SynoAI/Views/Home/Realtime.cshtml
@@ -1,5 +1,3 @@
-@using SynoAI.Models
-@using System
@{
string camera = ViewData["camera"].ToString();
}
diff --git a/SynoAI/packages.lock.json b/SynoAI/packages.lock.json
new file mode 100644
index 0000000..dfe79fb
--- /dev/null
+++ b/SynoAI/packages.lock.json
@@ -0,0 +1,171 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net7.0": {
+ "MailKit": {
+ "type": "Direct",
+ "requested": "[3.4.3, )",
+ "resolved": "3.4.3",
+ "contentHash": "Iewef8mcE1B1LrVudxQjQ0LcriPPeTbxmWMoHQzFS+P6TpEY2eVDbdKdB0Qnbmqr/5w7WfK2mNWuoSX9pI470g==",
+ "dependencies": {
+ "MimeKit": "3.4.3"
+ }
+ },
+ "Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
+ "type": "Direct",
+ "requested": "[1.17.0, )",
+ "resolved": "1.17.0",
+ "contentHash": "gfDtAL1WhkjbRdbZlt/ZeQYCbgRpNCZCGj+yeqHObsNFRDHjq8qZJOX9AyTxJpSRYMi9SJk7JDyAbbVYRgEhAA=="
+ },
+ "MQTTnet": {
+ "type": "Direct",
+ "requested": "[4.1.4.563, )",
+ "resolved": "4.1.4.563",
+ "contentHash": "gO9segUcKyQJcjV7w7OOdoAIkec7cUN65vEhYutbdWcj4rbtz/oL/RDvQVVbameXc6ChkjKx7/HbO+R8ejAUZQ=="
+ },
+ "Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "R2pZ3B0UjeyHShm9vG+Tu0EBb2lC8b0dFzV9gVn50ofHXh9Smjk6kTn7A/FdAsC8B5cKib1OnGYOXxRBz5XQDg=="
+ },
+ "SkiaSharp": {
+ "type": "Direct",
+ "requested": "[2.88.3, )",
+ "resolved": "2.88.3",
+ "contentHash": "GG8X3EdfwyBfwjl639UIiOVOKEdeoqDgYrz0P1MUCnefXt9cofN+AK8YB/v1+5cLMr03ieWCQdDmPqnFIzSxZw==",
+ "dependencies": {
+ "SkiaSharp.NativeAssets.Win32": "2.88.3",
+ "SkiaSharp.NativeAssets.macOS": "2.88.3"
+ }
+ },
+ "SkiaSharp.NativeAssets.Linux": {
+ "type": "Direct",
+ "requested": "[2.88.3, )",
+ "resolved": "2.88.3",
+ "contentHash": "wz29evZVWRqN7WHfenFwQIgqtr8f5vHCutcl1XuhWrHTRZeaIBk7ngjhyHpjUMcQxtIEAdq34ZRvMQshsBYjqg==",
+ "dependencies": {
+ "SkiaSharp": "2.88.3"
+ }
+ },
+ "Swashbuckle.AspNetCore": {
+ "type": "Direct",
+ "requested": "[6.4.0, )",
+ "resolved": "6.4.0",
+ "contentHash": "eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==",
+ "dependencies": {
+ "Microsoft.Extensions.ApiDescription.Server": "6.0.5",
+ "Swashbuckle.AspNetCore.Swagger": "6.4.0",
+ "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0",
+ "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0"
+ }
+ },
+ "System.Drawing.Common": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
+ "dependencies": {
+ "Microsoft.Win32.SystemEvents": "7.0.0"
+ }
+ },
+ "Telegram.Bot": {
+ "type": "Direct",
+ "requested": "[18.0.0, )",
+ "resolved": "18.0.0",
+ "contentHash": "BD0UchUXINymCGS+1O1tv2enCRyv+VbSJQAgfnueTZs3j7K4XXyJyW0CgyJleTrqB1oq1hS1ux6gBpi3Ajp+ZQ==",
+ "dependencies": {
+ "Newtonsoft.Json": "12.0.2"
+ }
+ },
+ "Microsoft.Extensions.ApiDescription.Server": {
+ "type": "Transitive",
+ "resolved": "6.0.5",
+ "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw=="
+ },
+ "Microsoft.OpenApi": {
+ "type": "Transitive",
+ "resolved": "1.2.3",
+ "contentHash": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw=="
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ=="
+ },
+ "MimeKit": {
+ "type": "Transitive",
+ "resolved": "3.4.3",
+ "contentHash": "7TSAcziEwk0bGWODpFTQASghXfYNBBa5VdM8KO4s5SBp5LYgIVXcQsdLBpPQ2XhZW74wfaX8RBUMs1GTMlLJcA==",
+ "dependencies": {
+ "Portable.BouncyCastle": "1.9.0",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Security.Cryptography.Pkcs": "6.0.0",
+ "System.Text.Encoding.CodePages": "6.0.0"
+ }
+ },
+ "Portable.BouncyCastle": {
+ "type": "Transitive",
+ "resolved": "1.9.0",
+ "contentHash": "eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw=="
+ },
+ "SkiaSharp.NativeAssets.macOS": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "CEbWAXMGFkPV3S1snBKK7jEG3+xud/9kmSAhu0BEUKKtlMdxx+Qal0U9bntQREM9QpqP5xLWZooodi8IlV8MEg=="
+ },
+ "SkiaSharp.NativeAssets.Win32": {
+ "type": "Transitive",
+ "resolved": "2.88.3",
+ "contentHash": "MU4ASL8VAbTv5vSw1PoiWjjjpjtGhWtFYuJnrN4sNHFCePb2ohQij9JhSdqLLxk7RpRtWPdV93fbA53Pt+J0yw=="
+ },
+ "Swashbuckle.AspNetCore.Swagger": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==",
+ "dependencies": {
+ "Microsoft.OpenApi": "1.2.3"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerGen": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==",
+ "dependencies": {
+ "Swashbuckle.AspNetCore.Swagger": "6.4.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerUI": {
+ "type": "Transitive",
+ "resolved": "6.4.0",
+ "contentHash": "1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ=="
+ },
+ "System.Formats.Asn1": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Security.Cryptography.Pkcs": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "elM3x+xSRhzQysiqo85SbidJJ2YbZlnvmh+53TuSZHsD7dNuuEWser+9EFtY+rYupBwkq2avc6ZCO3/6qACgmg==",
+ "dependencies": {
+ "System.Formats.Asn1": "6.0.0"
+ }
+ },
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file