Codemaru 1.0.0.0
QR 코드, 모바일 랜딩 페이지, vCard 연락처 저장과 명함 디자인을 한 화면에서 제공하는 디지털 명함 서비스입니다.
로딩중...
검색중...
일치하는것 없음
CardHybridSession.cs
이 파일의 문서화 페이지로 가기
1using System.Diagnostics;
4
5namespace Codemaru.Services;
6
23public sealed class CardHybridSession
24{
33 private readonly object _sync = new();
42 private readonly IQrSvgGenerator _qr;
43
52 private CardHybridState? _state;
53
87 {
88 _qr = qr ?? throw new ArgumentNullException(nameof(qr));
89 }
90
99 public CardHybridState State =>
100 _state ?? CardHybridState.CreateDefault(_qr.CreateSvg(CardProfile.Default.LandingUrl));
101
111
120 public event EventHandler<CardHybridState>? StateChanged;
121
146 public Task InitializeAsync(CancellationToken cancellationToken = default)
147 {
148 lock (_sync)
149 {
150 if (_state is not null)
151 {
152 return Task.CompletedTask;
153 }
154
155 _state = CardHybridState.CreateDefault(_qr.CreateSvg(CardProfile.Default.LandingUrl));
156 }
157
159 return Task.CompletedTask;
160 }
161
170 private void NotifyStateChanged()
171 {
172 var handlers = StateChanged?.GetInvocationList();
173 if (handlers is null)
174 {
175 return;
176 }
177
178 foreach (var handler in handlers)
179 {
180 try
181 {
182 ((EventHandler<CardHybridState>)handler).Invoke(this, State);
183 }
184 catch (Exception ex)
185 {
186 Debug.WriteLine($"CardHybrid state handler failed: {ex}");
187 }
188 }
189 }
190}
record CardHybridUser(string Id, string Email, string DisplayName, DateTime SignedInAt)
record CardProfile(string Brand, string Tagline, string BackBrand, string BackTagline, string Category, string Name, string Role, string Email, string Phone, string Address, string Website, string LandingSlug, string AccentColor, string ShortBio, string LandingDescription, string VCardNote, string InternalMemo, string? LogoImageDataUrl, bool RemoveLogoBackground, double CardWidthMm, double CardHeightMm, string FrontFontFamily, string BackFontFamily, double FrontBrandFontSize, double FrontTaglineFontSize, double FrontCategoryFontSize, double FrontEmailFontSize, double BackBrandFontSize, double BackTaglineFontSize, double BackNameFontSize, double BackRoleFontSize, string LandingTheme, bool IncludePhoneInVCard, bool IncludeAddressInVCard, string? ImportedFrontImageDataUrl, string? ImportedBackImageDataUrl)
CardHybridSession(IQrSvgGenerator qr, ICardProfileStore _)
Task InitializeAsync(CancellationToken cancellationToken=default)
EventHandler< CardHybridState >? StateChanged