16 Commits
Author SHA1 Message Date
Kayori 4212d0ebce add build script 2026-09-07 21:04:25 +02:00
Kayori 5483729d63 Fully working get last log and get recent log 2026-09-07 20:16:54 +02:00
Kayori e5bdb3eb95 Fix multi-bill display, charge amount parsing, and charge log responses
- chargeoptions is the real field gating 2000/5000/10000 yen display
- chargeid (not chargenum) carries the actual denomination on charge
- getrecentcharge/getlastlog: fixed num mismatch, added missing result
  section, and added placeholder items for empty result sets
2026-09-07 02:14:14 +02:00
Kayori 68b77bb9c3 Fix PASELI recharge config crash and profile/schema mismatches
- GetConfigEaChargeHandler: was declared as Handler<EmptyRequest, T>,
  which made HandlerService attempt to XML-deserialize an EmptyRequest
  against the incoming <eacharge> root, crashing on every getconf call.
  Switched to HandlerWithoutRequest<T>, matching every other
  parameterless handler (e.g. SppassOpenHandler).

- ChargeMachinePlugin.DoesProfileExist: was a synchronous Func<bool>,
  but PluginService.DoesProfileExistAsync casts the DynamicInvoke result
  to Task<bool>, throwing InvalidCastException on every card inquire.
  Now returns Task.FromResult(true) - a PASELI profile always exists
  once a user is created, so this plugin never needs to report "no
  profile" here.

- EaChargeConfigResponse: dropped the multibills/readagreement fields
  entirely and fixed articlelist's XML shape. A real getconf response
  (captured via spice2x's automap against the genuine Konami server)
  has neither field at all, and wraps articlelist entries in <item>
  children rather than repeating sibling <articlelist> elements. The
  denomination-button limitation this was chasing turned out to be an
  unrelated spice2x bill-validator emulation gap (see spice2x issue
  #123), not anything server-side.

- GetConfigEaChargeHandler: DOCMT_* article types now send an empty
  articledoc, matching the real server - the disclosure/agreement text
  is rendered client-side from a bundled asset, not delivered over the
  wire. Sending real text there produced a solid black screen on a
  real cabinet instead of the disclosure text.

Claude-Session: https://claude.ai/code/session_012FiU5Qe8fbePFxraxWHSd5
2026-09-06 23:54:15 +02:00
Kayori 12fbeb84f0 Move the stringed version into a class 2026-08-30 16:52:33 +02:00
Kayori 4933b200ee Added mising ui manifest 2026-08-21 00:21:55 +02:00
Kayori e99f9ec61e Added Enum for ArticleType and Basic messages 2026-08-10 10:32:46 +02:00
Kayori fa610a9bc6 Add EF Core persistence for charge machine plugin
Introduce ChargeMachineDbContext (SQLite) with ArticleContent and
ChargeHistory entities, plus migrations, and wire it up via
ConfigurePluginServices/OnAppInitialize with startup migration and
article-content seeding.

- ChargeEaChargeHandler now records each charge to ChargeHistory
- GetConfigEaChargeHandler serves article config from the DB instead
  of hardcoded values, and adds multibills/readagreement fields
- GetLastLogEaChargeHandler returns real daily totals and recent
  charge items from history, keyed by session card
- Add GetRecentChargeEaChargeHandler (paginated charge history) and
  OpChPassEaChargeHandler (PIN change)
- Update handlers to the new HandleAsync/primary-constructor style,
  file-scoped namespaces
- Bump EF Core/Identity packages and Abstractions reference to
  net10.0/10.0.10
2026-08-09 17:28:14 +02:00
Kayori c4bcba3b66 Fix for the new DoesProfileExist delegate so i can inject DI services 2026-08-03 23:38:24 +02:00
Kayori 90e95e67e1 Update for force encoding 2026-01-17 20:29:21 +01:00
Kayori b19b44728c Update to use new handler methods 2025-09-25 23:54:19 +02:00
Kayori 6126676fa1 Add stuff for the test menu. 2025-07-31 00:08:03 +02:00
Kayori 4ea74ea1f0 Work 2025-07-29 14:49:39 +02:00
Kayori d0169afe13 Add ignore 2025-07-29 14:49:15 +02:00
Kayori 4b7b8e6433 Migrate to slnx 2025-07-29 14:48:21 +02:00
Kayori dfd9512701 Init 2025-06-22 20:18:29 +02:00