Commit graph

1351 commits

Author SHA1 Message Date
Fabio Manganiello
f06a851b61 Accelerometer and magnometer reads should be dict not set 2019-08-01 23:23:19 +02:00
Fabio Manganiello
675f899b5f FIX: get_measurement should return a dict not a set 2019-08-01 23:17:04 +02:00
Fabio Manganiello
72d1b3cd2a Filter out only selected sensors on the enviropHAT backend 2019-08-01 22:47:34 +02:00
Fabio Manganiello
bdadd2061c Added EnviropHAT support 2019-08-01 22:40:41 +02:00
Fabio Manganiello
dcb4a36959 Replaced os.environ['HOME'] with os.path.expanduser('~') (Windows compatibility)
Solves #74
2019-07-29 00:03:01 +02:00
Fabio Manganiello
1ca7feb506 Small fix for the font size on mobile 2019-07-28 23:32:52 +02:00
Fabio Manganiello
0ab70cdbae Kodi Application.SetVolume() expects an integer or a string, not a float 2019-07-25 23:54:32 +02:00
Fabio Manganiello
f5dbfe08bd Bump version: 0.10.5 → 0.10.6 2019-07-25 18:40:05 +02:00
Fabio Manganiello
1f2f293778 Redirect mercury-parser.js stderr to stdout. Moreover, if an error occurs while parsing a link from an RSS feed we should report the link that raised the error, not the URL of the parent feed 2019-07-25 16:34:00 +00:00
Fabio Manganiello
44e27e6c62 Log the link we are trying to parse (useful for debugging parsing issues) 2019-07-25 18:23:28 +02:00
Fabio Manganiello
83db3f770c Don't generate HTML/CSS wrapper for the content unless the output is a
destination file (HTML/PDF).
2019-07-25 18:08:30 +02:00
Fabio Manganiello
34433a363b Call sound.stop_recording upon audio stream stop so we won't have hanging streams with no clients connected 2019-07-25 14:01:09 +02:00
Fabio Manganiello
beef06fad2 Log exception and parser output if it returns invalid JSON 2019-07-24 23:31:27 +00:00
Fabio Manganiello
d64c519660 Bump version: 0.10.4 → 0.10.5 2019-07-25 01:15:38 +02:00
Fabio Manganiello
6aaa2fa1ea extract_content is supposed to be a boolean 2019-07-25 01:09:16 +02:00
Fabio Manganiello
5293f5b203 #73: Implemented wrapper plugin for the new Node.js mercury-parser.
As the Mercury reader web API is deprecated, and the only available
implementation is the open source mercury-parser, node, npm and
@postlight/mercury-parser have to be added as dependencies for the
http.webpage plugin (or at least for the `simplify` action).
2019-07-24 19:02:53 +02:00
Fabio Manganiello
43ca3a6f94 Added support for streaming audio from an input source over HTTP 2019-07-23 18:22:00 +02:00
Fabio Manganiello
426f064459 "Remember me" options on session should leave the cookie for a longer
time (e.g. one year), it should be browser-session-only otherwise
2019-07-23 00:31:17 +02:00
Fabio Manganiello
a16fc65d37 Try to load the dev version of vue.js if available 2019-07-19 20:00:39 +02:00
Fabio Manganiello
57712b3693 Be more robust in case of Mercury API failures while parsing RSS feeds. TODO: the Mercury API has now been retired and replaced by a library, that however is only available for Node.js. Figure out how to wrap the new library in Python 3 2019-07-19 15:00:06 +00:00
Fabio Manganiello
f12c6db34f Added camera web panel 2019-07-19 15:20:48 +02:00
Fabio Manganiello
5c3d32d05d Fixed undefined reference 2019-07-19 13:50:01 +02:00
Fabio Manganiello
f86e2eb5a7 Implemented settings page and finalized multi-user support 2019-07-19 00:50:52 +02:00
Fabio Manganiello
cd9bdbb1c8 Fixed undefined reference 2019-07-17 14:57:50 +02:00
Fabio Manganiello
ca030b06e0 Added support (not working yet) for custom Google device actions and events 2019-07-17 14:56:04 +02:00
Fabio Manganiello
008fce70fa Replaced references to in pydoc with format, as doesn't seem to work in RTD 2019-07-16 23:00:20 +02:00
Fabio Manganiello
a60e89806f Fixed undefined reference 2019-07-16 22:43:27 +02:00
Fabio Manganiello
cc61032bec Fixes for readthedocs build 2019-07-16 22:38:42 +02:00
Fabio Manganiello
95b5820783 Fixes for readthedocs build 2019-07-16 22:29:23 +02:00
Fabio Manganiello
9c4646bed5 Fixed documentation and added missing docs to the index 2019-07-16 20:28:00 +02:00
Fabio Manganiello
96c9d5460a Log the underlying error cause too if get_plugin fails 2019-07-16 16:51:27 +02:00
Fabio Manganiello
4e8235a649 More robust logic to handle temporary database connection errors through retry mechanism 2019-07-16 16:40:56 +02:00
Fabio Manganiello
1c1ecc18df Support for multi-users and authentication for HTTP pages 2019-07-15 14:12:00 +02:00
Fabio Manganiello
674c164fc1 Fixed pylint warnings 2019-07-13 22:36:45 +02:00
Fabio Manganiello
0826dd53a6 FIX: LifoQueue.get is blocking. Check if the queue is empty instead 2019-07-13 22:22:44 +02:00
Fabio Manganiello
55cd937a51 Made OMXPlayer plugin more resiliant in the case where the player has already terminated 2019-07-13 22:12:56 +02:00
Fabio Manganiello
0b05d7d8de pylint warnings fixed 2019-07-13 18:25:42 +02:00
Fabio Manganiello
07dbe57641 pylint warnings fixed 2019-07-13 15:49:38 +02:00
Fabio Manganiello
8b2c6d333e Lint warnings fixed 2019-07-13 14:22:43 +02:00
Fabio Manganiello
3c3496b19a Revert "The active-glow animation takes too much CPU on music.mpd"
This reverts commit 4c3cd2fcf2.
2019-07-13 12:27:43 +02:00
Fabio Manganiello
7666e8cb51 Including vue.min.js instead of vue.js 2019-07-13 12:25:02 +02:00
Fabio Manganiello
3479033170 Version bump 0.10.3 -> 0.10.4 2019-07-12 23:57:06 +02:00
Fabio Manganiello
654c61ec51 Standardized omxplayer returned attributes and volume management 2019-07-12 20:12:59 +02:00
Fabio Manganiello
50313580fd Catch PortAudio exception in case of race conditions on closed streams and re-initialize the assistant object when they occur 2019-07-12 18:19:32 +02:00
Fabio Manganiello
bb3a39acb9 Better synchronization mechanism between push-to-talk and platypush when an event is matched and no assistant playback should follow up 2019-07-12 18:11:14 +02:00
Fabio Manganiello
2999e47a0f Run the hotword detected sound in another thread, or it's likely to mess up with the timing of the hotword-assistant interaction 2019-07-12 17:44:59 +02:00
Fabio Manganiello
fe96940744 detect_sound should support relative and ~ paths 2019-07-12 14:55:14 +02:00
Fabio Manganiello
8d660f27d4 Support for multiple hotwords, configurations and assistant languages in Snowboy backend 2019-07-12 14:53:12 +02:00
Fabio Manganiello
6769707580 Stop assistant interaction if a phrase match is found 2019-07-12 09:37:37 +02:00
Fabio Manganiello
b63843a130 Fixed assistant event constructor with new Google plugins structure 2019-07-12 01:45:27 +02:00
Fabio Manganiello
6848a2a0c1 Version bump 0.10.2 -> 0.10.3 2019-07-12 00:59:03 +02:00
Fabio Manganiello
402baee48e typo 2019-07-12 00:56:18 +02:00
Fabio Manganiello
5766367402 Rewritten snowboy and Google push-to-talk plugins to make them a better replacement for the deprecated google-assistant-library 2019-07-11 22:54:33 +02:00
Fabio Manganiello
792c24700c Refactored requirements to only include mandatory ones and added style reference to assistant in dashboard.html 2019-07-10 12:18:53 +02:00
Fabio Manganiello
f086d30e71 Version bump 0.10.1 -> 0.10.2 2019-07-09 02:14:52 +02:00
Fabio Manganiello
fc296a1417 Version bump 0.10 -> 0.10.1 2019-07-09 02:01:01 +02:00
Fabio Manganiello
24d3810e44 Added NFC backend 2019-07-09 01:44:31 +02:00
Fabio Manganiello
0a97bb2345 Better style for webpanel switches 2019-07-08 15:21:13 +02:00
Fabio Manganiello
b50a52acf2 Sort articles in descending order when querying from RSS news web widget 2019-07-08 09:26:38 +02:00
Fabio Manganiello
4c3cd2fcf2 The active-glow animation takes too much CPU on music.mpd 2019-07-08 00:58:02 +02:00
Fabio Manganiello
c19251c6a1 Always reset carousel image width to auto before re-adjusting the size 2019-07-08 00:16:43 +02:00
Fabio Manganiello
b2c31fcec6 Dashboard style improvements 2019-07-07 23:50:35 +02:00
Fabio Manganiello
42e5673192 Increased font size for widgets 2019-07-07 20:47:44 +02:00
Fabio Manganiello
851c0f8583 Version bump 0.10 -> 0.10 2019-07-07 20:19:25 +02:00
Fabio Manganiello
09165ca0ff Dashboard rewritten in vue.js 2019-07-07 20:11:32 +02:00
Fabio Manganiello
8006f3688c Removed old gpio scripts 2019-07-02 16:27:13 +02:00
Fabio Manganiello
1e39d3a8d2 Return obj even when the metrics are undefined, or we will set this.metrics to undefined 2019-07-02 16:12:24 +02:00
Fabio Manganiello
75f7fbd67a Don't perform reads on the serial plugin when refreshing 2019-07-02 16:04:06 +02:00
Fabio Manganiello
0dac122db5 Style for the new sensors web plugin 2019-07-02 15:38:09 +02:00
Fabio Manganiello
fb4af87967 Style for the new sensors web plugin 2019-07-02 15:23:41 +02:00
Fabio Manganiello
9c44d047ac Vue.set to set metrics object, array assignment won't be picked up by Vue listeners 2019-07-02 15:08:32 +02:00
Fabio Manganiello
e82edc8338 Set metrics object through Vue.set 2019-07-02 15:02:44 +02:00
Fabio Manganiello
be79d15faf Handle sensor event format correctly 2019-07-02 15:01:40 +02:00
Fabio Manganiello
23d106969f Default timeout for API calls from 30 to 60 seconds 2019-07-02 14:56:43 +02:00
Fabio Manganiello
40fa640397 New sensors web panel WIP 2019-07-02 14:42:25 +02:00
Fabio Manganiello
54a3643605 Added name and value props to sensor component 2019-07-02 14:39:04 +02:00
Fabio Manganiello
43b01f7c0e Fixed icon class 2019-07-02 14:34:05 +02:00
Fabio Manganiello
1eae45805d Added new sensors plugin to webpanel 2019-07-02 14:04:25 +02:00
Fabio Manganiello
b932df1c12 Added switch tab to the new web panel 2019-07-02 12:02:28 +02:00
Fabio Manganiello
26ee3fc75c Changed nav bar text to icons 2019-07-01 22:26:04 +02:00
Fabio Manganiello
277d6ec271 Added torrent support in new webplayer 2019-07-01 19:32:22 +02:00
Fabio Manganiello
c78789e644 Added Kodi support to new media webplayer 2019-06-29 00:06:03 +02:00
Fabio Manganiello
f86eeef549 New media webplugin WIP 2019-06-27 23:52:40 +02:00
Fabio Manganiello
70bba5fc96 Support for browser webplayer and subtitles in new webplugin 2019-06-26 11:05:16 +02:00
Fabio Manganiello
e55735f409 Added YouTube support to new media webplugin 2019-06-25 22:46:25 +02:00
Fabio Manganiello
cf23e2fc72 Support for subtitles in new media webplugin - WIP 2019-06-25 00:48:00 +02:00
Fabio Manganiello
17de2a194c Removed comment 2019-06-24 01:04:52 +02:00
Fabio Manganiello
9305f86d0c New media webplugin WIP 2019-06-24 01:01:08 +02:00
Fabio Manganiello
ba800ef8e2 Normalized all local players so that they handle events and return statuses in the same format 2019-06-23 02:16:20 +02:00
Fabio Manganiello
1964f74f19 New media webplugin WIP 2019-06-22 19:05:17 +02:00
Fabio Manganiello
2da6d7d866 New media webplugin WIP 2019-06-22 14:41:42 +02:00
Fabio Manganiello
482f6f0765 New media webplugin WIP 2019-06-22 00:15:32 +02:00
Fabio Manganiello
3bd9bec660 MIME type utils method now compatible with multiple version of python-magic 2019-06-21 13:40:45 +02:00
Fabio Manganiello
4cd2e6949f New media webplugin WIP 2019-06-21 02:13:14 +02:00
Fabio Manganiello
9805ed0479 Merge branch 'master' into vuejs 2019-06-18 18:31:11 +02:00
Fabio Manganiello
f108157a8a Fixed inconsistencies/warnings in calendar plugins 2019-06-18 18:30:43 +02:00
Fabio Manganiello
ecd41a1f41 New media webplugin WIP 2019-06-18 18:14:48 +02:00
Fabio Manganiello
32efebe405 Fixed typos and warnings in snapcast backend 2019-06-16 21:59:31 +02:00
Fabio Manganiello
df355fb954 Fixed typos and warnings in snapcast backend 2019-06-16 21:54:03 +02:00
Fabio Manganiello
3bbbd5edaa new font-awesome commits 2019-06-16 21:47:36 +02:00
Fabio Manganiello
e5d7334662 New media webplugin WIP 2019-06-16 21:45:21 +02:00
Fabio Manganiello
5e2b927267 Explicitly inherit the height of parent panels container 2019-06-15 13:02:09 +02:00
Fabio Manganiello
7015c0df11 Explicitly inherit the height of parent panels container 2019-06-15 13:00:41 +02:00
Fabio Manganiello
496e692860 calc mixin shit 2019-06-15 12:50:14 +02:00
Fabio Manganiello
a25565a80d Fill window.config object before including other js code 2019-06-15 12:01:13 +02:00
Fabio Manganiello
3a3637d3d7 Fixed calc mixin and introduced media handlers for webpanel media plugin 2019-06-15 00:51:48 +02:00
Fabio Manganiello
fc5ea429d2 Using cross-browser mixin for calc 2019-06-14 19:15:57 +02:00
Fabio Manganiello
359e6703e4 new font-awesome commits 2019-06-14 01:01:51 +02:00
Fabio Manganiello
9d4511577f - Refactored webpanel style to use flex and dynamic element heights
instead of ugly fixed/absolute positioning.

- New media webpanel plugin WIP
2019-06-14 00:54:20 +02:00
Fabio Manganiello
076d766745 New TTS webpanel plugins 2019-06-11 11:53:15 +02:00
Fabio Manganiello
205903bc40 Removed old music.snapcast.js 2019-06-10 23:26:26 +02:00
Fabio Manganiello
91ef6f3ce2 Finalized new Snapcast webpanel plugin 2019-06-10 15:11:24 +02:00
Fabio Manganiello
95a9c22618 Added new Snapcast webpanel plugin 2019-06-10 00:55:23 +02:00
Fabio Manganiello
33d55dcd93 Fixed Pushbullet backend 2019-06-08 22:37:19 +02:00
Fabio Manganiello
6019ba9db6 Wrote new Pushbullet handler for webpanel 2019-06-08 17:16:47 +02:00
Fabio Manganiello
46836374b0 Removed old application.js 2019-06-08 13:38:57 +02:00
Fabio Manganiello
4bfd6baab2 Removed old assistant google web plugin 2019-06-08 13:38:18 +02:00
Fabio Manganiello
bb4cc80262 Added assistant.google plugin in new webpanel 2019-06-08 13:25:40 +02:00
Fabio Manganiello
41d8ae48e1 Removed old jQuery music.mpd plugin 2019-06-07 23:13:07 +02:00
Fabio Manganiello
b7a625097d Added playlist editor in music.mpd web panel 2019-06-07 23:07:36 +02:00
Fabio Manganiello
1ad72a2695 Implemented support for adding tracks to playlists 2019-06-07 17:17:58 +02:00
Fabio Manganiello
0b6b29f043 Improved support for multiple modals and added ability to search for albums and artists on the fly from tracks in music.mpd - vue.js refactoring WIP 2019-06-07 00:43:39 +02:00
Fabio Manganiello
7df0cec14e Implemented support for modals and music.mpd search and item info 2019-06-06 02:08:36 +02:00
Fabio Manganiello
611a137ff6 music.mpd vue.js refactoring WIP: Implemented playlist track move feature 2019-06-04 15:59:07 +02:00
Fabio Manganiello
d3ecb7b871 music.mpd vue.js refactoring WIP 2019-06-03 23:53:37 +02:00
Fabio Manganiello
85bdd54f7e music.mpd vue.js refactoring WIP 2019-06-03 23:37:19 +02:00
Fabio Manganiello
e1ddf7bb3b music.mpd vue.js refactoring WIP 2019-06-02 00:54:49 +02:00
Fabio Manganiello
0f3987aaf2 Reverted scrollbar style override 2019-05-30 02:19:20 +02:00
Fabio Manganiello
7a74b83c76 music.mpd plugin vue.js refactoring - WIP 2019-05-30 02:07:28 +02:00
Fabio Manganiello
444fe6331d New support for notifications in webpanel in vue.js 2019-05-28 19:16:55 +02:00
Fabio Manganiello
e1c3951456 Added events and websocket support in webpanel refactoring and removed old light.hue templates and scripts 2019-05-28 19:16:55 +02:00
Fabio Manganiello
197a5805be Made nav header fixed 2019-05-28 19:16:55 +02:00
Fabio Manganiello
01b111f436 Webpanel refactoring in progress 2019-05-28 19:16:55 +02:00
Fabio Manganiello
897338399f Synchronize all lights toggles when scenes are selected 2019-05-28 19:16:55 +02:00
Fabio Manganiello
5041d8bec2 whiteline PEP fix 2019-05-28 19:16:55 +02:00
Fabio Manganiello
e72d4de581 vue.js refactor part 1 - prepared webpanel logic and migrated light.hue plugin 2019-05-28 19:16:55 +02:00
Fabio Manganiello
f053aa455d PEP fixes for light.hue plugin and new methods xy and ct added 2019-05-28 19:16:55 +02:00
Fabio Manganiello
8b478ede45 vue.js migration commit - WIP 2019-05-28 19:16:55 +02:00
Fabio Manganiello
1ad86428c8 Added support for custom webhooks 2019-05-17 14:55:29 +00:00
Fabio Manganiello
7ea65cf90e One more url fix 2019-04-24 23:57:11 +02:00
Fabio Manganiello
5ed4b10de3 Fixed torrent search URLs 2019-04-24 23:53:20 +02:00
Fabio Manganiello
d2f4ec44c3 Support for searching all the torrent categories in parallel if no categories is provided 2019-04-24 23:45:57 +02:00
Fabio Manganiello
2bcc22e0fc Refactored torrent search 2019-04-24 23:25:25 +02:00
Fabio Manganiello
9f3f6c9caa Log URL being parsed 2019-04-13 08:17:45 +00:00
Fabio Manganiello
3dd47260d6 Raise runtime error if mercury API responds with empty response 2019-04-13 08:15:08 +00:00
Fabio Manganiello
8553a8eeb5 typo 2019-04-13 08:10:35 +00:00
Fabio Manganiello
72f179cb7e typo 2019-04-13 08:08:20 +00:00
Fabio Manganiello
1ea6041dfa Log response from Mercury API 2019-04-13 08:06:40 +00:00
Fabio Manganiello
611e5f2160 Set default title with timestamp if no title is provided by the Instapaper API 2019-04-13 08:03:42 +00:00
Fabio Manganiello
c55deab6cb Support for authentication in HTTP plugin methods 2019-04-11 16:21:39 +02:00
Fabio Manganiello
12fefaa220 Improved generated pdf font size and family 2019-03-30 14:08:04 +01:00
Fabio Manganiello
24ec35e5b3 Increased font size in generated pdf 2019-03-30 12:41:02 +01:00
Fabio Manganiello
3ca6e75634 Added font style to generated pdf 2019-03-30 12:25:19 +01:00
Fabio Manganiello
9fc243c93d Use startTime instead of endTime as a time indicator to identify new records 2019-03-29 10:14:46 +00:00
Fabio Manganiello
b8e9adadbe Added plugin to parse web pages 2019-03-29 03:57:19 +01:00
Fabio Manganiello
24d395ce49 Use endTime 2019-03-28 14:37:26 +01:00
Fabio Manganiello
c84a6047ed Using modifiedTime instead of startTime to track new data points 2019-03-28 14:17:43 +01:00
Fabio Manganiello
c3b2212972 Storing last processed timestamp per fit metric instead of a single timestamp for all the metrics to prevent new data points from being masked from newer ones from other metrics 2019-03-28 02:36:16 +01:00
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
Fabio Manganiello
4503eb31ed Clear track elapsed time display on stop event 2019-02-13 17:53:57 +01:00
Fabio Manganiello
a287a10bcc Propagate a MusicStopEvent upon playback stop even when the context of the current track is not available 2019-02-13 17:38:58 +01:00
Fabio Manganiello
32cdab5530 Always handle at least one retry on mpd plugin _exec method, the TCP connection to a mopidy server can really be shaky 2019-02-13 17:35:18 +01:00
Fabio Manganiello
7c817ba0c6 Position is expressed in milliseconds on mopidy websocket, convert to seconds 2019-02-13 17:25:56 +01:00
Fabio Manganiello
27e4ea5b5b Support for both enabled and disabled flags on plugin level 2019-02-13 15:14:35 +01:00
Fabio Manganiello
0a81b43f1d startStreaming should always return a map 2019-02-13 10:15:18 +01:00
Fabio Manganiello
8227427834 webtorrent timeout 20 -> 120 seconds 2019-02-13 09:46:51 +01:00
Fabio Manganiello
09f5c92541 Passing url from the promise in the right way 2019-02-13 09:38:40 +01:00
Fabio Manganiello
34e2dffe99 Catching music stop events both on track_playback_ended and playback_state_changed 2019-02-13 00:58:40 +01:00
Fabio Manganiello
8a9c868f77 Bringing more consistency in music.mpd.js regardless of the backend 2019-02-13 00:50:58 +01:00
Fabio Manganiello
0697598a86 Fixed music.js widget as well for the new mopidy backend 2019-02-13 00:32:14 +01:00
Fabio Manganiello
3190d3c6c8 Fixing music.mpd.js both for mpd and mopidy backends 2019-02-13 00:27:36 +01:00
Fabio Manganiello
f0f6d43990 Using the right naming for length and elapsed variables 2019-02-12 23:59:13 +01:00
Fabio Manganiello
71c6ba2d34 More compatibility between TCP-based mpd and websocket-based mopidy backends when it comes to how the track time is reported 2019-02-12 23:48:18 +01:00
Fabio Manganiello
77a76370a5 Returning flat representation for artist and renamed 'name' attribute for consistency with the mpd backend 2019-02-12 23:24:16 +01:00
Fabio Manganiello
1c4edf93bf Another typo 2019-02-12 23:19:36 +01:00
Fabio Manganiello
97855b1535 state might not always be provided in a music event 2019-02-12 23:11:37 +01:00
Fabio Manganiello
18d2c51b4e Forgot an enumerate 2019-02-12 23:08:48 +01:00
Fabio Manganiello
e5c169a549 on_message requires two arguments 2019-02-12 23:00:16 +01:00
Fabio Manganiello
6024eddd2d on_open requires ws as a parameter 2019-02-12 22:58:22 +01:00
Fabio Manganiello
c18515bd3c Few more fixes on mopidy backend 2019-02-12 22:57:09 +01:00
Fabio Manganiello
ee3df8fe8c Switched mopidy backend from websockets to websocket-client 2019-02-12 22:52:29 +01:00
Fabio Manganiello
b555777cc8 Use another event loop for the synchronous websocket communication method 2019-02-12 20:49:10 +01:00
Fabio Manganiello
73d7e9a3ef Fixes on mopidy backend 2019-02-12 20:45:40 +01:00
Fabio Manganiello
148d25f1cb Added mopidy backend functionalities 2019-02-12 20:34:17 +01:00
Fabio Manganiello
7b99842225 Added draft for mopidy backend over websocket 2019-02-12 17:29:24 +01:00
Fabio Manganiello
f68efc0d68 Attempt to support subtitles on Chromecast media too 2019-02-12 11:13:19 +01:00
Fabio Manganiello
5cbd0fdfe7 Added support for VTT subtitles and subtitles toggling both in local and browser media players 2019-02-12 01:30:55 +01:00
Fabio Manganiello
41c34b4bc5 Attempt to support subtitle tracks in web player 2019-02-11 18:46:25 +01:00
Fabio Manganiello
34f0264d5e Subtitles support
- Added support for local and OpenSubtitles media subs
- Added management of media events in web panel
2019-02-11 00:55:20 +01:00
Fabio Manganiello
630850ee9a Reset the connection to a Snapcast server if it starts failing 2019-02-10 11:08:04 +01:00
Fabio Manganiello
cd49f22d5c Introduced floating panel with options on element click instead of the double-click-to-play logic on media elements 2019-02-09 01:53:17 +01:00
Fabio Manganiello
434bc8a5eb Reset bridge connection upon failure 2019-02-08 19:59:25 +01:00
Fabio Manganiello
e2b0bf8462 More consistent management of media devices icons and added devices refresh button 2019-02-08 19:48:18 +01:00
Fabio Manganiello
b3f2974c4c Support for streaming media to browser 2019-02-08 00:43:43 +01:00
Fabio Manganiello
9ec3365413 Support for media streaming over internal HTTP server
Dropped the additional node.js dependency of localstream and relied
instead on a built-in solution to stream files
2019-02-07 14:27:14 +01:00
Fabio Manganiello
077bb0686b Don't break if no data is received from the Snapcast server 2019-02-07 09:05:27 +01:00
Fabio Manganiello
affaee6ab7 Forgot to override the default port when specified in media.start_streaming 2019-02-06 17:49:20 +01:00
Fabio Manganiello
86dc7f240a typo 2019-02-06 15:15:10 +01:00
Fabio Manganiello
880a394d74 Synchronize with the streaming process to make sure that we start playing only when the streaming service is ready 2019-02-06 15:12:55 +01:00
Fabio Manganiello
97d2e734ee Moved import magic statement to the get_mime_type function so Travis won't break 2019-02-06 13:22:58 +01:00
Fabio Manganiello
10e45123c4 Fixed localstream executable 2019-02-06 13:17:03 +01:00