# Features — magusEvents

Evidence date: 2026-10-09. Inspected revision: `master` at `bb6e583` (2019-08-16).

Source: `git@bitbucket.org:overdrive/magusevents.git`.

No feature list existed in the source repository or in `silicon_ark/magusEvents/` before this file. Status words: **Implemented**, **Inactive**, **Removed**, **Not in repository**. "Planned" is unused because the repository does not describe future work.

## Current (at tip)

| Feature | What it does | Evidence | Status |
|---|---|---|---|
| Full-screen shell | Borderless maximized 1920×1080 window, header plus body. | `MainWindow.xaml` | Implemented |
| Startup routing | No active event → Setup. `IsMealZone = 1` → meal scan. Else zone scan. | `MainWindow.xaml.cs` | Implemented |
| Event header | Name, venue, `DateFrom`, clock, optional base64 logo. | `header.xaml.cs` | Implemented |
| Online dot | Green or red from a GET of `https://www.footprintapp.net/api/tourn/`, once a second. | `header.xaml.cs`, `Webservices.CheckForInternetConnection` | Implemented |
| Confirmed exit | Yes/No on the header exit image. Settings exit closes immediately. | `header.xaml.cs`, `Setup.Exit_App` | Implemented |
| Online / offline mode | Process-wide `WorkMode`, default `ON` every launch. Toggle on settings. Zone screen label and timers follow it. | `MainWindow.xaml.cs`, `Setup.ToggleButton_Click`, `Scan.xaml.cs` | Implemented |
| Event catalogue | When the probe succeeds, GET `.../api/Accreditation/getevents` and list them. | `Setup.GetEventsData` | Implemented |
| Single active event | Save clears `Active` on every event, then writes the chosen row and its zones. | `Setup.Save_Data` | Implemented |
| Zone schedule editing | From, to, lock, and active per zone, kept in memory until Save. | `Setup.xaml.cs` check and key handlers | Implemented |
| Meal day and session | Buttons from `TotalDays` and `MealsPerDay`, stored as `DayNumber` and `SessionNumer`. | `Setup.numberofdays` | Implemented |
| Meal-zone flag | Checkbox stored as `IsMealZone`. Read at the next process start. | `Setup.Save_Data`, `MainWindow.getbody` | Implemented |
| Applicant download | Paged GET `.../getapplicants/ac/{AID}/id/{AASID}`. Skips JSON rows with an empty barcode. | `Setup.GetNewData`, `Person.save_to_db(string)` | Implemented |
| Profile images | One AAID at a time into `c:\temp_acc\{AAID}.txt`, then `User_pic = 1`. | `Setup.GetProfileImages` | Implemented |
| CSV import | `c:\temp_acc\accreditations.csv`, 16 columns, no header skip. | `Setup.Import_CSV` | Implemented |
| Zone scan | Keyboard barcode, local person match, time-windowed zones, GRANTED or DENIED, asterisk system sound on grant, `Bazz.wav` on deny, `scan.txt`. | `Scan.xaml.cs` | Implemented |
| All-access display | Substring `312` in `aZones`, or a matched zone with `ZTID = 24`, shows ALL ACCESS. | `Scan.UserProfile`, `Scan.xaml` | Implemented |
| Result timeout | New scan page after 10 seconds. | `Scan` and `Scanmeal` constructors | Implemented |
| Online applicant refresh | Every 240 seconds on the zone screen, background thread, `LastUpdate.txt`. | `Scan.Download_UpdateAsync`, `Webservices.CheckUpdates` | Implemented |
| Online image refresh | Every 120 seconds on the zone screen. | `Scan.Download_Image` | Implemented |
| Meal scan | Same zone gate, then one `Food` row per person, day, and session. Repeat is DENIED. | `Scanmeal.ViewProfile` | Implemented |
| Meal undo barcode | Text `UNDO\|{AASID}\|day\|{day}\|season\|{session}` deletes that `Food` row. | `Scanmeal.ScanninAcc` | Implemented |
| Local SQLite | `c:\temp_acc\database.sqlite3` created with four tables on first run. | `Database` constructor | Implemented |
| Scan logs | Append-only `scan.txt` and `meal.txt`. | `Scan.UserProfile`, `Scanmeal.ViewProfile`, `header` constructor | Implemented |

## Inactive code (compiled, not on the live path)

| Feature | Why it is inactive | Evidence |
|---|---|---|
| NFC tag read | `NFCHandler.Init` and `startpulling` are inside comments in both scan constructors. The zone callback also requires the keyboard buffer field to be non-empty. `NFCSharp` is referenced from a path outside the repo. | `Scan.xaml.cs`, `Scanmeal.xaml.cs`, `MagusEvents.csproj` |
| TEST button | `Visibility="Hidden"`, no click handler, on both scan layouts. | `Scan.xaml`, `Scanmeal.xaml` |
| Sync schedule controls | Static XAML (5 min … Hour). Not read or saved. Matching `Events` columns are never written. | `Setup.xaml`, `Setup.Save_Data` |
| Reset data | `Reset_Data` is an empty method. | `Setup.xaml.cs` |
| Meal sounds | `playSound_OK` and `playSound_No` are not called. The calls are commented out. They also look beside the exe, not in `images\`. | `Scanmeal.xaml.cs` |
| Undo QR image | The QR generator block is commented out. The parser remains. | `Scanmeal.ViewProfile` |
| JSON check-in report | `Save_Report` is not called. | `Scanmeal.xaml.cs` |
| `Webservices.GetNewData` | Would download applicants on a different URL and delete `Persons` first. The settings save line that called it is commented out. | `Webservices.cs`, `Setup.Save_Data` |
| `CheckUpdatesAsync` / `SaveNewUpdates` | Different URL (`.../getupdates/...`) and a `LastUpdate.txt` next to the exe. No caller. | `Webservices.cs` |
| `GetBarcodeLength` | Reads `Events.BarcodeLength`. No caller. | `Database.cs` |
| Entity Framework | Packages and `App.config` providers are present. No `DbContext` in the project. Queries use `SQLiteCommand`. | `packages.config`, `App.config` |
| NAudio playback | Package referenced. Sounds use `System.Media.SoundPlayer`. | `Scan.xaml.cs`, `packages.config` |
| Local event list fallback | `GetEventsDataLocalData` is commented out. Offline settings cannot list events. | `Setup.get_time` |

## Removed

| Feature | Where it went | Evidence |
|---|---|---|
| Bitbucket starter README | Deleted in `43bc412`. It was the host's getting-started text, not a product description. | `git show 0c4d14f:README.md` |
| ClickOnce `Build App/` | Present in `43bc412` as `MagusEvents_1_0_0_12` (exe, `setup.exe`, `MagusEvents.application`, deployed DLLs including `NFCSharp.dll`). Deleted in `bb6e583`. The csproj still has ClickOnce properties and `ApplicationRevision` 12. | `git diff --stat 43bc412 bb6e583` |

## Not in this repository

| Item | Note |
|---|---|
| Footprint server | Called, not implemented here. |
| Tests, pipeline, Docker, installer project at tip | None tracked. |
| `sonar-project.properties`, `sonarqube_scan.bat` | Named in the 2026-09-28 onboarding snapshot. Not in Git at `bb6e583`. |
| NuGet `packages\`, `x64\`, `x86\` interop DLLs, `MagusEvents_TemporaryKey.pfx` | Ignored or absent. The csproj still references them. |
| Settings PIN | The Xamarin repository has a four-digit code. This desktop repository does not. |
| Upload of scan or meal logs | Files are local only. |
| Accounts and permissions | None. |

## Recently changed

The only product diff after the first stable commit is `bb6e583` (2019-08-16), in `Scan.xaml.cs`:

- Image timer from 15 seconds to 120 seconds.
- Applicant-update timer from 20 seconds to 240 seconds.
- `CheckUpdates` runs on a new `Thread`. On exception the code calls `Thread.Abort`.

No commit after that date.

## Planned

None found. No TODO that describes a product increment. One comment in both scan pages says "TO DO use a StringBuilder instead" on the barcode buffer. That is a code note, not a scheduled feature.

## Deprecated

No type or screen is marked obsolete. The inactive rows above are the closest thing: behaviour that is still in the tree and not started by the current UI.
