Deluan
28d1428c90
Add option to disable .m3u auto-import
2020-08-02 23:17:13 -04:00
Deluan
f29e1eb248
Remove repeated call
2020-08-02 15:19:42 -04:00
Deluan
f992b5663f
Remove old scanner
2020-07-27 12:34:44 -04:00
Deluan
4e4fcb2304
Small refactorings, better var/function names
2020-07-27 10:51:50 -04:00
Deluan
60178c264d
Keep annotations if tracks were already in DB
2020-07-23 03:26:39 -04:00
Deluan
040c7f1e7d
Add missing call to refresh artists
2020-07-22 15:37:24 -04:00
Deluan
036f9d6730
Flush albums and artists after each folder added/updated/deleted
2020-07-22 12:56:50 -04:00
Deluan
f96e2f6c4f
Process deleted folders even if there are no changed folders
2020-07-22 01:29:44 -04:00
Deluan
7a5285ae47
When deleting folders, only flush artists/albums after deleting the mediaFiles
2020-07-22 01:00:16 -04:00
Deluan
ba347bc0b1
Detect moved folders
2020-07-22 00:42:12 -04:00
Deluan
d268075046
Change the default scanner to use new implementation
2020-07-19 21:39:06 -04:00
Deluan
feca030c6d
Give warning when playlists are not imported due to not having an admin user
2020-07-19 13:58:46 -04:00
Deluan
6adba03868
Renamed misleading function name
2020-07-17 22:55:51 -04:00
Deluan
609d172259
Use first admin user for all scan operations
2020-07-17 22:55:51 -04:00
Deluan
9cf8c92cae
Break up processChangedDir into smaller functions
2020-07-17 22:55:51 -04:00
Deluan
8f512a40f7
Refactored playlist auto-import support
2020-07-17 22:55:51 -04:00
Deluan
b9b6ce066b
Auto-Import playlists found in the Music Folder
2020-07-17 22:55:51 -04:00
Deluan
3239be4a4d
Change log level of some scanner operations
2020-07-17 12:49:37 -04:00
Deluan
51c295d1de
Add new scanner algorithm, can be enabled with DevNewScanner config option
2020-07-17 12:06:49 -04:00
Deluan
de0cc1f268
Move LoadAllAudioFiles tests to the proper test file
2020-07-16 18:18:48 -04:00
Deluan
e7f6ba8f35
Move LoadAllAudioFiles function to the right file
2020-07-16 17:42:26 -04:00
Deluan
aae43f4452
Remove unneeded `\n`
2020-07-13 11:49:06 -04:00
Deluan
d4347f20ae
Remove redundant log message
2020-07-12 20:42:38 -04:00
Deluan
ee0ae0a06c
Fix lint errors
2020-07-12 13:36:22 -04:00
Deluan
064da8e034
Add more trace logging to scanner
2020-07-12 13:30:03 -04:00
Deluan
c2f40ea8a3
Show totals at the end of scan
2020-07-12 12:35:23 -04:00
Deluan
f694e471fb
Make private types unexported
2020-07-12 11:55:19 -04:00
Deluan
dc8368c89c
Return counter from DeleteByPath
2020-07-12 11:53:07 -04:00
Deluan
2f8b01015d
Change log level for "path unavailable"
2020-07-04 11:36:57 -04:00
Deluan
17830d63b4
Ignore m3u files when scanning
2020-07-03 21:06:33 -04:00
Deluan
bcaf330233
Make sure to select cover art from media_file that has it. Fix #360
2020-06-27 22:16:07 -04:00
Deluan
ab1c943d1f
Force album/artist refresh when folder changes, to cater for cover art files
2020-06-27 18:41:55 -04:00
Deluan
eb109ebeb4
Remove duplicated helper functions, move them to `utils` package
2020-06-24 20:48:42 -04:00
Deluan
653b5ea9d3
Replace map[string]bool with map[string]struct{}
2020-06-14 03:11:16 -04:00
Deluan
e73b71aaf7
Remove tracks from DB that were deleted while Navidrome was not running. Fixes #151
2020-06-14 03:11:16 -04:00
Deluan
01919661e9
Skip unreadable directories. Fixes #328
2020-06-14 03:11:16 -04:00
Deluan
3190611ec8
Call `ffmpeg` in batches
2020-06-14 03:11:16 -04:00
Deluan
238020c839
Handle folders with lots of albums and/or artists
2020-06-14 03:11:16 -04:00
Deluan
17df63b550
Fix `child.size` and `directory.playCount` compatibility with Subsonic API. Fixes #304
2020-05-19 23:51:23 -04:00
Deluan
a4183aea8c
Unexport private functions
2020-05-18 15:06:33 -04:00
Deluan
9e845cb116
Skip scanning folders if they contain a `.ndignore` file. Closes #297
2020-05-18 14:37:01 -04:00
Deluan
5ce3135f00
Fix gosec's G601
2020-05-13 15:32:42 -04:00
Deluan
0d9361734f
Import and display disc subtitles
2020-05-12 12:57:53 -04:00
Deluan
5862157a2c
Move test file to fixtures folder
2020-04-28 11:59:47 -04:00
Deluan
ddeefad501
Fix `goimport` and `gosec` warnings
2020-04-26 15:07:36 -04:00
Deluan
5cd453afeb
Fix all `errcheck` warnings
2020-04-26 15:07:36 -04:00
Deluan
03c3c192ed
Fixing static checks about passing nil context
2020-04-26 15:07:36 -04:00
Deluan
1dd3a794f8
Reduce level of "invalid year" log message
2020-04-24 16:00:14 -04:00
Deluan
6c5dd245fe
Parse TSO2 (seems that ffmpeg does not process this tag in some situations)
2020-04-24 15:02:20 -04:00
Deluan
371e8ab6ca
Generate Order Fields based on sanitized version of original fields
2020-04-24 15:02:20 -04:00
Deluan
69c19e946c
Add sort tags and use them in search
2020-04-24 15:02:20 -04:00
Deluan
d7edbf93f0
Make test more reliable
...
In some systems, it was detecting the `go.mod` file as an audio file, probably because of the system's mime-type configuration
2020-04-24 11:05:17 -04:00
Deluan
5a072fbd10
Follow symlinks to directories when scanning
2020-04-23 20:31:44 -04:00
jvoisin
2ab647efe1
Add a test
2020-04-11 13:08:21 -04:00
jvoisin
04eb421186
Refactor a bit how ffmpeg is used to get metadata
...
- createProbeCommand returns a []string instead of (string, string[])
- Simplify the loop of createProbeCommand
2020-04-11 13:08:21 -04:00
Deluan
7bc3dace4c
Revert "Improve ffmpeg's error diagnostic"
...
This reverts commit 4fc88f23
2020-04-09 14:26:42 -04:00
jvoisin
4fc88f23e9
Improve ffmpeg's error diagnostic
...
This should close #155
2020-04-09 10:40:16 -04:00
Deluan
9b272c8021
Small log tweak
2020-04-06 14:02:50 -04:00
Deluan
59707b3a8f
Detect embedded art in ogg containers
2020-04-05 23:41:10 -04:00
Deluan
9b461735f4
Add comments to createXxxxCommand functions to clarify about the filepaths arguments being absolute paths
2020-04-03 14:49:35 -04:00
Deluan
3d6ce8a77f
Skip calling `ffmpeg` if there are no files to probe
2020-04-02 17:38:20 -04:00
Deluan
dcb3b3b5d1
fix: various album_artists <-> artists mismatches
2020-03-26 09:08:53 -04:00
Deluan
100db2bcfd
feat: add artist filter to album view
2020-03-25 20:40:18 -04:00
Deluan
b4c7cac964
refactor: moved magic strings to consts
2020-03-24 11:59:10 -04:00
Deluan
f6e448c1ba
refactor: removed unused code, unnecessary typecasts and fixed small warnings
2020-03-20 00:07:36 -04:00
Deluan
fc14e346b9
feat: store duration as float, to cater for milliseconds
2020-02-20 17:02:06 -05:00
Deluan
5525145906
fix: audio stream's bitrate has precedence over container's bitrate
2020-02-20 13:56:45 -05:00
Deluan
74d87790b8
refactor: better ffmpeg output metadata parsing
2020-02-20 10:41:16 -05:00
Deluan
ae02dc203e
chore: remove unused code
2020-02-19 09:08:05 -05:00
Deluan
fc7595a464
fix: cover art detection regex
2020-02-18 11:19:22 -05:00
Deluan
4ceaea7732
fix: extract stream level metadata
2020-02-18 10:00:05 -05:00
Deluan
894536c8ec
Revert "fix: extract stream level metadata"
...
This reverts commit 92f6e55821
.
2020-02-15 23:18:37 -05:00
Deluan
92f6e55821
fix: extract stream level metadata
2020-02-15 20:47:06 -05:00
Deluan
b2d022b823
fix: ignore environment dependant test
2020-02-13 20:19:51 -05:00
Deluan
ba08f00c20
feat: make rescan faster, only loading metadata from changed files
2020-02-13 20:18:17 -05:00
Deluan
d9993c5877
refactor: separate metadata extraction from audio files scanning
2020-02-13 10:03:52 -05:00
Deluan
edb839a41d
fix: only update artists and albums if there were any changes in files
2020-02-12 23:05:10 -05:00
Deluan
400fa65326
feat: better scanner logging when level = info
2020-02-08 23:36:09 -05:00
Deluan
ab10719d27
fix: use a regex to match year in ffmpeg date field. close #63
2020-02-08 23:17:12 -05:00
Deluan
e33d2305a1
feat: support multiple year formats in the `date` tag ( #63 )
2020-02-06 14:44:50 -05:00
Deluan
6e2454f6cc
refactor: add -i to ffmpeg ProbeCommand. make it more consistent with the DownsampleCommand
2020-02-03 23:04:58 -05:00
Deluan
4d06d250e6
fix: relative path was not working for rootFolder started with '.'
2020-02-03 17:53:59 -05:00
Deluan
694b5d1d39
tests: change test folder permissions
2020-02-03 17:53:59 -05:00
Deluan
5329ac7b72
refactor: better format for list of folders
2020-02-03 17:53:59 -05:00
Deluan
464880dd31
refactor: use stdlib `filepath.FromSlash`
2020-02-03 17:53:59 -05:00
Deluan
0e01f9a0f9
fix: use filepath.Join instead of path.Join
2020-02-03 17:53:59 -05:00
Deluan
de1fea64bc
refactor: introduce GC, to delete old data
2020-02-01 17:23:03 -05:00
Deluan
71c1844bca
refactor: new persistence, more SQL, less ORM
2020-02-01 17:23:03 -05:00
Deluan
c9f5625abf
fix: skip files with errors during scan
2020-02-01 11:25:31 -05:00
Deluan
0d2911daf9
refactor: add Context to the persistence layer
2020-01-27 09:41:33 -05:00
Deluan
0ff741b394
fix: persistence tests were not being properly initialized
2020-01-26 17:10:13 -05:00
Deluan
461b7424e9
Ignore case in extracted tags
2020-01-24 09:46:59 -05:00
Deluan
bff6f3a4bd
Rename env vars prefix to ND_
2020-01-24 01:29:31 -05:00
Deluan
bee55c04c8
Rename project to Navidrome
2020-01-23 19:44:08 -05:00
Deluan
9557f7ceed
Initial support for song browsing from UI
2020-01-22 10:47:43 -05:00
Deluan
e03304650d
Fix compilation tag, again
2020-01-21 22:41:18 -05:00
Deluan
654831f79d
Fix bug in `compilation` tag parsing
2020-01-21 17:31:24 -05:00
Deluan
3a44f37622
Add comment tag, still missing multiline comments
2020-01-21 10:05:00 -05:00
Deluan
22a0b7e170
Don't override input tags with stream tags
2020-01-21 09:52:34 -05:00
Deluan
c42e1bd2f5
Extract metadata from files in a directory in batch (one call to ffmpeg for all files)
2020-01-21 07:50:30 -05:00
Deluan
7529ae3752
Extract metadata with `ffmpeg`
2020-01-20 22:32:40 -05:00
Deluan
c6ed0d5377
Remove flag to allow override media annotation
2020-01-20 18:19:16 -05:00
Deluan
67eeb218c4
Big Refactor:
...
- Create model.DataStore, with provision for transactions
- Change all layers dependencies on repositories to use DataStore
- Implemented persistence.SQLStore
- Removed iTunes Bridge/Importer support
2020-01-19 16:28:09 -05:00
Deluan
fe058aa4a1
Don't override media annotations when scanning/importing
2020-01-18 21:45:44 -05:00
Deluan
a4b75fd69d
Test "Compilation" tag
2020-01-18 11:19:00 -05:00
Deluan
58a080eded
Handle folder moves in Scanner
2020-01-18 11:00:20 -05:00
Deluan
ccbdf688ea
Reduced size of batches, to not break SQLite
2020-01-18 01:49:08 -05:00
Deluan
1929aaec1a
Disabling tests that are not multi-platform, for now
2020-01-18 00:08:00 -05:00
Deluan
73597b22b4
Rewrite description of folder scan algorithm
2020-01-17 23:55:58 -05:00
Deluan
54d13d2022
Purge empty albums/artists
2020-01-17 23:28:11 -05:00
Deluan
ea9ed4a287
Fix ChangeDetector to keep the dirMap from last scan
2020-01-17 22:41:10 -05:00
Deluan
e55dfff485
Fix file descriptor leak
2020-01-17 21:23:26 -05:00
Deluan
c0beaa6377
Integrate ArtistIndex logic into Artist
2020-01-17 20:54:28 -05:00
Deluan
123f543a94
New Folder Scanner - WIP
2020-01-17 20:54:28 -05:00
Deluan
25686c1742
Preparing for new scanner
2020-01-14 21:51:35 -05:00
Deluan
a99c3a8af3
Another big refactor: Back to a single folder for persistence implementation
2020-01-14 18:47:57 -05:00
Deluan
614f4afe28
Implement Artist search with SQL, removed old search/indexer code
2020-01-13 16:06:30 -05:00
Deluan
28ee1f195c
More logging in the Importer
2020-01-11 15:27:32 -05:00
Deluan
c9be5f7201
Storm ChecksumsRepository complete.
2020-01-11 15:27:32 -05:00
Deluan
11f4505925
Renamed persistence packages
2020-01-11 15:27:32 -05:00
Deluan
0ca691b37f
Storm ArtistRepository and PropertyRepository complete.
2020-01-11 15:27:32 -05:00
Deluan
40904b220e
Renamed Id to ID, following GoLang convention
2020-01-11 15:27:32 -05:00
Deluan
a4a8360a94
Add Dev flag to disable file presence verification
2020-01-11 15:27:32 -05:00
Deluan
24cbf766a3
Removed dependency on `engine` from `persistence`
2020-01-09 22:44:45 -05:00
Deluan
84d69a4f41
Replaced Beego logging
2020-01-09 22:44:45 -05:00
Deluan
3af9972b41
Remove Beego tasks, make Importer available through DI
2020-01-09 22:44:45 -05:00
Deluan
4c61ac3272
Fix default PlsIgnoredPatterns configuration
2020-01-06 15:17:44 -05:00
Deluan
9260a8b9ed
Changes to itl were merged, reverting to the original repo
2017-04-01 09:51:25 -04:00
Deluan
c417a00e62
Renamed project to CloudSonic
2017-04-01 09:47:14 -04:00
Deluan
a7ccd76d54
Allowing album cover ids with prefix (al-)
2016-03-30 10:01:37 -04:00
Deluan
c2b1f9782b
New configuration system
2016-03-30 00:05:57 -04:00
Deluan
3cc92a32bd
Adding song and album counts
2016-03-27 20:13:00 -04:00
Deluan
9099e24413
Polishing
2016-03-26 22:34:20 -04:00
Deluan
0e20910061
Cleaning old data from artists indexes
2016-03-26 22:29:26 -04:00
Deluan
107321219a
Trying to make code more manageable, before a big rewrite
2016-03-26 22:22:34 -04:00
Deluan
06828d8738
Polishing
2016-03-24 23:31:54 -04:00
Deluan
db8c09d503
Better log messages
2016-03-24 13:53:52 -04:00
Deluan
b9952bc3de
Playlists support (99%) complete!
2016-03-24 13:28:20 -04:00
Deluan
b3215f057f
Setting Album/Artist names to [Unknown} if missing
2016-03-23 12:00:40 -04:00
Deluan
0e1618a6ac
Using PersistentIDs instead of "Database" IDs
2016-03-23 11:43:20 -04:00
Deluan
59a0ab3793
Fixed bug with StarredAt
2016-03-22 21:32:22 -04:00
Deluan
db992a9941
Small changes regarding StarredAt.
...
Making StarredAt more "precise", setting it to the time the change was detected.
getStarred.view now returns albums ordered by StarredAt.
loadRange method now take QueryOptions.Desc into account
2016-03-22 19:00:18 -04:00
Deluan
2a2af2f57a
Adding Album total time (Duration)
2016-03-21 21:14:04 -04:00
Deluan
a9d7d4d242
Even more metadata for playlists
2016-03-21 12:26:55 -04:00
Deluan
0b286afa08
UserRatings for Albums and MediaFiles
2016-03-21 10:24:40 -04:00
Deluan
5fd9da505e
More metadata for children (albums/mediafiles)
2016-03-21 09:52:32 -04:00
Deluan
508bf7152f
Removing purged ids from the search index
2016-03-18 19:50:21 -04:00
Deluan
3790aa45e4
Refactored PurgeInactive as a "generic" function.
...
Also delete indexes when removing records
2016-03-18 19:32:49 -04:00
Deluan
c90a50827a
Get() methods from all repositories now return a ErrNotFound when the id is nonexistent
2016-03-18 11:33:50 -04:00
Deluan
a3238ce17b
Cannot clear the index for now.
...
Have to come up with a solution to partially update the search index
2016-03-16 23:44:24 -04:00
Deluan
86da33f91d
Revert "Always index songs and albums"
...
This reverts commit 4aa02e68e5
.
2016-03-16 23:11:52 -04:00
Deluan
4aa02e68e5
Always index songs and albums
2016-03-16 15:35:21 -04:00
Deluan
31852ecf26
Better log
2016-03-15 17:44:15 -04:00
Deluan
cdefabf760
Better log and less noise in prod mode
2016-03-15 17:31:35 -04:00
Deluan
cad65f517c
Polishing
2016-03-15 13:17:51 -04:00
Deluan
12aedc0996
Using checksums to detect modified stats in the iTunes Library
2016-03-15 11:04:17 -04:00
Deluan
c01ce35f04
ignoring iTunesU and Podcasts (for now)
2016-03-13 22:11:44 -04:00
Deluan
27b47abfe0
Renamed method
2016-03-13 13:11:16 -04:00
Deluan
4d7f9ee012
Fixed iTunes location decoding
2016-03-12 11:36:24 -05:00
Deluan
329297dab8
Task for continuously check for iTunes Library updates
2016-03-11 19:02:51 -05:00
Deluan
12b0350d3e
Task for continuously check for iTunes Library updates
2016-03-11 18:37:37 -05:00
Deluan
71f1fab575
Updated Date takes Last Played into account
2016-03-11 17:09:47 -05:00
Deluan
f4c1dbdd3c
Simplified DI resolution
2016-03-11 15:16:17 -05:00
Deluan
147a178933
Logging tracks/albums updates
2016-03-11 12:10:37 -05:00
Deluan
4780b54f01
Indexing everything
2016-03-10 23:24:30 -05:00
Deluan
df957814a0
Implemented artists indexing, with Gomate
2016-03-10 23:19:13 -05:00
Deluan
2437eed586
Removed unnecessary "else"s
2016-03-10 09:37:35 -05:00
Deluan
d8e6076d66
Skip tracks by mime type, not by iTunes kind
...
Also skip all special playlists (except iTunesU)
2016-03-10 09:37:25 -05:00
Deluan
fc625ac70e
Options to ignore patterns in playlists full path
2016-03-09 19:50:02 -05:00
Deluan
a4e9d9da14
Option to ignore folder playlists
2016-03-09 19:06:50 -05:00
Deluan
4bb4fc0cb8
More playlists
2016-03-09 14:24:00 -05:00
Deluan
867ca0580c
Just use html.UnescapeString....
2016-03-08 20:54:50 -05:00
Deluan
8607e25c90
Moved properties to engine layer
2016-03-08 18:40:16 -05:00
Deluan
46e7627fd3
Optimized import, only updating changed data and purging old data
2016-03-08 14:19:07 -05:00
Deluan
56e9ad3def
Silly bug... Where are the tests?!?
2016-03-07 09:24:35 -05:00
Deluan
0e492a053c
Only read tag when the track was changed
2016-03-06 21:32:31 -05:00
Deluan
be28ce1178
Better logging in scanner/importer
2016-03-06 20:42:53 -05:00
Deluan
319c829eea
Hashs for Album and Artist IDs should be case insensitive
2016-03-06 11:55:17 -05:00
Deluan
36adace7a3
Better logging
2016-03-04 22:50:04 -05:00
Deluan
7a21665c97
Handling a possible bug in the tag library
2016-03-04 22:29:29 -05:00
Deluan
0b6093ce5d
Handling a NPE
2016-03-04 19:49:51 -05:00
Deluan
8ff1a94d75
Fixing ArtistName for Compilations / Various Artists
2016-03-04 17:35:13 -05:00
Deluan
1c9d7721ad
Implemented more getAlbumList.view types
2016-03-04 17:01:14 -05:00
Deluan
766fdbc60c
Big Importer/Scanner refactor
2016-03-04 16:42:09 -05:00
Deluan
9a246b5432
First version of getAlbumList.view working.
...
- It still misses almost all type options
- Introduced "parent" in Child subresponse, as it was breaking DSub
2016-03-04 09:09:16 -05:00
Deluan
4b70daf143
Converted scanner to a proper Import "class", to facilitate testing
2016-03-03 20:01:27 -05:00
Deluan
848809d0df
Supporting starred in getMusicDirectory.view
2016-03-03 15:41:24 -05:00
Deluan
1b945831cc
Implementing coverArt
2016-03-03 10:34:17 -05:00
Deluan
f01a5f143d
Added Starred for Album and MediaFile
2016-03-03 01:07:13 -05:00
Deluan
012958cd08
go fmt
2016-03-03 00:46:23 -05:00
Deluan
ffd6304a23
Added DiscNumber field, used to sort tracks
2016-03-03 00:42:42 -05:00
Deluan
1aeb22dcb7
Fixed (?) Artist x AlbumArtist
2016-03-03 00:25:26 -05:00
Deluan
7d5cafb17a
Fixed string decoding during import
2016-03-03 00:10:35 -05:00
Deluan
e9a46b77ff
Logging errors during import
2016-03-03 00:07:10 -05:00
Deluan
eabee8b502
More track info
2016-03-02 23:51:26 -05:00
Deluan
757e1992d7
Bare bones getMusicDirectory for albums!
2016-03-02 23:15:17 -05:00
Deluan
51bae19191
Added Genre and Track Number to getMusicDirectory
2016-03-02 22:43:31 -05:00
Deluan
4843ccb46c
go fmt
2016-03-02 13:18:39 -05:00
Deluan
300ed0d9a4
Introduced interfaces for all repositories, completely isolating the persistence layer from the repositories usage and specification
2016-03-02 09:43:00 -05:00
Deluan
272a499c7e
Refactoring to a cleaner architecture
2016-03-02 09:10:28 -05:00
Deluan
25a9320bce
Sorting artist index
2016-03-01 19:52:58 -05:00
Deluan
5b65f85578
Fixed ampersand unescaping error
2016-03-01 18:19:57 -05:00
Deluan
c64a0f8242
Implemented proper index grouping
2016-03-01 17:54:13 -05:00
Deluan
841d8f457f
Implemented ProperyRepository. Now the Scanner stores the LastScan timestamp
2016-03-01 14:40:26 -05:00
Deluan
1ceefda6ca
TODO
2016-03-01 13:31:52 -05:00
Deluan
54460d5860
Empty tests should be skipped
2016-03-01 12:43:55 -05:00
Deluan
1a4f783669
Some refactoring
2016-02-29 13:56:09 -05:00
Deluan
1c47b7b8ef
Added empty tests in each package, to get the more precise coverage percentage
2016-02-29 13:38:41 -05:00
Deluan
49b512fc9c
Big LedisDB refactoring
2016-02-29 01:06:42 -05:00
Deluan
515279606a
Basic scanning working. Time to retrofit some tests....
2016-02-28 15:46:53 -05:00
Deluan
14e52576a7
Scanning artists and albums too
2016-02-28 14:21:12 -05:00
Deluan
bccfeec2d3
Added TODO
2016-02-28 09:44:32 -05:00
Deluan
280068373f
Introduced CountAll for repositories
2016-02-28 02:56:41 -05:00
Deluan
ecc0df9e7c
More experimenting with tiedot
2016-02-27 03:35:01 -05:00
Deluan
85ddd19c3d
Implemented first repository using tiedot
2016-02-26 01:32:31 -05:00