361 Commits
Author SHA1 Message Date
Cameron bffe604527 Remove potentially confusing TZ from insight generator 2026-04-21 01:55:07 +00:00
Cameron 39c212b0e6 Bump to 1.0.0 for multi-library support 2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 a35b45fd36 feat: expand insight tool result caps and render timestamps in local time
Doubled default row caps for search_rag/get_sms_messages/get_calendar_events/recall_entities and exposed an optional `limit` parameter on each so the agent can tune per call. Render all LLM-facing timestamps as server-local time with explicit offset so smaller models stop misreading UTC as wall-clock time.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 3027a3ffda perf: DB-backed recursive /photos + watcher reconciliation
Recursive listings now query image_exif instead of walking disk, taking
union-mode /photos from ~17s to sub-second on a 10k-file library. The
watcher's full scan prunes stale image_exif rows so the DB stays in
parity with the filesystem when files are deleted externally.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 4a775b5e9b test: cover resolve_library_param and per-library ExifDao filter
Adds 9 unit tests around the library plumbing:
- resolve_library_param branches (absent, empty/whitespace, numeric id,
  name, unknown id, unknown name)
- Library::resolve symmetry with strip_root
- ExifDao::get_all_with_date_taken in union and scoped modes

Introduces SqliteExifDao::from_connection test constructor mirroring the
existing preview_dao pattern so DAO tests can drive an in-memory SQLite.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 b04dd8b601 fix: demote path-not-exists validation errors to debug
The /image cross-library fallback tries the resolved library first and falls
back to any library holding the rel_path. The first attempt emitted error-level
noise on every grid tile in union mode. Split the validation error so only
traversal attempts log at error; missing-file cases log at debug.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 2c8de8dcc6 feat: union /photos and /memories across libraries
When `library` is omitted, both endpoints now walk every configured
library root, interleave the results, and tag each row with its source
library via the parallel `photo_libraries` / per-row `library_id`
arrays. Previously the handlers fell back to the primary library,
silently hiding the rest.

Threads a parallel `file_libraries: Vec<i32>` through the sort/paginate
helpers so library attribution survives sorting and pagination.
Directory names are de-duplicated across libraries.

`get_all_with_date_taken` grows an optional library filter so memories
can scope its EXIF query per-library during the union walk.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 586b735af5 feat: include per-photo library id in /photos response
Adds a parallel `photo_libraries: Vec<i32>` array alongside `photos`
in `PhotosResponse` so clients can render per-thumbnail badges.
Populated with the scoped library id at the two main return sites;
left empty for `/favorites` since favorites are library-agnostic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 c2ee3996be chore: apply cargo fmt + clippy cleanup across crate
Silence forward-looking dead_code on unused DAO modules, annotate
individual placeholder items, rewrite tautological assert!(true/false)
in token tests as panic! arms, and pick up fmt drift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 a0f3bfab5f fix: validate gps-summary path against every library
The /photos/gps-summary handler validated the incoming path against
the primary library's root with new_file=false, which requires the
path to exist on disk. For a viewer opened on a file from a
non-primary library, tapping the GPS link produced activePath =
<folder from lib 2>, the primary-only check failed, and the server
400'd — so the map came up empty.

Validation here is purely a traversal guard (the DAO does a prefix
LIKE against rel_path), so we now accept the path as long as any
configured library can resolve it without escaping its root.

Also applies cargo fmt drift on files touched this session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 54a1df60b8 fix: resolve preview clip rel_path against all libraries
PreviewClipGenerator stripped a single base_path, so videos in a
non-primary library ended up with the absolute path as 'relative'.
On Windows, PathBuf::from(preview_clips_dir).join(absolute) replaces
with the absolute path, and .with_extension("mp4") on a .mp4 input
yields the input path — ffmpeg then errors out with 'cannot edit
existing files in place'.

The generator now holds Vec<Library> and strips whichever root
actually contains the video, with separator normalization to match
the rest of the code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 7becbc0737 fix: normalize rel_path separators in non-recursive /photos listing
On Windows, strip_prefix preserves backslashes, so the non-recursive
branch was looking up tags for 'Melissa\img1.jpg' while tagged_photo
stores 'Melissa/img1.jpg' — every file was filtered out. Normalize to
'/' to match the watcher and populate_knowledge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 e6ee38edec fix: resolve media across libraries for video, metadata, and insights
The /video/generate and /image/metadata handlers assumed files live under
the resolved library only, which broke when a mobile client passed no
library (union mode) but the file lived in a non-primary library. Both
now fall back to scanning every configured library for an existing file.

InsightGenerator held a single base_path, so vision-model loads and
filename-date fallbacks failed for non-primary libraries. It now takes
Vec<Library> and probes each root in resolve_full_path.

/image/metadata responses now carry library_id/library_name so the
mobile viewer can surface which library a file belongs to.

Thumbnail generation at startup is now spawned on a background thread
so the HTTP server can accept traffic while large libraries backfill.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 2d942a9926 feat: content-hash-aware tag/insight sharing + library scoping
Tags and insights now follow content across libraries via content_hash
lookups on the read path, so the same file indexed at different rel_paths
in multiple libraries shares its annotations. Recursive tag search scopes
hits to the selected library by checking each tagged rel_path against
the library's disk (with a content-hash sibling fallback so tags attached
under one library's rel_path still match a content-equivalent file in
another). The /image and /image/metadata handlers fall back across
libraries when the file isn't under the resolved one, so union-mode
search results (which carry no library attribution in the response)
still serve correctly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 c01a0479b7 fix: honor library param in /image, /photos, /memories
The Phase 3 plumbing accepted `library=` but didn't actually route
requests through the scoped library once it was resolved. Three
concrete bugs surfaced when testing against a second mounted library:

- `/image` always resolved paths against AppState.base_path (primary),
  so thumbnails for non-primary libraries 400'd when their rel_paths
  didn't exist under primary. Now resolves against the scoped library
  and defaults to primary when the param is omitted.

- `/memories` walked the scoped library correctly but its helper
  functions hardcoded `library_id: PRIMARY_LIBRARY_ID` on every
  MemoryItem, causing clients to route thumbnails back to primary
  regardless of which library the memory actually came from.

- `/photos` non-recursive listing delegated to a `RealFileSystem`
  constructed from AppState.base_path at startup, so walks always
  hit primary even when `library=2` was passed. The non-primary
  path now uses list_files against the scoped library's root;
  primary still goes through FileSystemAccess to preserve the
  existing test mock plumbing.

Also adds `library` to ThumbnailRequest so the /image query param
is actually parsed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 0aaea91cc2 feat: add content_hash backfill + register every media file
Adds blake3 content hashing as the basis for derivative dedup
(thumbnails, HLS) across libraries. Computed inline by the watcher on
ingest and by a new `backfill_hashes` binary for historical rows.

Key changes:
- `content_hash` and `size_bytes` are now populated on new image_exif
  rows; a new ExifDao surface (`get_rows_missing_hash`,
  `backfill_content_hash`, `find_by_content_hash`) supports backfill and
  future hash-keyed lookups.
- The watcher now registers every image/video in image_exif, not just
  files with parseable EXIF. EXIF becomes optional enrichment; videos
  and other non-EXIF files still get a hashed row. This also makes
  DB-indexed sort/filter cover the full library.
- `/image` thumbnail serve dual-looks up hash-keyed path first, then
  falls back to the legacy mirrored layout.
- Upload flow accepts `?library=` query param + hashes uploaded files.
- Store_exif logs the underlying Diesel error on insert failure so
  constraint violations surface instead of hiding behind a generic
  InsertError.
- New migration normalizes rel_path separators to forward slash across
  all tables, deduplicating any rows that collide after normalization.
  Fixes spurious UNIQUE violations from mixed backslash/forward-slash
  paths on Windows ingest.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 ce5b337582 feat: make file watcher, thumbnails, and upload library-aware
`watch_files` and `create_thumbnails` now iterate every configured
library, tagging rows with the correct `library_id`. `process_new_files`
takes a `&Library` so InsertImageExif no longer hardcodes the primary
library. Upload accepts an optional `library` query param to pick a
target library; omitted still defaults to primary for backwards
compatibility.

Hash-keyed thumbnail/HLS storage with dual-lookup fallback is deferred
to Phase 5, where it's bundled with the content hash backfill that
actually makes the hash-keyed paths meaningful. Until hashes are
populated, the legacy mirrored layout is a no-op to change.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 48e5de6eab feat: add GET /libraries and library query param plumbing
New `/libraries` endpoint returns configured libraries so clients can
discover them. `FilesRequest` and `MemoriesRequest` gain an optional
`library` param (accepts name or numeric id). Unknown values are
rejected with 400; absent values span all libraries. `/memories`
now scopes its filesystem walk + EXIF query to the resolved library.
`MemoryItem` carries `library_id` so union-mode clients can render a
per-item source badge.

Behavior is unchanged in single-library mode: omitting `library` still
returns results from the primary library, which is the only one
configured until a second row is added to the libraries table.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
CameronandClaude Opus 4.7 ffcddbb843 feat: multi-library foundation (schema + libraries module)
Adds a `libraries` registry table and threads library_id through
per-instance metadata tables (image_exif, photo_insights,
entity_photo_links, video_preview_clips). File-path columns renamed to
rel_path to make the relative-to-root semantics explicit. Adds
content_hash + size_bytes on image_exif to support future hash-keyed
thumbnail/HLS dedup. Tags and favorites stay library-agnostic so they
share across libraries by rel_path.

Behavior is unchanged: a single primary library (id=1) is seeded from
BASE_PATH on first boot; all handlers and DAOs route through it as a
transitional shim until the API gains a library query param.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 01:55:07 +00:00
cameron 2f4edba08c Merge pull request '003-knowledge-memory' (#55) from 003-knowledge-memory into master
Reviewed-on: #55
2026-04-21 01:54:34 +00:00
Cameron 8bc948b297 Insight prompt tweaks 2026-04-17 11:55:33 -04:00
CameronandClaude Opus 4.6 b7e1bdf1fd feat: add sampling param CLI flags to populate_knowledge binary
Adds --temperature, --top-p, --top-k, --min-p flags so batch runs can
tune the same sampling params now supported by the API endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 14:23:45 -04:00
Cameron 3059adfd37 Add missing DB migration sql for training data 2026-04-15 09:28:53 -04:00
CameronandClaude Opus 4.6 b599f7a34b feat: add temperature, top_p, top_k, min_p params to insight generation
Expose Ollama sampling params through the insight generation endpoints
so users can tune creativity/determinism per request. All four are
optional — omitted values fall through to the model's server-side
defaults.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 09:27:59 -04:00
Cameron c703a47f17 Add the ability to rate insights to curate training data 2026-04-13 09:23:40 -04:00
Cameron da16fddce3 Address path traversal and other security fixes 2026-04-10 14:58:57 -04:00
Cameron e1c32b6584 Tweak Prompt 2026-04-10 14:30:31 -04:00
CameronandClaude Sonnet 4.6 65e938035f fix: reduce duplicate entities from weak model inconsistency
Adds normalize_entity_type() which lowercases and canonicalises synonyms
(location→place, human→person, etc.) before every upsert. The SQL lookup
now uses lower(entity_type) on both sides so existing dirty rows (Person,
Location) correctly deduplicate against normalised writes without a migration.

Adds a pre-flight similarity check in tool_store_entity: before upserting,
searches active entities of the same type using the first name token. Any
non-exact matches are appended to the tool response so the agentic loop
can choose to reuse an existing entity ID rather than create a duplicate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 18:27:09 -04:00
CameronandClaude Sonnet 4.6 bc3b313e2e feat: add populate_knowledge batch binary with configurable timeout
Adds a standalone binary that walks a directory and runs the agentic
insight loop over every image/video, skipping files already processed.
Supports --path, --model, --max-iterations, --timeout-secs, --num-ctx,
and --reprocess flags for flexible overnight/VPS batch runs.

Also adds OllamaClient::with_request_timeout() builder method so slow
large models are not cut off by the default 120s limit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:39:46 -04:00
CameronandClaude Sonnet 4.6 da039bbc49 fix: include files without EXIF when sorting by date
Date sorting previously used a DB-level query that acted as an inner join,
silently dropping files with no image_exif row. Replace it with the existing
in-memory sort which already falls back to filename-extracted and filesystem
dates, so all files appear in sorted results.

Also removes the now-unused get_files_sorted_by_date trait method and its
SqliteExifDao implementation and test mock.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 14:43:26 -04:00
CameronandClaude Sonnet 4.6 191ccc0d77 feat: add entity-relationship knowledge memory to agentic insights
Implements persistent cross-photo knowledge memory so the agentic
insight loop can learn and recall facts about people, places, and
events across the photo collection.

Changes:
- photo_insights: drop UNIQUE(file_path) + INSERT OR REPLACE, replace
  with append-only rows + is_current flag for insight history retention
- New tables: entities, entity_facts, entity_photo_links with FK
  constraints and confidence scoring
- KnowledgeDao trait + SqliteKnowledgeDao with upsert, merge, and
  corroboration (confidence +0.1 on duplicate fact detection)
- Four new agent tools: recall_entities, recall_facts_for_photo,
  store_entity, store_fact (with object_entity_id FK support)
- Cameron entity auto-seeded with stable ID injected into system prompt
- Pre-run photo link clearing + post-loop source_insight_id backfill
- Audit REST API: GET/PATCH/DELETE /knowledge/entities/{id},
  POST /knowledge/entities/merge, GET/PATCH/DELETE /knowledge/facts/{id},
  GET /knowledge/recent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 17:27:49 -04:00
CameronandClaude Sonnet 4.6 b2cf99c857 feat: surface Ollama context token usage in agentic insight response
Captures prompt_eval_count and eval_count from Ollama /api/chat responses
during the agentic loop and returns them in POST /insights/generate/agentic
so the frontend can display context window usage to the user.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 17:25:35 -04:00
cameron 50cf526b46 Merge pull request '002-agentic-insights' (#53) from 002-agentic-insights into master
Reviewed-on: #53
2026-04-02 16:46:06 +00:00
CameronandClaude Sonnet 4.6 54a49a8562 fix: agentic loop robustness — tool arg sanitisation, geocoding, better errors
- Sanitise tool call arguments before re-sending in conversation history: non-object values (bool, string, null) that some models produce are normalised to {} to prevent Ollama 500s
- Map 'error parsing tool call' Ollama 500 to HTTP 400 with a descriptive message listing compatible models (llama3.1, llama3.2, qwen2.5, mistral-nemo)
- Add reverse_geocode tool backed by existing Nominatim helper; description hints model can chain it after get_location_history results
- Make get_sms_messages contact parameter optional (was required, forcing the model to guess); executor now passes None to fall back to all-contacts search
- Log tool result outcomes at warn level for errors/empty results, info for successes; log SMS API errors with full detail; log full request body on Ollama 500
- Strengthen system prompt to require 3-4 tool calls before final answer
- Try fallback server when checking model capabilities (primary-only check caused 500 for models only on fallback)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:58:01 -04:00
CameronandClaude Sonnet 4.6 c1b6013412 chore: cargo fmt + clippy fix for collapsed if-let chain (T017)
- cargo fmt applied across all modified source files
- Collapse nested if let Some / if !is_empty into a single let-chain (clippy::collapsible_match)
- All other warnings are pre-existing dead-code lint on unused trait methods

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:09:58 -04:00
CameronandClaude Sonnet 4.6 5c9f5c7d0b feat: add model-availability validation to agentic insight generation (T009-T011)
- Verify custom model exists on at least one configured server before starting agentic loop; returns HTTP 400 with descriptive error if not found
- has_tool_calling field auto-serialised in GET /insights/models via existing ModelCapabilities Serialize derive
- model_version stored from OllamaClient.primary_model (already correct in T006 implementation)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:07:43 -04:00
CameronandClaude Sonnet 4.6 091327e5d9 feat: add POST /insights/generate/agentic handler and route
Register the agentic insight endpoint that validates tool-calling capability,
runs the agentic loop, and returns the stored PhotoInsightResponse. Returns 400
for unsupported models, 500 for other errors. Max iterations configurable via
AGENTIC_MAX_ITERATIONS env var (default 10).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:01:25 -04:00
CameronandClaude Sonnet 4.6 7615b9c99b feat: add tool executors and generate_agentic_insight_for_photo() to InsightGenerator
Add 6 tool executor methods (search_rag, get_sms_messages, get_calendar_events,
get_location_history, get_file_tags, describe_photo) and the agentic loop that
uses Ollama's chat_with_tools API to let the model decide which context to gather
before writing the final photo insight.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:00:41 -04:00
CameronandClaude Sonnet 4.6 5e5a2a3167 feat: add tool-calling types, chat_with_tools(), and has_tool_calling capability detection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 22:55:20 -04:00
CameronandClaude Sonnet 4.6 8196ef94a0 feat: photo-first RAG enrichment — early vision description + tags in RAG and search context
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:23:49 -04:00
CameronandClaude Sonnet 4.6 e58b8fe743 feat: add enrichment parameter to gather_search_context() replacing weak metadata query
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:17:21 -04:00
CameronandClaude Sonnet 4.6 c0d27d0b9e feat: add Tags section to combine_contexts() for insight context
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:14:00 -04:00
CameronandClaude Sonnet 4.6 8ecd3c6cf8 refactor: use Arc<Mutex<SqliteConnection>> in SqliteTagDao, remove unsafe impl Sync
Aligns SqliteTagDao with the pattern used by SqliteExifDao and SqliteInsightDao.
The unsafe impl Sync workaround is no longer needed since Arc<Mutex<>> provides
safe interior mutability and automatic Sync derivation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:10:11 -04:00
CameronandClaude Sonnet 4.6 387ce23afd feat: add tag_dao to InsightGenerator for tag-based context enrichment
Threads SqliteTagDao through InsightGenerator and AppState (both default
and test_state). Adds Send+Sync bounds to TagDao trait with unsafe impls
for SqliteTagDao (always Mutex-protected) and TestTagDao (single-threaded).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 16:59:39 -04:00
CameronandClaude Sonnet 4.6 b31b4b903c refactor: use &str for generate_photo_description image parameter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 16:56:27 -04:00
CameronandClaude Sonnet 4.6 dd0715c081 feat: add generate_photo_description() to OllamaClient for RAG enrichment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 16:53:34 -04:00
cameron c804ee39cb Merge pull request '001-video-wall' (#52) from 001-video-wall into master
Reviewed-on: #52
2026-03-02 18:45:03 +00:00
CameronandClaude Opus 4.6 c05a16f7f2 Add JSON error logging for failed request deserialization
Configures a global JsonConfig error handler that logs the method, URI,
and parse error details at WARN level before returning the 400 response.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 20:02:18 -05:00
CameronandClaude Opus 4.6 3982c6d6d4 Fix 10-bit encode not supported error with h264_nvenc
Add format=yuv420p to preview clip filter chains to convert 10-bit
sources to 8-bit before encoding, since NVENC doesn't support 10-bit
H.264.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 19:55:36 -05:00
cameron 27a148c0aa Merge branch 'master' into 001-video-wall 2026-02-27 19:06:55 +00:00
Cameron 5975828f65 Fix incorrect frame rate handling in preview clip generation 2026-02-26 10:58:27 -05:00
Cameron 36612444c5 Ensure we re-queue pending/failed records 2026-02-26 10:42:20 -05:00
Cameron 32ece84209 Fix high framerate preview playback 2026-02-26 10:26:52 -05:00
Cameron 7d164bad81 Fix import warnings 2026-02-26 10:10:26 -05:00
Cameron 0d05033b38 Add comprehensive testing for preview clip and status handling
- Implement unit tests for PreviewClipRequest/PreviewStatusRequest serialization and deserialization.
- Add tests for PreviewDao (insert, update, batch retrieval, and status-based queries).
- Extend Actix-web integration tests for `/video/preview/status` endpoint scenarios.
- Introduce in-memory TestPreviewDao for mock database interactions.
- Update README with new config parameters for preview clips.
2026-02-26 10:06:21 -05:00
Cameron 842ed4ed66 Add Speckit and Constitution 2026-02-26 10:05:47 -05:00
CameronandClaude Opus 4.6 19c099360e Add VideoWall feature: server-side preview clip generation and mobile grid view
Backend (Rust/Actix-web):
- Add video_preview_clips table and PreviewDao for tracking preview generation
- Add ffmpeg preview clip generator: 10 equally-spaced 1s segments at 480p with CUDA NVENC auto-detection
- Add PreviewClipGenerator actor with semaphore-limited concurrent processing
- Add GET /video/preview and POST /video/preview/status endpoints
- Extend file watcher to detect and queue previews for new videos
- Use relative paths consistently for DB storage (matching EXIF convention)

Frontend (React Native/Expo):
- Add VideoWall grid view with 2-3 column layout of looping preview clips
- Add VideoWallItem component with ActiveVideoPlayer sub-component for lifecycle management
- Add useVideoWall hook for batch status polling with 5s refresh
- Add navigation button in grid header (visible when videos exist)
- Use TextureView surface type to fix Android z-ordering issues
- Optimize memory: players only mount while visible via FlatList windowSize
- Configure ExoPlayer buffer options and caching for short clips
- Tap to toggle audio focus, long press to open in full viewer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:40:17 -05:00
cameron cdc2eef833 Merge pull request 'Build insight title from generated summary' (#51) from feature/insight-tweaks into master
Reviewed-on: #51
2026-02-24 21:21:20 +00:00
Cameron 7a0da1ab4a Build insight title from generated summary 2026-02-24 16:08:25 -05:00
cameron 1fb3441a38 Merge pull request 'Fix video rotation' (#50) from feature/fix-video-rotation into master
Reviewed-on: #50
2026-02-10 02:54:46 +00:00
Cameron 39c66d81cc Fix video rotation 2026-02-05 18:39:36 -05:00
cameron 0d5c141328 Merge pull request 'Expand temporal context window for SMS retrieval from ±2 days to ±4 days' (#49) from feature/increase-insight-context into master
Reviewed-on: #49
2026-02-05 20:57:46 +00:00
Cameron e92513fbe9 Expand temporal context window for SMS retrieval from ±2 days to ±4 days 2026-01-29 19:48:09 -05:00
cameron 92a468233e Merge pull request 'feature/gps-map-support' (#48) from feature/gps-map-support into master
Reviewed-on: #48
2026-01-28 15:54:18 +00:00
Cameron 1efdd02eda Add GPS summary sorting
Run cargo fmt/clippy
2026-01-28 10:52:17 -05:00
Cameron 7d2a3148bb Make Memories week span sorting chronological 2026-01-26 20:51:11 -05:00
Cameron a6cc64ece0 Bump to version 0.5.2 2026-01-26 20:05:42 -05:00
Cameron 1d2f4e3441 Add circular thumbnail creation for Map view 2026-01-26 20:04:14 -05:00
Cameron 073b5ed418 Added gps-summary endpoint for Map integration 2026-01-26 11:58:24 -05:00
cameron 701a06871c Merge pull request 'feature/search-performance' (#47) from feature/search-performance into master
Reviewed-on: #47
2026-01-26 16:03:57 +00:00
Cameron c9410c9c91 Add rotation check to video transcoding logic
Seems like vertical videos aren't preserving rotation logic on copy.
2026-01-26 10:55:15 -05:00
Cameron 08f402d4d1 Add h264 codec detection and orphaned playlist cleanup job
Implement `is_h264_encoded` to detect existing h264 videos and optimize processing by using stream copy when possible. Introduce a background job for cleaning up orphaned playlists and segments based on missing source videos. Improve checks for playlist generation necessity.
2026-01-19 22:37:50 -05:00
Cameron 9245778391 Generate video playlists on period directory scans 2026-01-19 22:32:00 -05:00
Cameron ea53932b4b Update Cargo.lock for version bump 2026-01-18 19:26:23 -05:00
Cameron Cordes 85e6567674 Bump to 0.5.1 2026-01-18 19:17:53 -05:00
Cameron be483c9c1a Add database optimizations for photo search and pagination
Implement database-level sorting with composite indexes for efficient date and tag queries. Add pagination metadata support and optimize tag count queries using batch processing.
2026-01-18 19:17:10 -05:00
cameron 5e646dfc19 Merge pull request 'feature/insights' (#46) from feature/insights into master
Reviewed-on: #46
2026-01-15 01:07:57 +00:00
Cameron e31d5716b6 Additional cleanup and warning fixing 2026-01-14 15:21:44 -05:00
Cameron 02ca60a5d0 Remove individual messages embedding SQL 2026-01-14 14:23:50 -05:00
Cameron af35a996a3 Cleanup unused message embedding code
Fixup some warnings
2026-01-14 13:33:36 -05:00
Cameron e2d6cd7258 Run clippy fix 2026-01-14 13:17:58 -05:00
Cameron e9729e9956 Fix unused import from binary from getting removed with cargo fix 2026-01-14 13:13:06 -05:00
Cameron b7582e69a0 Add model capability caching and clear functions 2026-01-14 13:12:09 -05:00
Cameron f65f4efde8 Make date parse from metadata a little more consistent 2026-01-14 12:54:36 -05:00
Cameron a37a211282 Fix upload with missing file name or space in filename 2026-01-11 21:15:41 -05:00
Cameron ad0bba63b4 Add check for vision capabilities 2026-01-11 15:22:24 -05:00
Cameron 5b35df4007 Remove unused function 2026-01-11 14:42:25 -05:00
Cameron fa600f1c2c Fallback to sorting by Metadata date 2026-01-11 14:39:50 -05:00
Cameron 0efa8269a1 Fix test 2026-01-10 11:34:16 -05:00
Cameron b2cc617bc2 Pass image as additional Insight context 2026-01-10 11:30:01 -05:00
Cameron 084994e0b5 Daily Summary Embedding Testing 2026-01-08 13:41:32 -05:00
Cameron 61e10f7678 Improve Exif Query path handling 2026-01-08 13:41:08 -05:00
CameronandClaude Sonnet 4.5 cd66521c17 Phase 3: Integrate Google Takeout context into InsightGenerator
- Updated InsightGenerator struct with calendar, location, and search DAOs
- Implemented hybrid context gathering methods:
  * gather_calendar_context(): ±7 days with semantic ranking
  * gather_location_context(): ±30 min with GPS proximity check
  * gather_search_context(): ±30 days semantic search
- Added haversine_distance() utility for GPS calculations
- Updated generate_insight_for_photo_with_model() to use multi-source context
- Combined all context sources (SMS + Calendar + Location + Search) with equal weight
- Initialized new DAOs in AppState (both default and test implementations)
- All contexts are optional (graceful degradation if data missing)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 14:57:31 -05:00
CameronandClaude Sonnet 4.5 d86b2c3746 Add Google Takeout data import infrastructure
Implements Phase 1 & 2 of Google Takeout RAG integration:
- Database migrations for calendar_events, location_history, search_history
- DAO implementations with hybrid time + semantic search
- Parsers for .ics, JSON, and HTML Google Takeout formats
- Import utilities with batch insert optimization

Features:
- CalendarEventDao: Hybrid time-range + semantic search for events
- LocationHistoryDao: GPS proximity with Haversine distance calculation
- SearchHistoryDao: Semantic-first search (queries are embedding-rich)
- Batch inserts for performance (1M+ records in minutes vs hours)
- OpenTelemetry tracing for all database operations

Import utilities:
- import_calendar: Parse .ics with optional embedding generation
- import_location_history: High-volume GPS data with batch inserts
- import_search_history: Always generates embeddings for semantic search

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 14:50:49 -05:00
Cameron bb23e6bb25 Cargo fix 2026-01-05 10:31:34 -05:00
Cameron ad07f5a1fa Update README 2026-01-05 10:09:18 -05:00
Cameron 11e725c443 Enhanced Insights with daily summary embeddings
Bump to 0.5.0. Added daily summary generation job
2026-01-05 09:13:16 -05:00
Cameron 43b7c2b8ec Remove dialoguer dependency 2026-01-03 20:32:00 -05:00
Cameron cbbfb7144b Re-enable video GIF generation 2026-01-03 20:31:18 -05:00
Cameron cf52d4ab76 Add Insights Model Discovery and Fallback Handling 2026-01-03 20:27:34 -05:00
Cameron 1171f19845 Create Insight Generation Feature
Added integration with Messages API and Ollama
2026-01-03 10:30:37 -05:00
Cameron 0dfec4c8c5 Fix memory filename date extraction 2026-01-02 19:29:42 -05:00
cameron 878465fea9 Merge pull request 'Implement critical security improvements for authentication' (#45) from feature/security-improvements into master
Reviewed-on: #45
2026-01-02 22:01:39 +00:00
Cameron 4d9addaf22 Add filename date to metadata if available 2025-12-29 21:54:25 -05:00
Cameron 2d915518e2 Bump to 0.4.1 2025-12-29 19:51:21 -05:00
Cameron 2d02f00e7d Fix Memories Week span sorting 2025-12-29 18:49:52 -05:00
Cameron 54e23a29b3 Fix warnings 2025-12-29 14:29:29 -05:00
Cameron 9cb923df9e Fix memory date priority 2025-12-29 12:28:17 -05:00
CameronandClaude Sonnet 4.5 2c52cffd65 Implement critical security improvements for authentication
This commit addresses several security vulnerabilities in the authentication
and authorization system:

1. JWT Encoding Panic Fix (Critical)
   - Replace .unwrap() with proper error handling in JWT token generation
   - Prevents server crashes from encoding failures
   - Returns HTTP 500 with error logging instead of panicking

2. Rate Limiting for Login Endpoint (Critical)
   - Add actix-governor dependency (v0.5)
   - Configure rate limiter: 2 requests/sec with burst of 5
   - Protects against brute-force authentication attacks

3. Strengthen Password Requirements
   - Minimum length increased from 6 to 12 characters
   - Require uppercase, lowercase, numeric, and special characters
   - Add comprehensive validation with clear error messages

4. Fix Token Parsing Vulnerability
   - Replace unsafe split().last().unwrap_or() pattern
   - Use strip_prefix() for proper Bearer token validation
   - Return InvalidToken error for malformed Authorization headers

5. Improve Authentication Logging
   - Sanitize error messages to avoid leaking user existence
   - Change from "User not found or incorrect password" to "Failed login attempt"

All changes tested and verified with existing test suite (65/65 tests passing).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 23:53:54 -05:00
cameron a2f2d4de5c Merge pull request 'feature/exif-endpoint' (#44) from feature/exif-endpoint into master
Reviewed-on: #44
2025-12-27 03:25:17 +00:00
Cameron ccd16ba987 Files endpoint refactoring 2025-12-26 22:20:01 -05:00
Cameron be281130d5 Send timestamp from filename for Memories endpoint 2025-12-25 23:32:00 -05:00
Cameron ae0886cd2e Fix tag count sorting, hopefully 2025-12-25 15:17:50 -05:00
CameronandClaude Sonnet 4.5 6c543ffa68 Add CLAUDE.md documentation for Claude Code
Comprehensive guide covering build commands, architecture overview, database patterns, file processing pipeline, API structure, and development workflows.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-24 16:07:03 -05:00
CameronandClaude Sonnet 4.5 f0d482af12 Optimize release build times with thin LTO
Switch from fat LTO to thin LTO for faster release builds while maintaining similar performance characteristics.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-24 10:21:47 -05:00
Cameron c0021734b6 Try fixing Otel span propogation 2025-12-24 10:17:14 -05:00
Cameron c1cfda9df9 Fix memories week span sorting 2025-12-24 00:27:44 -05:00
Cameron c035678162 Add tracing to EXIF DAO methods 2025-12-23 22:57:24 -05:00
Cameron 636701a69e Refactor file type checking for better consistency
Fix tests
2025-12-23 22:30:53 -05:00
Cameron 6dbac6f22f Run cargo fmt/fix 2025-12-23 22:07:50 -05:00
Cameron 3a64b30621 Fix Date sorting in tagged/recursive search 2025-12-23 22:07:40 -05:00
Cameron 47d3ad7222 Add polling-based file watching
Remove notify and update otel creates
2025-12-22 22:54:19 -05:00
Cameron df94010d21 Fix tests and improve memories date error log 2025-12-19 14:20:51 -05:00
Cameron e3ccc123d0 Add EXIF update support 2025-12-18 21:20:45 -05:00
Cameron b4c5a38c9d Cargo fmt 2025-12-18 21:20:31 -05:00
Cameron aaf9cc64be Add Cleanup binary for fixing broken DB/file relations 2025-12-18 16:02:15 -05:00
Cameron 28d85dc4a5 Fix recursive search and media filtering 2025-12-18 11:25:50 -05:00
Cameron 721b66481e Add EXIF search implementation to list photos endpoint 2025-12-18 10:06:13 -05:00
Cameron eb8e08b9ff Add EXIF search infrastructure (Phase 1 & 2)
Implements foundation for EXIF-based photo search capabilities:

- Add geo.rs module with GPS distance calculations (Haversine + bounding box)
- Extend FilesRequest with EXIF search parameters (camera, GPS, date, media type)
- Add MediaType enum and DateTakenAsc/DateTakenDesc sort options
- Create date_taken index migration for efficient date queries
- Implement ExifDao methods: get_exif_batch, query_by_exif, get_camera_makes
- Add FileWithMetadata struct for date-aware sorting
- Implement date sorting with filename extraction fallback
- Make extract_date_from_filename public for reuse

Next: Integrate EXIF filtering into list_photos() and enhance get_all_tags()
2025-12-18 09:34:07 -05:00
Cameron 52e1ced2a2 Improved image caching and CORS handling 2025-12-17 22:36:03 -05:00
Cameron c6b1b46629 Fix video part directory traversal 2025-12-17 22:32:46 -05:00
Cameron 7ddc2dec64 Add indexes for favorite de-duplication 2025-12-17 22:31:16 -05:00
Cameron 1294a86a41 Add indexes for improved query performance 2025-12-17 22:31:04 -05:00
Cameron 445b82b21a Bump to 0.4.0 2025-12-17 22:17:54 -05:00
Cameron c7fd328925 Check Exif DB for memory collection 2025-12-17 22:10:23 -05:00
Cameron e4d988a9fd Cargo formatting 2025-12-17 22:10:03 -05:00
Cameron d61fcb942a Exif comment on TZ handling 2025-12-17 22:09:03 -05:00
Cameron 07c27bf1bb Add HEIC and TIF image extensions to files endpoint 2025-12-17 16:57:27 -05:00
Cameron 4082f1fdb8 Add Exif storing and update to Metadata endpoint 2025-12-17 16:55:48 -05:00
cameron 4851f64229 Merge pull request 'Added file date format for memories' (#43) from feature/new-memories-filename-format into master
Reviewed-on: #43
2025-12-01 18:53:23 +00:00
Cameron 3c894335ce Added file date format for memories 2025-12-01 13:51:17 -05:00
cameron b58fc0034c Merge pull request 'feature/improve-memories-exclude' (#42) from feature/improve-memories-exclude into master
Reviewed-on: #42
2025-12-01 18:07:07 +00:00
Cameron f02a858368 Bump to 0.3.1 and format/clippy 2025-12-01 13:04:55 -05:00
Cameron a7d065aadc Tests and improved pattern-excluding behavior 2025-12-01 12:54:40 -05:00
Cameron f5c53d1e0e Allow for pattern-based memories folder exclusion 2025-12-01 12:29:32 -05:00
cameron 6aefea3a27 Merge pull request 'feature/rust-2024-edition' (#41) from feature/rust-2024-edition into master
Reviewed-on: #41
2025-09-01 17:47:51 +00:00
Cameron 273b877e16 Update to Rust 2024 edition
Formatted code.
2025-09-01 13:36:27 -04:00
Cameron 0d05b283ce Cargo update 2025-09-01 13:28:37 -04:00
cameron 5021b3218d Merge pull request 'Just look for date format instead of screenshot text' (#40) from feature/fix-screenshot-date-regex into master
Reviewed-on: #40
2025-09-01 15:15:49 +00:00
Cameron 2cc4124544 Just look for date format instead of screenshot text 2025-09-01 11:15:27 -04:00
cameron ed9071d41d Merge pull request 'Add additional memories filename regex' (#39) from feature/additional-memories-date-format into master
Reviewed-on: #39
2025-09-01 15:09:41 +00:00
Cameron 6f76a74b2e Add additional memories filename regex 2025-09-01 11:09:09 -04:00
cameron a79bccc751 Merge pull request 'Add additional memories filename regex' (#38) from feature/add-memories-file-date-regex into master
Reviewed-on: #38
2025-09-01 15:01:40 +00:00
Cameron 9c04fcb1d1 Add additional memories filename regex 2025-09-01 11:01:01 -04:00
cameron 6336c321c7 Merge pull request 'Allow for excluding directories from Memories endpoint' (#37) from feature/memories-ignore-dirs into master
Reviewed-on: #37
2025-08-28 17:06:44 +00:00
Cameron 2f91dbdc2e Update README 2025-08-28 11:36:16 -04:00
Cameron f27b22ead4 Update README 2025-08-28 11:35:41 -04:00
Cameron e46953194e Allow for excluding directories from Memories endpoint 2025-08-27 16:02:32 -04:00
cameron 5277465f9e Merge pull request 'Use rayon for memories endpoint' (#36) from feature/memories-parallel into master
Reviewed-on: #36
2025-08-21 20:44:50 +00:00
Cameron 34784a39f6 Use rayon for memories endpoint 2025-08-21 16:39:33 -04:00
cameron c325676af1 Merge pull request 'feature/memories' (#35) from feature/memories into master
Reviewed-on: #35
2025-08-16 16:42:38 +00:00
Cameron 544256f658 Bump to 0.3.0 2025-08-15 23:22:05 -04:00
Cameron 93957bf389 Refactor date parsing from filename by introducing reusable closure, remove redundant logging level, and simplify regex logic. 2025-08-15 23:20:07 -04:00
Cameron 8114204485 Update Otel 2025-08-15 23:18:53 -04:00
Cameron 7dcf89c47e Add conditional sorting logic for Month span in memories sorting 2025-08-15 17:22:01 -04:00
Cameron 4315744abb Improve Memory sorting 2025-08-13 13:23:32 -04:00
Cameron 85093ff0c7 Add parsing date from filename for memories 2025-08-12 20:55:22 -04:00
Cameron 8d9a5fd79f Try adding timezone awareness 2025-08-11 17:11:02 -04:00
Cameron 6aa3c932fb Run cargo fmt 2025-08-11 17:08:24 -04:00
Cameron 88114ef4d4 Add Month memory filter span 2025-08-09 22:46:25 -04:00
Cameron caed787c04 Add /memories endpoint 2025-08-09 22:24:48 -04:00
Cameron b3a885de28 Run cargo fmt 2025-08-08 15:06:43 -04:00
cameron bf3c26a5f1 Merge pull request 'Video Gifs' (#34) from feature/video-gifs into master
Reviewed-on: #34
2025-08-08 18:55:13 +00:00
Cameron 2ea36a4c9b Get tests building and sort of passing 2025-07-17 20:32:23 -04:00
Cameron 264195d3a2 Cleanup warnings 2025-07-17 20:08:12 -04:00
Cameron e5afdd909b Serve video gifs when requested 2025-07-02 15:48:49 -04:00
Cameron 3fbdba2b9c Merge branch 'master' into feature/video-gifs 2025-06-16 21:06:38 -04:00
cameron 8dae25606d Merge pull request 'Recursive Sorting fix and many logging/tracing enhancements' (#33) from feature/fix-recursive-sort into master
Reviewed-on: #33
2025-06-12 20:03:20 +00:00
Cameron 97a07e11ca Fix SQL injection vulnerability in a tag query 2025-06-12 15:01:07 -04:00
Cameron a25ffcc351 Add enhanced logging and tracing for playlist generation 2025-06-12 13:12:01 -04:00
Cameron 2c553a8016 Additional logging and tracing enhancements 2025-06-04 15:05:23 -04:00
Cameron 7c882fd31c Add webp files and improve logging 2025-06-03 15:23:39 -04:00
Cameron 6aff7f456a Manually pass the current context around 2025-06-03 14:06:19 -04:00
Cameron c4153b404c Try using current context 2025-06-03 13:02:25 -04:00
Cameron b11d647ffa Try fixing span context for db call tracing 2025-06-03 12:51:37 -04:00
Cameron 1e63e0c08c Add DB spans to the various queries 2025-06-03 12:07:26 -04:00
Cameron 785ce157e6 Get Otel span from the request 2025-05-23 18:24:54 -04:00
Cameron d37deb36fe Additional Otel logging and spans 2025-05-23 14:51:54 -04:00
Cameron 24d2123fc2 Fix recursive-any tag counting
This is bad security wise so it'll need another pass.
2025-05-18 19:57:16 -04:00
Cameron fe0446a43f Merge branch 'master' into feature/video-gifs
# Conflicts:
#	Cargo.toml
#	src/files.rs
#	src/main.rs
2025-05-17 15:57:01 -04:00
cameron a79162c66a Merge pull request 'feature/sort-by-tag-count' (#32) from feature/sort-by-tag-count into master
Reviewed-on: #32
2025-05-17 17:47:02 +00:00
Cameron 484eec8b39 Only use Otel on release builds 2025-05-17 13:41:30 -04:00
Cameron 5b17fba51f Add sorting by a File's Tag Count 2025-05-17 13:41:14 -04:00
cameron f216723df0 Merge pull request 'feature/otel-telemetry' (#31) from feature/otel-telemetry into master
Reviewed-on: #31
2025-05-07 00:26:26 +00:00
Cameron 518fba0ef5 Add missing otel.rs 2025-05-06 20:26:02 -04:00
Cameron d6451ee782 Add Simple OpenTelemetry setup 2025-05-06 20:15:03 -04:00
Cameron 399f5f2336 Add ability to create summary clips of existing videos 2024-12-14 20:55:10 -05:00
Cameron 0edb0dbdd1 Cleanup 2024-12-07 21:53:39 -05:00
Cameron b2a361faba First pass on creating gifs from a video 2024-12-07 21:49:33 -05:00
Cameron 4e4a2240cf Move video.rs into its own module 2024-12-07 21:46:37 -05:00
cameron f99360cd9e Merge pull request 'feature/shuffle-sort' (#30) from feature/shuffle-sort into master
Reviewed-on: #30
2024-12-06 16:25:42 +00:00
Cameron 3ce1b84604 Sort on recursive search
Run clippy
2024-12-06 11:21:42 -05:00
Cameron 4a91c6344a Use exclude subquery for recursive all tag search 2024-12-06 11:04:08 -05:00
Cameron ff13a57d0e Try subquery for excluding tags 2024-12-06 10:58:40 -05:00
Cameron 03f3756ffd Remove tag count from any tag query 2024-12-06 09:54:53 -05:00
Cameron 787d1fd5d0 Fix recursive search at the root, cleanup video generation return 2024-12-06 09:47:21 -05:00
Cameron 8bc9c5585e log ffmpeg output and cleanup video creation 2024-12-05 20:47:51 -05:00
Cameron 04a7cb417f Bump app version to 0.2.0 2024-12-05 20:30:45 -05:00
Cameron 18ba5796b0 Update to rust 2021
Fix tests
2024-12-05 20:27:01 -05:00
Cameron 9c2cd2566f Prepare for rust edition 2021 2024-12-05 20:25:00 -05:00
Cameron 8daa35b5a7 Fix recursive search when beneath top level directory 2024-12-05 20:19:38 -05:00
Cameron 0419aa2323 Scan and generate Video HLS playlists on startup
Refactored and improved video path state. Bumped versions of some dependencies.
2024-12-05 20:19:03 -05:00
Cameron 2b2a811cae Fix recursive filtering under base path 2024-12-04 19:50:04 -05:00
Cameron b7f13d4cbf Fix exclude filtering for any tags 2024-12-04 19:42:00 -05:00
Cameron d280db8482 Fix exclude filtering 2024-11-27 16:42:17 -05:00
Cameron 0af7c8f98b Fix missing return and update test signatures 2024-11-27 15:43:27 -05:00
Cameron 9327208deb Remove filtering when recursively searching with tags 2024-11-25 21:40:25 -05:00
Cameron a668b14116 Update deprecated functions 2024-11-24 12:56:21 -05:00
Cameron 860e7a97fb Use TagDao for improved filtering 2024-11-24 09:49:03 -05:00
Cameron 9a32a1cfe7 Allow for excluding certain tags from a file search 2024-11-23 20:21:19 -05:00
Cameron 6986540295 Add sorting shuffle, and name asc/desc 2024-11-23 19:13:25 -05:00
Cameron 287a61ae3f Update dependencies, improve startup logging 2024-11-23 12:14:12 -05:00
cameron 4899dc4967 Merge pull request 'Use PhotoSize enum in file requests' (#29) from feature/photosize-enum into master
Reviewed-on: #29
2024-06-30 21:51:28 +00:00
Cameron Cordes 9a486b3f66 Use PhotoSize enum in file requests 2024-06-30 17:49:55 -04:00
cameron a403903807 Merge pull request 'Trim spaces from new tags' (#28) from feature/trim-new-tags into master
Reviewed-on: #28
2024-03-21 02:17:32 +00:00
Cameron Cordes 1881b9efb9 Trim spaces from new tags
Fix unit test build
2024-03-20 22:16:06 -04:00
cameron 8eea6670c8 Merge pull request 'Fix recursive searching with tags' (#27) from feature/fix-recursive-tag-search into master
Reviewed-on: #27
2024-03-11 00:46:55 +00:00
Cameron Cordes 3925d835f6 Fix recursive searching with tags 2024-03-10 20:45:18 -04:00
cameron 3c9263eb48 Merge pull request 'feature/add-recursive-tag-support' (#26) from feature/add-recursive-tag-support into master
Reviewed-on: #26
2024-03-09 18:14:49 +00:00
Cameron Cordes 05a56ba0bd Fix Recursive searching with tags including Any and All filter modes 2024-03-09 13:11:55 -05:00
Cameron Cordes b2c8ebe558 Break-up FilterMode.All being recursive
Filtering on tags needs some reworking to handle recursive with All or Any
filtering.
2024-03-07 19:01:46 -05:00
Cameron Cordes ef39359862 Add basic recursive tag searching support based on the search path 2024-03-07 17:56:50 -05:00
cameron d58e34c18f Merge pull request 'Refresh thumbnails after an upload or file move' (#25) from feature/refresh-thumbnails-improvements into master
Reviewed-on: #25
2024-02-22 02:48:57 +00:00
Cameron Cordes 30dba33e47 Refresh thumbnails after an upload or file move 2024-02-21 17:24:16 -05:00
cameron 446d2e53ee Merge pull request 'Ensure Move endpoint does not overwrite an existing file' (#24) from feature/fix-file-move-overwrite into master
Reviewed-on: #24
2024-01-22 02:37:29 +00:00
Cameron Cordes 0faad2fbdb Ensure Move endpoint does not overwrite an existing file 2024-01-21 21:35:36 -05:00
cameron df843ba30a Merge pull request 'Add Move File functionality and endpoint' (#23) from feature/file-move-endpoint into master
Reviewed-on: #23
2024-01-22 02:14:33 +00:00
Cameron Cordes 419dd7e7e5 Add Move File functionality and endpoint 2024-01-21 21:10:13 -05:00
cameron 2f9ad6b24f Merge pull request 'Add the count of tagged files to All tags endpoint' (#21) from feature/include-tag-counts into master
Reviewed-on: #21
2024-01-18 03:54:38 +00:00
Cameron Cordes 17012fc447 Merge branch 'master' into feature/include-tag-counts 2024-01-17 22:47:46 -05:00
cameron ae0bb79bc4 Merge pull request 'feature/handle-duplicate-file-name-upload' (#22) from feature/handle-duplicate-file-name-upload into master
Reviewed-on: #22
2024-01-18 03:40:22 +00:00
Cameron Cordes 5bbc775d3a Update to Watcher 6
Improve upload performance by relying on the file watcher instead of
synchronously creating thumbnails before responding to the client.
2024-01-17 22:25:18 -05:00
Cameron Cordes 195d522f64 Add file upload log in happy path and update log level for duplicate path 2024-01-17 21:00:15 -05:00
Cameron Cordes 6c5014253f Update gitignore and RustRover config 2024-01-17 20:49:31 -05:00
Cameron Cordes bf7fb810de Fix duplicate file naming 2024-01-17 20:45:36 -05:00
Cameron Cordes 7e11448ada Update dependencies 2023-12-02 14:23:51 -05:00
Cameron Cordes 2b9a741642 Account for current path for tag counts
Fix tag unit tests
2023-12-02 13:38:24 -05:00
Cameron Cordes da21f064b9 Add the count of tagged files to All tags endpoint 2023-12-01 23:01:03 -05:00
Cameron Cordes 9e8f02240f Put timestamp in file name if uploaded file already exists 2023-04-30 11:37:23 -04:00
cameron 5228cb14e0 Merge pull request 'feature/tagging' (#16) from feature/tagging into master
Reviewed-on: #16
2023-04-10 12:55:27 +00:00
Cameron Cordes 8bcd837038 Fix file upload
Add a flag for new files so we can skip the exists check when seeing if
the new file is within the base directory.
2023-04-03 08:41:03 -04:00
Cameron Cordes 7863990c68 Run clippy 2023-03-25 20:59:32 -04:00
Cameron Cordes a9109fc52d Add the ability to query files by tags independent of file path 2023-03-25 20:52:51 -04:00
Cameron Cordes ae2642a544 Fix warnings, and general code cleanup 2023-03-25 20:52:20 -04:00
Cameron Cordes ae8665f632 Fix clippy warnings 2023-03-22 15:17:48 -04:00
Cameron Cordes 4ded708911 Extract FileSystem to a trait for better testability
Added some tests around filtering and searching by Tags. Added the
ability to use an in-memory Sqlite DB for more integration tests.
2023-03-22 15:17:33 -04:00
Cameron Cordes 5a2dce85e8 Fix searching by tags and fixed All FilterMode
Manually parsing the tag_ids for the file filtering isn't amazing, but
this works in a more friendly format.

Also the All filter mode was set up in the wrong direction instead of
checking that the file had ALL the tag ids provided, it checked that all
the tag-ids were on a file, which is too restrictive and wouldn't show
many files. Perhaps an ONLY option could exist for being even more
specific.
2023-03-22 13:58:14 -04:00
Cameron Cordes 02444de7fa Fix tagging file with new tag
When tagging a file with a brand new tag, we were using the number of
rows affected as the ID instead of doing the query for the ID of the row
we just inserted, this should fix when we tag a photo with a new tag.
2023-03-22 13:51:32 -04:00
Cameron Cordes 7d05c9b8bf Add filtering by Tag to /images endpoint 2023-03-20 08:14:12 -04:00
Cameron Cordes de4041bd17 Refactor tags services and added tests
Implemented some functionality which will allow the service
configuration of the app to be split among the features for readability
and testability.
2023-03-19 15:05:20 -04:00
Cameron Cordes fbcfc68e01 Fix tests 2023-03-19 12:29:33 -04:00
Cameron Cordes 8bcd9440bf Add Endpoint for Batch add/removal of tags on a file 2023-03-19 12:13:04 -04:00
Cameron Cordes f98d3261a7 Fix tags all and tags for photo endpoints 2023-03-18 21:00:26 -04:00
Cameron Cordes 68bfcbf85f Update and Migrate Diesel to 2.0
Almost have tag support working, still figuring out how to get photo
tags.
2023-03-18 14:43:41 -04:00
Cameron Cordes 40c79d13db Move tags to their own module
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2022-03-17 22:07:33 -04:00
Cameron Cordes c8cae28c9f Merge branch 'master' into feature/tagging 2022-03-17 21:53:17 -04:00
cameron d0536c8980 Merge pull request 'Improve testability and remove boxing' (#20) from feature/testing-improvements into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #20
2022-03-18 00:25:51 +00:00
Cameron Cordes 528db5da3a Move app state to its own module
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2022-03-17 19:40:07 -04:00
Cameron Cordes 4d9b7c91a1 Improve testability and remove boxing
Core Repos/ImageApi/pipeline/pr-master There was a failure building this commit
Leverage generics to remove the extra heap allocation for the response
handlers using Dao's. Also moved some of the environment variables to
app state to allow for easier testing.
2022-03-16 20:51:37 -04:00
cameron e02165082a Merge pull request 'Update to Actix 4' (#19) from feature/update-to-actix-4 into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #19
2022-03-02 02:32:29 +00:00
Cameron Cordes 50e973da1f Cleanup unused imports
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2022-03-01 21:16:04 -05:00
Cameron Cordes b219663e0a Update CI to Rust 1.59
Core Repos/ImageApi/pipeline/pr-master This commit looks good
This will support Rust 2021 edition for Actix 4.
2022-03-01 20:44:51 -05:00
Cameron Cordes 69fe307516 Update to Actix 4
Core Repos/ImageApi/pipeline/pr-master There was a failure building this commit
2022-03-01 20:38:41 -05:00
Cameron Cordes 9cd19d03eb Create Delete Tag endpoint
Core Repos/ImageApi/pipeline/pr-master There was a failure building this commit
2021-11-30 20:07:00 -05:00
cameron 1e3f33c2d3 Merge pull request 'Update Rust image to 1.55' (#17) from feature/update-ci-rust-155 into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #17
2021-10-13 16:41:15 +00:00
Cameron Cordes f0e96071be Update Rust image to 1.55
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-10-13 12:12:25 -04:00
Cameron Cordes 14ab02a1ec Elevate insertion logs to info and fix error logs
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-10-11 21:52:06 -04:00
Cameron Cordes 2e5ac8861c Add created timestamps for tags 2021-10-11 21:52:06 -04:00
Cameron Cordes 9d925be84d Improve add tag endpoint and add get tag endpoint
Flattened out the add tag logic to make it more functional.
2021-10-11 21:52:06 -04:00
Cameron Cordes 8939ffbaf5 Create Tag tables and Add Tag endpoint 2021-10-11 21:52:06 -04:00
Cameron Cordes 2d6db6d059 Update dependencies 2021-10-11 21:52:06 -04:00
cameron 652c2d03d5 Merge pull request 'feature/improve-files-endpoint' (#15) from feature/improve-files-endpoint into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #15
2021-10-08 01:01:00 +00:00
Cameron Cordes d6e4a01c88 Move list_photos to files module
Core Repos/ImageApi/pipeline/pr-master This commit looks good
Added some tests, refactored the error handling/logging, and refactored
the extension tests.
2021-10-07 20:32:36 -04:00
Cameron Cordes 2c50b4ae2f Add anyhow, Improve Auth token code
Moved test helper code to its own module.
2021-10-07 20:32:36 -04:00
cameron e4dac64776 Merge pull request 'Create file metadata endpoint' (#14) from feature/file-info-api into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #14
2021-07-08 21:28:15 +00:00
Cameron Cordes 0e972509aa Update dependencies
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-07-08 16:53:50 -04:00
Cameron Cordes 8622500a2f Use file metadata to sort files and directories 2021-06-02 08:32:20 -04:00
Cameron Cordes 9d823fdc51 Create file metadata endpoint
This allows retrieving create/modify date as well as file size for any
file in the BASE_PATH.
2021-05-19 08:53:20 -04:00
cameron 9a40614d1e Merge pull request 'feature/prometheus-metrics' (#13) from feature/prometheus-metrics into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #13
2021-05-01 05:02:27 +00:00
Cameron Cordes c5a7675986 Use IntGauge for media counts
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-05-01 00:16:55 -04:00
Cameron Cordes a79179c5c3 Add Image and Video total gauges 2021-04-30 23:53:10 -04:00
Cameron Cordes 6abc99d9b6 Add PrometheusMetrics 2021-04-05 20:14:34 -04:00
cameron 6768140785 Merge pull request 'Make list photos endpoint a get resource' (#12) from feature/photos-as-get into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #12
2021-03-29 20:24:07 +00:00
Cameron Cordes 4249fd319c Make list photos endpoint a get resource
Core Repos/ImageApi/pipeline/pr-master This commit looks good
The request doesn't modify state and the path can be passed as a query
param so a GET makes more sense.
2021-03-29 15:42:59 -04:00
cameron 44a6b582ab Merge pull request 'Revert back to actix 0.10' (#11) from feature/fix-actix-issue into master
Core Repos/ImageApi/pipeline/head Build started...
Reviewed-on: #11
2021-03-29 19:35:01 +00:00
Cameron Cordes 1b2aad0f08 Revert back to actix 0.10
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
Until Actix Web 4, we need to use an older version of actix so that the
runtime's match up to version 1.
2021-03-29 14:59:42 -04:00
cameron 2a07fd18b5 Merge pull request 'Update dependencies' (#10) from feature/update-dependencies into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #10
2021-03-27 22:20:03 +00:00
Cameron Cordes 7474c4d310 Update dependencies
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
Update dependencies and remove some features from the image crate that
are unused.
2021-03-27 17:25:52 -04:00
cameron 79c79c3b24 Merge pull request 'FavoritesDao for querying, adding and removing favorites' (#9) from feature/favorites-api into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #9
2021-03-27 21:25:25 +00:00
Cameron Cordes 2e97086751 FavoritesDao for querying, adding and removing favorites
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-03-27 16:33:45 -04:00
cameron bc6ce94e5a Merge pull request 'Update build image to Rust 1.51' (#8) from feature/update-to-1.51 into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #8
2021-03-26 12:40:23 +00:00
Cameron Cordes 53cdbabae1 Fix favorites logging parameter order
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-03-25 13:39:16 -04:00
Cameron Cordes 7f534a18bf Bump Jenkins build image to 1.51
Core Repos/ImageApi/pipeline/head There was a failure building this commit
Core Repos/ImageApi/pipeline/pr-master There was a failure building this commit
2021-03-25 13:18:16 -04:00
Cameron Cordes 31e95dc158 Fix some lint warning and simplify some code 2021-03-25 13:17:58 -04:00
Cameron Cordes 1539255ae0 Remove and replace deleted or moved thumbnails
Core Repos/ImageApi/pipeline/head This commit looks good
2021-03-17 22:30:27 -04:00
Cameron Cordes a2a9c27f12 Use Actix worker thread for database operations 2021-03-17 22:30:02 -04:00
Cameron Cordes 3c02bcc8fb Check upload name to make sure its an image or video
Core Repos/ImageApi/pipeline/head This commit looks good
The upload code should be additionally refactored to probably do a more
comprehensive check of if the file is an image or video.
2021-03-07 22:00:12 -05:00
Cameron Cordes 3611f46004 Fix test name and simplify helper 2021-03-04 16:37:19 -05:00
cameron 8ba24baaf7 Merge pull request 'Improve test coverage and logging' (#7) from feature/improve-test-coverage into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #7
2021-03-01 13:18:22 +00:00
Cameron Cordes e5eb2d9c1f Add info level request logging
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-27 11:54:04 -05:00
Cameron Cordes 1c7e54d355 Make playlist generation async
This should allow other requests to be answered while we wait for ffmpeg
to do its thing.
2021-02-27 11:53:29 -05:00
Cameron Cordes e5ad88abd6 Create UserDao and unit tests for login 2021-02-26 08:48:33 -05:00
Cameron Cordes 64bfb58734 Log when unknown user tries to log in 2021-02-25 17:42:16 -05:00
Cameron Cordes 72e41b99a1 Remove Actix CORS dependency 2021-02-25 14:42:23 -05:00
cameron 0ff7c1610a Merge pull request 'feature/update-dependencies' (#6) from feature/update-dependencies into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #6
2021-02-25 16:20:32 +00:00
Cameron Cordes 45aa260d7b Merge branch 'master' into feature/update-dependencies
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-25 10:44:28 -05:00
cameron 2940bdf056 Merge pull request 'feature/logging' (#5) from feature/logging into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #5
2021-02-25 15:26:45 +00:00
Cameron Cordes e0d2a14d0f Report path when an image fails to open
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-24 22:28:46 -05:00
Cameron Cordes f9983240df Use log crate for logging instead of println
Core Repos/ImageApi/pipeline/head This commit looks good
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-24 21:26:11 -05:00
Cameron Cordes 8b5ba9d48c Move auth related methods to their own module 2021-02-18 20:31:29 -05:00
Cameron Cordes fae7b2a962 Add tests for JWT decoding 2021-02-18 20:31:03 -05:00
Cameron Cordes b0a9cd6327 Update Actix, tokio and hashing libraries
Core Repos/ImageApi/pipeline/head This commit looks good
2021-02-15 20:39:14 -05:00
cameron 1ad7abb69c Merge pull request 'feature/video-stream-manager' (#4) from feature/video-stream-manager into master
Core Repos/ImageApi/pipeline/head This commit looks good
Reviewed-on: #4
2021-02-13 18:18:12 +00:00
Cameron Cordes 11d1e9600a Use an Actor for the Stream watching
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-11 20:39:07 -05:00
Cameron Cordes 45b4f0cd72 Track relevant .idea files
Core Repos/ImageApi/pipeline/head Something is wrong with the build of this commit
Core Repos/ImageApi/pipeline/pr-master This commit looks good
2021-02-09 21:32:22 -05:00
Cameron Cordes b595bdd642 Add VideoStreamManager for keeping track of active streams
The stream manager should help prevent zombie processes and can later be
used for stopping video streams if the user exits the video before
finishing for example.
2021-02-09 21:30:27 -05:00
Cameron Cordes e4c23c0fe5 Improve video streaming speed
Core Repos/ImageApi/pipeline/head This commit looks good
Instead of waiting for an entire video to stream, we spawn a child
ffmpeg process to start generating the HLS playlist, and once it creates
the first part of the playlist we return the response so the client can
start streaming almost immediately. HTTP Live streaming can handle
playlist updates after the initial playlist is created, although I don't
think the user can skip to the end and skip streaming parts of the
video.
2021-02-08 19:46:38 -05:00
Cameron Cordes ecd43f776a Do more proper path validation for playlist generation
Core Repos/ImageApi/pipeline/head This commit looks good
2021-02-08 18:38:30 -05:00
Cameron Cordes 659bad02c9 Fix clippy warnings
Core Repos/ImageApi/pipeline/head This commit looks good
2021-02-03 17:21:23 -05:00
cameronandCameron Cordes e46abbf8ee Jenkins CI (#2)
Core Repos/ImageApi/pipeline/head This commit looks good
Co-authored-by: Cameron Cordes <cameronc.dev@gmail.com>
Reviewed-on: #2
Co-authored-by: cameron <cameron.cordes@pm.me>
Co-committed-by: cameron <cameron.cordes@pm.me>
2021-02-02 21:24:14 +00:00
Cameron Cordes f20a8a5842 Update dependencies, disable registration and improve path handling 2021-02-02 13:57:51 -05:00
cameron acad71701e Merge pull request 'Image Upload' (#1) from feature/image-upload into master
Reviewed-on: #1
2020-10-17 23:25:51 +00:00
Cameron Cordes eccb45ced0 Use Absolutize for files that do not exist
Canonicalize relies on the file existing to resolve the potential
traversal, which won't work for file upload in case the file name has a
traversal inside it.
2020-10-17 19:22:55 -04:00
Cameron Cordes 6c9c80f61d Update dependencies 2020-10-16 14:43:20 -04:00
Cameron Cordes f52ad9e3b6 Include Nikon Raw image files 2020-09-17 13:29:47 -04:00
Cameron Cordes d2f7423c6c Fix LFI bug
Previously we blindly read whatever path the client provided and if the
user could read the file it would return from the call.
2020-09-15 16:35:05 -04:00
Cameron Cordes 2343351a4d Add file watcher to re-generate thumbnails
Previously files added while the server is running would not have
thumbnails until after the server was restarted. Now we watch the
BASE_PATH for added/renamed files in order to re-gen the thumbnail.
2020-09-13 21:36:34 -04:00
Cameron Cordes 426c695b47 File upload working 2020-09-13 21:34:08 -04:00
Cameron Cordes fe23586059 Update to Actix 3.0 2020-09-11 16:12:41 -04:00
Cameron Cordes c774edd7dd Add Favorite GET, and POST endpoints 2020-08-07 23:11:15 -04:00
Cameron Cordes 74043c5c6a Scan for new files every startup 2020-08-07 23:11:15 -04:00
cameron a300b78fd0 Update 'README.md' 2020-07-30 18:16:23 +00:00
Cameron Cordes 1805c19025 Add README with environment info 2020-07-30 11:01:08 -04:00
Cameron Cordes f99d574ba2 Read Token signing key from environment 2020-07-30 10:53:27 -04:00
Cameron Cordes 68bb9d9d5c Added tests and better path validation
Secure video endpoints.
2020-07-23 16:18:28 -04:00
Cameron Cordes f63dd9cb05 Keep thumbnails in their relative directories 2020-07-21 20:36:41 -04:00
Cameron Cordes 7dbd93cedc Generate mp4 thumbnails 2020-07-16 21:24:10 -04:00
Cameron Cordes a49619c98c Move url to env variable 2020-07-16 20:18:38 -04:00
Cameron Cordes c90987d709 Check extensions case-invariant
Ran clippy and linted some of the logic.
2020-07-16 20:16:17 -04:00
Cameron Cordes 7d369aab5c Generate thumbnails before API starts up
Clients can now request a thumbnail by specifying a size on the image
request.
2020-07-15 12:06:50 -04:00
Cameron Cordes ca761f605b Check and use correct paths for generating HLS playlist
This also should prevent generating the playlist if it already exists
and uses a better ffmpeg command for transcoding the video.
2020-07-14 15:45:10 -04:00
Cameron Cordes c39bf970be Generating a HLS playlist through ffmpeg
I might be able to streamline the requests to cut down on the endpoints.
This also will likely take some time if the file is large and could time
out, that may be a concern for another day.
2020-07-13 22:39:00 -04:00
Cameron Cordes 78c066b7be Update Photos API
Since there is a body to the photos api it should be a post for now.
Also updated the response to separate files and directories.
2020-07-09 18:22:03 -04:00
Cameron Cordes e0e12dcc7b Remove Environment file 2020-07-08 21:41:22 -04:00
Cameron Cordes 536300e0a1 Serving files is working
Right now we're not doing any streaming and this isn't ideal. I'll need
to figure it out at some point.
2020-07-08 21:38:21 -04:00
Cameron Cordes 82203d9a41 Create Account endpoint works 2020-07-08 09:19:27 -04:00
Cameron Cordes e3bb607d95 Fix token parsing and require Auth for list files 2020-07-07 22:37:20 -04:00
Cameron Cordes 2aa1b61429 Move database into the main app
I was having issues including the lib as a crate, its fine just being a
module for now.
2020-07-07 21:48:29 -04:00
Cameron Cordes 1c1c8531aa Ignore database files 2020-07-07 21:07:00 -04:00
Cameron Cordes f8df3678b1 Setup Auth DB 2020-07-07 21:06:43 -04:00
Cameron Cordes 36f7351627 Initial API setup
Right now we are just listing files in a given subdirectory with not
authentication.
2020-07-07 19:53:12 -04:00

Diff Content Not Available