1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-12-22 08:56:17 +00:00
Commit Graph

71 Commits

Author SHA1 Message Date
Carey Metcalfe
bd53ac05f6 Fix track duration display 2024-09-08 15:02:01 -04:00
Carey Metcalfe
109f81e713 Fix bitrate units when scanning
In `0183bcb6` the scanner switched from using Mutagen to Mediafile for
scanning files. Prior to this commit, the bitrate from Mutagen was
divided by 1000 to convert it from bps to kbps. After switching to
Mediafile, the conversion was dropped even though Mediafile also reports
bitrate in bps.

This commit adds back the conversion to kbps and adds a test that checks
that the bitrate and some other metadata is correct.

This commit will fix transcoding being applied in some cases where it
isn't needed. This was happening because the bitrate in the DB was
always larger than the requested bitrate due to its units.
2023-03-31 16:23:11 -04:00
Alban Féron
0957fef148
Fix failing deletions from the scanner 2023-01-17 22:59:43 +01:00
Alban Féron
b57b086e04
Enforce foreign keys on SQLite 2023-01-14 16:45:44 +01:00
Alban Féron
82187fd4c4
pyupgrade 2023-01-08 16:16:28 +01:00
Alban Féron
c5246c74bb
Porting supysonic.watcher
Which mostly means fixing the scanner
2022-12-11 15:53:55 +01:00
Alban Féron
cd369f6c7f
Porting supysonic.cli 2022-12-11 15:13:48 +01:00
Alban Féron
83ba85aaf1
Port supysonic.scanner 2022-12-10 18:04:09 +01:00
Alban Féron
6bdee81e57
Fixing a good chunk of supysonic.db 2022-12-10 15:14:37 +01:00
Alban Féron
8d6821df99
Try to fix flaky test
Closes #229
2022-01-30 17:00:32 +01:00
Alban Féron
3b0023e1ac
Test tweaks 2021-11-21 12:20:48 +01:00
Alban Féron
b4e737c243
Use test discovery rather than explicit suites 2021-11-20 21:01:00 +01:00
Alban Féron
f4bfc735e8
Rewriting the CLI using click rather than cmd+argparse 2021-11-12 10:28:14 +01:00
Alban Féron
dcef74ca70
Allow renaming users with the CLI 2021-02-07 16:35:55 +01:00
Alban Féron
f8018b2751
Some housekeeping
Trying to make flake8 happy
2020-11-29 17:24:28 +01:00
Alban Féron
9a3bdc30ac
Removing shebang and executable flag from explicit python files 2020-11-22 16:28:26 +01:00
Alban Féron
81d141e540
pyupgrade 2020-11-22 16:12:14 +01:00
Alban Féron
5c46c96b53
Some fixes for Windows support (especially for tests)
The main motive here isn't full Windows support per, but being
able to run tests on Windows, as this is my main platform.
Booting a VM just to run tests is cumbersome.
2020-11-08 15:39:09 +01:00
Alban Féron
acb6b773a9
Set Meta to use the same connection as other tables, and cache generated/retrieved secret keys 2020-01-19 17:30:30 +01:00
Alban Féron
078c98a427
Merge branch 'jukebox' 2019-12-24 15:47:19 +01:00
Alban Féron
1d01450f33
Dropping Python 2 support 2019-12-23 16:23:57 +01:00
Alban Féron
7cb825cedb
Update tests 2019-11-23 15:43:27 +01:00
mvn23
cc838f14d3 Fix tests and some small bugs 2019-10-01 16:55:23 +02:00
Alban Féron
3070f39e4f
Moving Last.fm test out of the main suite 2019-07-14 14:49:57 +02:00
Alban Féron
cf3e03a1e7
Don't use DirEntry 2019-07-13 16:02:47 +02:00
Alban Féron
f3a12c78b4
Added setting to follow symlinks
#48, #146
2019-07-06 17:14:55 +02:00
Alban Féron
7c8a75d45c
Runnig black on everything 2019-06-29 17:25:44 +02:00
spl0k
e6a192483c Merge branch 'master' into daemon-rework 2019-06-01 16:21:13 +02:00
spl0k
10df0ada07 Don't store the mimetype in database
That's useless, it can be deduced from the path
Fixes #150
2019-05-18 15:50:30 +02:00
spl0k
bb36b38d52 Updated tests 2019-05-11 17:13:58 +02:00
spl0k
5b0b5ff29b Removed invalid test
The watcher now keeps running even if there's nothing to watch initially
so we can add watched folder later on
2019-04-10 21:29:00 +02:00
spl0k
db2799ef7e Reworked how the watcher is started 2019-03-31 18:06:45 +02:00
spl0k
5367f068e1 Giving credit where credit is due 2019-02-09 16:19:30 +01:00
Carey Metcalfe
0ac2376e07 Fix issues with hanging transcoding processes
When a connection that is consuming a generated response is closed,
Flask closes the generator making it raise the special `GeneratorExit`
exception when the program tries to yield from it again. Because the
`transcode` function was called (returning a generator) before being
passed into `set_generated`, the exception was being handled in the
wrong order.

By passing the `transcode` function to `set_generated` and letting
`set_transcode` call it to return a generator while generating the
response for the client, the exception properly bubbles up through
`transcode` into `set_generated`. This allows both of them to handle it
properly by stopping the subproceses and not caching the incomplete
response data respectively.
2019-02-03 23:23:00 -05:00
Carey Metcalfe
f106923f17 Remove unused 'Cache.protect' method 2019-02-03 22:56:03 -05:00
Carey Metcalfe
65d49a04c9 Implement a cache manager for album art and transcodes
Quick summary
-------------
- Adds a Cache class (plus tests for it) that provides an API for
  managing a cache of files on disk
- Adds two new settings to the configuration file: `cache_size` (default
  512MB) and `transcode_cache_size` (default 1GB).
- Creates two cache managers using the settings above: one for general
  stuff (currently album art) and one for transcodes
- Adds the caching of transcoded files to disk for future use
- Modifies the existing image caching to use the cache manager

Longer explanations and justifications
--------------------------------------
The reason I separated out transcodes into an entirely separate cache is
that I could imagine a single transcode pushing out a ton of smaller
images or other cached content. By separating them it should reduce the
number of deletes caused by adding something to the cache.

The cache manager allows for caching a value from a generator via
passthrough. This means that a generator can be transparently wrapped to
save its output in the cache. The bytes from the generator will be
written to a temp file in the cache and yielded back. When it completes,
the temp file will be renamed according to the provided cache key. This
is how caching transcoded music is implemented.

If multiple generators for the same key are started, they will all write
to individual temp files until they complete and race to overwrite each
other. Since the key should uniquely represent the content it indexes
the files will be identical so overwriting them is harmless.

The cache will store everything for a minimum amount of time
(configurable, default is set at 5 minutes). After this time has
elapsed, the data can be deleted to free up space. This minimum is so
that when you cache a file to the disk you can expect it to be there
after, even if another large file is added to the cache and requests
that some files are deleted to make space.

To ensure that a file will not be paged out of the cache regardless of
the minimum time, there is a `protect` context manager that will refuse
the delete the key from the cache as long as it's active.

The cache has a maximum size, however this is more of a recommendation
as opposed to a hard limit. The actual size will frequently exceed the
limit temporarily until something can be paged out.
2019-01-19 15:37:08 -05:00
spl0k
b195aca12f watcher: log to stderr when no logfile is set 2018-11-11 19:29:58 +01:00
spl0k
f5bab00a1c Small touches on logging
Most notably not relying in Flask's logger, as this cause issues
at the end of tests on Python 2.7
Fixes #96
2018-11-11 18:58:46 +01:00
Taizo Simpson
066658f167
Consider embeded art when serializing albums, add relevant test 2018-10-12 19:07:48 -04:00
Taizo Simpson
2c4ec6c0e8
Whether or not a track has embeded art is tracked just like any other metadata, to reduce disk r/w and mem usage and a lot of other things.
WARNING: This needs migrations before being merged to master
2018-10-10 12:59:20 -04:00
Taizo Simpson
f43fecaf34
Added tests for reporting embeded cover art in folders and tracks 2018-10-09 13:04:17 -04:00
Taizo Simpson
a2add86550
Added tests for flac and ogg 2018-10-08 21:19:22 -04:00
spl0k
0f1a31e677 Fixed test 2018-09-15 16:11:17 +02:00
spl0k
5a065c75ae Merge branch 'master' into db-setup 2018-09-15 16:04:43 +02:00
spl0k
1a15b95155 Merge branch 'master' into issue90 2018-09-08 15:37:08 +02:00
spl0k
dbf817ea9e Automatically create DB tables if needed 2018-08-29 14:56:28 +02:00
spl0k
9c58b695ff Watcher now handles cover art
Closes #92
2018-08-28 17:44:32 +02:00
spl0k
38f718b4df Using new pony on_connect decorator
Revert "Restore SQLite case insensitive LIKE"
This reverts commit a08689e8c0.
2018-08-11 16:16:34 +02:00
spl0k
a08689e8c0 Restore SQLite case insensitive LIKE
See ponyorm/pony#367
2018-08-05 15:35:29 +02:00
spl0k
405a26a20a Don't restrict cover art to 'cover.jpg' files
Ref #81
2018-05-21 16:16:06 +02:00