diff --git a/Samples/Genetec.Dap.CodeSamples.sln b/Samples/Genetec.Dap.CodeSamples.sln index 0f809f9..015b0d4 100644 --- a/Samples/Genetec.Dap.CodeSamples.sln +++ b/Samples/Genetec.Dap.CodeSamples.sln @@ -1601,6 +1601,7 @@ Global Shared\Shared.projitems*{5a217bbf-eafa-4f52-b81a-02c4232da68e}*SharedItemsImports = 5 Shared\Shared.projitems*{5a3ca774-e381-4e87-b8d9-091644b52222}*SharedItemsImports = 5 Shared\Shared.projitems*{5d7b3be5-9b6a-4723-a316-78918ade866a}*SharedItemsImports = 5 + Shared\Shared.projitems*{5e1abc70-44e0-437c-a9ea-90bfd7bb7449}*SharedItemsImports = 5 Shared\Shared.projitems*{62ff8f2f-fe3a-4c9e-ab42-fc58184971e0}*SharedItemsImports = 5 Shared\Shared.projitems*{63c46961-ccb1-4dd1-a292-8cf1de362f94}*SharedItemsImports = 5 Shared\Shared.projitems*{691fb77e-e114-49bf-8fcf-c0957696e305}*SharedItemsImports = 5 diff --git a/Samples/Shared/Shared.projitems b/Samples/Shared/Shared.projitems index 9ebcf32..279bcfa 100644 --- a/Samples/Shared/Shared.projitems +++ b/Samples/Shared/Shared.projitems @@ -16,5 +16,7 @@ + + \ No newline at end of file diff --git a/Samples/Workspace SDK/CardholderFieldsExtractorSample/VCard.cs b/Samples/Shared/VCard.cs similarity index 100% rename from Samples/Workspace SDK/CardholderFieldsExtractorSample/VCard.cs rename to Samples/Shared/VCard.cs diff --git a/Samples/Workspace SDK/CardholderFieldsExtractorSample/VCardReader.cs b/Samples/Shared/VCardReader.cs similarity index 100% rename from Samples/Workspace SDK/CardholderFieldsExtractorSample/VCardReader.cs rename to Samples/Shared/VCardReader.cs diff --git a/Samples/Workspace SDK/CardholderFieldsExtractorSample/CardholderFieldsExtractorSample.csproj b/Samples/Workspace SDK/CardholderFieldsExtractorSample/CardholderFieldsExtractorSample.csproj index 82c10b3..236bdf8 100644 --- a/Samples/Workspace SDK/CardholderFieldsExtractorSample/CardholderFieldsExtractorSample.csproj +++ b/Samples/Workspace SDK/CardholderFieldsExtractorSample/CardholderFieldsExtractorSample.csproj @@ -77,4 +77,6 @@ + + diff --git a/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleCardholderFieldsExtractor.cs b/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleCardholderFieldsExtractor.cs index a5ab9d4..86fce71 100644 --- a/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleCardholderFieldsExtractor.cs +++ b/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleCardholderFieldsExtractor.cs @@ -12,30 +12,30 @@ public class SampleCardholderFieldsExtractor : CardholderFieldsExtractor { public override string Name => "Read vCard..."; - public override Guid UniqueId { get; } = new("88F33E43-1E51-4504-95BF-ADD2FBCBA8AD"); // TODO: Replace with your own GUID + public override Guid UniqueId { get; } = new("88F33E43-1E51-4504-95BF-ADD2FBCBA8AD"); public override CardholderFields GetFields(CardholderFieldsExtractorData data) { - var openFileDialog = new OpenFileDialog + var dialog = new OpenFileDialog { Filter = "vCard files (*.vcf)|*.vcf|All files (*.*)|*.*", Title = "Open vCard File" }; - if (openFileDialog.ShowDialog() == true) + if (dialog.ShowDialog() != true) + return null; + + VCard vCardInfo = VCardReader.ReadVCard(dialog.FileName); + if (vCardInfo != null) { - VCard vCardInfo = VCardReader.ReadVCard(openFileDialog.FileName); - if (vCardInfo != null) + return new CardholderFields { - return new CardholderFields - { - FirstName = vCardInfo.FirstName, - LastName = vCardInfo.LastName, - Email = vCardInfo.Emails.FirstOrDefault(), - Picture = vCardInfo.Picture, - Description = vCardInfo.Note - }; - } + FirstName = vCardInfo.FirstName, + LastName = vCardInfo.LastName, + Email = vCardInfo.Emails.FirstOrDefault(), + Picture = vCardInfo.Picture, + Description = vCardInfo.Note + }; } return null; diff --git a/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleModule.cs b/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleModule.cs index 726bb2e..b38a195 100644 --- a/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleModule.cs +++ b/Samples/Workspace SDK/CardholderFieldsExtractorSample/SampleModule.cs @@ -3,18 +3,29 @@ namespace Genetec.Dap.CodeSamples; +using Genetec.Sdk; using Sdk.Workspace.Modules; public class SampleModule : Module { + private SampleCardholderFieldsExtractor m_extractor; + public override void Load() { - var component = new SampleCardholderFieldsExtractor(); - component.Initialize(Workspace); - Workspace.Components.Register(component); + if (Workspace.ApplicationType is ApplicationType.SecurityDesk or ApplicationType.ConfigTool) + { + m_extractor = new SampleCardholderFieldsExtractor(); + m_extractor.Initialize(Workspace); + Workspace.Components.Register(m_extractor); + } } public override void Unload() { + if (m_extractor != null) + { + Workspace.Components.Unregister(m_extractor); + m_extractor = null; + } } } \ No newline at end of file diff --git a/Samples/Workspace SDK/ImageExtractorSample/SampleImageExtractor.cs b/Samples/Workspace SDK/ImageExtractorSample/SampleImageExtractor.cs index 9f053b1..809f5da 100644 --- a/Samples/Workspace SDK/ImageExtractorSample/SampleImageExtractor.cs +++ b/Samples/Workspace SDK/ImageExtractorSample/SampleImageExtractor.cs @@ -3,11 +3,11 @@ namespace Genetec.Dap.CodeSamples; +using Microsoft.Win32; +using Sdk.Workspace.Components.ImageExtractor; using System; using System.Windows.Media; using System.Windows.Media.Imaging; -using Microsoft.Win32; -using Sdk.Workspace.Components.ImageExtractor; public sealed class SampleImageExtractor : ImageExtractor { @@ -17,16 +17,18 @@ public sealed class SampleImageExtractor : ImageExtractor public override Guid UniqueId { get; } = new Guid("5EDBB0B6-8253-433E-99A1-9021E498437A"); - public override ImageSource GetImage() { - var openFileDialog = new OpenFileDialog + var dialog = new OpenFileDialog { Filter = "vCard files (*.vcf)|*.vcf|All files (*.*)|*.*", - Title = "Open vCard File" + Title = "Select vCard File" }; - return openFileDialog.ShowDialog() == true ? VCardReader.ReadVCard(openFileDialog.FileName)?.Picture : null; + if (dialog.ShowDialog() != true) + return null; + + return VCardReader.ReadVCard(dialog.FileName)?.Picture; } public override bool SupportsContext(ImageExtractorContext context) diff --git a/Samples/Workspace SDK/ImageExtractorSample/SampleModule.cs b/Samples/Workspace SDK/ImageExtractorSample/SampleModule.cs index f1f48d8..9401602 100644 --- a/Samples/Workspace SDK/ImageExtractorSample/SampleModule.cs +++ b/Samples/Workspace SDK/ImageExtractorSample/SampleModule.cs @@ -3,20 +3,29 @@ namespace Genetec.Dap.CodeSamples; +using Genetec.Sdk; using Sdk.Workspace.Modules; public class SampleModule : Module { - static SampleModule() => AssemblyResolver.Initialize(); + private SampleImageExtractor m_imageExtractor; public override void Load() { - var component = new SampleImageExtractor(); - component.Initialize(Workspace); - Workspace.Components.Register(component); + if (Workspace.ApplicationType is ApplicationType.SecurityDesk or ApplicationType.ConfigTool) + { + m_imageExtractor = new SampleImageExtractor(); + m_imageExtractor.Initialize(Workspace); + Workspace.Components.Register(m_imageExtractor); + } } public override void Unload() { + if (m_imageExtractor != null) + { + Workspace.Components.Unregister(m_imageExtractor); + m_imageExtractor = null; + } } } \ No newline at end of file diff --git a/Samples/Workspace SDK/ImageExtractorSample/VCard.cs b/Samples/Workspace SDK/ImageExtractorSample/VCard.cs deleted file mode 100644 index 44c893e..0000000 --- a/Samples/Workspace SDK/ImageExtractorSample/VCard.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2025 Genetec Inc. -// Licensed under the Apache License, Version 2.0 - -namespace Genetec.Dap.CodeSamples; - -using System.Collections.Generic; -using System.Windows.Media; - -public class VCard -{ - public string FirstName { get; set; } - - public string LastName { get; set; } - - public List Emails { get; } = new List(); - - public string Note { get; set; } - - public ImageSource Picture { get; set; } -} \ No newline at end of file diff --git a/Samples/Workspace SDK/ImageExtractorSample/VCardReader.cs b/Samples/Workspace SDK/ImageExtractorSample/VCardReader.cs deleted file mode 100644 index 8209c34..0000000 --- a/Samples/Workspace SDK/ImageExtractorSample/VCardReader.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2025 Genetec Inc. -// Licensed under the Apache License, Version 2.0 - -namespace Genetec.Dap.CodeSamples; - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using System.Windows.Media; -using System.Windows.Media.Imaging; - -public class VCardReader -{ - public static VCard ReadVCard(string filePath) - { - string vCardText = File.ReadAllText(filePath); - var vcard = new VCard - { - FirstName = ExtractField(vCardText, "FN:"), - LastName = ExtractField(vCardText, "N:").Split(';')[0], // Assuming last name is the first component in the N: field - Note = ExtractField(vCardText, "NOTE:"), - Picture = ExtractPhoto(vCardText) - }; - - vcard.Emails.AddRange(ExtractEmails(vCardText)); - return vcard; - } - - private static string ExtractField(string vCardText, string fieldName) - { - Match match = Regex.Match(vCardText, $"{fieldName}(.*?)(\n(?![ \t])|\r\n(?![ \t])|$)", RegexOptions.Singleline); - return match.Success ? match.Groups[1].Value.Trim() : string.Empty; - } - - private static List ExtractEmails(string vCardText) - { - MatchCollection matches = Regex.Matches(vCardText, "EMAIL;[^:]+:(.*?)\r?\n"); - return matches.Cast().Select(match => match.Groups[1].Value.Trim()).ToList(); - } - - private static ImageSource ExtractPhoto(string vCardText) - { - Match photoMatch = Regex.Match(vCardText, @"PHOTO;ENCODING=b;TYPE=image/jpeg:(.*?)(\n(?![ \t])|\r\n(?![ \t])|$)", RegexOptions.Singleline); - if (photoMatch.Success) - { - string base64Data = photoMatch.Groups[1].Value.Trim().Replace("\n", "").Replace("\r", ""); - - using var stream = new MemoryStream(Convert.FromBase64String(base64Data)); - var bitmap = new BitmapImage(); - bitmap.BeginInit(); - bitmap.StreamSource = stream; - bitmap.CacheOption = BitmapCacheOption.OnLoad; - bitmap.EndInit(); - bitmap.Freeze(); - return bitmap; - } - - return null; - } -} \ No newline at end of file