Commit Graph

121 Commits

Author SHA1 Message Date
stopflock 16e34b614f Rework profile FOVs - 360 checkbox 2026-03-14 17:18:33 -05:00
stopflock 08b395214b Move "about osm" to about page, add option to clear tile caches, option to add reason when deleting, min zoom 16 for edits/submissions, 300km nav distance warning 2026-03-12 18:59:48 -05:00
Doug Borg 2833906c68 Add centralized retry/fallback policy with hard-coded endpoints
Extract duplicated retry logic from OverpassService and RoutingService
into a shared resilience framework in service_policy.dart:

- ResiliencePolicy: configurable retries, backoff, and HTTP timeout
- executeWithFallback: retry loop with primary→fallback endpoint chain
- ErrorDisposition enum: abort / fallback / retry classification
- ServicePolicy + ServicePolicyResolver: per-service compliance rules
  (rate limits, caching, concurrency) for OSMF and third-party services
- ServiceRateLimiter: async semaphore-based concurrency and rate control

OverpassService now hits overpass.deflock.org first, falls back to
overpass-api.de. RoutingService hits api.dontgetflocked.com first,
falls back to alprwatch.org. Both use per-service error classifiers
to determine retry vs fallback vs abort behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:13:52 -06:00
Doug Borg 8983939b05 Delegate network tile fetching to NetworkTileProvider
Replace our custom tile pipeline (fetchRemoteTile / _SimpleSemaphore /
exponential backoff) with flutter_map's built-in NetworkTileProvider,
gaining persistent disk cache, ETag revalidation, RetryClient, and
obsolete request aborting for free.

DeflockTileProvider now extends NetworkTileProvider and overrides
getTileUrl() to route through TileType.getTileUrl() (quadkey,
subdomains, API keys). getImageWithCancelLoadingSupport() routes
between two paths at runtime: the common network path (super) when
no offline areas exist, and a DeflockOfflineTileImageProvider for
offline-first when they do.

- Delete tiles_from_remote.dart (semaphore, retry loop, spatial helpers)
- Simplify MapDataProvider._fetchRemoteTileFromCurrentProvider to plain
  http.get (only used by offline area downloader now)
- Remove dead clearTileQueue/clearTileQueueSelective from MapDataProvider
- Remove 7 tile fetch constants from dev_config.dart
- TileLayerManager now disposes provider on cache clear and uses actual
  urlTemplate for cache key generation
- 9 new tests covering URL delegation, routing, and equality

Closes #87 Phase 2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 20:07:56 -07:00
Doug Borg 0137fd66aa Add consistent User-Agent header to all HTTP clients
Create UserAgentClient (http.BaseClient wrapper) that injects a
User-Agent header into every request, reading app name and version
from VersionService and contact/homepage from dev_config.dart.

Format follows OSM tile usage policy:
  DeFlock/<version> (+https://deflock.org; contact: admin@stopflock.com)

Replaces 4 inconsistent hardcoded UA strings and adds UA to the 9
call sites that previously sent none.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 19:31:27 -07:00
stopflock f78ea1a300 no dev mode - publishing 2026-02-14 14:50:38 -06:00
stopflock 19b3ca236e no longer lose operator profile selection when making other changes to a node 2026-02-10 18:28:07 -06:00
Doug Borg ef4205f4bd Make suggestion limit configurable and remove redundant .take(10) from widget
Move hardcoded suggestion limit to kNSIMaxSuggestions in dev_config, and remove
the redundant .take(10) from optionsBuilder since the fetch stage already caps
results.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:32:18 -07:00
stopflock 2620c8758e dev mode, imperial units incl. custom scalebar 2026-02-06 20:28:08 -06:00
stopflock ba3b844c1e "existing tags" temp profile when editing, "existing operator" profile when such tags exist, full editing of existing nodes via refine tags 2026-02-01 14:50:47 -06:00
stopflock 607ecbafaf Concurrent submissions 2025-12-23 17:56:16 -06:00
stopflock ae795a7607 configurable overpass query timeout; increased to 45s 2025-12-23 12:03:53 -06:00
stopflock a05e03567e shorten nav timeout to reasonable number 2025-12-23 11:39:25 -06:00
stopflock c3752fd17e log in button, submission guide cancel, filter nsi by popularity and entered text 2025-12-17 17:36:59 -06:00
stopflock 656dbc8ce8 positioning tutorial 2025-12-11 16:01:45 -06:00
stopflock 4fba26ff55 Route distance timeout warning 2025-12-06 15:07:34 -06:00
stopflock adbe8c340c increase nav timeout to 2m 2025-12-05 17:06:14 -06:00
stopflock 8c4f53ff7b nav UX tweaks 2025-12-05 16:36:04 -06:00
stopflock 24214e94f9 Fix node edge blinking, prevent nav+edit conflicts, smarter follow-me w/rt nav 2025-12-05 15:27:01 -06:00
stopflock b176724fc5 Configurable nav timeout 2025-12-03 15:04:43 -06:00
stopflock d6519a76bf separate nav from dev 2025-12-03 14:12:37 -06:00
stopflock 14b4fb4a0a disable dev mode 2025-12-03 13:42:18 -06:00
ALPR Watch 3f83d67bc1 Add error handling and update documentation 2025-12-03 07:35:18 +01:00
stopflock c81014d530 maxCameras->maxNodes, default from dev_config 2025-12-02 15:50:11 -06:00
stopflock 31f6960d44 Navigation start+end too close warning 2025-12-02 15:02:49 -06:00
stopflock dccafc898b Fix changesets not getting closed, other updates to queue mechanism 2025-12-01 15:01:48 -06:00
stopflock df0377b41f Get rid of double cache, filesystem checking for every tile fetch, swap out http interception for a fluttermap tileprovider that calls map_data, fix node rendering limit 2025-11-28 21:48:17 -06:00
stopflock 7ff04851f4 Fix tile loading finally 2025-11-22 13:22:17 -06:00
stopflock 3baed3c328 Change suspected locations URL back to alprwatch 2025-11-22 10:42:32 -06:00
stopflock 3ade06eef1 todos, dev mode 2025-11-22 10:40:08 -06:00
stopflock d747c66990 Disallow new/edit nodes below zoom 15, disallow downloads below zoom 10. 2025-11-22 00:17:24 -06:00
stopflock 9319bbda48 Support FOV range notation: 0-360, 90-270, 10-45;90-125 2025-11-21 19:25:34 -06:00
stopflock d6419d5b7c Turn off dev mode 2025-11-21 16:43:40 -06:00
stopflock 3c996c78c9 Two nodes too close together warning 2025-11-21 15:35:12 -06:00
stopflock 492cf57520 Disable deletion of nodes attached to ways/relations, add option for visibility of WIP extraction feature 2025-11-20 21:17:06 -06:00
stopflock 813a0f06da Change prox alerts default and max distance 2025-11-20 20:08:10 -06:00
stopflock 95fad14261 min zoom 1, max cameras 8, extract node from way 2025-11-19 22:46:09 -06:00
stopflock 3174e0bfe1 Adjust gesture thresholds 2025-11-19 16:24:51 -06:00
stopflock 5404daa704 Gesture race! 2025-11-19 14:24:51 -06:00
stopflock 8ed92dcd7e Home screen respect safe areas in all orientations 2025-11-19 13:32:40 -06:00
stopflock 0143c74415 Reasonable size limits for tag text boxes in sheets 2025-11-18 16:21:31 -06:00
stopflock 6c53d988de Further improve tag views, implement upload queue pause toggle 2025-11-17 13:37:48 -06:00
stopflock 7c2b9ea087 Configurable max height for node tags box, localizations for new UX strings 2025-11-16 18:16:50 -06:00
stopflock 192c6e5158 Disallow editing location of nodes attached to ways/relations 2025-11-16 00:17:53 -06:00
stopflock fb8260d346 Add feature flag to disable edits temporarily during bugfix 2025-11-15 14:39:27 -06:00
stopflock fee557330d Update actions workflow, disable dev mode 2025-11-15 13:23:37 -06:00
stopflock 3810dfa8d2 configurable button width, always enable network status indicator, new version migration logic available through changelog_service 2025-11-12 15:53:14 -06:00
stopflock ae93cff719 Same as prev - forgot dev_config 2025-11-09 13:59:05 -06:00
stopflock b0a4128bb7 Configurable zoom behaviors, desensitize double tap + drag 2025-11-07 14:29:08 -06:00
stopflock 335eb33613 disable dev mode, temporarily pull 811 from stopflock.com 2025-11-02 15:37:35 -06:00