Commit Graph

1625 Commits

Author SHA1 Message Date
Fabio Manganiello 083c9e250e
[music.mopidy] Better handling of client events.
continuous-integration/drone/push Build is passing Details
2024-04-05 03:40:27 +02:00
Fabio Manganiello 5f6fd4aa54
Added `--db` CLI option and support for configuration over environment.
continuous-integration/drone/push Build is passing Details
Closes: #280
2024-04-05 02:54:45 +02:00
Fabio Manganiello d2ec93b798 [#297] Removed `music.spotify` backend.
1. I no longer I use a Spotify account (I switched to Tidal after
   Spotify deprecated libspotify), and I wouldn't like to create one
   just to test this integration.

2. After a couple of years, the libspotify open fork (Librespot) seems
   to be still in an unstable stage and it's already been discontinued
   once - I would avoid rebuilding the integration against a dependency
   that may change a lot in the near future.
2024-04-04 00:52:30 +00:00
Fabio Manganiello 58518a4d63 Better timeout management on mopidy status refresh. 2024-04-03 23:01:22 +00:00
Fabio Manganiello 5346833152 [WIP] API adaptations for `music.mpd` 2024-04-03 23:01:22 +00:00
Fabio Manganiello 89d618b35f [WIP] `music.mopidy` refactor, initial backend rewrite. 2024-04-03 23:01:22 +00:00
Fabio Manganiello d2e5e5230b [music.mpd] Removed deprecated actions.
- `setvol` ➡️  `set_volume`
- `seekcur` ➡️  `seek`
- `playlistinfo` ➡️  `get_tracks`
- `listplaylists` ➡️  `get_playlists`
- `listplaylist` ➡️  `get_playlist`
- `listplaylistinfo` ➡️  `get_playlist`
- `playlistadd` ➡️  `add_to_playlist`
- `playlistdelete` ➡️  `remove_from_playlist`
- `playlistmove` ➡️  `playlist_move`
- `playlistclear` ➡️  `playlist_clear`
- `rename` ➡️  `rename_playlist`
- `rm` ➡️  `delete_playlist`

stuff
2024-04-03 23:01:22 +00:00
Fabio Manganiello a3b6d411e4 [music.mpd] Adjust default poll_interval: 5 -> 20 seconds. 2024-04-03 23:01:22 +00:00
Fabio Manganiello 2066db463b
[#295] Merged `music.mpd` plugin and backend.
continuous-integration/drone/push Build is passing Details
Closes: #295
2024-03-03 22:37:26 +01:00
Fabio Manganiello 6bdc9e77ee
[#349] Refactored/rewritten `telegram` plugin.
continuous-integration/drone/push Build is passing Details
1. `chat.telegram` -> `telegram` plugin.

2. Merged `backend.chat.telegram` logic into `telegram` plugin.

3. Rewritten the architecture of the integration to adapt to the new
   asyncio API introduced in the latest versions of telegram-bot-api.

Closes: #349
2024-03-03 15:39:47 +01:00
Fabio Manganiello 7637890a54
[irc] Plugin rename/refactor.
The `chat.irc` plugin is now `irc`.
2024-03-03 15:39:47 +01:00
Fabio Manganiello d415d65bff
Removed legacy wiimote plugin
continuous-integration/drone/push Build is passing Details
2024-02-29 00:49:56 +01:00
Fabio Manganiello c7b0440562
[#357] Migrated `backend.button.flic` to `flic` plugin.
continuous-integration/drone/push Build is passing Details
Closes: #357
2024-02-29 00:27:32 +01:00
Fabio Manganiello f1e568d6c8
FIX: Fixed refactored plugin name
continuous-integration/drone/push Build is passing Details
2024-02-28 01:49:52 +01:00
Fabio Manganiello ac9b82236e
Renamed `http.request` plugin as `http`.
continuous-integration/drone/push Build is passing Details
2024-02-28 01:44:04 +01:00
Fabio Manganiello ea4e293338 [#352] Migrated `backend.sensor.leap` to `leap` plugin.
Closes: #352
2024-02-27 22:18:41 +00:00
Fabio Manganiello 07dfc19bf5 Added `nfc.status` action. 2024-02-27 21:39:02 +00:00
Fabio Manganiello dfaa5447ac
[#299] Refactored NFC backend into a runnable plugin. 2024-02-27 00:53:26 +01:00
Fabio Manganiello bbf755eef2
[#299] Refactored NFC backend into a runnable plugin.
continuous-integration/drone/push Build is passing Details
2024-02-27 00:10:15 +01:00
Fabio Manganiello c7c31fb48d
Log the canonical name of plugins when starting them. 2024-02-27 00:02:30 +01:00
Fabio Manganiello e58f5d2fa1
[Camera] The `wait_for_either` barrier should be enabled on streaming by default.
continuous-integration/drone/push Build is passing Details
`camera.pi*` plugins are an exception, as they handle the lifecycle of
the camera streaming process through the `picamera*` libraries.

Otherwise, the streaming thread should explicitly wait on either the
plugin stop or streaming stop events and exit accordingly, or the camera
thread may be streaming indefinitely.
2024-02-26 01:28:25 +01:00
Fabio Manganiello 1c14450781 FIX: Remove `wait_for_either` barrier from the streaming thread.
continuous-integration/drone/push Build is passing Details
The `_accept_client` logic will be executed anyway at the next
iteration, unless the server socket is closed - in that case, the thread
will fail and exit anyway.

The `wait_for_either` barrier in the streaming thread may instead
prevent other connections from being established after the first one is
closed.
2024-02-25 16:02:52 +01:00
Fabio Manganiello 4c92bdd11c
FIX: Handle `stop_streaming` exceptions in the main loop of the camera plugin.
continuous-integration/drone/push Build is passing Details
Otherwise camera process teardown errors may bubble up and prevent the
plugin from restarting the streaming.
2024-02-24 21:36:08 +01:00
Fabio Manganiello 8999a226b1
[WIP] Updated documentation for `camera.pi`.
continuous-integration/drone/push Build is passing Details
2024-02-24 21:16:43 +01:00
Fabio Manganiello e46704010b
[WIP] Rewritten `camera.pi.legacy` plugin.
continuous-integration/drone/push Build is passing Details
2024-02-24 14:07:07 +01:00
Fabio Manganiello 9ad9bd20e4
Added `stream_on_start` argument to `camera` plugins.
continuous-integration/drone/push Build is passing Details
It replaces the functionalities of the deprecated `camera` backends.
2024-02-24 01:31:05 +01:00
Fabio Manganiello 9cf95125a6 [WIP] Added streaming support to camera.pi using new picamera2 API
continuous-integration/drone/push Build is passing Details
2024-02-22 22:52:52 +01:00
Fabio Manganiello 659c33837e [WIP] Using new picamera2 module for camera.pi, and moved old picamera integration to camera.pi.legacy
continuous-integration/drone/push Build is passing Details
2024-02-19 00:07:29 +00:00
Fabio Manganiello c59446fdb1
Fixed setting of `output_file` on `FfmpegWriter`.
continuous-integration/drone/push Build is passing Details
Also, fixed parameters passed to camera
writer objects.
2024-02-17 00:01:47 +01:00
Fabio Manganiello a38ef6bc7a Workaround for possible `multiple camera parameter` error.
continuous-integration/drone/push Build was killed Details
2024-02-15 00:51:04 +00:00
Fabio Manganiello 8f7aad2af7
google-assistant-sdk is no longer a dependency for the Google Assistant integration
continuous-integration/drone/push Build is passing Details
2024-02-06 20:08:57 +01:00
Fabio Manganiello 2b595623b3
[#348] Converted `gps` backend into a plugin.
continuous-integration/drone/push Build is passing Details
Closes: #348
2024-02-05 02:16:02 +01:00
Fabio Manganiello c8944feca4 [#348] Merge + refactor for the `mail` backend/plugin (#362)
continuous-integration/drone/push Build is passing Details
Closes: #348

Reviewed-on: #362
2024-02-03 22:09:40 +01:00
Fabio Manganiello 746423a113 [#356] Merged `adafruit.io` plugin and backend. 2024-01-19 20:58:35 +00:00
Fabio Manganiello eb47f9ded0 [#351] Merged `google.pubsub` plugin and backend.
Closes: #351
2024-01-19 02:14:49 +00:00
Fabio Manganiello 1323156838
Fixed `google.credentials` script order of arguments in the docstring.
continuous-integration/drone/push Build is passing Details
2024-01-19 01:48:33 +01:00
Fabio Manganiello 6775208b2e Fixed minor docstring typo. 2024-01-18 23:31:27 +00:00
Fabio Manganiello f9bd5b3abc [#350] Merge `google.fit` backend and plugin.
Closes: #350.
2024-01-18 23:31:27 +00:00
Fabio Manganiello e3c04d9316 Fixed bullet points indentation in Google plugins docstrings. 2024-01-18 23:31:27 +00:00
Fabio Manganiello e022712b7b [Google] Updated authorization flow for Google plugins.
The new authorization flow also requires the user to input a code
returned on the browser's authorization page.

Since the Google authentication libraries seem to use a simple `input()`
to read this code, things are likely to fail quite badly if Platypush is
run in non-interactive mode - e.g. through a systemd service or in a
Docker container.

Thus we need to go with Google's automatic flow only if `DISPLAY` or
`BROWSER` are set (thus the interactive flow can proceed), and throw an
`AssertionError` with the command to execute if no display/browser are
detected.
2024-01-18 23:31:27 +00:00
Fabio Manganiello 31de917631 [Google] Updated documentation of Google plugins.
Expanded explanation of the desktop vs. headless authentication process
and where the credential files are supposed to be copied if the user
opts for a non-automatic authentication flow.
2024-01-18 23:31:27 +00:00
Fabio Manganiello 998b7be7b8
[media.vlc] Always add `--play-and-exit` to args.
continuous-integration/drone/push Build is passing Details
Without this option VLC seems to hang in the background, and it may
cause PulseAudio failures or memory issues after several videos have
been played - each in its own session.
2024-01-18 21:21:15 +01:00
Fabio Manganiello 95c15f3f5f [#347] Merge `kafka` backend and plugin.
Closes: #347
2024-01-18 01:28:56 +00:00
Fabio Manganiello 1c5956c38b
Fixed some docstring warnings.
continuous-integration/drone/push Build was killed Details
2024-01-18 00:26:22 +01:00
Fabio Manganiello 85db77bb7b
[#298] Merged `nextcloud` backend and plugin.
Closes: #298
2024-01-18 00:26:22 +01:00
Fabio Manganiello dd5bc7639b
Added `disable_monitor` flag to `RunnablePlugin`.
This is useful when users want to use a runnable plugin in a stateless
way. In some cases (for example systems with high latency or limited
quotas for API calls) the user may want to leverage the actions of a
plugin, but without running monitoring/polling logic nor generating
events.
2024-01-18 00:26:22 +01:00
Fabio Manganiello e9d91471ce
[media.mplayer] Plugin rewrite.
continuous-integration/drone/push Build is passing Details
Too many things were falling apart, and many others of MPlayer's "API
smells" had never been addressed.

The plugin has now largely been rewritten, and some workarounds (like
accessory monitoring processes) have been added to deal with the fact
that events like end-of-file aren't published by the player, and some
polling is required.
2024-01-16 00:41:01 +01:00
Fabio Manganiello 6fe1ed44ad
[media] Fixed base interface of `media.seek` and `media.set_position`. 2024-01-13 22:39:33 +01:00
Fabio Manganiello cf314f2615
[mpv] Refactored plugin.
I hadn't paid attention to this plugin in a while and the newest mpv API
has diverged so much that it was entirely incompatible with recent mpv
versions.
2024-01-13 22:36:42 +01:00
Fabio Manganiello 641a2fd135
Renamed parameter of `volup`/`voldown` for music plugins.
To be consistent with all other media plugins, the parameter name should
be `step`, not `delta`.

A back-compatibility layer has however been introduced for plugins
(namely `music.mpd` and `music.spotify`) that already exposed the old
interface.
2024-01-13 22:35:18 +01:00
Fabio Manganiello f0dcb94862
[pushbullet] Fixed `on_error` callback on the listener.
The `Listener` class from the `pushbullet.py` library is a mess, and it
has two internal functions to handle errors.
2024-01-13 13:24:47 +01:00
Fabio Manganiello 9fa5989e21 [#302] Merged `pushbullet` backend and plugin.
Also, added support for more granular Pushbullet events.

Closes: #302
2024-01-09 23:46:07 +00:00
Fabio Manganiello 4505c46071
[Sound] Don't override device index if it's already defined in the info.
continuous-integration/drone/push Build is passing Details
2024-01-08 23:03:08 +01:00
Fabio Manganiello 3d2ee5d6bb
Replaced some new typing `|` notations with `Union`.
continuous-integration/drone/push Build is passing Details
The `|` notation breaks on Python < 3.10.
2024-01-07 00:52:24 +01:00
Fabio Manganiello edd92b8467
Fix: Ensure that components cache keys are ordered before dumping to file.
continuous-integration/drone/push Build is passing Details
Reason: The CI/CD automation regenerates the cache file, and commits
the changes if it differs from the previous version.

The only way to ensure semantic equivalence is to sort the keys upon
dump.
2024-01-06 22:50:34 +01:00
Fabio Manganiello 771ecd9a5b
Fixed typo in the package name of the Github manifest. 2024-01-06 22:41:24 +01:00
Fabio Manganiello 6e1ab92298
New components cache management.
continuous-integration/drone/push Build is passing Details
The cache is no longer generated at runtime when the application runs -
which may take quite a while, especially on fresh installations.

A `components.json.gz` file is instead generated by the CI/CD process on
every commit to the main branch, and distributed with the package.

The application will read this file when the `inspect` plugin is first
initialized.

This also means that we can no longer cache the `install_cmds`, as they
change depending on the target OS. A new
`application.get_install_commands` action has now been made available to
the UI, so it can get the correct installation commands at runtime.
2024-01-06 22:21:59 +01:00
Fabio Manganiello ef885e096f
Added `inspect.get_pkg_managers` internal action.
It will be used by the UI to put together the installation commands.
2024-01-06 03:02:31 +01:00
Fabio Manganiello 8fd5009553
[foursquare] Proper cast to number for db variables which may be strings. 2024-01-05 02:56:10 +01:00
Fabio Manganiello 4aeff10a5d
[#286] Merge Foursquare backend and plugin.
continuous-integration/drone/push Build is passing Details
Closes: #286
2024-01-01 22:54:18 +01:00
Fabio Manganiello 7f13e02803
Fixed docstring 2023-12-31 04:34:42 +01:00
Fabio Manganiello 2701f69d17
[#287] Migrated `github` from a backend to a runnable plugin.
Closes: #287
2023-12-30 16:28:12 +01:00
Fabio Manganiello 171ed7f743
[Entities UI] Better refresh logic.
continuous-integration/drone/push Build is passing Details
2023-12-29 03:45:17 +01:00
Fabio Manganiello 0de322fb95
[assistant.google] Propagate plugin name as a string to events.
continuous-integration/drone/push Build is passing Details
This also makes it easier to programmatically stop conversations on
`SpeechRecognizedEvent` with a matched phrase.
2023-12-21 00:28:27 +01:00
Fabio Manganiello cfc7a5a6a0
[alarm] Added `media_repeat` configuration.
continuous-integration/drone/push Build is failing Details
2023-12-18 13:46:45 +01:00
Fabio Manganiello 52fd64a162
[alarm] Added `dismiss_interval` configuration. 2023-12-18 03:01:27 +01:00
Fabio Manganiello aff02e0732
[alarm] Include `type='alarm'` in `Alarm.to_dict()`.
This is for compatibility with other backend/frontend components who
expect valid entities on events or responses, and hence may break if
`type` is not specified.
2023-12-18 01:13:46 +01:00
Fabio Manganiello e617a9fe82
[alarm] Added `alarm.delete`. 2023-12-18 00:05:34 +01:00
Fabio Manganiello 430a111303
[alarm] Better default actions inference in `alarm.edit`. 2023-12-17 17:53:08 +01:00
Fabio Manganiello 6edb8c8318
[#340] s/datetime.fromisoformat/dateutil.parser.isoparse/
We may receive JavaScript timestamps with non-standard `Z` suffix too.
2023-12-11 22:24:55 +01:00
Fabio Manganiello b4be56ec2c
[#340] Added `condition_type` field to alarm objects. 2023-12-10 21:52:50 +01:00
Fabio Manganiello 03c167d6b7
[#340] Added `Alarm.is_cron` property. 2023-12-10 20:58:13 +01:00
Fabio Manganiello 2d8f6102c1
[#340] Added `alarm.edit` action. 2023-12-10 20:39:06 +01:00
Fabio Manganiello 8ddd9879f2
[#340] Alarm model enhancements.
- Allow initialization of alarm actions from `Procedure` objects too.

- Force `state=WAITING` when an alarm is disabled.
2023-12-10 17:56:47 +01:00
Fabio Manganiello 42574d054a
[#340] Ironed out some bugs in the `alarm` integration.
- The alarm ID should be randomly generated - auto-increment IDs are
  subject to race conditions when alarms are created in separate
  processes.

- Clean up alarms that are not static and have been removed from the db.

- Better alarm shut down detection logic.
2023-12-10 15:30:19 +01:00
Fabio Manganiello f27e7bb7e2
[#340] Better state management for alarms.
- Added `AlarmEnabledEvent` and `AlarmDisabledEvent`.
- Added `snooze_interval` configurable both at plugin level and alarm
  level.
2023-12-09 17:12:20 +01:00
Fabio Manganiello 4b578c38c8
[#340] Better state management for alarms. 2023-12-09 14:25:18 +01:00
Fabio Manganiello 9d5c755188
[#340] Alarm integration improvements.
- Emit `EntityDeleteEvent` when an alarm is expired and removed so
  clients can properly synchronize their state.

- `croniter.get_next()` should be timezone-aware.
2023-12-09 13:33:42 +01:00
Fabio Manganiello fcb6b621ab
[#340] Added persistence of alarm entities. 2023-12-09 01:25:12 +01:00
Fabio Manganiello 5ad1a62293
[#340] Merged `alarm` backend into the `alarm` plugin.
Closes: #340
2023-12-06 19:23:19 +01:00
Fabio Manganiello 2670d40094
Added `get_default_media_plugin` utility. 2023-12-06 01:31:05 +01:00
Fabio Manganiello 680de865c4
Minor docstring fix. 2023-12-04 03:09:02 +01:00
Fabio Manganiello 5823dd0e21
[#292] Converted `backend.log.http` to a runnable plugin.
continuous-integration/drone/push Build is passing Details
Closes: #292
2023-12-04 03:03:21 +01:00
Fabio Manganiello 1843ab224b
[#289] Converted `backend.file.monitor` into a runnable plugin.
Closes: #289
2023-12-04 03:03:20 +01:00
Fabio Manganiello d048752184
[#301] Exposing hosts as entities in the `ping` plugin.
continuous-integration/drone/push Build was killed Details
Closes: #301
2023-12-04 00:36:45 +01:00
Fabio Manganiello 3bb7c02572
[#301] Merged `ping` backend and plugin.
Also, removed `ping` response types.
2023-11-24 02:06:53 +01:00
Fabio Manganiello 71ccffa698
[weather.buienradar] Implemented forecast support. 2023-11-23 01:35:58 +01:00
Fabio Manganiello b969afb1cf
Added support for weather forecast events and entities. 2023-11-23 01:35:58 +01:00
Fabio Manganiello aca71c6bc7 [wallabag] Improved OAuth flow integration.
continuous-integration/drone/push Build is passing Details
If the user provided `username` and `password` in the plugin
configuration, then we should use those credentials to refresh the OAuth
token when expired.
2023-11-22 11:38:00 +01:00
Fabio Manganiello a0d8c522a2
[#308] Finalized `weather` integrations migration.
continuous-integration/drone/push Build was killed Details
- Migrated `weather.buienradar` integration.
- Removed last leftovers of the previous weather backends and responses.

Closes: #308
2023-11-20 03:10:00 +01:00
Fabio Manganiello 2dac98c56e
More rst fixes. 2023-11-20 03:09:59 +01:00
Fabio Manganiello 80be79f5e8
Fixed link format.
continuous-integration/drone/push Build is failing Details
2023-11-20 02:43:18 +01:00
Fabio Manganiello b8a4b9e4c5
Implemented support for weather entities. 2023-11-20 01:46:01 +01:00
Fabio Manganiello b800899859
[#308] Refactored `weather.openweathermap` plugin. 2023-11-19 00:10:10 +01:00
Fabio Manganiello eec2908cc2
Removed DarkSky integration.
The API has gone and it's been merged into Apple Weather.
2023-11-18 21:45:47 +01:00
Fabio Manganiello 674c1036c5
Fixed some plugin usages of `self._bus`.
continuous-integration/drone/push Build is passing Details
Now `_bus` is a common property shared by all the plugins, so it
shouldn't be overloaded.
2023-11-18 16:58:55 +01:00
Fabio Manganiello 869ef38364
Removed explicit `numpy` pip dependency in `assistant.google`.
continuous-integration/drone/push Build is passing Details
It will be installed by the other dependencies anyway.
2023-11-18 16:01:24 +01:00
Fabio Manganiello fdaff32cd0
Fixed docstring for `chromecast.status`.
continuous-integration/drone/push Build is failing Details
2023-11-18 14:17:17 +01:00
Fabio Manganiello 1a777c6276
Removed Todoist backend and migrated responses to schemas.
continuous-integration/drone/push Build is passing Details
The Todoist Websocket interface is no longer working properly, and I'm
sick of reverse engineering it.

Closes: #305
2023-11-18 10:16:48 +01:00
Fabio Manganiello c2f53b7771
Added `_bus` property on `Plugin`. 2023-11-18 10:13:35 +01:00