* Add support for on-demand subtitle search
* Clean up uploadSubtitles and removeSubtitles methods
* Add test for on-demand subtitles
Account is required for on-demand subtitles
* Add hearingImpaired and perfectMatch to SubtitleStream attributes
* Update subtitle score doc string
The score is the OpenSubtitles download count
Ref: https://forums.plex.tv/t/subtitle-search-update-opensubtitles/862746
* Move videoStreams, audioStreams, lyricStreams to Playable
* Add lyricStreams to Playable
* Simplify returning list of streams
* Add test for track.lyricStreams()
* Add sonicallySimilar method to Audio class
closes#1183
* Add type hinting for method
- fixes import error
* Apply review suggestions
Co-Authors @JonnyWong16
* Add optional parameters to sonicallySimilar method
- makes it so that params can be None and use the server default
* add test for `sonicallySimilar`
* Refactor test to check type of elements
* Apply suggestions
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Add authentication to sonicallySimilar test in
test_audio.py
* fix flake8
---------
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Add support for 'group' and 'having' keys in
SmartFilterMixin
- fixes#1285
* Add `group` and `having` fields to `additionalFields` list in `FilteringType` class
- This should allow passing the parsed filters back into `search()`.
Co-Authored-By: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
---------
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Fix minor typo
* Update algorithm for parsing #1274
* Match style guide of the module
* Fix Edge Cases
- `and` is now considered the default operation instead of raising error
- fix algorithm so that the reserved keys are parsed in the filters dictionary instead of filters group when located later in the feed.
- removed some code repetition
* Join multiple filters by default
If multiple filter groups are parsed they are joined by `and` instead of raising error.
* fix `==` operator parsing
transfers "=" from the value to key
* fix typehinting
* Add new test for smart Filters
this test would fail on old algorithm despite it being logically the exact same filter.
* add test for deeply nested filters
* combine filters test for playlist
* combine filters test for collections
* fix typo
* add test to check parsed fitlers as it is
* edited test to be independent of the server
* Apply suggestions from code review
adhere to style guide of the project
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
---------
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Replace datetime.utcfromtimestamp
* Update plexapi/utils.py
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Default using `fromtimestamp` and fallback to using `timedelta` from 0
---------
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Change Episode parent* attributes to cached_property
* This is to avoid the problems with auto-reloading when Episode objects are built with seasons hidden.
* Change Episode.seasonNumber to cached_property
* Update isLatest()
Use the canInstall attribute to determine if the release is the latest build.
* use of utils.cast
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
---------
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Fallback PlexServer _timeout to TIMEOUT
* Fallback PlexServer query timeout to self._timeout
* Refactor MyPlexAccount, PlexClient query() to use timeout from constructor
* Add property to return the Plex Media Server data metadata path
* Add property to return the filepath for a resource
* Add tests for metadataDirectory and resourceFilepath