Commit graph

1116 commits

Author SHA1 Message Date
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
Fabio Manganiello
687e9e32f9 Forgot an import os line 2019-02-06 11:55:21 +01:00
Fabio Manganiello
6713ce0f03 Implemented support for casting local media through the localstream script 2019-02-06 11:51:44 +01:00
Fabio Manganiello
d15b21ddfa Added support for remote cast on the web media panel 2019-02-06 09:47:00 +01:00
Fabio Manganiello
8a75979f72 Expose output_dir and media_file on TorrentCompletedDownloadEvent 2019-02-05 17:18:55 +01:00
Fabio Manganiello
f4dd4e0eb5 typo 2019-02-05 17:09:40 +01:00
Fabio Manganiello
8c8e913242 Don't pass duplicate arguments from download to play 2019-02-05 16:34:48 +01:00
Fabio Manganiello
ba48e52fb1 Update self.chromecasts on each get_chromecasts() call 2019-01-20 15:16:16 +01:00
Fabio Manganiello
3c0ed443a2 Support for download-only option in webtorrent plugin 2019-01-20 15:10:14 +01:00
Fabio Manganiello
d297b5cc42 Trying to make a more resiliant assistant error handling 2019-02-05 11:59:04 +01:00
Fabio Manganiello
caa48ad056 Better error handling on the assistant 2019-02-05 11:26:03 +01:00
Fabio Manganiello
96ee21dc0e More consistent naming for Kodi and Chromecast media methods 2019-02-05 11:02:31 +01:00
Fabio Manganiello
e2dbdcd66a Parsing the right state attributes out of the Chromecast status 2019-02-05 10:02:27 +01:00
Fabio Manganiello
9add8890cd Support for complete Chromecasts status 2019-02-05 09:49:50 +01:00
Fabio Manganiello
dc2a686d23 Support for casting torrents to Chromecast 2019-02-05 02:30:20 +01:00
Fabio Manganiello
3798414f22 Wait for the media file to be ready before failing 2019-02-05 00:52:14 +01:00
Fabio Manganiello
52d0ba442b Refactored webtorrent plugin and synchronization with the player
The WebTorrent plugin now uses the `download -o <download_dir> -p <port>` options.
Improved interaction both with the webtorrent executable and the player
executable, and triggering the right events upon state changes, as well
as free support for torrent streaming through the webtorrent executable.
2019-02-05 00:15:36 +01:00
Fabio Manganiello
9506813dc2 Only propagate a MediaStopEvent when the awaited player actually stops 2019-02-04 09:27:12 +01:00
Fabio Manganiello
05abc86b90 Handling webtorrent instance stop from mplayer interface 2019-02-04 01:55:14 +01:00
Fabio Manganiello
286eb431f0 Refactored torrent module 2019-02-04 01:01:39 +01:00
Fabio Manganiello
a4f80d4622 Added media.webtorrent plugin 2019-02-03 17:43:30 +01:00
Fabio Manganiello
4b7730d4cf Added status method to mplayer plugin 2019-02-02 17:55:29 +01:00
Fabio Manganiello
9ebb265458 Only copy the environment to the mplayer executable if it's set, and don't copy the whole environment from platypush 2019-02-02 17:32:56 +01:00
Fabio Manganiello
c18650c964 quit method implemented as part of the media interface 2019-02-02 17:12:22 +01:00
Fabio Manganiello
ed4b7e1da9 mplayer step_property volume doesn't really work as intended 2019-02-02 16:36:47 +01:00
Fabio Manganiello
3a5d7c7cba MPlayer has a quite weird way of handling the volume 2019-02-02 16:28:55 +01:00
Fabio Manganiello
535c4bbc17 Added set_volume action to mplayer plugin 2019-02-02 16:11:31 +01:00
Fabio Manganiello
d0a288b423 Don't start the mplayer pipe with shell=True 2019-02-02 16:06:56 +01:00
Fabio Manganiello
7068530eb0 Strip the file:// part out of the resource name 2019-02-02 15:58:18 +01:00
Fabio Manganiello
36725f7136 typo 2019-02-02 15:54:44 +01:00
Fabio Manganiello
1713c0c940 Propagate enviornment variables to the player executable 2019-02-02 15:51:12 +01:00
Fabio Manganiello
63b423cf75 Refactored mplayer and omxplayer under the same media player 2019-02-02 00:06:28 +01:00
Fabio Manganiello
56b6e6a899 More optimized check against supported extensions 2019-01-20 10:01:07 +01:00
Fabio Manganiello
297d1114e7 Implemented generic media plugin and made MPlayer extend it (TODO: omxplayer and vlc) 2019-01-20 08:50:05 +01:00
Fabio Manganiello
d59044fa2d Added MPlayer plugin 2019-02-01 09:34:50 +01:00
Fabio Manganiello
2d6dfc86ac typo 2019-01-30 10:04:42 +01:00
Fabio Manganiello
2956a9ca63 Restart the assistant connection on error 2019-01-30 09:21:35 +01:00
Fabio Manganiello
05a1713b92 Make sure that extra arguments on the Spotify URI are discarded during the URI parse 2019-01-30 09:08:29 +01:00
Fabio Manganiello
ee0040fba6 More robust Spotify URI parsing that discards optional arguments (e.g. si=) passed to the URL 2019-01-30 09:04:18 +01:00
Fabio Manganiello
7a80cd08ce Handling dashboards widget configuration as a list instead of a hash to preserve the order of the widgets 2019-01-28 23:14:12 +01:00
Fabio Manganiello
339d1eb132 Better way to log the impacted plugin and action in case of uncaught exceptions in requests 2019-01-27 17:51:07 +01:00
Fabio Manganiello
947fc8f583 Better handling of Hue bridge first-time pairing 2019-01-27 17:26:15 +01:00
Fabio Manganiello
235ddc6c2d More robust logging system and options to disable stdout/stderr logging capture 2019-01-27 00:53:30 +01:00
Fabio Manganiello
e1920700ec Handle backend stop/disconnection on MQTT 2019-01-18 04:10:27 +01:00
Fabio Manganiello
1f4efbb427 Better handling for the lights blink animation for groups 2019-01-20 00:42:07 +01:00
Fabio Manganiello
d1b9fef740 Passing socket_timeout=transition_seconds attribute to _get_redis 2019-01-20 00:36:07 +01:00
Fabio Manganiello
c7decd81f2 Lazy inizialitation for the Redis object in light.hue to prevent race conditions on start/stop animation 2019-01-20 00:29:58 +01:00
Fabio Manganiello
122978c6f0 Support for extra args/kwargs passed to light.hue actions 2019-01-19 23:23:58 +01:00
Fabio Manganiello
2b38f1b03f Added alarm, timer and error event handlers on assistant backend 2019-01-19 01:55:32 +01:00
Fabio Manganiello
03bdf5c547 Implemented get_timeout/get_timeouts/get_interval/get_intervals util methods 2019-01-14 20:44:40 +01:00
Fabio Manganiello
0e6f8bbb0b typo 2019-01-14 19:54:59 +01:00
Fabio Manganiello
ca24243449 As python-mpd2 doesn't seem to be quite thread-safe, the mpd plugin entry-point has now got a reentrant lock 2019-01-14 19:52:54 +01:00
Fabio Manganiello
d96ffe4d9f typo 2019-01-13 23:47:35 +01:00
Fabio Manganiello
f38b2db273 Fixed interaction with modal dialogs to prevent browser race conditions when touchscreen events are involved 2019-01-13 23:45:03 +01:00
Fabio Manganiello
740063c23b Clear the timeout handler from the map once the execution is terminated 2019-01-13 22:58:18 +01:00
Fabio Manganiello
2d8b2ba55a Removed pp- prefix from the name of the spawned processes and threads 2019-01-13 20:41:15 +01:00
Fabio Manganiello
e5d1dd3791 Version bump 0.9.4 -> 0.9.5 2019-01-13 20:12:12 +01:00
Fabio Manganiello
db4e68e247 Do exception logging at Request level and discard duplicate exception messages between retries 2019-01-13 20:09:25 +01:00
Fabio Manganiello
8ea0519954 Support for set/clear timeout/interval utils actions and error handling refactor
- Added set/cler timeout/interval actions in the utils plugin to
dynamically set or stop timed actions from your custom logic

- Actions error handling refactoring. If a Response is processed with
some errors, then just log the error and return it to the caller,
without raising an exception. If instead the action execution raised an
uncaught exception, then handle the retries properly and return errors
as a list with the output from all the retries, without being too
verbose with the returning and logging the whole stack trace multiple
times.
2019-01-13 19:29:08 +01:00
Fabio Manganiello
2a52eb770b Renamed value variable in expand_value_from_context to _value to prevent common name clashes with attributes named 'value' in the context 2019-01-12 22:43:01 +01:00
Fabio Manganiello
3587fa7cb4 Force music.mpd plugin reload when the mpd backend fails to get the state 2019-01-12 02:15:24 +01:00
Fabio Manganiello
bb8a21ed13 Revert "Sort Adafruit IO received data by timestamp"
This reverts commit 2739dda266.
2019-01-12 02:08:04 +01:00
Fabio Manganiello
2739dda266 Sort Adafruit IO received data by timestamp 2019-01-12 02:06:38 +01:00
Fabio Manganiello
78d44364cf Casting data to number whenever possible on FeedUpdateEvent as well 2019-01-12 01:58:35 +01:00
Fabio Manganiello
d63ad91b2a Implemented receive_next and receive_previous wrappers in Adafruit IO and rationalized returned types 2019-01-12 01:52:39 +01:00
Fabio Manganiello
ca855fce5d Improved Adafruit IO data handling 2019-01-12 01:38:17 +01:00
Fabio Manganiello
1087dae197 Added Adafruit IO backend 2019-01-12 01:07:38 +01:00
Fabio Manganiello
212cfb63c4 Lazy initialization of WeMo environment 2019-01-11 19:58:43 +01:00
Fabio Manganiello
33fd226fa1 Don't throw the exception if a certain Snapcast host is not reachable 2019-01-11 11:50:37 +01:00
Fabio Manganiello
29be2945cc Log trace before attempting a Snapcast connection 2019-01-11 11:46:13 +01:00
Fabio Manganiello
fbf3600e91 Setting thread and process names properly through prctl 2019-01-10 23:45:13 +01:00
Fabio Manganiello
56c7258c74 Setting names for threads 2019-01-10 23:08:29 +01:00
Fabio Manganiello
0bbfaf4498 If the mpd frontend receives an empty PlaylistChangeEvent, trigger an initPlaylist to update the playlist 2019-01-10 22:27:44 +01:00
Fabio Manganiello
a190184b0c Using an auxiliary map to keep track of the playing hosts to prevent errors when the items are removed by the worker threads while iterating them 2019-01-10 18:14:41 +01:00
Fabio Manganiello
2c8099e7ae Apply stream name filtering logic also to HTTP streams 2019-01-10 18:01:24 +01:00
Fabio Manganiello
f156e9c199 Refactored plugin so that errors are properly returned up the stack, client connections are lazy and re-initialized upon error 2019-01-10 17:51:33 +01:00
Fabio Manganiello
8759dafa0e Let plugin fail if unable to retrieve the status, so it can rely on the automatic reload mechanism instead of swallowing the error 2019-01-10 17:28:49 +01:00
Fabio Manganiello
abe80db47e Changed default for exclude_local from True to False 2019-01-10 17:25:25 +01:00
Fabio Manganiello
c619d89fa4 Added method to programmatically get the list of active Snapcast connections 2019-01-10 17:22:52 +01:00
Fabio Manganiello
a349b45ba4 Removed get_plugin utils method from web server, it messes up with also with the reentrant locks as it runs in another process. Refactored Snapcast frontend to get the backend hosts asynchronously through a plugin method 2019-01-10 11:52:39 +01:00
Fabio Manganiello
c1b05226a9 Made the mpd backend a bit more resiliant 2019-01-10 01:28:12 +01:00
Fabio Manganiello
6150e07fc9 Prevent toggle button id clash because of Snapcast using the MAC address of a device as a client (and therefore the same client connected to multiple servers may lead to inconsistent behaviour) 2019-01-10 00:29:22 +01:00
Fabio Manganiello
89ea4798bf Restored retry logic in mpd backend 2019-01-09 22:20:01 +01:00
Fabio Manganiello
156e2e8b5a Don't go crazy with plugin reload logic in the mpd backend in case of corrupted received messages 2019-01-09 22:05:53 +01:00
Fabio Manganiello
544979e7ff - Added position argument to music.mpd.add
- Added RSS feed parser plugin
2019-01-09 18:43:13 +01:00
Fabio Manganiello
464f84805f Added empty __init__.py to lib module 2019-01-09 15:13:10 +01:00
Fabio Manganiello
43ff0d4e25 Added hooks on light.hue web panel tab to synchronize light statuses with LightStatusChangeEvent events 2019-01-09 15:08:16 +01:00
Fabio Manganiello
d50d92e99e Added Philips Hue lights backend to monitor status changes to the lights 2019-01-09 09:21:48 +01:00
Fabio Manganiello
7c02c70663 Version bump 0.9.3 -> 0.9.4 2019-01-08 19:24:17 +01:00
Fabio Manganiello
9ba7a68578 Fixed modal height and positioning on screen 2019-01-08 19:23:06 +01:00
Fabio Manganiello
3c385a601f Exposing backend hosts and ports as both lists and JSON on Snapcast plugin 2019-01-08 18:24:59 +01:00
Fabio Manganiello
80bd5b684c Added support for setting/changing group streams on Snapcast 2019-01-08 17:43:20 +01:00
Fabio Manganiello
35292968ed Made get_plugin lock reentrant 2019-01-08 16:33:57 +01:00
Fabio Manganiello
19eab381ae Weird Jinja bug broke the web panel load when using JSON parse, had to refactor it a bit to fix it 2019-01-08 13:53:21 +01:00
Fabio Manganiello
d91e494940 Added group and host modals and settings to Snapcast UI 2019-01-08 12:54:33 +01:00
Fabio Manganiello
382866b1a4 Added content to Snapcast group modal 2019-01-08 10:13:13 +01:00
Fabio Manganiello
fd8c3bb846 Connected the wires between Snapcast backend and frontend 2019-01-08 01:47:16 +01:00
Fabio Manganiello
a346442246 Draft for Snapcast UI style 2019-01-07 16:50:51 +01:00
Fabio Manganiello
004868f526 Added skeleton UI for Snapcast plugin on web panel 2019-01-07 15:34:31 +01:00
Fabio Manganiello
7aefe4e520 More resilient logic in case actions in a procedure return null responses 2019-01-07 00:07:45 +01:00
Fabio Manganiello
bbc3a9e82a Fixed Snapcast status method 2019-01-06 23:46:52 +01:00
Fabio Manganiello
461362f792 mset signature now compatible both with redis-py < 3.0 and >= 3.0 2019-01-06 23:46:18 +01:00
Fabio Manganiello
efad5a2bd7 Added Snapcast backend 2019-01-06 19:19:30 +01:00
Fabio Manganiello
2fba3109b3 Wrapped sample response in codeblock 2019-01-06 12:56:30 +01:00
Fabio Manganiello
e97ce5d676 Added Snapcast plugin 2019-01-06 02:19:56 +01:00
Fabio Manganiello
cb13098c4f Moved initial print statement inside start method to make sure that it's properly caught by the logging configuration 2019-01-03 13:09:12 +00:00
Fabio Manganiello
240abb627d Fix old Spotify playlists URI format 2019-01-03 10:37:16 +01:00
Fabio Manganiello
9328566235 Selecting the default light group tab on web panel load if configured 2019-01-02 21:24:07 +01:00
Fabio Manganiello
5a1169d8b8 Wrapped stdout and stderr under the same application logger 2019-01-02 11:38:21 +00:00
Fabio Manganiello
5b9c54748e Do not propagate a null response message back to the bus to prevent backends from breaking 2019-01-02 09:29:27 +01:00
Fabio Manganiello
09c1598829 More flexible management for included config files paths 2018-12-30 20:18:55 +01:00
Fabio Manganiello
62045c2b5c Support for multiple resource_dirs on the HTTP backend
It is now possible to map multiple static resource directories to the
Flask HTTP server
2018-12-30 18:40:03 +01:00
Fabio Manganiello
9e28379203 Prevent js errors upon null artist or album 2018-12-30 15:43:09 +01:00
Fabio Manganiello
699fa92c5e Added HomeSeer plugin 2018-12-28 09:55:09 +01:00
Fabio Manganiello
f9f43964a2 Support for stream names 2018-12-28 00:30:25 +01:00
Fabio Manganiello
fae45d8ca3 Returning only the real part of the FFT 2018-12-27 22:47:44 +01:00
Fabio Manganiello
01006046e0 Don't try to push a Pushbullet note body to the bus if it's not a valid JSON 2018-12-27 22:45:31 +01:00
Fabio Manganiello
54c3381ae3 - Added frames throttling support on Leap Motion backend
- Moved the Leap listener to another process to prevent it from hanging the other backends
- Added support for sound and mix frequency analysis
2018-12-27 20:24:51 +01:00
Fabio Manganiello
2e82651dbf Expressed triangular wave as a function of the associated sawtooth-shape wave 2018-12-27 17:33:05 +01:00
Fabio Manganiello
debf9a017b Sound plugin moved back to __init__ for sake of better readthedocs generation 2018-12-27 17:26:16 +01:00
Fabio Manganiello
cff4563dae Rewritten Pushbullet backend using pushbullet.py for better stability 2018-12-27 02:29:44 +01:00
Fabio Manganiello
56ff58d06b Better sound release logic 2018-12-27 01:10:45 +01:00
Fabio Manganiello
c445763979 - Support for sound "release" (removal from active stream)
- Added `query_ports` method to MIDI plugin
2018-12-27 00:09:05 +01:00
Fabio Manganiello
f2d2315610 Extended Sound class docstring 2018-12-26 23:16:37 +01:00
Fabio Manganiello
3598d7fcd5 Support for multiple sound waves (triangular, square and sawtooth) 2018-12-26 23:14:52 +01:00
Fabio Manganiello
3b681bbf57 Added played files/notes in stream in query_streams 2018-12-26 16:58:41 +01:00
Fabio Manganiello
3554968468 Support for multiple sounds on the same stream 2018-12-26 16:10:14 +01:00
Fabio Manganiello
c2544524e1 Added missing docstring line 2018-12-25 19:26:59 +01:00
Fabio Manganiello
2fb5e5abc6 Support for mixes of multiple sounds 2018-12-25 19:26:08 +01:00
Fabio Manganiello
d89184358a Support for playback control for individual sound streams 2018-12-25 17:31:20 +01:00
Fabio Manganiello
3baf0b1589 Initial support for playing multiple sounds to the same stream 2018-12-24 18:58:44 +01:00
Fabio Manganiello
3d2636b09c Further split between sound and core modules 2018-12-24 17:15:29 +01:00
Fabio Manganiello
65465e3a18 - Refactored the class sound out of the plugin module
- More robust stream naming and index assignment logic
2018-12-24 17:12:11 +01:00
Fabio Manganiello
f53d1c06dc No need to be verbose upon Pushbullet websocket temporary disconnections 2018-12-24 14:33:27 +01:00
Fabio Manganiello
ef241b3769 More robust Pushbullet reconnection logic 2018-12-24 12:31:38 +01:00
Fabio Manganiello
b911d46315 Create a new event loop in the Pushbullet backend 2018-12-24 11:37:18 +01:00
Fabio Manganiello
6a48a53c0d Typo 2018-12-24 11:30:10 +01:00
Fabio Manganiello
755df6284a Added missing reference to completed_callback_event 2018-12-23 23:43:12 +01:00
Fabio Manganiello
c2cf0b5f74 Support for polyphonic synthetic sounds in sound plugin 2018-12-23 23:29:52 +01:00
Fabio Manganiello
7a5657778e Basic support for synth sounds in sound plugin 2018-12-22 01:47:52 +01:00
Fabio Manganiello
00dacc456c A more robust logic for getting the default sound devices 2018-12-21 16:52:52 +01:00
Fabio Manganiello
e2f7213697 Don't fail hard if it was not possible to get the ical content 2018-12-20 16:47:07 +01:00
Fabio Manganiello
b3ffb29726 Don't extend calendar events will null values 2018-12-20 16:40:14 +01:00
Fabio Manganiello
8d497b0be7 Fixed reference to libtorrent dependency as the pip URL is broken 2018-12-20 01:04:50 +01:00
Fabio Manganiello
a1f640ce0a Added support for config include files to Docker images too 2018-12-20 01:04:28 +01:00
Fabio Manganiello
725b3dd672 Included reference to the included files in Config 2018-12-19 23:39:41 +01:00
Fabio Manganiello
eec20ee109 Missed cast to str upon pidfile write 2018-12-19 21:24:39 +01:00
Fabio Manganiello
fb75dc323e Added pidfile option to the main 2018-12-19 21:15:06 +01:00
Fabio Manganiello
44d24b42d1 Force python3 on the Dockerfile CMD 2018-12-18 22:31:24 +01:00
Fabio Manganiello
186ade8f18 Refactored Pushbullet backend to remove the dependency from websocket-client and rely only on websockets 2018-12-18 19:01:51 +01:00
Fabio Manganiello
6a9ddb9e53 Made config relative paths and include files expansion more robust 2018-12-19 09:19:58 +01:00
Fabio Manganiello
949d9cd619 Fixed platydock rm command 2018-12-19 02:22:10 +01:00
Fabio Manganiello
01f020c203 Version bump 0.9.2 -> 0.9.3 2018-12-19 02:08:57 +01:00
Fabio Manganiello
73d7441d26 Added platydock, a helper to manage Platypush instances as Docker containers 2018-12-19 02:08:13 +01:00
Fabio Manganiello
a226aad669 Added python-dateutil requirement 2018-12-19 00:09:21 +01:00
Fabio Manganiello
f9b23afbb6 Fixed typo on main.db 2018-12-18 22:20:33 +01:00
Fabio Manganiello
56b48a81b7 Reverted the new config file path expansion logic as it breaks include directives 2018-12-18 22:16:15 +01:00
Fabio Manganiello
12557702dd - cfgfile should expand the home directory ~
- Don't fail hard if failed to create logs directory
2018-12-18 18:46:07 +01:00
Fabio Manganiello
c8f7eb30aa Made Redis backend and plugin more robust.
- Redis arguments read either from the backend or the plugin
configuration as a fallback in case of partial conf

- send_message now falls back on the default Redis connection
configuration if *args and **kwargs are missing
2018-12-18 15:51:37 +01:00
Fabio Manganiello
8fe4d77e3d Made requests parsing more robust against messages with target not set (e.g. messages received over HTTP API) 2018-12-18 14:59:10 +01:00
Fabio Manganiello
13463420d9 Made Redis bus/local bus choice more flexible 2018-12-18 12:21:55 +01:00
Fabio Manganiello
7586412ded Serial plugin extended with a general purpose read() method - to communicate for e.g. Espruino and compatible devices 2018-12-16 23:14:34 +01:00
Fabio Manganiello
28223cab30 Only import sounddevice when needed 2018-12-16 17:29:45 +01:00
Fabio Manganiello
abd88d0a71 recplay default blocksize should be the configured/default output blocksize 2018-12-16 17:23:26 +01:00
Fabio Manganiello
c054d04f2d Added configurable input and output device blocksize to sound device plugin 2018-12-16 17:11:05 +01:00
Fabio Manganiello
e049d5483e Added blocksize to sound.record 2018-12-16 16:58:33 +01:00
Fabio Manganiello
be43c3ac21 Changed default sound device to index 0 as 'default' is not present on all the systems 2018-12-16 16:34:40 +01:00
Fabio Manganiello
20a779bd8f Replaced if not references with if <var> is not None 2018-12-16 16:24:45 +01:00
Fabio Manganiello
f7576dcb7f Added support for audio pass-through to sound plugin 2018-12-16 16:15:45 +01:00
Fabio Manganiello
be98dcde6a Added sound device plugin 2018-12-15 01:18:48 +01:00
BlackLight
e89046f12a Added max_results to YouTube search 2018-12-12 23:03:17 +01:00
BlackLight
9b0a72269a typo 2018-12-12 22:52:51 +01:00
BlackLight
b7603ba166 Mapping YouTube API responses to the internal simpler format recognized by OMXPlayer plugin 2018-12-12 22:46:32 +01:00
BlackLight
679cad53b5 Added YouTube plugin that leverages the YouTube API; Replaced OMXPlayer search references to the old HTML parser withe new YouTube plugin 2018-12-12 22:33:41 +01:00
Fabio Manganiello
eb439d227a Wrapped HTTP requests loop in a try-except block to prevent it from breaking in case of temporary failures 2018-12-05 15:55:19 +00:00
Fabio Manganiello
791c36f5df More tolerance on json.loads() in case the parsed value from the request context is not a string 2018-12-03 23:04:23 +01:00
Fabio Manganiello
4a148971b4 Allow non-string values to be passed through a request context as well 2018-12-03 22:52:25 +01:00
Fabio Manganiello
9421602e81 Removed duplicate log trace 2018-12-02 23:47:49 +01:00
Fabio Manganiello
7cd1efe2c6 Option to pair a specific device to the Wiimote backend 2018-12-02 23:44:17 +01:00
Fabio Manganiello
f6dcd00848 Version bump 0.9.1 -> 0.9.2 2018-12-01 19:44:41 +01:00
Fabio Manganiello
f677c79f54 Made inactivity timeout on Wiimote configurable 2018-12-01 19:38:43 +01:00
Fabio Manganiello
199e9fdba1 Better management of inactivity timeout on Wiimote 2018-12-01 19:22:10 +01:00
Fabio Manganiello
66b6f0bc8b Added Wiimote support docs; Added Wiimote connection/disconnection events 2018-12-01 18:55:13 +01:00
Fabio Manganiello
383a075f39 Handling Wiimote timeout on Wiimote backend 2018-12-01 18:43:18 +01:00
Fabio Manganiello
2b03276159 #46: Added Wiimote support 2018-12-01 17:56:31 +01:00
Fabio Manganiello
abbd8409ca Run event hook actions in another thread 2018-11-28 01:01:16 +01:00
Fabio Manganiello
6603f64757 Enforced cast to string for any object posted to the Redis bus 2018-11-20 14:24:14 +00:00
Fabio Manganiello
c2be1cf6e8 Enforced cast to string for any object posted to the Redis bus 2018-11-20 14:18:58 +00:00
Fabio Manganiello
68dcdf8ccd Enforced cast to string for any object posted to the Redis bus 2018-11-20 14:14:59 +00:00
Fabio Manganiello
bb966f123f Added back and forward methods to Chromecast plugin 2018-11-13 23:23:14 +01:00
Fabio Manganiello
025309cae8 Fixed Chromecast media_controller methods 2018-11-13 23:17:51 +01:00
Fabio Manganiello
632da318b1 Expanded Chromecast plugin 2018-11-13 23:09:19 +01:00
Fabio Manganiello
6fcc3a2397 Support for YouTube media in Chromecast plugin 2018-11-13 20:20:55 +01:00
Fabio Manganiello
26f3842724 Added support for Plex to Chromecast 2018-11-13 01:29:24 +01:00
Fabio Manganiello
42053dcf3b Expanded Plex plugin 2018-11-12 23:23:21 +01:00
Fabio Manganiello
1459630661 Added Plex and Chromecast plugins 2018-11-12 16:50:20 +01:00
Fabio Manganiello
9a88f85cda Expanded config example 2018-11-11 12:17:14 +01:00
Fabio Manganiello
2d8078b8bb Don't propagate the message from MQTT nor wait for a response if the message is null or its handler threw an exception 2018-11-10 01:16:32 +01:00
Fabio Manganiello
cda64865f3 Set the correct mimetype on the /execute endpoint 2018-11-09 23:43:47 +01:00
Fabio Manganiello
fc3f53f32b Retry logic for getting mpd status 2018-11-07 18:04:37 +01:00
Fabio Manganiello
26ec213098 Make sure that the shitty MQTT backend doesn't break for no reason 2018-11-06 11:40:01 +01:00
Fabio Manganiello
cbfcb76c21 volup/voldown fix for mpd plugin 2018-11-04 01:35:33 +01:00
Fabio Manganiello
56b87f3436 Support for default broker server configuration in MQTT plugin 2018-11-02 15:32:12 +00:00
Fabio Manganiello
788a2652c8 Support for TLS/SSL and user authentication on MQTT 2018-11-02 15:15:48 +00:00
Fabio Manganiello
e2ff62f15d Refactored file plugin 2018-11-02 13:57:24 +00:00
Fabio Manganiello
c05fc9ee3f Added logic to propagate events to the websockets backend 2018-11-02 10:14:06 +00:00
Fabio Manganiello
cd3aea5cd6 typo 2018-11-02 00:07:42 +01:00
Fabio Manganiello
f1e1ee92d3 bool compatibility fix 2018-11-02 00:06:39 +01:00
Fabio Manganiello
51440d43fd Propagate SSL flag to the templates 2018-11-02 00:04:49 +01:00
Fabio Manganiello
e571d8ea41 Typo 2018-11-02 00:03:10 +01:00
Fabio Manganiello
a77a9c04b7 Missed SSL flag 2018-11-02 00:02:11 +01:00
Fabio Manganiello
3eed774d50 Added SSL to websockets js code as well 2018-11-02 00:00:10 +01:00
Fabio Manganiello
727b604bb4 Added SSL to HTTP backend websockets as well 2018-11-01 23:57:50 +01:00
Fabio Manganiello
a253e5f49e Removed old line of code 2018-11-01 23:48:25 +01:00
Fabio Manganiello
667d5e8a45 HTTPS support on the web server 2018-11-01 23:43:02 +01:00
Fabio Manganiello
38a8cac9c6 Refactored SSL context logic as utils methods 2018-11-01 23:34:14 +01:00
Fabio Manganiello
bf52304758 Fixed ReadTheDocs 2018-11-01 19:42:43 +01:00
Fabio Manganiello
6bc976cf89 Fixed SSL support in websocket implementation 2018-11-01 17:28:54 +00:00
Fabio Manganiello
484d282a26 Updated wiki 2018-10-28 23:48:26 +01:00
Fabio Manganiello
b365e7d126 Keep-alive logic implemented for websocket backend 2018-10-27 01:09:09 +02:00
Fabio Manganiello
92a3759721 Added websocket backend and plugin 2018-10-26 21:55:49 +02:00
Fabio Manganiello
8635ed8268 Added support for MQTT backend to process responses on a topic named platypush_bus_mq/<device>/responses/<msg_id> 2018-10-26 13:33:23 +00:00
Fabio Manganiello
284e0638f8 Always define msg so the function doesn't fail on exception
Reverted the previous retry logic for backend - it didn't really work

This reverts commit 4e0e4863a0.
This reverts commit 964c7b5cf0.
This reverts commit 6ce348365f.
2018-10-25 20:46:34 +02:00
Fabio Manganiello
4e0e4863a0 Don't modify Redis args directly when initializing the object in another plugin 2018-10-25 20:14:50 +02:00
Fabio Manganiello
964c7b5cf0 Making sure that Redis constructor only initializes the attributes without creating the object and performing a connection 2018-10-25 20:06:29 +02:00
Fabio Manganiello
6ce348365f Refactored backends to be more robust by wrapping the core logic into a try-except logic with sleep and retry 2018-10-25 19:46:13 +02:00
Fabio Manganiello
0a7722d858 Wrap self.on_message in a try/except block 2018-10-23 14:20:29 +00:00
Fabio Manganiello
4c2302a534 Removed title from logging trace in RSS backend 2018-10-23 00:23:47 +02:00
Fabio Manganiello
276ee8fee9 Round download progress to two decimals 2018-10-22 19:14:41 +02:00
Fabio Manganiello
76b40c0c37 Managing torrent stop and remove as well 2018-10-22 19:12:06 +02:00
Fabio Manganiello
ab51c1d1bc Extended torrents plugin 2018-10-22 18:51:00 +02:00
Fabio Manganiello
7375fb74fc OMXPlayer to delegate torrent search and download to the torrent plugin 2018-10-22 18:26:11 +02:00
Fabio Manganiello
ce6baa453c Keeping track of multiple downloads in torrent plugin 2018-10-22 15:24:09 +00:00
Fabio Manganiello
9974583038 Added torrent plugin 2018-10-22 14:52:32 +00:00
Fabio Manganiello
4d592fff17 Support for multiple devices in AutoRemote plugin 2018-10-22 09:36:30 +00:00
Fabio Manganiello
fec684210c Wrapped MPD plugin reload logic to prevent the backend from crashing if the second initialization fails as well 2018-10-21 14:50:58 +02:00
Fabio Manganiello
ae7cd120d2 Wrapped the RSS parsing loop in a try-except block to prevent the backend from continuously crashing if there are encoding issues on the RSS titles 2018-10-21 14:47:52 +02:00
Fabio Manganiello
7adfb67c12 Fixed Kodi plugin 2018-10-20 19:27:15 +02:00
Fabio Manganiello
db4330eeed Support for (output, errors) as a tuple returned from plugin actions 2018-10-20 18:07:00 +02:00
Fabio Manganiello
2dac094aea player_id should be optional in media.kodi.stop 2018-10-20 18:00:53 +02:00
Fabio Manganiello
fc7fa37010 ignore_errors parameter supported in shell plugin 2018-10-20 17:56:36 +02:00
Fabio Manganiello
4fce1dd2e1 More features on the Kodi plugin 2018-10-20 17:17:29 +02:00
Fabio Manganiello
5b5fdd0933 Kodi player plugin improved 2018-10-20 16:59:47 +02:00
Fabio Manganiello
e16b444b0b player_id selection implemented in Kodi 2018-10-20 16:40:12 +02:00
Fabio Manganiello
7490529ca2 Reverted bugged title decode 2018-10-20 14:49:21 +02:00
Fabio Manganiello
2fd7ba003b Decoding title from RSS feeds 2018-10-19 23:48:04 +02:00
Fabio Manganiello
4f3c7f715f Expanded Kodi actions 2018-10-18 16:24:22 +02:00
Fabio Manganiello
b6a4432528 Added Kodi plugin 2018-10-18 16:14:39 +02:00
Fabio Manganiello
3458fb8a23 Added append action to file plugin 2018-10-17 09:02:22 +02:00
Fabio Manganiello
2eccd41420 Message skip message logged in debug mode to prevent log pollution 2018-10-16 10:26:15 +02:00
Fabio Manganiello
4d3d8ddd34 File utils moved to new file plugin 2018-10-16 09:01:22 +02:00
Fabio Manganiello
b14bb44c10 Added utils actions to handle files 2018-10-16 08:49:55 +02:00
Fabio Manganiello
475f6d3f6f Version bump 0.9 -> 0.9.1 2018-10-15 22:12:30 +02:00
Fabio Manganiello
af00ac6c68 Fixed attribute name 2018-10-14 17:36:06 +02:00
Fabio Manganiello
a4e2db184d Added tts.google web plugin 2018-10-14 17:17:19 +02:00
Fabio Manganiello
b6fcdf75f4 Make sure that we set the credential files environment variable 2018-10-14 10:45:25 +02:00
Fabio Manganiello
c640093139 Added Google-based TTS plugin 2018-10-14 10:29:02 +02:00
Fabio Manganiello
db89c39ed8 Made AutoRemote notification text optional 2018-10-12 00:41:23 +02:00
Fabio Manganiello
eab2ba2075 Added send_notification to AutoRemote 2018-10-11 23:35:29 +02:00
Fabio Manganiello
2d7040225c Added AutoRemote plugin 2018-10-11 14:52:28 +00:00
Fabio Manganiello
74d23262b7 Implemented TCP backend 2018-10-11 14:02:29 +00:00
Fabio Manganiello
15b65c4896 Added utils plugin 2018-10-10 01:00:30 +02:00
Fabio Manganiello
68aaf9cd61 Message timestamp refactored 2018-10-08 13:30:00 +00:00
Fabio Manganiello
948f3dc37d Implemented timestamp mark on messages to trigger message expiration logic in case something stays on the bus for longer than a minute 2018-10-08 10:35:59 +00:00
Fabio Manganiello
c10e882dd0 Make decode safe against null values 2018-10-06 23:37:26 +02:00
Fabio Manganiello
8497cd3863 More consistent naming 2018-10-06 23:30:11 +02:00
Fabio Manganiello
0b053bb46d Expanding procedure arguments from context 2018-10-05 09:38:38 +02:00
Fabio Manganiello
1404d59865 Fixed response encoding 2018-10-04 10:22:23 +02:00
Fabio Manganiello
fbce006772 Fixed send_note pushbullet method 2018-10-01 15:06:26 +02:00
Fabio Manganiello
d419419487 Fix for if statements 2018-09-27 02:20:25 +02:00
Fabio Manganiello
570ef6f109 Replaced EventAction with Procedure to allow more flexibility in event hooks and cronjobs 2018-09-27 01:52:35 +02:00
Fabio Manganiello
38fdb8be08 Implemented support for else statements in if(s) 2018-09-27 01:09:00 +02:00
Fabio Manganiello
7ec6221a7f Implemented nested if(s), solves #53 2018-09-26 22:31:27 +02:00
Fabio Manganiello
b88f7fcecc Added play_if_paused_or_stopped method to mpd plugin 2018-09-25 19:40:00 +02:00
Fabio Manganiello
13c1895295 Support for runtime arguments on procedures 2018-09-25 19:20:34 +02:00
Fabio Manganiello
38f61298f8 Support for bulk mpd add 2018-09-25 09:42:46 +02:00
Fabio Manganiello
f79de2e708 Reverted bus post logic for HTTP backend 2018-09-25 00:31:51 +02:00
Fabio Manganiello
88d2fbd366 Response can't be null 2018-09-25 00:26:06 +02:00
Fabio Manganiello
d78e66df7c Don't return status() over video stop, as the process should already be dead and playback status call will fail 2018-09-25 00:19:53 +02:00
Fabio Manganiello
65ec2458d8 MQTT backend should call on_message instead of posting directly to the bus 2018-09-24 23:21:02 +02:00
Fabio Manganiello
d215410a6a More consistent flow for messages received by a backend 2018-09-24 23:13:44 +02:00
Fabio Manganiello
59d84c4fcb - Calling on_message on Redis backend to trigger the right logic
instead of `self.bus.post` directly

- For consistency `mset` now returns back the map of the set variables

- Redis backend enabled on tests
2018-09-24 22:07:13 +02:00
Fabio Manganiello
a4f075a4c1 Added support for ApplicationStartedEvent and ApplicationStoppedEvent 2018-09-24 09:18:46 +00:00
Fabio Manganiello
badb739a8c Increased response queue read timeout to 60 seconds 2018-09-20 13:13:36 +00:00
Fabio Manganiello
44962dd919 Removed timeout from get_plugin lock; Added Redis server to tests configuration 2018-09-20 10:59:18 +00:00
Fabio Manganiello
6449504e26 Switched the bus to a Redis bus 2018-09-20 10:49:57 +00:00
Fabio Manganiello
661563d1f1 Added Redis bus 2018-09-20 09:41:27 +02:00
Fabio Manganiello
6bbae19d39 Lock timeout and reset in case a plugin takes too long to initialize or the lock is incorrectly marked as locked in multiprocess context 2018-09-18 20:25:31 +02:00
Fabio Manganiello
db5d3e6e3f Prevent the plugin from being initialized again within the lock scope if another thread had it initialized in the meantime 2018-09-18 19:19:41 +02:00
Fabio Manganiello
98d24b061a Added joystick backend 2018-09-18 18:58:23 +02:00
Fabio Manganiello
1d50e91b27 Removed unneeded lock acquire 2018-09-16 23:45:25 +02:00
Fabio Manganiello
2ee54b5220 Replaced fadeIn with show to make transitions less CPU heavy on RPi 2018-09-15 18:25:58 +02:00
Fabio Manganiello
5762c51019 Added support for Redis-stored variables in variables plugin 2018-09-06 09:31:31 +02:00
Fabio Manganiello
cccb48c533 Implemented mget and mset actions for Redis plugin 2018-09-06 03:38:10 +02:00
Fabio Manganiello
63890f7670 Return of get_measurement should always be a dict 2018-09-06 03:14:11 +02:00
Fabio Manganiello
5b5e861f94 Implemented distance sensors backend 2018-09-06 03:02:16 +02:00
Fabio Manganiello
5d1fd3a02f Precision parameter added to accelerometer plugin 2018-09-06 02:47:47 +02:00
Fabio Manganiello
98a8874084 Added accelerometer sensor backend 2018-09-06 02:31:01 +02:00
Fabio Manganiello
692d33a071 Added empty __init__.py to lib module 2018-09-06 02:23:54 +02:00
Fabio Manganiello
96157a31bf Return the accelerometer position in degrees between -90 and 90 2018-09-06 02:18:08 +02:00
Fabio Manganiello
b3f20ca0de Added accelerometer sensors plugin 2018-09-06 02:11:41 +02:00
Fabio Manganiello
53ba5f6628 Wrap camera stop and connection close in two distinct try-catch blocks 2018-09-05 15:29:14 +00:00
Fabio Manganiello
5cfbd75250 Prevent RuntimeError on lock release if lock acquisition failed 2018-09-05 02:26:55 +02:00
Fabio Manganiello
3b8c580611 Revert "serial.write should have a blocking wait if the serial port is busy"
This reverts commit 0537d1fcac.
2018-09-05 02:04:10 +02:00
Fabio Manganiello
0537d1fcac serial.write should have a blocking wait if the serial port is busy 2018-09-05 01:59:55 +02:00
Fabio Manganiello
938526d521 Added write action to the serial plugin 2018-09-04 22:54:14 +02:00
Fabio Manganiello
6e867e9fb2 Support for multiple thresholds for the same sensor 2018-08-25 12:29:20 +02:00
Fabio Manganiello
2df9c5a890 Fixed gpio css 2018-08-22 21:01:37 +02:00
Fabio Manganiello
a9b4c1b8bf Fixed gpio ui 2018-08-22 20:22:34 +02:00
Fabio Manganiello
2c369cb86d Added web interface for gpio plugin 2018-08-22 19:50:30 +02:00
Fabio Manganiello
335d3e3cd7 Typo 2018-08-22 19:20:24 +02:00
Fabio Manganiello
ba1eca29fc Reversed pin configuration/mapping as name->number instead of number->name 2018-08-22 19:12:26 +02:00
Fabio Manganiello
133dd4570e Added PIN mappings to gpio plugin, support for read/write by PIN name and read_all method 2018-08-22 19:09:17 +02:00
Fabio Manganiello
a6339de159 Assigning plugins[plugin_name] inside of the synchronized block 2018-08-22 02:32:53 +02:00
Fabio Manganiello
4c6b38a6e2 Double lock check to make get_plugin thread-safe 2018-08-22 02:11:51 +02:00
Fabio Manganiello
105d5bb2fc Lock to prevent race conditions where multiple initializations of a plugin can occur 2018-08-22 02:04:16 +02:00
Fabio Manganiello
e5d67c9393 Being more robust against multiple concurrent plugin initializations with a lock 2018-08-21 09:11:01 +02:00
Fabio Manganiello
09d7d98ae3 Retry logic for Mercury API 2018-08-19 21:52:01 +00:00
Fabio Manganiello
d2bd49b364 Sync changes on playback volume or state with events and web UI 2018-08-18 01:11:14 +02:00
Fabio Manganiello
fc1e15504d Implemented Hue lights toggle command 2018-08-16 19:24:20 +02:00
Fabio Manganiello
f2d077354c Typo fix 2018-08-16 01:26:10 +02:00
Fabio Manganiello
0e2ead6826 Default to configured lights if no lights/groups args are passed to Hue delta actions 2018-08-16 01:23:22 +02:00
Fabio Manganiello
a41e804ff9 Implemented delta_bri, delta_sat and delta_hue methods to change light
properties by deltas (from -100% to +100%)
2018-08-16 01:13:43 +02:00
Fabio Manganiello
822e0a1e25 Better fix for broken async variables and attributes after Python 3.7 migration 2018-08-07 22:00:11 +00:00
Fabio Manganiello
ee5e4dff92 Revert "In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async"
This reverts commit f0577733b6.
2018-08-07 21:52:07 +00:00
Fabio Manganiello
b023618950 Revert "In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async"
This reverts commit e625861edf.
2018-08-07 21:52:02 +00:00
Fabio Manganiello
f0577733b6 In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async 2018-08-07 21:28:06 +00:00
Fabio Manganiello
e625861edf In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async 2018-08-07 21:26:57 +00:00
Fabio Manganiello
bbdf11b9ce Added shuffle method to music.mpd 2018-08-06 22:44:02 +02:00
Fabio Manganiello
ec38ecbaf3 More pylint fixes 2018-07-30 23:18:01 +02:00
Fabio Manganiello
81803a364d Fixed some pylint warnings 2018-07-30 22:08:06 +02:00
Fabio Manganiello
a0ac30e9b6 Version bump 0.8 -> 0.9 2018-07-29 14:35:52 +02:00
Fabio Manganiello
6ebab5de25 Animation thread wrapped in a try-except to prevent the thread from exiting in case of temporary errors 2018-07-28 14:05:19 +02:00
Fabio Manganiello
61e211ee07 Added Kafka plugin 2018-07-28 01:55:19 +02:00
Fabio Manganiello
d0fea0c9c6 All the arguments to send_location_data are actually required 2018-07-25 12:34:16 +00:00
Fabio Manganiello
e4fce17b7b Added elevation parameter to the Adafruit send_location_data method 2018-07-25 12:31:50 +00:00