Commit Graph

198 Commits

Author SHA1 Message Date
Arnab Chakraborty
e9d72b9b6b Merge branch 'main' into eng-1828-migration-to-new-cloud-api-system 2024-07-23 14:04:43 +03:00
Arnab Chakraborty
3db7ae7712 Change service subdomain url from app to api 2024-07-23 13:41:30 +03:00
ameer2468
a4e626ba14 [ENG-1830] Change sidebar toggle shortcut (#2625)
* Change sidebar shortcut to cmd/ctrl + s

* tooltip icon
2024-07-22 14:50:14 +00:00
Matthew Yung
0bb073e8bb [ENG-1238] Improving job manager feedback and usability (#2607)
* calculate jobs eta

* calculate eta for single + group jobs

* fix issue with clearing running job groups

* clear completed with error tasks

* error handling for ETA

* fix typeerrors and minor styling for ETA

* fix clearing all jobs & types

* Update JobGroup.tsx

* Update JobGroup.tsx

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-07-17 14:41:06 +00:00
Vítor Vasconcellos
561462760b Fix autoformat CI & format codebase (#2581)
* Update pnpm version

* Fix autoformat

* Improve autoformat msg

* Attempt to fix autoformat 2

* Fix autoformat

* Ignore deleted files in auto-format

* Fix diff filter

* Autoformat whole codebase

* Improve error message for autoformat CI

* Test autoformat CI

* Revert "Test autoformat CI"

This reverts commit 0bf2f46d1a.
2024-07-04 08:57:43 +00:00
ameer2468
e1ec45bf5e [ENG-1808] Fix job manager icons (#2573)
Fix job manager icons
2024-06-27 15:56:07 +00:00
Arnab Chakraborty
18235c6f09 [MOB-106] Cloud Sync for Mobile (#2549)
* wip + working backfill

* Finished BackfillWaiting page + initial auth setup

Also, setting up the cloud sync page.

* mobile auth

* Import Cloud Library

Currently, you can import a cloud library, however it seems that the data, such as locations, is not transferring correctly.

* Working Mobile Cloud Sync

Cloud Sync works for Mobile, and the mobile app can sync files from a cloud library, and other clients can access the data from the phone's cloud library.

* Cloud Sync Done

* Formatting

* Fix new library button

* New device type passing to auth

* Improve design of cloud settings and import modal

* ui adjustments and code cleanup

* Update styling if there's only 1 instance

* code cleanup, design tweaks

* empty state & simple indicator animation

* lint

* loading indicator and cleanup

* Fix to Sync Subscription

* Update Cargo.lock

* Async logout for debug

* tweaks

* Update SettingsStack.tsx

* cleanups and cloud desktop design improvements

* more cleanups and ui improvements

* ts

* i18n

* Cloud Sync Docs

* styling

* Delete library-sync.mdx

Moving docs to a separate branch

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-06-18 08:46:29 +00:00
Ericson "Fogo" Soares
bdc242a852 [ENG-1775] Scan location using new jobs (#2476)
* First draft on task system usage, still missing job system

* Scan location roughly working, a ton of stuff to fix yet

* Updating some deps due to crashes and bugs

* Exposing non critical errors to frontend

* Getting active job reports from job system

* Using boxed opaque type to avoid a downcast issue with generics

* Task system issues discovered on race conditions

* Enable debug

* Fix job report in the job manager

* Fix race condition on steal tasks

* Fixed race condition on task suspend

* Some fixes on job progress reporting and save

* Fixed many race conditions and a hard deadlock
Also some progress report polishing

* Ignore .ts and .mts video files for now

* Some better logs

* bruh

* Internal deadlocks and excess of communication in the task system
- Also better logs

* Bunch of fixes and optimizations

* WIP at fixing file identifier

* Fixed file identifier job
- still need to work on its progress report frontend

* A bunch of polishing

* Fixed some bugs and did more polishing

* Cleanup

* Bridging old and new job systems

* A ton of fixes

* A bunch of bugs related to shutdown and resume

* Indexer and watcher bugs

* Log normalizing

* Fixing CI

* Change error! to warn! on non critical errors log

* Fix redirect to new location

* Type annotation

* Bogus merge resolution on cargo lock
2024-06-17 21:30:57 +00:00
Matthew Yung
7e8bfcd2b6 Add devices modal (#2540)
* add device modal changes

* cleanup

* tailwind typescript error fixes

* enabled modal only for dev mode

* no need for "any"

* i18n title

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-06-06 10:17:08 +00:00
Oscar Beaumont
b015763a6f More P2P docs (#2492)
* Remove relay

* restructure p2p

* wip

* cleanup webrtc

* split up P2P docs

* wip

* more wip

* the fork has moved

* finish local network discovery

* Document the relay system

* be less stupid

* a

* remote ip from deploy script

* remove debug from deploy script

* Explain relay setup and usage

* Physical pain

* fix

* error handling for relay setup

* Listeners Relay state + merge it into NLM state

* `node_remote_identity`

* redo libraries hook

* toggle relay active in settings

* Dedicated network settings page

* Stablise P2P debug page

* warning for rspc remote

* Linear links in docs

* fix p2p settings switches

* fix typescript errors on general page

* fix ipv6 listener status

* discovery method in UI

* Remove p2p debug menu on the sidebar

* wip

* lol

* wat

* fix

* another attempt at fixing library hook

* fix

* Remove sync from sidebar

* fix load library code

* I hate this

* Detect connections over the relay

* fix

* fixes

* a

* fix mDNS

* a bunch o fixes

* a bunch of state management fixes

* Metadata sync on connection

* skill issue

* fix markdown

* Clippy cleanup

* Backport #2380

* Update interface/locales/en/common.json

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/local-network-discovery.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/local-network-discovery.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p_proto.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/overview.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/overview.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/relay.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p_proto.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p_proto.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/transport-layer.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p_proto.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/local-network-discovery.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* Update docs/developers/p2p/sd_p2p_proto.mdx

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>

* a

* Cleaning binario section

* cleanup Docker message

* idk

* Idempotent listeners

* Manual peers working????

* minor fixes

* crazy idea - don't panic in the event loop

* fixes

* debug

* debug

* LAN badge in network settings

* Use `dns_lookup` instead of `tokio::net::lookup_host`

* fix

* bruh sandwich

* proper dialing

* a

* remove logs

* fix

* Small cleanup

* manual peers state on connected device

* a

* Fix manual discovery state + give it a badge

* Clippy improvements

* flip discovery priority

* Add `addrs` to debug query

* connection candidates in debug

* Fix state

* Clippppppppppppy

* Manual discovery badge

* Flesh out ping example

* Usage guide

* `sd_p2p_proto` examples

* More discovery docs

* More docs work

* docs docs docs and more docs

* PONG

* rename

---------

Co-authored-by: Matthew Yung <117509016+myung03@users.noreply.github.com>
2024-05-30 21:48:12 +08:00
Matthew Yung
d64b21357b added feedback for delete (#2507)
* added feedback for delete

* fixed requested common.json issues
2024-05-27 17:28:49 +00:00
Artsiom Voitas
c091ccacfd i18n Keys for Size values and partial Job Manager translation (#2480)
* added more translation keys and a little bit refreshed overview card style

* reverted style changes and disabled pluralize func

* minor changes

* added a couple of translation keys for job manager

* deleted unused keys

* updated translations, changed card style in overview section

* forgot about console.log

* more translation and minor fixes in translation

* translation for sync component
2024-05-17 15:44:47 +00:00
Jamie Pine
1eb98cea67 Added Peer screen (#2484)
better peers
2024-05-15 00:48:06 +00:00
Jamie Pine
0ccc038900 More important docs! (#2317)
* docs

* docs

* doc

* revert

* revert

* move actions to arch

* docs

* docssss

* typo

* duplicate

* fix date

* x

* jobs

* jobs

* Update jobs.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update jobs.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update libraries.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update spaces.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update spaces.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update spaces.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update introduction.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update clouds.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update clouds.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update clouds.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update importing-photos.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update interface.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update jobs.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update library-setup.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update locations.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update quick-preview.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* Update quick-preview.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* changes

* stuff

* fix

* rag stuff wip

* Update docs/product/guides/importing-photos.mdx

Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>

* del

* fixed typos/changed wording for some docs

---------

Co-authored-by: Utku <74243531+utkubakir@users.noreply.github.com>
Co-authored-by: 0xBA5E64 <26796481+0xBA5E64@users.noreply.github.com>
Co-authored-by: myung03 <matthewyungisworking@gmail.com>
2024-05-15 00:47:00 +00:00
Jamie Pine
8bfcf58a0d [ENG-1778] Total library size statistic (#2477)
* it

* migration

* fix error msg

* fix error msg actually tho

* fix

* ts errors
2024-05-13 22:02:49 +00:00
Utku
7cd33727b3 [MOB-35] Explorer sort by (#2387)
* pnpm

* hide search on some screens

* translations

* move shared order stuff to @sd/client

* some ideas

* wip - redesign otw

* Merge remote-tracking branch 'origin' into mob-35-explorer-sort-by

* header adjustments and more

---------

Co-authored-by: Jamie Pine <32987599+jamiepine@users.noreply.github.com>
Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-05-07 22:12:09 +00:00
Brendan Allan
408499229b Sync settings page (#2460)
sync settings page
2024-05-07 07:39:22 +00:00
Artsiom Voitas
2d78edef4d Added even more i18n translation keys (#2453)
* more translation keys

* added i18n keys for future ObjectKindEnum translation

* more keys

* added more keys

* synced all new translation keys with all languages, translated keys on Belarusian and Russian

* added translation for objectkinds in overview

* added translation function for objectkinds

* added more keys to german locale

* renamed 'asc' and 'desc' keys

* rolled back changes

* added missed key

* there are much more keys, than you can imagine

* fixed misspelling

* removed console.log

* removed function "pluralize", added required plural words keys for each language

* fixed condition, which could've lead to undefined value

* hide filter description for boolean filters
2024-05-04 16:16:49 +00:00
nikec
39840b21bf [ENG-1772] Fix sidebar issues (#2452)
fix sidebar issues
2024-05-03 12:18:56 +00:00
Vítor Vasconcellos
a3933501a4 Fix Onboarding breaking due to Sidebar changes made in #2425 (#2437) 2024-05-02 02:50:03 +00:00
nikec
958692771d [ENG-578] Resizable sidebar (#2425)
* v1

* Update pnpm-lock.yaml

* Update store.ts

* Update index.tsx

* fix animation

* toggle_sidebar

* locales
2024-05-01 14:35:09 +00:00
Oscar Beaumont
ce5e285c2f Remove normalised cache (#2390)
* yeetus

* fix

* a

* fix

* todo

* fix library stuff

---------

Co-authored-by: Jamie Pine <32987599+jamiepine@users.noreply.github.com>
2024-04-30 00:36:39 +00:00
Vítor Vasconcellos
9384bade61 Revert OpenDAL for ephemeral location (#2399)
* Revert "OpenDAL - Ephemeral Locations (#2283)"

This reverts commit 2848782e8e.

* Format

* Fix some diff problems
2024-04-26 00:29:55 +00:00
Arnab Chakraborty
e0f540a1be Small Trash UI fixes (#2385)
* Update index.tsx

* More ui fixes + toast

* Update index.tsx

* Add Translations
2024-04-24 18:20:51 +00:00
Utku
279aaf2c50 hide placeholders (#2384) 2024-04-24 16:48:14 +00:00
Arnab Chakraborty
b4037d6537 Open Trash from the application (#2338)
* Open Trash from the application

* Working Trash Sidebar Button

* Small UI fixes

* Update common.json

* Move openTrash to Tauri Command instead of RSPC

* format and remove type assertion

---------

Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
2024-04-22 19:46:10 +00:00
Utku
d19ff363e1 Minor changes (#2308)
* move things around

* enable sort by/direction for list view

* more machine generated translations yey + minor stuff
2024-04-11 01:44:04 +00:00
nikec
b71c046aa9 [ENG-1731] Explorer grid selection behaviour for windows (#2307)
* Add windows explorer selection behavior

* update media view
2024-04-11 01:41:39 +00:00
Brendan Allan
504242f97e [ENG-1723] better sync status (#2299)
* better sync status

* cleanup
2024-04-09 03:14:51 +00:00
Arnab Chakraborty
20d9878968 Disable Labeler (#2288)
* Disable Labeler

* Auto format and lint

* Comment out regen labels context menu entry

* Comment out some more labels references

---------

Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
2024-04-05 19:41:11 +00:00
Vítor Vasconcellos
6bb94e3507 Fix pnpm prep fails to download native-deps on some specific network env (#2275)
* Fix pnpm prep failing to download native-deps on some specific network configurations

* Eslint/Prettier auto-format
2024-04-04 14:19:49 +00:00
ameer2468
21a0ec0869 [ENG-1699] Pin Job manager (#2264)
* wip

* minor cleanup

* Update Popover.tsx

* remove prop
2024-03-29 16:48:05 +00:00
Utku
9a1cdf1dca Fix all the weird eslint warnings (#2245)
* actually fix the weird lint errors

* Prettier auto-format

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
2024-03-26 20:46:44 +00:00
Brendan Allan
94ca18925d [ENG-1691] Sync status subscription (#2246)
* sync status subscription

* clippy
2024-03-26 07:26:37 +00:00
Vítor Vasconcellos
e5b57aa0ea New test: Add location (#2222)
* New test: Add location
 - Add script to download some test files to allows tests to have a stable path for creating locations
 - Improve onboarding test
 - Add custom Cypress commands for fastOnboarding and deleteLibrary
 - Add some documentation related to tests to CONTRIBUTING.md
 - Update some deps

* Download small test-data for Cypress CI

* Replace globstar with find to make it compatible with bash 3.x

* Fix react too many re-renders
 - add-location test should now pass successfully

* Make job model task text match less flaky

* Check if we were redirected to onboarding after Library was deleted
 - Check if sidebar entry was created after adding a location
 - Put route regex's into a separate file
 - Make onboarding test ensure that no Library exists before running

* Enable test retries
 - Log cypress default config during test run

* Run tests under webkit
 - Pass CI envvar to tests to ensure correct cypress config

* Attempt fix CI config again

* Remove single use checkUrlIsLibrary function
2024-03-23 21:24:16 +00:00
Oscar Beaumont
7dc0880f8b P2P Metadata Cache + Sidebar (#2208)
* wip

* wip

* Render peers in sidebar

* clippy

* stringify on server

* don't stringify

---------

Co-authored-by: Brendan Allan <brendonovich@outlook.com>
2024-03-14 09:12:29 +00:00
ameer2468
72451a07bc [ENG-1683] Prevent mouse-side buttons from drag selection (#2203)
* Update index.tsx

* Add coming soon toast for add device button
2024-03-13 16:15:39 +00:00
Utku
d60789e588 Make eslint happy (#2198)
* eslint maxing

* @sd/ui too
2024-03-12 20:41:41 +00:00
ameer2468
4b74c0af04 [ENG-1680] Show error messages for feedback form (#2196)
Update FeedbackButton.tsx
2024-03-12 13:17:29 +00:00
Oscar Beaumont
926ae4fc65 P2P holepunching + relay (#2147)
* Basic AF server

* wip

* Add autonat to relay server

* Add autonat client + fixes

* Deploy script

* wip

* Debug view

* wip

* wip

* relay all events

* wip

* fix

* wip

* libp2p man spoke

* dctur

* Relay config file

* Advertise relay server

* Dynamic relay configuration

* wip

* p2p relay config

* cleanup

* push instances into p2p state

* fix

* Fix up TS
2024-03-12 06:18:58 +00:00
Arnab Chakraborty
3bd1622e93 [MOB-23] Mobile Hardware Information for Overview Page (#2106)
* wip for iDevices

* Working HardwareModel Info for iOS

* wip

* Merge 'main' into 'mob-hw-info-overview'

* Half-Working `get_volume()`

* Objective c bridge to talk to FS

* Working objc bridge

The bridge works now, and we can now access the iOS file system using the native objective-c APIs instead for proper values, including on the simulator.

* Isolate `icrate` for `ios` deployments only

* Working Stats for Android

* Clean Up + `pnpm format`

* Fix to FSInfoResult Type

Due to the RNFS fork change, I had to change the types to make it so it doesn't fail building and CI.

* iOS Device Name Fix
2024-03-06 06:46:22 +00:00
ameer2468
55d2ec7a6a [ENG-1663] Prevent middle-click opening new tab (#2168)
Update Link.tsx
2024-03-06 00:37:31 +00:00
Utku
b6c7ead854 [MOB-4] Toast messages (#2132)
* cleanup and add toast package

* fix screen container & use scrollview by default

* more cleanup and toast api

* now it works hmm

* toasts
2024-02-28 09:33:24 +00:00
Oscar Beaumont
aa0b4abf85 rspc over P2P (#2112)
* wip: rspc over p2p

* wip

* rspc over P2P

* Cleanup + error handling

* slight cleanup

* Using Hyper for HTTP streaming + websockets
2024-02-26 07:23:48 +00:00
Utku
b638fc2177 [MOB-37, MOB-38, MOB-39] Preview for PDF, Text and Media files (#2098)
* version & microphonePermission text & eslint

* remove polyfill as hermes supports intl now

* why do we have solid on mobile?

* cleanup

* add solid back =_=

* pnpm lock

* we hate relative paths here

* android config

* open file logic

* visual tweaks

---------

Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
2024-02-21 13:26:05 +00:00
nikec
1efaf97188 [ENG-1601] Fix job manager keybind toggle (#2084)
fix job manager toggle
2024-02-13 12:25:56 +00:00
Utku
da2841b37a More translations (#2051)
* translations

* more translation keys

* all the translations
2024-02-07 13:47:55 +00:00
Utku
e2175aaf19 [ENG-1578] Missing localization & language detect and settings (#2037)
* i18n privacy screen

* more missing translations

* language detector

* Language Settings

* sort german

* bump version to 0.2.3
2024-02-02 22:16:01 +00:00
Oscar Beaumont
a30deaa144 Cloud + P2P (#1970)
* P2P Debug route

* Remove legacy peer to peer pairing process

* Fix error typo

* Sync instances with cloud

* Upgrade deps + extended instance data

* Create instance with extended metadata

* Auto sync instances

* Actually `.await`

* bruh

* sync library info

* this isn't gonna work

* only sleep cloud receiver when no more messages (#1985)

* [ENG-1567] Fix renaming (#1986)

fix rename

* only sleep cloud receiver when no more messages

* use in memory instances during cloud receive (#1995)

* use in memory instances during cloud receive

* is_empty

---------

Co-authored-by: nikec <43032218+niikeec@users.noreply.github.com>

* fix type error

* wip

* make mdns mdns better

* response

* remove renames

---------

Co-authored-by: Brendan Allan <brendonovich@outlook.com>
Co-authored-by: nikec <43032218+niikeec@users.noreply.github.com>
2024-02-02 09:31:11 +00:00
Jamie Pine
fdf31fc3a8 [ENG-1511] Library Screens (#1903)
* init

* changes

* Now updating statistics once a minute

* More robust statistics updater

* Concurrency is hard

* improvements to stats

* refactor

* adjust setting back/forward padding so it matches top bar

* refactor sidebar

* rename

* setting up screens

* some changes

* Co-authored-by: Brendan Allan <Brendonovich@users.noreply.github.com>

* yes

* yes2

* refactored explorerItem.ts

* important explorer code shouldn't be thrown away in a util moment

* support for multiple thumbnails in ExplorerItem

* clippy

* move debug

* yes

* label filters

* ts

* comment out unconnected stuff

* added .mid for midi files

---------

Co-authored-by: Ericson Fogo Soares <ericson.ds999@gmail.com>
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
2024-01-16 12:15:03 +00:00