Commit Graph

514 Commits

Author SHA1 Message Date
tzugen fea515a526
Replace consumer use with a lambda 2021-10-23 16:54:00 +02:00
tzugen c44257f569
Fix a minor warning 2021-10-23 16:49:56 +02:00
tzugen 939cd8583c
Semantically rename DownloadQueueSerializer to PlaybackStateSerializer 2021-10-23 16:39:58 +02:00
tzugen ece53f7687
Add a comment 2021-10-23 16:13:05 +02:00
Nite 2847a51674
Fixed autoplay
Fixed uncaught exception
Fixed playlist loading from file
2021-10-23 16:09:49 +02:00
tzugen 24092ce465
Remove unneccessary call to checkDownloads() which were interferring with AutoPlay somehow. 2021-10-23 15:58:33 +02:00
tzugen 1d5b335f97
Add Download Fragment which show active downloads 2021-10-23 15:58:32 +02:00
tzugen 9bc19ec044
Semantic rename 2021-10-23 15:58:32 +02:00
tzugen 0bcf51a409
Implement LiveData in Downloader.kt
Minor: Also remove a suppress comment
2021-10-23 15:58:32 +02:00
Nite f58c361e4e
Fixed navigation on welcome screen
Fixed navigation after selecting new server
Fixed color for new server
Fixed typo
2021-10-21 17:55:19 +02:00
Nite 949e7e58ba
Merge branch 'develop' into navigation-servers 2021-10-20 19:48:41 +02:00
tzugen 62bade916f
Use delegate for Settings, reduces Boilerplate code 2021-10-18 17:32:12 +02:00
Nite ccf39661ab
Cleaned up warnings in FilePickerAdapter 2021-10-15 16:35:27 +02:00
Nite 7c66bc7ec8
Implemented navigation header coloring based on selected server 2021-10-15 16:26:06 +02:00
Nite 477f6f5d7c
Merge remote-tracking branch 'remotes/upstream/develop' into navigation-servers 2021-10-15 13:52:50 +02:00
Nite 23cca33d5a
Started implementing server colors 2021-10-14 17:17:32 +02:00
tzugen fbdf6d846b
Cleanup dead code paths 2021-10-13 18:51:11 +02:00
tzugen b892b7b8d3
Migrate PermissionUtil to Kotlin
- Set min SDK to 16 (was 14), because READ_EXTERNAL_STORAGE is minimum 16
- Add new shortcut to Settings.kt class
- Use showDialog util function
2021-10-13 18:51:04 +02:00
Nite 5a3eb6482a
Added option whether to create a share on the server when sharing songs 2021-10-12 21:09:19 +02:00
Nite 2f98bf9ae0
Merge branch 'develop' into playback_complete 2021-10-12 16:47:59 +02:00
tzugen aea2e6baef
Style fix 2021-10-12 15:16:40 +02:00
Nite eff1a714e2
Fixed album lists in landscape mode
Fixed starring on album lists
Fixed reading starred state on the Subsonic API
2021-10-12 15:16:40 +02:00
Nite 381e29b2d1
Fixed lint issues 2021-10-10 14:15:03 +02:00
Nite 4b4853374c
Moved server selector to the navigation menu 2021-10-10 14:03:53 +02:00
Nite a3128c5f7f
Fixed lint 2021-10-07 18:02:23 +02:00
Nite 221f218856
Added PlaybackComplete intent when a song playback is completed 2021-10-07 17:51:19 +02:00
tzugen 35a0dd761d
Fix a bug where newly added Artists were not cached correctly 2021-10-04 11:20:52 +02:00
Nite fda746905d
Merged changes from develop 2021-09-24 21:12:02 +02:00
Nite b640805559
Moved settings related properties from Util to their own class 2021-09-24 18:20:53 +02:00
Nite d4ce10ebfa
fixed lint error 2021-09-23 16:00:20 +02:00
Nite be49145aa8
Created different notification when Ultrasonic is only downloading files
Fixed null check
2021-09-23 15:51:53 +02:00
Nite 01aa1fe887
Moved kotlin files to their place 2021-09-21 15:20:56 +02:00
Nite 77f857b1c6
Added setting to disable Now Playing List sending for incompatible bluetooth devices 2021-09-17 16:45:33 +02:00
tzugen ecc7e870f1
Save Artists in Offline database 2021-09-15 20:51:42 +02:00
tzugen 28097bf325
Optimize Imageloader to not create empty MusicDirectory.Entries 2021-09-15 20:46:05 +02:00
tzugen 611539be55
Handle WifiLock in Download manager class, instead of creating an individual lock per task.
Also only stop the executor when done.
2021-09-15 20:46:05 +02:00
tzugen 5ff4d21abc
Merge FileUtil functions into a single class. 2021-09-15 20:46:05 +02:00
tzugen ec49775d7e
Convert FileUtil to Kotlin 2021-09-15 20:46:05 +02:00
tzugen c48c41284e
Migrate Constants to Kotlin, update a copyright notice. 2021-09-15 20:46:05 +02:00
tzugen ba745a5f9a
Run download task inside service 2021-09-15 20:46:05 +02:00
Nite 84d28178bf
Fixed media session null checks 2021-09-05 09:34:38 +02:00
Nite 9f1315b6dc
Merge branch 'develop' into semanticDownloadView 2021-09-01 18:19:55 +02:00
tzugen d08a38ea1c
Small fixes 2021-08-28 11:43:33 +02:00
tzugen ad81f3bf6d
Use semantically correct API endpoint when streaming/downloading.
Fixes #257
2021-08-28 11:39:32 +02:00
tzugen 594e94eea7
Finish 2021-08-28 11:29:47 +02:00
tzugen f9aac1ca43
Add parallel downloading, better priority handling 2021-08-28 11:29:47 +02:00
tzugen e0df24182e
Add nullability annotation 2021-08-28 11:29:47 +02:00
tzugen 662cb1728b
Fix a number of minor warnings in Util.kt 2021-08-27 11:50:31 +02:00
Maxence G (Hello-Fluffy) 0a2e7358fa
Fix CI 2021-08-26 22:58:39 +02:00
Maxence G (Hello-Fluffy) 7eb3d01ae8
Limit GetSongs if length is too short 2021-08-26 22:58:39 +02:00
Maxence G (Hello-Fluffy) a23e5ff794
Add better offline Support 2021-08-26 22:58:39 +02:00
Nite 2655a4a606
Merge branch 'develop' into video-cleanup 2021-08-25 14:27:05 +02:00
tzugen a051d4d040
Clean up Util.kt after conversion
(currentSong was assigned but never actually used)
2021-08-20 20:53:17 +02:00
tzugen 54f39be7ca
Video call can be static 2021-08-18 09:09:08 +02:00
tzugen 3afb86c22c
Video call can be static 2021-08-18 09:07:57 +02:00
Nite 9546bdeab5
Fixed playing single track in empty playlist 2021-07-19 15:31:52 +02:00
James Wells 961c726da8
restore previous code 2021-07-18 16:14:43 -04:00
Nite c9f2050c46
Suppress detekt LongMethod 2021-07-18 13:23:20 +02:00
Nite 982639d2c7
Fixed lint errors
Added comments
2021-07-18 13:17:29 +02:00
Nite cf05d3c781
Implemented Media Browsing 2021-07-18 11:33:39 +02:00
Nite f50d6f13f4
Started implementing Media Browser
Added root menus, playlists and artists
2021-07-16 17:29:21 +02:00
Nite 51dbdfb39a
Implemented track detail display in the playlist
Fixed playback position disappearing when paused
2021-07-14 16:09:52 +02:00
Nite 56af9e4bf2
Moved MediaSession handling to its own class
Fixed queue and position handling on Now Playing screen
2021-07-13 19:25:37 +02:00
Nite 83c6b76d0a
Updated Android Auto to use MediaPlayerService separately
Added some missing features found in the docs
2021-07-12 16:13:34 +02:00
James Wells db0669098c
Another Attempt at Auto 2021-07-04 16:42:18 -04:00
James Wells 04de4544ee
merge develop 2021-07-04 15:41:56 -04:00
tzugen b546f2c2fb
The Tests actually caught an error :)
If shortcuts were set, these were added as duplicates to the list.
2021-06-29 18:01:26 +02:00
tzugen dbdb59bbff
Add a Room database for Artists, Indexes and MusicFolders.
* There is one database for each Server
* Index items are saved with a "musicFolderId" prop, which makes it possible to filter the database by musicFolder without necessarily having to query the server for it.
* Databases for new Servers are created on the fly
* If the user removes a server, the respective database is deleted.
2021-06-29 18:01:26 +02:00
tzugen c99c4478f2
Remove file storage code from RESTAPI class 2021-06-29 18:01:26 +02:00
tzugen e3e8d36f5c
Save the correct field to the server preferences 2021-06-25 17:47:11 +02:00
tzugen 2da4f79098
Increase memory cache size 2021-06-23 17:31:41 +02:00
James Wells 4ff167e497
merge develop 2021-06-22 20:08:49 -04:00
tzugen 1132ec6c87
Merge branch 'develop' into fix-save-playlist 2021-06-21 18:49:25 +02:00
tzugen bc16b64be4
Avoid unnecessary reloads when navigating back,
this preserves the scroll position.
2021-06-21 13:41:39 +02:00
tzugen 36dccc845b
Use ListAdapter class to calculate Diff off the main thread 2021-06-20 08:31:12 +02:00
tzugen 1ecb577c50
Use DiffUtil for better performance when refreshing the data.. 2021-06-20 00:29:35 +02:00
tzugen 8c2896ea16
Remove static field leaks on SeekBar,
cleanup code and update baseline
2021-06-19 23:52:24 +02:00
tzugen d8b032e2e3
Cleanup code 2021-06-19 23:52:24 +02:00
tzugen 28336c8bf7
Convert PlayerFragment to Kotlin 2021-06-19 23:52:24 +02:00
tzugen 38f1f5f5c6
Nicer catch all 2021-06-19 23:25:02 +02:00
James Wells 793c4a6ca7
working version 2021-06-19 00:05:19 -04:00
James Wells 3853fce818
Merge branch 'develop' into AndroidAuto 2021-06-18 22:52:56 -04:00
Maxence G d440b8c76d
Fix no server call when starring song from notification 2021-06-16 20:33:21 +02:00
tzugen 57d740af12
Properly generate the Video stream url, without actually making a request! 2021-06-14 20:53:55 +02:00
tzugen bc295a825b
Merge branch 'develop' into remove-flash 2021-06-14 19:10:56 +02:00
Nite a02b620531
Fixed typos 2021-06-14 15:42:24 +02:00
tzugen db31fefe83
Remove flash support 2021-06-12 15:31:21 +02:00
tzugen 172cbd0476
Add an option to load the demo database for new users 2021-06-12 15:04:17 +02:00
James Wells 8855d19113
Merge branch 'develop' into AndroidAuto 2021-06-10 19:19:29 -04:00
tzugen 24ae0d9e81
Catch all exceptions in GenericListModel
This is how it used to be, before i changed it because
detekt was complaining.
2021-06-09 20:53:01 +02:00
tzugen 6ab0ff973a
Fix version checking for freshly added servers 2021-06-09 19:33:17 +02:00
tzugen 620239f859
Improve the extension function by making it call-chainable 2021-06-09 17:36:11 +02:00
tzugen a60a843edf
Fix tests 2021-06-09 17:00:25 +02:00
tzugen d9a7fa2413
Cleaner separation of API result handling.
* CallResponseChecker functionality are now Kotlin Extensions
* Removed unfitting shortcuts from SubsonicAPIClient
* Increase timeout to get a video url
* Fix a bug, that the Rest API version was checked twice on each call
2021-06-09 14:15:39 +02:00
tzugen 4eeff191aa
Add two ToDos 2021-06-08 17:20:45 +02:00
tzugen be356d9c0a
Cleanup unused functions from RESTMusicService,
put the caching functionality into the ImageLoader
2021-06-08 17:12:55 +02:00
tzugen 3c554caf2e
On disk we are only caching the full-size images.
So when modify the key to query for the full size image,
because scaling down a larger size image on the device is quicker than
requesting the down-sized image from the network.
2021-06-08 14:49:49 +02:00
Nite 78cb4d09cf
Separated cache entries for large images 2021-06-07 21:38:39 +02:00
Nite fa6566e903
Fixed showing the unknown image when a source isn't specified 2021-06-07 20:32:44 +02:00
Nite 7182694c5d
Fixed currentDownloading to be nullable
(It can be null when nothing is downloading)
2021-06-07 20:06:40 +02:00
tzugen 566e429e4c
Use file cache in Picasso 2021-06-07 14:22:33 +02:00
tzugen 9161f9dc99
Move ImageLoader module into main module. 2021-06-07 13:26:08 +02:00
tzugen 0989ee20a6
Remove LegacyImageLoader, use Picasso as default 2021-06-07 13:26:07 +02:00
tzugen 2eaa9a2091
Fix two bugs in the new image loader:
1. Id was checked for nullability, but it is actually an empty string in most cases where there is no Cover art.
This lead to queries without id set.
2. Size was not respected by the new image loader.
2021-06-07 13:26:07 +02:00
tzugen 90ecbe4b78
Make getCoverArt require a non-null entry 2021-06-07 13:26:07 +02:00
James Wells e95b2ce09c
refactored a bit, and some cleanup 2021-06-06 18:28:46 -04:00
James Wells be4ffc2c7e
Merge branch 'develop' into AndroidAuto 2021-06-06 16:36:33 -04:00
Nite fe5ee8b12a
Fixed ktlint 2021-05-31 14:04:46 +02:00
Nite 41023282e8
Fixed detekt
Fixed code duplication
Added more info to the Connection Test dialog for the user
2021-05-31 13:38:53 +02:00
Maxence G 67870efd67
Fix length 2021-05-29 15:46:09 +02:00
Maxence G 3e08735374
run ktlint 2021-05-29 15:42:15 +02:00
Maxence G 075b80c01f
Fix new active server getter 2021-05-29 15:30:01 +02:00
Maxence G d8e7b991cd
Merge remote-tracking branch 'base/develop' into check-server-features 2021-05-29 15:28:25 +02:00
Maxence G fd48367cab
Reduce function length 2021-05-29 15:00:46 +02:00
James Wells e666498f13
Initial Test of Android Auto 2021-05-28 20:40:00 -04:00
tzugen 8aa1cf1e2c
Fix Kotlin 1.5 deprecated calls 2021-05-28 20:32:31 +02:00
tzugen 71068fe635
Upgrade Koin to 3.0.2 2021-05-28 19:39:27 +02:00
tzugen ee9c478bfe
Make parentId nullable in TrackCollectionModel 2021-05-28 12:35:29 +02:00
tzugen e21ae1299b
Fix more detekt and lint issues and remove them from the baseline. 2021-05-27 15:30:20 +02:00
tzugen 6dc0eb7ecc
Move files to Koltin dir 2021-05-27 11:33:10 +02:00
tzugen cc7e273d50
Fix remaining warnings 2021-05-27 11:18:29 +02:00
tzugen 8567fc0105
Fix warning in FileLoggerTree.kt 2021-05-26 23:22:13 +02:00
tzugen e059d737bc
Adopt changes from stricter nullabilities 2021-05-26 23:21:56 +02:00
tzugen b30584f99c
Make Entry always have an id 2021-05-26 23:20:19 +02:00
tzugen 3257fb9153
Make Entry always have an id 2021-05-26 23:19:16 +02:00
tzugen f510638571
Fix KtLint issue 2021-05-26 08:49:23 +02:00
Maxence G 3c4a5064b0
change exception type 2021-05-25 19:30:02 +02:00
Maxence G 070e0ac792
Fix lintFormat + remove synchronized 2021-05-25 18:51:00 +02:00
Maxence G 1b7f48c53a
Implement server feature checking 2021-05-24 23:25:12 +02:00
tzugen 0500bd5e88
Handle also UnknownHostException in GenericListModel 2021-05-21 23:34:57 +02:00
tzugen 3d99269c41
Remove context from ShufflePlayBuffer 2021-05-21 23:34:57 +02:00
tzugen b8fbbd8c49
Remove Context from Downloader & DownloadFile 2021-05-21 23:34:52 +02:00
tzugen 9b2e54b94e
Remove context from JukeboxMediaPlayer and Scrobbler 2021-05-21 22:52:16 +02:00
tzugen 1b5db9da1f
Make ExternalStorageMonitor context-free 2021-05-21 22:37:43 +02:00
tzugen df047dd463
Refactor MediaPlayerController to Kotlin
and also make MediaPlayerService context-free
2021-05-21 22:35:22 +02:00
tzugen a801e276ee
Rename .java to .kt 2021-05-21 22:35:21 +02:00
tzugen f596dc77c1
Make MediaPlayerLifecycleSupport context-free 2021-05-21 19:43:32 +02:00
tzugen b25a118148
Remove unused context from CacheCleaner 2021-05-21 18:50:57 +02:00
tzugen 402fe961ba
Merge MediaPlayerController interface & implementation 2021-05-21 18:50:33 +02:00
tzugen b559f6420e
Move certain ignores from the baseline to the specified files. This makes refactoring much less fragile. 2021-05-20 18:16:55 +02:00
tzugen 5f08e7e7cd
Create a new SelectMusicFolderViewHolder instance when the Adapter is recreated,
instead of reusing an old one. This lead to a crash.

Also make the AlbumList use the correct placeholder,
remove an unused resource file, and update the placeholder to look less clumsy.
2021-05-18 08:50:04 +02:00
tzugen 2cf80707f7
Correctly display the folder header also in album view
Also fix a number of smaller issues
2021-05-16 21:06:04 +02:00
tzugen 72c03cc500
Introduce new Generic Fragments, ViewModels, and Adapters for the display of API data.
* Splits former SelectAlbumFragment into separate fragments for Albums and general collections of tracks
* Renames and refactors SelectArtist view to extend the new Generic classes
* Adds error handling (Fixes #484)
* Adds EndlessScrolling capabilities to all Album Lists
* Uses RecyclerViews and LiveData for performance and in-memory caching
* Refreshes the UI to be aligned with the ArtistList UI
* Add a new GenericEntry to the domain data classes, and make other types extend it
2021-05-16 17:42:31 +02:00
tzugen c6a744cc14
Rename classes in preparation of split. 2021-05-16 17:42:31 +02:00
tzugen a60be2157b
Removing remaining context from MusicService signatures. 2021-05-11 14:26:29 +02:00
tzugen c66118172c
Revert accidental changes in the method signature. 2021-05-11 12:04:29 +02:00
tzugen 5b6fa20050
This was literally the result of removing one(!) dependency on context inside FileUtil
17 Classes with x function  which don't need to pass around context anymore..
2021-05-11 12:04:29 +02:00
tzugen f2b1ba0e94
Remove unused context references in MusicServiceFactory 2021-05-11 12:04:29 +02:00
tzugen 76ba4c8ac9
Remove more context dependencies 2021-05-11 12:04:29 +02:00
tzugen 2c5f8d9dd0
Now we can stop passing around the context for a lot of API calls 2021-05-11 12:04:29 +02:00
tzugen 9ec92c6cf3
Make all preference operations context-free
(use the application context for them)
2021-05-11 12:04:26 +02:00
Nite ec21e14e33
Merge branch 'develop' into lockscreen-controls 2021-05-07 16:15:20 +02:00
Nite afccbf3f65
Merge branch 'develop' into patch-further 2021-05-07 09:14:27 +02:00
tzugen a6c914cf7f
Make the server setting model a local val 2021-05-06 20:45:45 +02:00
tzugen 9ca15deef2
Fix a copy & paste mistake
(Wrongly inserted if clause)
2021-05-06 20:45:45 +02:00
tzugen 094c0d2757
Cache requireArguments() in a local val 2021-05-06 20:45:45 +02:00
tzugen bc2c591ff2
Set isActive correctly when pausing. 2021-05-06 13:23:38 +02:00
tzugen a910818b70
Add skip functions to lockscreen 2021-05-06 13:23:35 +02:00
tzugen 85e2e473e5
Fix a typo, make two functions private 2021-05-06 12:53:25 +02:00
tzugen 8ebd53a8eb
Remove no longer needed safe call. 2021-05-06 12:40:49 +02:00
Nite 83b186b9b5
Merge branch 'develop' into remove-mediastore 2021-05-05 09:41:09 +02:00
tzugen a3b97fef47
Delegate all handling of the Intent receiver registering to our Service Class. 2021-05-04 16:32:17 +02:00
Nite fb74d6465e
Merge branch 'develop' into rogue-session 2021-05-02 12:04:23 +02:00
tzugen 66a306152d
Remove MediaStoreService, reinstate Util.scanMedia
This partially reverts commit 8fbc2a9fa3.
2021-05-01 13:31:48 +02:00
tzugen adc350b5c4
Fix wrong injection method after rebase 2021-05-01 10:50:54 +02:00
tzugen 98ba9ecd3e
Migrate from deprecated registerMediaButtonReceiver to MediaSession equivalent 2021-05-01 10:49:23 +02:00
tzugen 4af0d1db25
executeOnStartedMediaPlayerService takes a lambda now 2021-05-01 10:49:23 +02:00
tzugen ce2f5a95d9
Remove unused parameter 2021-04-27 20:41:14 +02:00
tzugen fe69141e19
Don't leak context in model 2021-04-27 20:41:14 +02:00
tzugen 25f072a5d5
Cleanup some methods
+ Ktlint WS fixes
2021-04-27 20:40:57 +02:00
tzugen dca26f14eb
Fix more compiler warnings 2021-04-27 20:39:52 +02:00
tzugen 1802e91fa7
Use lambdas in Listeners, fix various warnings 2021-04-27 20:39:52 +02:00
tzugen fa4f4d6c9c
Move loading functions into ViewModel 2021-04-27 20:39:48 +02:00
tzugen 1f57fb334b
Refactor: LoadTask to Coroutines. 2021-04-27 19:52:13 +02:00
tzugen 4f70c61592
Fix Magic Number problem in DownloadFile (caused by #431). 2021-04-27 10:21:57 +02:00
tzugen 3e8cf63603
Merge branch 'develop' into modern-notification-2 2021-04-27 08:18:49 +02:00
James Wells d084270c4b
Add a retry count to stop infinite downloads
Signed-off-by: James Wells <james@jameswells.net>
2021-04-25 23:08:12 -04:00
tzugen 0a170918c8
Adjust Timber debug level 2021-04-25 16:49:14 +02:00
tzugen cd27734c04
Emulate keycode for the Session callbacks 2021-04-23 15:04:01 +02:00
tzugen 8004bc31fe
Add PlaybackState actions
.. and map PlayerStates more precisely.
2021-04-23 11:26:15 +02:00
tzugen 0ad6d0b691
Move MediaPlayerService to Kotlin dir 2021-04-23 11:26:15 +02:00
tzugen 205f477b43
Refactor all event listeners to lambdas 2021-04-23 11:26:10 +02:00
tzugen 2adb9ffc7e
Remove two warnings 2021-04-23 11:21:28 +02:00
tzugen f27212f263
Set AudioAttributes in LocalMediaPlayer 2021-04-23 11:21:24 +02:00
tzugen 5f8e3ce851
Modernize AudioFocusHandler 2021-04-23 11:20:09 +02:00
tzugen 37632dd031
Convert AudioFocusHandler to Kotlin 2021-04-23 11:13:44 +02:00
tzugen 0550116b35
Rename .java to .kt 2021-04-23 11:13:44 +02:00
tzugen 116307df56
Fix a regression were we accidentally reset our current MediaPlayer
Fixes #418
2021-04-23 11:13:43 +02:00
tzugen 19580cda8b
We can now remove the deprecated Remote Control API 2021-04-23 11:13:43 +02:00
tzugen 8d4d1ba660
Move function out of companion object 2021-04-17 12:32:29 +02:00
tzugen 0efb3547c3
Update license of two files. 2021-04-17 12:32:29 +02:00
tzugen d9d82b77d4
Rename a function semantically 2021-04-17 12:32:25 +02:00
tzugen a97cb30d1c
Move DownloadFile.kt to Kotlin directory 2021-04-17 12:11:21 +02:00
tzugen aac74d1eef
Make SongView display a percentag while downloading
Closes #403
2021-04-17 12:11:20 +02:00
tzugen cf68038e20
Migrate DownloadFile to Kotlin 2021-04-17 12:11:17 +02:00
tzugen a13306c680
Remove unused parameters from getDownloadInputStream() 2021-04-17 12:02:45 +02:00
tzugen b438559da6
Update license of MediaStoreService.kt 2021-04-16 11:47:16 +02:00
Nite fbcbc65be8
Merge branch 'develop' into mediastore 2021-04-15 09:48:07 +02:00
James Wells e5158c8a2f
correct for swipe refresh
Signed-off-by: James Wells <james@jameswells.net>
2021-04-14 22:25:31 -04:00
James Wells 39c94fe1e9
Clean empty text view
Signed-off-by: James Wells <james@jameswells.net>
2021-04-13 22:35:06 -04:00