Fabio Manganiello
68f985d2c6
Copy websockets list before iterating over it to prevent race conditions upon list changed upon iteration
2019-03-27 02:25:06 +01:00
Fabio Manganiello
387ed23e86
No need for snapcast-settings-btn class on snapcast-host-container
2019-03-27 00:49:53 +01:00
Fabio Manganiello
67fd88950a
Fixed modal madness in Snapcast frontend
2019-03-27 00:41:19 +01:00
Fabio Manganiello
31108b21e5
Don't define Snapcast modal open elements on the highest level, or modals will pop up even when clicking on other elements than the name
2019-03-21 18:30:32 +01:00
Fabio Manganiello
20b0c09a0c
Removed workaround that doesn't work
2019-03-20 18:37:49 +01:00
Fabio Manganiello
92f1f3eea7
Wrap Google Fit checks in try-catch block to prevent the backend from crashing with no reload
2019-03-20 10:48:07 +00:00
Fabio Manganiello
7072a19829
Print timestamps in human readable format
2019-03-19 11:32:06 +00:00
Fabio Manganiello
eb7b9c066c
Logging info about processed Fit entries to debug why we don't always get all the new events
2019-03-19 11:29:53 +00:00
Fabio Manganiello
af97f7b6a5
Tentative fix for Google Fit data points timestamp tracking
2019-03-18 11:58:40 +00:00
Fabio Manganiello
eb40024c53
Only initalize credentials map in Google plugins if some scopes are required
2019-03-18 01:06:10 +01:00
Fabio Manganiello
710694e8d7
Added altitude to LatLongUpdateEvent
2019-03-18 00:17:11 +01:00
Fabio Manganiello
8b89166e30
Fixed typo in SSL variable name
2019-03-18 00:16:54 +01:00
Fabio Manganiello
cbe4d8cd78
Delete recording thread item from map only if the thread has actually stopped
2019-03-17 22:55:36 +01:00
Fabio Manganiello
81a200bd4e
Make sure that device_id is in _is_recording and hasn't been removed by another thread before checking it
2019-03-17 02:16:43 +01:00
Fabio Manganiello
9d36688a61
Don't fail hard if it's not possible yet to retrieve the mopidy status in the backend constructor
2019-03-17 02:06:56 +01:00
Fabio Manganiello
f95f52df19
Few fixes in camera plugin
2019-03-17 02:06:47 +01:00
Fabio Manganiello
9ed4ad6d85
Set workaround environment variable before importing OpenCV
2019-03-17 01:56:05 +01:00
Fabio Manganiello
9f008aa954
typo
2019-03-17 01:41:00 +01:00
Fabio Manganiello
7fb53ead59
Always cast environment variable values to string
2019-03-17 01:39:24 +01:00
Fabio Manganiello
2f1cea99fa
Support for environment variables passed through main config
2019-03-17 01:34:42 +01:00
Fabio Manganiello
3af30075e3
Temporarily workaround for OpenCV >= 3.4.2 bug that doesn't properly release the video device
2019-03-17 01:26:06 +01:00
Fabio Manganiello
5942a7cd84
Removed unused imports
2019-03-17 00:56:32 +01:00
Fabio Manganiello
a1c31a9fb9
Better handling for last_timestamp reads from Google Fit backend
2019-03-17 00:31:32 +01:00
Fabio Manganiello
9153b1e9c4
Added __init__.py init backend.google
2019-03-16 19:36:46 +01:00
Fabio Manganiello
f201f039e9
Extended and normalized key names in GoogleFitEvent type
2019-03-16 19:28:47 +01:00
Fabio Manganiello
87d63d7cb3
Added Google Fit backend
2019-03-16 01:22:42 +01:00
Fabio Manganiello
55c0896b31
Refactored Google plugins with support multiple scopes and a simpler API and added Google Fit plugin
2019-03-14 01:12:39 +01:00
Fabio Manganiello
022262eb78
Handle MQTT listeners by host with lists of topics, so we only need one listener thread per host
2019-03-07 23:03:12 +01:00
Fabio Manganiello
84099b2ab7
Added support for multiple listeners on multiple servers and topics for general-purpose messaging on the MQTT backend
2019-03-07 22:52:02 +01:00
Fabio Manganiello
38ebe87220
Get the device_id after initializing/creating the device
2019-03-07 20:11:32 +01:00
Fabio Manganiello
9324ad3f9b
Create a device if it doesn't exist
2019-03-07 20:05:40 +01:00
Fabio Manganiello
f6221a798a
Don't add disable_logging to the string representation of the Response object unless it's set
2019-03-06 02:23:06 +01:00
Fabio Manganiello
fb93aec3ec
Added empty __init__.py to plugins to let importlib correctly find the submodules
2019-03-06 02:21:26 +01:00
Fabio Manganiello
0596d77403
Support for camera snapshot and stream endpoints and for disabling logging on response and event messages
2019-03-06 02:01:17 +01:00
Fabio Manganiello
dcb0555571
Returing the best option for torrents based on max peers/seeds and
...
returning more metadata info on torrent.search
2019-03-05 00:10:06 +01:00
Fabio Manganiello
619c750f3b
Don't fail hard if status is not available
2019-03-03 12:42:31 +01:00
Fabio Manganiello
771da4528b
Reverted the revert
2019-02-28 18:57:22 +01:00
Fabio Manganiello
f2bd309478
Regex fix
2019-02-28 18:30:52 +01:00
Fabio Manganiello
12fd582d70
typo
2019-02-28 18:22:50 +01:00
Fabio Manganiello
1b9094a36b
Some hysterical guy has Spotify has decided to change the playlists URI
...
format again in the last couple of months with no notice nor
back-compatibility plan. Normalizing playlist URIs in the new (or
old-old?) format while innerly cursing at the incompetency of Spotify
2019-02-28 16:36:11 +01:00
Fabio Manganiello
65d6e5a5f6
Support for video_type in camera plugin
2019-02-28 01:55:12 +01:00
Fabio Manganiello
2af47372b0
Added docstring to EventGenerator class
2019-02-28 01:28:51 +01:00
Fabio Manganiello
a9fb6a38dd
New API for firing events and registering/unregistering event handlers
...
both for plugins and backends
2019-02-28 01:21:25 +01:00
Fabio Manganiello
29b8d0827b
Added basic support for camera events in the camera plugin
2019-02-27 20:12:40 +01:00
Fabio Manganiello
811af1bf9d
Removed conflict leftovers
2019-02-26 23:55:00 +01:00
Fabio Manganiello
17367f5b3e
Added camera plugin over cv2
2019-02-26 23:50:48 +01:00
Fabio Manganiello
150d95d0dc
Support for launching uWSGI directly from the HTTP backend
2019-02-25 10:52:48 +01:00
Fabio Manganiello
0104037ada
Dashboard background image added to static/resources
2019-02-24 20:10:58 +01:00
Fabio Manganiello
2adab13d50
Added favicon
2019-02-24 19:59:08 +01:00
Fabio Manganiello
06564b043e
Version bump 0.9.5 -> 0.9.6
2019-02-24 19:04:07 +01:00
Fabio Manganiello
8ef3aafb52
Added missing doc line in backend.http
2019-02-24 15:53:01 +01:00
Fabio Manganiello
8153d8476f
Added uWSGI optional dependency for HTTP backend
2019-02-24 12:35:26 +01:00
Fabio Manganiello
e3fcebe4b6
Made a separate uWSGI startup script for the webapp
2019-02-24 00:17:31 +01:00
Fabio Manganiello
c74b939660
Renamed app->application for the main Flask webapp to make sure that the default uwsgi configuration can pick it up
2019-02-24 00:11:35 +01:00
Fabio Manganiello
d5c31d938b
Run each message handling logic on the bus on a separate thread to make sure that messages don't queue up too much
2019-02-23 23:58:43 +01:00
Fabio Manganiello
0e794cd1b0
Refactored HTTP server to split the routes on separate files and keep the main Flask app object in a separate file as well so it can be easily wrapped by a WSGI instance
2019-02-23 21:19:00 +01:00
Fabio Manganiello
73383ab80f
Panel and modal close bindings should refer the target element in the event, not $(this)
2019-02-21 20:13:31 +01:00
Fabio Manganiello
749436c452
Clean up running VLC instance on stop and new media play
2019-02-21 19:24:47 +01:00
Fabio Manganiello
6e1b6686c2
Revert "Running Flask webserver in another thread instead than another process"
...
This reverts commit 0a5c42fdfd
.
2019-02-21 16:15:06 +01:00
Fabio Manganiello
0a5c42fdfd
Running Flask webserver in another thread instead than another process
2019-02-21 14:33:41 +01:00
Fabio Manganiello
6222747730
typo
2019-02-21 01:49:43 +01:00
Fabio Manganiello
97e1dfacdf
Made VLC template symlink
2019-02-21 01:38:21 +01:00
Fabio Manganiello
8b08f146a0
Typo on method name
2019-02-21 01:34:09 +01:00
Fabio Manganiello
f9765b4fed
Support for extra arguments passed to VLC
2019-02-21 01:28:51 +01:00
Fabio Manganiello
9e7f84644b
Support for default fullscreen and default volume in VLC
2019-02-21 00:09:02 +01:00
Fabio Manganiello
c4cd93a6da
Added VLC plugin
2019-02-20 17:17:30 +01:00
Fabio Manganiello
b5315032c3
Leverage youtube-dl standard media plugin instead of the mpv internal one
2019-02-19 13:40:18 +01:00
Fabio Manganiello
185aff6be3
Fixed support for subtitles in torrent files and better synchronization between mpv and torrent
2019-02-19 13:13:17 +01:00
Fabio Manganiello
377c963994
Better to react only on mpv shutdown not end_of_file
2019-02-19 11:12:57 +01:00
Fabio Manganiello
dcec3329d4
Trying to fix nasty race condition SHUTDOWN->START_FILE that triggers a spurious MediaStopEvent
2019-02-19 11:09:22 +01:00
Fabio Manganiello
10fa7c1ab1
Trying to fix nasty race condition SHUTDOWN->START_FILE that triggers a spurious MediaStopEvent
2019-02-19 11:08:57 +01:00
Fabio Manganiello
47b92480ff
Trying to fix nasty race condition SHUTDOWN->START_FILE that triggers a spurious MediaStopEvent
2019-02-19 11:06:02 +01:00
Fabio Manganiello
c0513cade9
Handle quick playback 'rebounces' in mpv
2019-02-19 10:56:05 +01:00
Fabio Manganiello
0336427386
mpv received events logged on info instead of debug
2019-02-19 10:47:10 +01:00
Fabio Manganiello
bcb60ed218
Minimum torrent download size before streaming: 10->15 MB
2019-02-19 10:42:51 +01:00
Fabio Manganiello
bc81f9bed6
Only propagate MediaStopEvent on mpv shutdown, not end-of-file
2019-02-19 10:41:40 +01:00
Fabio Manganiello
fd18bd84ca
Don't download subtitles for magnet links (until the media file/metadata is ready at least)
2019-02-19 10:37:29 +01:00
Fabio Manganiello
f71e534860
Added mpv to the supported media plugins on media.webtorrent
2019-02-19 10:31:17 +01:00
Fabio Manganiello
88600dab90
typo
2019-02-19 01:09:53 +01:00
Fabio Manganiello
151e2e56d9
typo
2019-02-19 01:05:44 +01:00
Fabio Manganiello
8f8b28912c
typo
2019-02-19 01:02:07 +01:00
Fabio Manganiello
376dda616b
Propagate environment variables if set to mpv player before playing
2019-02-19 00:58:26 +01:00
Fabio Manganiello
8a6be8b540
Use synchronize_session=fetch when synchronizing records on deletion
2019-02-19 00:32:54 +01:00
Fabio Manganiello
11af83f88f
Added symlink media.mpv.html -> media.html
2019-02-19 00:19:48 +01:00
Fabio Manganiello
de0b92f5ef
Added mpv media plugin
2019-02-19 00:15:03 +01:00
Fabio Manganiello
a549627516
Added draft for media.mpv plugin
2019-02-18 01:17:21 +01:00
Fabio Manganiello
9a565061c4
Refactoring of media.search in a more scalable way. Also faster search
...
with workers in parallel by media type
2019-02-18 00:26:46 +01:00
Fabio Manganiello
c7f0783615
Unique constraint on MediaFile.path
2019-02-17 17:17:20 +01:00
Fabio Manganiello
497d7770c6
Better way to group by media path
2019-02-17 17:16:25 +01:00
Fabio Manganiello
d03d69e6c0
Forgot an equal sign
2019-02-17 16:31:04 +01:00
Fabio Manganiello
2213455eff
Fixed setup.py error on filter use as a keyword
2019-02-17 16:30:43 +01:00
Fabio Manganiello
a21a11d499
Only proceed with subtitles loading when the list of subs is not empty
2019-02-17 16:29:39 +01:00
Fabio Manganiello
4076cd3518
Sync removed directories in the media index
2019-02-17 16:04:46 +01:00
Fabio Manganiello
b204d477ac
Added LocalMediaSearcher class to index local files and provide faster results to media.search when the index is available
2019-02-17 02:37:23 +01:00
Fabio Manganiello
7d1c9275f5
Make it 10 seconds when it comes to poll time
2019-02-16 20:21:04 +01:00
Fabio Manganiello
55f1a33d90
Keep a sleep between polls to the Snapcast servers
2019-02-16 20:17:15 +01:00
Fabio Manganiello
2d2db499be
Running recording in a separate thread so it doesn't block the receiving backend and added playback/recording start/pause/stop events
2019-02-15 19:23:01 +01:00
Fabio Manganiello
f8e5515640
Make a copy of the procedure arguments before expanding the values from the context, or we'll permanently overwrite the procedure arguments with expanded values
2019-02-15 11:45:16 +01:00
Fabio Manganiello
1103e417e1
Managing optional arguments properly on _exec
2019-02-13 23:50:40 +01:00
Fabio Manganiello
6ac62b0161
Reset the time-seek indicator also on the web panel
2019-02-13 18:01:56 +01:00