This repository was archived by the owner on Oct 1, 2026. It is now read-only.
Repository navigation
Integrate camera testing, schedule time zones and retention preview - #59
Merged
Merged
Conversation
Addresses both review findings. Deletion no longer treats a false existence check as proof of absence. Directory.Exists and File.Exists return false when the lookup itself fails as well as when the path is missing, so guarding each delete on one meant a failed lookup skipped the delete and still counted a completed deletion, dropping a session that was still on disk. Deletes are now attempted unconditionally: a missing path is a no-op, and a genuine failure surfaces as an exception rather than as silence. Existence checks moved after the deletes, where they confirm the postcondition #34 asks for -- both metadata and directory gone before this counts. Anything left behind is reported as a failed ID and the session stays in memory for a later run to retry. The cleanup POST stored DeletedBytes, a long, in TempData. The default Razor Pages serializer rejects that type, so persisting TempData on the redirect threw and the POST returned 500 even for a zero-byte result. It now crosses as an invariant-culture string and is parsed back the same way in the view. Regression coverage, each confirmed failing against the previous code: failed metadata lookup, failed directory lookup, a silent delete that leaves the file behind, and a POST/redirect test that goes through the real TempData provider.
This was referenced Sep 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Result
Integrates completed feature PRs #45 (test saved camera profiles), #50 (explicit schedule time zone), and #57 (retention preview and visible partial failures) against current main while preserving the authors' commits. GitHub requires up-to-date feature branches; this owned integration branch meets that requirement without changing contributor branches.
Review found a scheduling regression: a weekly schedule without a time window threw instead of retaining its previous whole-day behavior. The integration restores that behavior. The new regression test failed with InvalidOperationException before the fix and now checks Monday coverage plus the following week's boundary.
Validation
Combined source, transferred with Git archive to an isolated Linux directory: locked restore PASS; Release build zero warnings/errors; all 170 tests passed (123 IPCamLapse, 47 embedded OpenCamInterop), none skipped; format verification PASS; dependency audit reported no known vulnerabilities. Original PR Windows/Ubuntu checks were green; this PR reruns both platforms on the complete merge result.
No real camera, installation, network or live data was changed.
Closes #25. Closes #33. Closes #34. Integrates #45, #50 and #57.
Status for the owner
Ready for source merge after current CI passes, under the owner's request to finish and merge pending work.