plex_ruby_sdk 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/plex_ruby_sdk/models/operations/flattenseasons.rb +1 -0
- data/lib/plex_ruby_sdk/models/operations/get_actors_library_mediacontainer.rb +6 -6
- data/lib/plex_ruby_sdk/models/operations/get_library_items_collection.rb +3 -3
- data/lib/plex_ruby_sdk/models/operations/get_library_items_country.rb +10 -4
- data/lib/plex_ruby_sdk/models/operations/get_library_items_director.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/get_library_items_filter.rb +2 -6
- data/lib/plex_ruby_sdk/models/operations/get_library_items_genre.rb +13 -6
- data/lib/plex_ruby_sdk/models/operations/{mediaguid.rb → get_library_items_guids.rb} +2 -3
- data/lib/plex_ruby_sdk/models/operations/get_library_items_hasthumbnail.rb +2 -1
- data/lib/plex_ruby_sdk/models/operations/get_library_items_image.rb +2 -2
- data/lib/plex_ruby_sdk/models/operations/{get_search_all_libraries_collection.rb → get_library_items_library_optimizedforstreaming.rb} +5 -9
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_response_type.rb +6 -41
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_type.rb +42 -14
- data/lib/plex_ruby_sdk/models/operations/get_library_items_location.rb +3 -3
- data/lib/plex_ruby_sdk/models/operations/get_library_items_media.rb +32 -25
- data/lib/plex_ruby_sdk/models/operations/get_library_items_mediacontainer.rb +39 -48
- data/lib/plex_ruby_sdk/models/operations/get_library_items_meta.rb +3 -3
- data/lib/plex_ruby_sdk/models/operations/get_library_items_metadata.rb +146 -141
- data/lib/plex_ruby_sdk/models/operations/get_library_items_optimizedforstreaming.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/{get_library_items_library_response_200_type.rb → get_library_items_optimizedforstreaming_1.rb} +3 -5
- data/lib/plex_ruby_sdk/models/operations/get_library_items_part.rb +36 -28
- data/lib/plex_ruby_sdk/models/operations/get_library_items_producer.rb +53 -0
- data/lib/plex_ruby_sdk/models/operations/get_library_items_role.rb +12 -18
- data/lib/plex_ruby_sdk/models/operations/get_library_items_similar.rb +41 -0
- data/lib/plex_ruby_sdk/models/operations/get_library_items_type.rb +14 -46
- data/lib/plex_ruby_sdk/models/operations/get_library_items_writer.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_media.rb +2 -2
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_mediacontainer.rb +10 -10
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_metadata.rb +6 -6
- data/lib/plex_ruby_sdk/models/operations/{streamtype.rb → get_library_sections_all_optimizedforstreaming_library_1.rb} +4 -9
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_part.rb +2 -2
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_stream.rb +5 -5
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_attributes.rb +37 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_chapter.rb +53 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_extras.rb +33 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_hasthumbnail.rb +1 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_library_optimizedforstreaming.rb +1 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_marker.rb +53 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_media.rb +5 -3
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_mediacontainer.rb +10 -10
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_metadata.rb +22 -22
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_part.rb +16 -15
- data/lib/plex_ruby_sdk/models/operations/{metadatarating.rb → get_media_meta_data_ratings.rb} +3 -3
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_stream.rb +18 -18
- data/lib/plex_ruby_sdk/models/operations/get_recently_added_metadata.rb +18 -18
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_country.rb +10 -4
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_director.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_directory.rb +81 -0
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_flattenseasons.rb +1 -0
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_genre.rb +13 -6
- data/lib/plex_ruby_sdk/models/operations/{get_search_all_libraries_mediaguid.rb → get_search_all_libraries_guids.rb} +2 -3
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_hasthumbnail.rb +2 -1
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_library_optimizedforstreaming.rb +29 -0
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_location.rb +3 -3
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_media.rb +32 -25
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_mediacontainer.rb +32 -4
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_metadata.rb +128 -147
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_optimizedforstreaming.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_optimizedforstreaming_1.rb +20 -0
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_optimizedforstreaming_library_1.rb +20 -0
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_part.rb +36 -28
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_role.rb +12 -18
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_showordering.rb +6 -5
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_writer.rb +12 -4
- data/lib/plex_ruby_sdk/models/operations/searchresult.rb +10 -6
- data/lib/plex_ruby_sdk/models/operations/showordering.rb +6 -5
- data/lib/plex_ruby_sdk/models/operations/stream.rb +5 -5
- data/lib/plex_ruby_sdk/models/operations.rb +18 -24
- data/lib/plex_ruby_sdk/sdkconfiguration.rb +3 -3
- metadata +18 -24
- data/lib/plex_ruby_sdk/models/operations/enablecreditsmarkergeneration.rb +0 -20
- data/lib/plex_ruby_sdk/models/operations/episodesort.rb +0 -21
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_activedirection.rb +0 -21
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_defaultdirection.rb +0 -21
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_field.rb +0 -45
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_fieldtype.rb +0 -37
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_filter.rb +0 -49
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_operator.rb +0 -37
- data/lib/plex_ruby_sdk/models/operations/get_library_items_library_sort.rb +0 -63
- data/lib/plex_ruby_sdk/models/operations/get_library_items_stream.rb +0 -181
- data/lib/plex_ruby_sdk/models/operations/get_library_sections_all_streamtype.rb +0 -25
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_streamtype.rb +0 -25
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_enablecreditsmarkergeneration.rb +0 -20
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_episodesort.rb +0 -21
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_metadatarating.rb +0 -41
- data/lib/plex_ruby_sdk/models/operations/get_search_all_libraries_stream.rb +0 -181
@@ -8,199 +8,210 @@ module PlexRubySDK
|
|
8
8
|
module Models
|
9
9
|
module Operations
|
10
10
|
|
11
|
-
|
11
|
+
# Unknown
|
12
|
+
#
|
12
13
|
class GetLibraryItemsMetadata
|
13
14
|
extend T::Sig
|
14
15
|
include Crystalline::MetadataFields
|
15
16
|
|
16
|
-
# Unix epoch datetime in seconds
|
17
|
-
field :added_at, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('addedAt') } }
|
18
17
|
|
18
|
+
field :added_at, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('addedAt') } }
|
19
|
+
# The art image URL for the media item.
|
20
|
+
field :art, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('art') } }
|
21
|
+
# The audience rating for the media item.
|
22
|
+
field :audience_rating, ::Float, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRating') } }
|
23
|
+
# The banner image URL for the media item.
|
24
|
+
field :banner, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('banner') } }
|
25
|
+
# The number of child items associated with this media item.
|
26
|
+
field :child_count, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('childCount') } }
|
27
|
+
# The duration of the media item in milliseconds.
|
28
|
+
field :duration, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('duration') } }
|
29
|
+
# The globally unique identifier for the media item.
|
19
30
|
field :guid, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('guid') } }
|
20
|
-
|
31
|
+
# The index position of the media item.
|
32
|
+
field :index, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('index') } }
|
33
|
+
# The unique key for the media item.
|
21
34
|
field :key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('key') } }
|
22
|
-
# The rating
|
23
|
-
|
24
|
-
#
|
35
|
+
# The critic rating for the media item.
|
36
|
+
field :rating, ::Float, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('rating') } }
|
37
|
+
# The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API.
|
25
38
|
field :rating_key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('ratingKey') } }
|
26
|
-
|
39
|
+
# The total number of seasons (for TV shows).
|
40
|
+
field :season_count, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('seasonCount') } }
|
41
|
+
# A URL‐friendly version of the media title.
|
42
|
+
field :slug, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('slug') } }
|
43
|
+
# A synopsis of the media item.
|
27
44
|
field :summary, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('summary') } }
|
28
|
-
|
45
|
+
# A brief tagline for the media item.
|
46
|
+
field :tagline, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('tagline') } }
|
47
|
+
# The theme URL for the media item.
|
48
|
+
field :theme, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('theme') } }
|
49
|
+
# The thumbnail image URL for the media item.
|
50
|
+
field :thumb, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('thumb') } }
|
51
|
+
# The title of the media item.
|
29
52
|
field :title, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('title') } }
|
30
|
-
# The
|
31
|
-
|
32
|
-
field :type, Models::Operations::GetLibraryItemsLibraryType, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('type'), 'decoder': Utils.enum_from_string(Models::Operations::GetLibraryItemsLibraryType, false) } }
|
33
|
-
|
34
|
-
field :art, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('art') } }
|
35
|
-
|
36
|
-
field :audience_rating, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRating') } }
|
53
|
+
# The sort title used for ordering media items.
|
54
|
+
field :title_sort, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('titleSort') } }
|
37
55
|
|
56
|
+
field :type, Models::Operations::GetLibraryItemsType, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('type'), 'decoder': Utils.enum_from_string(Models::Operations::GetLibraryItemsType, false) } }
|
57
|
+
# The URL for the audience rating image.
|
38
58
|
field :audience_rating_image, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRatingImage') } }
|
39
59
|
|
40
|
-
field :
|
41
|
-
|
60
|
+
field :chapter, T.nilable(T::Array[Models::Operations::Chapter]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Chapter') } }
|
61
|
+
# The source from which chapter data is derived.
|
42
62
|
field :chapter_source, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('chapterSource') } }
|
43
63
|
|
44
|
-
field :child_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('childCount') } }
|
45
|
-
|
46
64
|
field :collection, T.nilable(T::Array[Models::Operations::GetLibraryItemsCollection]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Collection') } }
|
47
|
-
|
65
|
+
# The content rating for the media item.
|
48
66
|
field :content_rating, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('contentRating') } }
|
49
67
|
|
50
68
|
field :country, T.nilable(T::Array[Models::Operations::GetLibraryItemsCountry]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Country') } }
|
69
|
+
# The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available).
|
70
|
+
field :created_at_accuracy, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('createdAtAccuracy') } }
|
71
|
+
# The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
|
72
|
+
field :created_at_tz_offset, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('createdAtTZOffset') } }
|
51
73
|
|
52
74
|
field :director, T.nilable(T::Array[Models::Operations::GetLibraryItemsDirector]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Director') } }
|
53
75
|
|
54
|
-
field :
|
55
|
-
# Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
56
|
-
field :enable_credits_marker_generation, T.nilable(Models::Operations::EnableCreditsMarkerGeneration), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('enableCreditsMarkerGeneration'), 'decoder': Utils.enum_from_string(Models::Operations::EnableCreditsMarkerGeneration, true) } }
|
57
|
-
# Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
58
|
-
field :episode_sort, T.nilable(Models::Operations::EpisodeSort), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('episodeSort'), 'decoder': Utils.enum_from_string(Models::Operations::EpisodeSort, true) } }
|
76
|
+
field :extras, T.nilable(Models::Operations::Extras), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Extras') } }
|
59
77
|
# Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
78
|
+
#
|
60
79
|
field :flatten_seasons, T.nilable(Models::Operations::FlattenSeasons), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('flattenSeasons'), 'decoder': Utils.enum_from_string(Models::Operations::FlattenSeasons, true) } }
|
61
80
|
|
62
81
|
field :genre, T.nilable(T::Array[Models::Operations::GetLibraryItemsGenre]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Genre') } }
|
63
|
-
|
82
|
+
# The art URL for the grandparent media item.
|
64
83
|
field :grandparent_art, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentArt') } }
|
65
|
-
|
84
|
+
# The GUID of the grandparent media item.
|
66
85
|
field :grandparent_guid, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentGuid') } }
|
67
|
-
|
86
|
+
# The key of the grandparent media item.
|
68
87
|
field :grandparent_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentKey') } }
|
69
|
-
|
88
|
+
# The rating key of the grandparent media item.
|
70
89
|
field :grandparent_rating_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentRatingKey') } }
|
71
|
-
|
90
|
+
# The slug for the grandparent media item.
|
72
91
|
field :grandparent_slug, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentSlug') } }
|
73
|
-
|
92
|
+
# The theme URL for the grandparent media item.
|
74
93
|
field :grandparent_theme, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentTheme') } }
|
75
|
-
|
94
|
+
# The thumbnail URL for the grandparent media item.
|
76
95
|
field :grandparent_thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentThumb') } }
|
77
|
-
|
96
|
+
# The title of the grandparent media item.
|
78
97
|
field :grandparent_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentTitle') } }
|
79
98
|
|
80
|
-
field :
|
81
|
-
|
82
|
-
field :has_premium_primary_extra, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('hasPremiumPrimaryExtra') } }
|
99
|
+
field :guids, T.nilable(T::Array[Models::Operations::GetLibraryItemsGuids]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Guid') } }
|
83
100
|
|
84
101
|
field :image, T.nilable(T::Array[Models::Operations::GetLibraryItemsImage]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Image') } }
|
85
|
-
|
86
|
-
field :
|
87
|
-
|
102
|
+
# The Unix timestamp representing the last time the item was rated.
|
103
|
+
field :last_rated_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('lastRatedAt') } }
|
104
|
+
# Unix timestamp for when the media item was last viewed.
|
88
105
|
field :last_viewed_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('lastViewedAt') } }
|
89
|
-
|
106
|
+
# The number of leaf items (end nodes) under this media item.
|
90
107
|
field :leaf_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('leafCount') } }
|
91
|
-
|
108
|
+
# The identifier for the library section.
|
92
109
|
field :library_section_id, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionID') } }
|
93
|
-
|
110
|
+
# The key corresponding to the library section.
|
94
111
|
field :library_section_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionKey') } }
|
95
|
-
|
112
|
+
# The title of the library section.
|
96
113
|
field :library_section_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionTitle') } }
|
97
114
|
|
98
115
|
field :location, T.nilable(T::Array[Models::Operations::GetLibraryItemsLocation]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Location') } }
|
99
|
-
# The Media object is only included when type query is `4` or higher.
|
100
|
-
#
|
101
|
-
field :media, T.nilable(T::Array[Models::Operations::GetLibraryItemsMedia]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Media') } }
|
102
|
-
# The Guid object is only included in the response if the `includeGuids` parameter is set to `1`.
|
103
|
-
#
|
104
|
-
field :media_guid, T.nilable(T::Array[Models::Operations::MediaGuid]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Guid') } }
|
105
116
|
|
106
|
-
field :
|
117
|
+
field :marker, T.nilable(T::Array[Models::Operations::Marker]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Marker') } }
|
107
118
|
|
119
|
+
field :media, T.nilable(T::Array[Models::Operations::GetLibraryItemsMedia]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Media') } }
|
120
|
+
# The original release date of the media item.
|
108
121
|
field :originally_available_at, T.nilable(::Date), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('originallyAvailableAt'), 'decoder': Utils.date_from_iso_format(true) } }
|
109
|
-
|
122
|
+
# The original title of the media item (if different).
|
110
123
|
field :original_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('originalTitle') } }
|
111
|
-
|
124
|
+
# The GUID of the parent media item.
|
112
125
|
field :parent_guid, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentGuid') } }
|
113
|
-
|
126
|
+
# The index position of the parent media item.
|
114
127
|
field :parent_index, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentIndex') } }
|
115
|
-
|
128
|
+
# The key of the parent media item.
|
116
129
|
field :parent_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentKey') } }
|
117
|
-
# The rating key of the parent item.
|
118
|
-
#
|
130
|
+
# The rating key of the parent media item.
|
119
131
|
field :parent_rating_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentRatingKey') } }
|
120
|
-
|
121
|
-
field :parent_slug, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentSlug') } }
|
122
|
-
|
123
|
-
field :parent_studio, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentStudio') } }
|
124
|
-
|
125
|
-
field :parent_theme, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentTheme') } }
|
126
|
-
|
132
|
+
# The thumbnail URL for the parent media item.
|
127
133
|
field :parent_thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentThumb') } }
|
128
|
-
|
134
|
+
# The title of the parent media item.
|
129
135
|
field :parent_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentTitle') } }
|
130
|
-
|
131
|
-
field :parent_year, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentYear') } }
|
132
|
-
|
136
|
+
# The primary extra key associated with this media item.
|
133
137
|
field :primary_extra_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('primaryExtraKey') } }
|
134
138
|
|
135
|
-
field :
|
136
|
-
|
139
|
+
field :producer, T.nilable(T::Array[Models::Operations::GetLibraryItemsProducer]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Producer') } }
|
140
|
+
# The URL for the rating image.
|
137
141
|
field :rating_image, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('ratingImage') } }
|
138
142
|
|
139
|
-
field :
|
143
|
+
field :ratings, T.nilable(T::Array[Models::Operations::Ratings]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Rating') } }
|
140
144
|
|
141
|
-
field :
|
145
|
+
field :role, T.nilable(T::Array[Models::Operations::GetLibraryItemsRole]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Role') } }
|
142
146
|
# Setting that indicates the episode ordering for the show.
|
143
|
-
#
|
144
|
-
#
|
145
|
-
#
|
146
|
-
#
|
147
|
-
#
|
147
|
+
# Options:
|
148
|
+
# - None = Library default
|
149
|
+
# - tmdbAiring = The Movie Database (Aired)
|
150
|
+
# - aired = TheTVDB (Aired)
|
151
|
+
# - dvd = TheTVDB (DVD)
|
152
|
+
# - absolute = TheTVDB (Absolute)
|
148
153
|
#
|
149
154
|
field :show_ordering, T.nilable(Models::Operations::ShowOrdering), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('showOrdering'), 'decoder': Utils.enum_from_string(Models::Operations::ShowOrdering, true) } }
|
150
155
|
|
156
|
+
field :similar, T.nilable(T::Array[Models::Operations::GetLibraryItemsSimilar]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Similar') } }
|
157
|
+
# Indicates whether child items should be skipped.
|
151
158
|
field :skip_children, T.nilable(T::Boolean), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('skipChildren') } }
|
152
|
-
|
159
|
+
# The number of times this media item has been skipped.
|
153
160
|
field :skip_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('skipCount') } }
|
154
|
-
|
155
|
-
field :slug, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('slug') } }
|
156
|
-
|
161
|
+
# The studio that produced the media item.
|
157
162
|
field :studio, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('studio') } }
|
158
|
-
|
159
|
-
field :
|
160
|
-
|
161
|
-
field :theme, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('theme') } }
|
162
|
-
|
163
|
-
field :thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('thumb') } }
|
164
|
-
|
165
|
-
field :title_sort, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('titleSort') } }
|
163
|
+
# A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
|
164
|
+
field :subtype, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('subtype') } }
|
166
165
|
|
167
166
|
field :ultra_blur_colors, T.nilable(Models::Operations::GetLibraryItemsUltraBlurColors), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('UltraBlurColors') } }
|
168
167
|
# Unix epoch datetime in seconds
|
169
168
|
field :updated_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('updatedAt') } }
|
170
|
-
|
169
|
+
# The rating provided by a user for the item. This value is expressed as a decimal number.
|
170
|
+
field :user_rating, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('userRating') } }
|
171
|
+
# The number of times this media item has been viewed.
|
171
172
|
field :view_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewCount') } }
|
172
|
-
|
173
|
+
# The number of leaf items that have been viewed.
|
173
174
|
field :viewed_leaf_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewedLeafCount') } }
|
174
|
-
|
175
|
+
# The current playback offset (in milliseconds).
|
175
176
|
field :view_offset, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewOffset') } }
|
176
177
|
|
177
178
|
field :writer, T.nilable(T::Array[Models::Operations::GetLibraryItemsWriter]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Writer') } }
|
178
|
-
|
179
|
+
# The release year of the media item.
|
179
180
|
field :year, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('year') } }
|
180
181
|
|
181
182
|
|
182
|
-
sig { params(added_at: ::Integer, guid: ::String, key: ::String, rating_key: ::String, summary: ::String,
|
183
|
-
def initialize(added_at: nil,
|
183
|
+
sig { params(added_at: ::Integer, art: ::String, audience_rating: ::Float, banner: ::String, child_count: ::Integer, duration: ::Integer, guid: ::String, index: ::Integer, key: ::String, rating: ::Float, rating_key: ::String, season_count: ::Integer, slug: ::String, summary: ::String, tagline: ::String, theme: ::String, thumb: ::String, title: ::String, title_sort: ::String, type: Models::Operations::GetLibraryItemsType, audience_rating_image: T.nilable(::String), chapter: T.nilable(T::Array[Models::Operations::Chapter]), chapter_source: T.nilable(::String), collection: T.nilable(T::Array[Models::Operations::GetLibraryItemsCollection]), content_rating: T.nilable(::String), country: T.nilable(T::Array[Models::Operations::GetLibraryItemsCountry]), created_at_accuracy: T.nilable(::String), created_at_tz_offset: T.nilable(::String), director: T.nilable(T::Array[Models::Operations::GetLibraryItemsDirector]), extras: T.nilable(Models::Operations::Extras), flatten_seasons: T.nilable(Models::Operations::FlattenSeasons), genre: T.nilable(T::Array[Models::Operations::GetLibraryItemsGenre]), grandparent_art: T.nilable(::String), grandparent_guid: T.nilable(::String), grandparent_key: T.nilable(::String), grandparent_rating_key: T.nilable(::String), grandparent_slug: T.nilable(::String), grandparent_theme: T.nilable(::String), grandparent_thumb: T.nilable(::String), grandparent_title: T.nilable(::String), guids: T.nilable(T::Array[Models::Operations::GetLibraryItemsGuids]), image: T.nilable(T::Array[Models::Operations::GetLibraryItemsImage]), last_rated_at: T.nilable(::Integer), last_viewed_at: T.nilable(::Integer), leaf_count: T.nilable(::Integer), library_section_id: T.nilable(::Integer), library_section_key: T.nilable(::String), library_section_title: T.nilable(::String), location: T.nilable(T::Array[Models::Operations::GetLibraryItemsLocation]), marker: T.nilable(T::Array[Models::Operations::Marker]), media: T.nilable(T::Array[Models::Operations::GetLibraryItemsMedia]), originally_available_at: T.nilable(::Date), original_title: T.nilable(::String), parent_guid: T.nilable(::String), parent_index: T.nilable(::Integer), parent_key: T.nilable(::String), parent_rating_key: T.nilable(::String), parent_thumb: T.nilable(::String), parent_title: T.nilable(::String), primary_extra_key: T.nilable(::String), producer: T.nilable(T::Array[Models::Operations::GetLibraryItemsProducer]), rating_image: T.nilable(::String), ratings: T.nilable(T::Array[Models::Operations::Ratings]), role: T.nilable(T::Array[Models::Operations::GetLibraryItemsRole]), show_ordering: T.nilable(Models::Operations::ShowOrdering), similar: T.nilable(T::Array[Models::Operations::GetLibraryItemsSimilar]), skip_children: T.nilable(T::Boolean), skip_count: T.nilable(::Integer), studio: T.nilable(::String), subtype: T.nilable(::String), ultra_blur_colors: T.nilable(Models::Operations::GetLibraryItemsUltraBlurColors), updated_at: T.nilable(::Integer), user_rating: T.nilable(::Float), view_count: T.nilable(::Integer), viewed_leaf_count: T.nilable(::Integer), view_offset: T.nilable(::Integer), writer: T.nilable(T::Array[Models::Operations::GetLibraryItemsWriter]), year: T.nilable(::Integer)).void }
|
184
|
+
def initialize(added_at: nil, art: nil, audience_rating: nil, banner: nil, child_count: nil, duration: nil, guid: nil, index: nil, key: nil, rating: nil, rating_key: nil, season_count: nil, slug: nil, summary: nil, tagline: nil, theme: nil, thumb: nil, title: nil, title_sort: nil, type: nil, audience_rating_image: nil, chapter: nil, chapter_source: nil, collection: nil, content_rating: nil, country: nil, created_at_accuracy: nil, created_at_tz_offset: nil, director: nil, extras: nil, flatten_seasons: nil, genre: nil, grandparent_art: nil, grandparent_guid: nil, grandparent_key: nil, grandparent_rating_key: nil, grandparent_slug: nil, grandparent_theme: nil, grandparent_thumb: nil, grandparent_title: nil, guids: nil, image: nil, last_rated_at: nil, last_viewed_at: nil, leaf_count: nil, library_section_id: nil, library_section_key: nil, library_section_title: nil, location: nil, marker: nil, media: nil, originally_available_at: nil, original_title: nil, parent_guid: nil, parent_index: nil, parent_key: nil, parent_rating_key: nil, parent_thumb: nil, parent_title: nil, primary_extra_key: nil, producer: nil, rating_image: nil, ratings: nil, role: nil, show_ordering: nil, similar: nil, skip_children: nil, skip_count: nil, studio: nil, subtype: nil, ultra_blur_colors: nil, updated_at: nil, user_rating: nil, view_count: nil, viewed_leaf_count: nil, view_offset: nil, writer: nil, year: nil)
|
184
185
|
@added_at = added_at
|
186
|
+
@art = art
|
187
|
+
@audience_rating = audience_rating
|
188
|
+
@banner = banner
|
189
|
+
@child_count = child_count
|
190
|
+
@duration = duration
|
185
191
|
@guid = guid
|
192
|
+
@index = index
|
186
193
|
@key = key
|
194
|
+
@rating = rating
|
187
195
|
@rating_key = rating_key
|
196
|
+
@season_count = season_count
|
197
|
+
@slug = slug
|
188
198
|
@summary = summary
|
199
|
+
@tagline = tagline
|
200
|
+
@theme = theme
|
201
|
+
@thumb = thumb
|
189
202
|
@title = title
|
203
|
+
@title_sort = title_sort
|
190
204
|
@type = type
|
191
|
-
@art = art
|
192
|
-
@audience_rating = audience_rating
|
193
205
|
@audience_rating_image = audience_rating_image
|
194
|
-
@
|
206
|
+
@chapter = chapter
|
195
207
|
@chapter_source = chapter_source
|
196
|
-
@child_count = child_count
|
197
208
|
@collection = collection
|
198
209
|
@content_rating = content_rating
|
199
210
|
@country = country
|
211
|
+
@created_at_accuracy = created_at_accuracy
|
212
|
+
@created_at_tz_offset = created_at_tz_offset
|
200
213
|
@director = director
|
201
|
-
@
|
202
|
-
@enable_credits_marker_generation = enable_credits_marker_generation
|
203
|
-
@episode_sort = episode_sort
|
214
|
+
@extras = extras
|
204
215
|
@flatten_seasons = flatten_seasons
|
205
216
|
@genre = genre
|
206
217
|
@grandparent_art = grandparent_art
|
@@ -211,47 +222,39 @@ module PlexRubySDK
|
|
211
222
|
@grandparent_theme = grandparent_theme
|
212
223
|
@grandparent_thumb = grandparent_thumb
|
213
224
|
@grandparent_title = grandparent_title
|
214
|
-
@
|
215
|
-
@has_premium_primary_extra = has_premium_primary_extra
|
225
|
+
@guids = guids
|
216
226
|
@image = image
|
217
|
-
@
|
227
|
+
@last_rated_at = last_rated_at
|
218
228
|
@last_viewed_at = last_viewed_at
|
219
229
|
@leaf_count = leaf_count
|
220
230
|
@library_section_id = library_section_id
|
221
231
|
@library_section_key = library_section_key
|
222
232
|
@library_section_title = library_section_title
|
223
233
|
@location = location
|
234
|
+
@marker = marker
|
224
235
|
@media = media
|
225
|
-
@media_guid = media_guid
|
226
|
-
@meta_data_rating = meta_data_rating
|
227
236
|
@originally_available_at = originally_available_at
|
228
237
|
@original_title = original_title
|
229
238
|
@parent_guid = parent_guid
|
230
239
|
@parent_index = parent_index
|
231
240
|
@parent_key = parent_key
|
232
241
|
@parent_rating_key = parent_rating_key
|
233
|
-
@parent_slug = parent_slug
|
234
|
-
@parent_studio = parent_studio
|
235
|
-
@parent_theme = parent_theme
|
236
242
|
@parent_thumb = parent_thumb
|
237
243
|
@parent_title = parent_title
|
238
|
-
@parent_year = parent_year
|
239
244
|
@primary_extra_key = primary_extra_key
|
240
|
-
@
|
245
|
+
@producer = producer
|
241
246
|
@rating_image = rating_image
|
247
|
+
@ratings = ratings
|
242
248
|
@role = role
|
243
|
-
@season_count = season_count
|
244
249
|
@show_ordering = show_ordering
|
250
|
+
@similar = similar
|
245
251
|
@skip_children = skip_children
|
246
252
|
@skip_count = skip_count
|
247
|
-
@slug = slug
|
248
253
|
@studio = studio
|
249
|
-
@
|
250
|
-
@theme = theme
|
251
|
-
@thumb = thumb
|
252
|
-
@title_sort = title_sort
|
254
|
+
@subtype = subtype
|
253
255
|
@ultra_blur_colors = ultra_blur_colors
|
254
256
|
@updated_at = updated_at
|
257
|
+
@user_rating = user_rating
|
255
258
|
@view_count = view_count
|
256
259
|
@viewed_leaf_count = viewed_leaf_count
|
257
260
|
@view_offset = view_offset
|
@@ -262,25 +265,35 @@ module PlexRubySDK
|
|
262
265
|
def ==(other)
|
263
266
|
return false unless other.is_a? self.class
|
264
267
|
return false unless @added_at == other.added_at
|
268
|
+
return false unless @art == other.art
|
269
|
+
return false unless @audience_rating == other.audience_rating
|
270
|
+
return false unless @banner == other.banner
|
271
|
+
return false unless @child_count == other.child_count
|
272
|
+
return false unless @duration == other.duration
|
265
273
|
return false unless @guid == other.guid
|
274
|
+
return false unless @index == other.index
|
266
275
|
return false unless @key == other.key
|
276
|
+
return false unless @rating == other.rating
|
267
277
|
return false unless @rating_key == other.rating_key
|
278
|
+
return false unless @season_count == other.season_count
|
279
|
+
return false unless @slug == other.slug
|
268
280
|
return false unless @summary == other.summary
|
281
|
+
return false unless @tagline == other.tagline
|
282
|
+
return false unless @theme == other.theme
|
283
|
+
return false unless @thumb == other.thumb
|
269
284
|
return false unless @title == other.title
|
285
|
+
return false unless @title_sort == other.title_sort
|
270
286
|
return false unless @type == other.type
|
271
|
-
return false unless @art == other.art
|
272
|
-
return false unless @audience_rating == other.audience_rating
|
273
287
|
return false unless @audience_rating_image == other.audience_rating_image
|
274
|
-
return false unless @
|
288
|
+
return false unless @chapter == other.chapter
|
275
289
|
return false unless @chapter_source == other.chapter_source
|
276
|
-
return false unless @child_count == other.child_count
|
277
290
|
return false unless @collection == other.collection
|
278
291
|
return false unless @content_rating == other.content_rating
|
279
292
|
return false unless @country == other.country
|
293
|
+
return false unless @created_at_accuracy == other.created_at_accuracy
|
294
|
+
return false unless @created_at_tz_offset == other.created_at_tz_offset
|
280
295
|
return false unless @director == other.director
|
281
|
-
return false unless @
|
282
|
-
return false unless @enable_credits_marker_generation == other.enable_credits_marker_generation
|
283
|
-
return false unless @episode_sort == other.episode_sort
|
296
|
+
return false unless @extras == other.extras
|
284
297
|
return false unless @flatten_seasons == other.flatten_seasons
|
285
298
|
return false unless @genre == other.genre
|
286
299
|
return false unless @grandparent_art == other.grandparent_art
|
@@ -291,47 +304,39 @@ module PlexRubySDK
|
|
291
304
|
return false unless @grandparent_theme == other.grandparent_theme
|
292
305
|
return false unless @grandparent_thumb == other.grandparent_thumb
|
293
306
|
return false unless @grandparent_title == other.grandparent_title
|
294
|
-
return false unless @
|
295
|
-
return false unless @has_premium_primary_extra == other.has_premium_primary_extra
|
307
|
+
return false unless @guids == other.guids
|
296
308
|
return false unless @image == other.image
|
297
|
-
return false unless @
|
309
|
+
return false unless @last_rated_at == other.last_rated_at
|
298
310
|
return false unless @last_viewed_at == other.last_viewed_at
|
299
311
|
return false unless @leaf_count == other.leaf_count
|
300
312
|
return false unless @library_section_id == other.library_section_id
|
301
313
|
return false unless @library_section_key == other.library_section_key
|
302
314
|
return false unless @library_section_title == other.library_section_title
|
303
315
|
return false unless @location == other.location
|
316
|
+
return false unless @marker == other.marker
|
304
317
|
return false unless @media == other.media
|
305
|
-
return false unless @media_guid == other.media_guid
|
306
|
-
return false unless @meta_data_rating == other.meta_data_rating
|
307
318
|
return false unless @originally_available_at == other.originally_available_at
|
308
319
|
return false unless @original_title == other.original_title
|
309
320
|
return false unless @parent_guid == other.parent_guid
|
310
321
|
return false unless @parent_index == other.parent_index
|
311
322
|
return false unless @parent_key == other.parent_key
|
312
323
|
return false unless @parent_rating_key == other.parent_rating_key
|
313
|
-
return false unless @parent_slug == other.parent_slug
|
314
|
-
return false unless @parent_studio == other.parent_studio
|
315
|
-
return false unless @parent_theme == other.parent_theme
|
316
324
|
return false unless @parent_thumb == other.parent_thumb
|
317
325
|
return false unless @parent_title == other.parent_title
|
318
|
-
return false unless @parent_year == other.parent_year
|
319
326
|
return false unless @primary_extra_key == other.primary_extra_key
|
320
|
-
return false unless @
|
327
|
+
return false unless @producer == other.producer
|
321
328
|
return false unless @rating_image == other.rating_image
|
329
|
+
return false unless @ratings == other.ratings
|
322
330
|
return false unless @role == other.role
|
323
|
-
return false unless @season_count == other.season_count
|
324
331
|
return false unless @show_ordering == other.show_ordering
|
332
|
+
return false unless @similar == other.similar
|
325
333
|
return false unless @skip_children == other.skip_children
|
326
334
|
return false unless @skip_count == other.skip_count
|
327
|
-
return false unless @slug == other.slug
|
328
335
|
return false unless @studio == other.studio
|
329
|
-
return false unless @
|
330
|
-
return false unless @theme == other.theme
|
331
|
-
return false unless @thumb == other.thumb
|
332
|
-
return false unless @title_sort == other.title_sort
|
336
|
+
return false unless @subtype == other.subtype
|
333
337
|
return false unless @ultra_blur_colors == other.ultra_blur_colors
|
334
338
|
return false unless @updated_at == other.updated_at
|
339
|
+
return false unless @user_rating == other.user_rating
|
335
340
|
return false unless @view_count == other.view_count
|
336
341
|
return false unless @viewed_leaf_count == other.viewed_leaf_count
|
337
342
|
return false unless @view_offset == other.view_offset
|
@@ -8,11 +8,19 @@ module PlexRubySDK
|
|
8
8
|
module Models
|
9
9
|
module Operations
|
10
10
|
|
11
|
+
# Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true
|
12
|
+
class GetLibraryItemsOptimizedForStreaming
|
13
|
+
extend T::Sig
|
14
|
+
include Crystalline::MetadataFields
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
def initialize; end
|
20
|
+
|
21
|
+
def ==(other)
|
22
|
+
return false unless other.is_a? self.class
|
23
|
+
true
|
16
24
|
end
|
17
25
|
end
|
18
26
|
end
|
@@ -9,12 +9,10 @@ module PlexRubySDK
|
|
9
9
|
module Operations
|
10
10
|
|
11
11
|
|
12
|
-
class
|
12
|
+
class GetLibraryItemsOptimizedForStreaming1 < T::Enum
|
13
13
|
enums do
|
14
|
-
|
15
|
-
|
16
|
-
SNAPSHOT = new('snapshot')
|
17
|
-
CLEAR_LOGO = new('clearLogo')
|
14
|
+
ZERO = new(0)
|
15
|
+
ONE = new(1)
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|