plex_ruby_sdk 0.11.1 → 0.12.1
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/attributes.rb +37 -0
- data/lib/plex_ruby_sdk/models/operations/chapter.rb +53 -0
- data/lib/plex_ruby_sdk/models/operations/extras.rb +33 -0
- data/lib/plex_ruby_sdk/models/operations/get_all_media_library_stream.rb +20 -8
- data/lib/plex_ruby_sdk/models/operations/get_all_media_library_streamtype.rb +25 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_country.rb +9 -9
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_director.rb +8 -12
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_genre.rb +5 -4
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_image.rb +5 -5
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_library_type.rb +22 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_metadata.rb +144 -95
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_role.rb +11 -11
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_stream.rb +20 -8
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_streamtype.rb +25 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_type.rb +25 -0
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_ultrablurcolors.rb +4 -4
- data/lib/plex_ruby_sdk/models/operations/get_media_meta_data_writer.rb +8 -12
- data/lib/plex_ruby_sdk/models/operations/marker.rb +53 -0
- data/lib/plex_ruby_sdk/models/operations/stream.rb +20 -8
- data/lib/plex_ruby_sdk/models/operations/streamtype.rb +25 -0
- data/lib/plex_ruby_sdk/models/operations.rb +9 -0
- data/lib/plex_ruby_sdk/sdkconfiguration.rb +3 -3
- metadata +11 -2
@@ -8,176 +8,211 @@ module PlexRubySDK
|
|
8
8
|
module Models
|
9
9
|
module Operations
|
10
10
|
|
11
|
-
|
11
|
+
# Unknown
|
12
|
+
#
|
12
13
|
class GetMediaMetaDataMetadata
|
13
14
|
extend T::Sig
|
14
15
|
include Crystalline::MetadataFields
|
15
16
|
|
16
17
|
|
17
18
|
field :added_at, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('addedAt') } }
|
18
|
-
# URL
|
19
|
+
# The art image URL for the media item.
|
19
20
|
field :art, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('art') } }
|
20
|
-
#
|
21
|
+
# The audience rating for the media item.
|
22
|
+
field :audience_rating, ::Float, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRating') } }
|
23
|
+
# The number of child items associated with this media item.
|
24
|
+
field :child_count, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('childCount') } }
|
25
|
+
# The duration of the media item in milliseconds.
|
21
26
|
field :duration, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('duration') } }
|
22
|
-
# The globally unique identifier for the item.
|
27
|
+
# The globally unique identifier for the media item.
|
23
28
|
field :guid, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('guid') } }
|
24
|
-
#
|
25
|
-
field :
|
26
|
-
# The
|
29
|
+
# The index position of the media item.
|
30
|
+
field :index, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('index') } }
|
31
|
+
# The unique key for the media item.
|
27
32
|
field :key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('key') } }
|
28
|
-
# The
|
33
|
+
# The identifier for the library section.
|
29
34
|
field :library_section_id, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionID') } }
|
30
|
-
# The key
|
35
|
+
# The key corresponding to the library section.
|
31
36
|
field :library_section_key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionKey') } }
|
32
37
|
# The title of the library section.
|
33
38
|
field :library_section_title, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('librarySectionTitle') } }
|
34
|
-
# The
|
39
|
+
# The original release date of the media item.
|
40
|
+
field :originally_available_at, ::Date, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('originallyAvailableAt'), 'decoder': Utils.date_from_iso_format(false) } }
|
41
|
+
# The critic rating for the media item.
|
42
|
+
field :rating, ::Float, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('rating') } }
|
43
|
+
# 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.
|
35
44
|
field :rating_key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('ratingKey') } }
|
36
|
-
#
|
45
|
+
# The total number of seasons (for TV shows).
|
46
|
+
field :season_count, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('seasonCount') } }
|
47
|
+
# A URL‐friendly version of the media title.
|
48
|
+
field :slug, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('slug') } }
|
49
|
+
# A synopsis of the media item.
|
37
50
|
field :summary, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('summary') } }
|
38
|
-
#
|
51
|
+
# A brief tagline for the media item.
|
52
|
+
field :tagline, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('tagline') } }
|
53
|
+
# The theme URL for the media item.
|
54
|
+
field :theme, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('theme') } }
|
55
|
+
# The thumbnail image URL for the media item.
|
39
56
|
field :thumb, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('thumb') } }
|
40
|
-
# The title of the
|
57
|
+
# The title of the media item.
|
41
58
|
field :title, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('title') } }
|
42
|
-
# The
|
43
|
-
field :
|
44
|
-
|
45
|
-
field :ultra_blur_colors, Models::Operations::GetMediaMetaDataUltraBlurColors, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('UltraBlurColors') } }
|
59
|
+
# The sort title used for ordering media items.
|
60
|
+
field :title_sort, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('titleSort') } }
|
46
61
|
|
47
|
-
field :
|
48
|
-
# The release year.
|
49
|
-
field :year, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('year') } }
|
50
|
-
# The audience rating for the content.
|
51
|
-
field :audience_rating, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRating') } }
|
62
|
+
field :type, Models::Operations::GetMediaMetaDataType, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('type'), 'decoder': Utils.enum_from_string(Models::Operations::GetMediaMetaDataType, false) } }
|
52
63
|
# The URL for the audience rating image.
|
53
64
|
field :audience_rating_image, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audienceRatingImage') } }
|
54
65
|
|
66
|
+
field :chapter, T.nilable(T::Array[Models::Operations::Chapter]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Chapter') } }
|
67
|
+
# The source from which chapter data is derived.
|
55
68
|
field :chapter_source, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('chapterSource') } }
|
56
|
-
# The
|
57
|
-
field :child_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('childCount') } }
|
58
|
-
# The content rating (e.g., TV-MA).
|
69
|
+
# The content rating for the media item.
|
59
70
|
field :content_rating, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('contentRating') } }
|
60
|
-
|
71
|
+
|
61
72
|
field :country, T.nilable(T::Array[Models::Operations::GetMediaMetaDataCountry]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Country') } }
|
62
|
-
#
|
73
|
+
# 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).
|
74
|
+
field :created_at_accuracy, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('createdAtAccuracy') } }
|
75
|
+
# The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC.
|
76
|
+
field :created_at_tz_offset, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('createdAtTZOffset') } }
|
77
|
+
|
63
78
|
field :director, T.nilable(T::Array[Models::Operations::GetMediaMetaDataDirector]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Director') } }
|
64
|
-
|
79
|
+
|
80
|
+
field :extras, T.nilable(Models::Operations::Extras), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Extras') } }
|
81
|
+
|
65
82
|
field :genre, T.nilable(T::Array[Models::Operations::GetMediaMetaDataGenre]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Genre') } }
|
66
|
-
# The URL
|
83
|
+
# The art URL for the grandparent media item.
|
67
84
|
field :grandparent_art, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentArt') } }
|
68
|
-
#
|
85
|
+
# The GUID of the grandparent media item.
|
69
86
|
field :grandparent_guid, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentGuid') } }
|
70
|
-
#
|
87
|
+
# The key of the grandparent media item.
|
71
88
|
field :grandparent_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentKey') } }
|
72
|
-
# The rating key of the grandparent
|
89
|
+
# The rating key of the grandparent media item.
|
73
90
|
field :grandparent_rating_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentRatingKey') } }
|
74
|
-
#
|
91
|
+
# The slug for the grandparent media item.
|
75
92
|
field :grandparent_slug, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentSlug') } }
|
76
|
-
# The URL
|
93
|
+
# The theme URL for the grandparent media item.
|
94
|
+
field :grandparent_theme, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentTheme') } }
|
95
|
+
# The thumbnail URL for the grandparent media item.
|
77
96
|
field :grandparent_thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentThumb') } }
|
78
|
-
# The title of the grandparent
|
97
|
+
# The title of the grandparent media item.
|
79
98
|
field :grandparent_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('grandparentTitle') } }
|
80
|
-
|
99
|
+
|
81
100
|
field :guids, T.nilable(T::Array[Models::Operations::GetMediaMetaDataGuids]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Guid') } }
|
82
|
-
|
83
|
-
field :
|
84
|
-
# Unix timestamp
|
101
|
+
|
102
|
+
field :image, T.nilable(T::Array[Models::Operations::GetMediaMetaDataImage]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Image') } }
|
103
|
+
# The Unix timestamp representing the last time the item was rated.
|
104
|
+
field :last_rated_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('lastRatedAt') } }
|
105
|
+
# Unix timestamp for when the media item was last viewed.
|
85
106
|
field :last_viewed_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('lastViewedAt') } }
|
86
|
-
# The
|
107
|
+
# The number of leaf items (end nodes) under this media item.
|
87
108
|
field :leaf_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('leafCount') } }
|
88
|
-
|
109
|
+
|
89
110
|
field :location, T.nilable(T::Array[Models::Operations::GetMediaMetaDataLocation]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Location') } }
|
90
111
|
|
112
|
+
field :marker, T.nilable(T::Array[Models::Operations::Marker]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Marker') } }
|
113
|
+
|
91
114
|
field :media, T.nilable(T::Array[Models::Operations::GetMediaMetaDataMedia]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Media') } }
|
92
|
-
# The original
|
93
|
-
field :originally_available_at, T.nilable(::Date), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('originallyAvailableAt'), 'decoder': Utils.date_from_iso_format(true) } }
|
94
|
-
# The original title of the content.
|
115
|
+
# The original title of the media item (if different).
|
95
116
|
field :original_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('originalTitle') } }
|
96
|
-
#
|
117
|
+
# The GUID of the parent media item.
|
97
118
|
field :parent_guid, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentGuid') } }
|
98
|
-
# The index
|
119
|
+
# The index position of the parent media item.
|
99
120
|
field :parent_index, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentIndex') } }
|
100
|
-
#
|
121
|
+
# The key of the parent media item.
|
101
122
|
field :parent_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentKey') } }
|
102
|
-
# The rating key of the parent
|
123
|
+
# The rating key of the parent media item.
|
103
124
|
field :parent_rating_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentRatingKey') } }
|
104
|
-
# The URL
|
125
|
+
# The thumbnail URL for the parent media item.
|
105
126
|
field :parent_thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentThumb') } }
|
106
|
-
# The title of the parent
|
127
|
+
# The title of the parent media item.
|
107
128
|
field :parent_title, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('parentTitle') } }
|
108
|
-
|
129
|
+
# The primary extra key associated with this media item.
|
109
130
|
field :primary_extra_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('primaryExtraKey') } }
|
110
|
-
|
131
|
+
|
111
132
|
field :producer, T.nilable(T::Array[Models::Operations::GetMediaMetaDataProducer]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Producer') } }
|
112
|
-
# The
|
113
|
-
field :rating, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('rating') } }
|
114
|
-
# The URL or identifier for the rating image (e.g., Rotten Tomatoes rating image).
|
133
|
+
# The URL for the rating image.
|
115
134
|
field :rating_image, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('ratingImage') } }
|
116
|
-
|
135
|
+
|
117
136
|
field :ratings, T.nilable(T::Array[Models::Operations::Ratings]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Rating') } }
|
118
|
-
|
137
|
+
|
119
138
|
field :role, T.nilable(T::Array[Models::Operations::GetMediaMetaDataRole]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Role') } }
|
120
|
-
|
139
|
+
|
121
140
|
field :similar, T.nilable(T::Array[Models::Operations::GetMediaMetaDataSimilar]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Similar') } }
|
122
|
-
# The number of times
|
141
|
+
# The number of times this media item has been skipped.
|
123
142
|
field :skip_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('skipCount') } }
|
124
|
-
#
|
125
|
-
field :slug, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('slug') } }
|
126
|
-
# The studio that produced the content.
|
143
|
+
# The studio that produced the media item.
|
127
144
|
field :studio, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('studio') } }
|
128
|
-
#
|
129
|
-
field :
|
130
|
-
|
131
|
-
field :
|
132
|
-
#
|
145
|
+
# A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip.
|
146
|
+
field :subtype, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('subtype') } }
|
147
|
+
|
148
|
+
field :ultra_blur_colors, T.nilable(Models::Operations::GetMediaMetaDataUltraBlurColors), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('UltraBlurColors') } }
|
149
|
+
# Unix epoch datetime in seconds
|
150
|
+
field :updated_at, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('updatedAt') } }
|
151
|
+
# The rating provided by a user for the item. This value is expressed as a decimal number.
|
152
|
+
field :user_rating, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('userRating') } }
|
153
|
+
# The number of times this media item has been viewed.
|
133
154
|
field :view_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewCount') } }
|
134
|
-
# The number of
|
155
|
+
# The number of leaf items that have been viewed.
|
135
156
|
field :viewed_leaf_count, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewedLeafCount') } }
|
136
|
-
#
|
157
|
+
# The current playback offset (in milliseconds).
|
158
|
+
field :view_offset, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('viewOffset') } }
|
159
|
+
|
137
160
|
field :writer, T.nilable(T::Array[Models::Operations::GetMediaMetaDataWriter]), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('Writer') } }
|
161
|
+
# The release year of the media item.
|
162
|
+
field :year, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('year') } }
|
138
163
|
|
139
164
|
|
140
|
-
sig { params(added_at: ::Integer, art: ::String, duration: ::Integer, guid: ::String,
|
141
|
-
def initialize(added_at: nil, art: nil, duration: nil, guid: nil,
|
165
|
+
sig { params(added_at: ::Integer, art: ::String, audience_rating: ::Float, child_count: ::Integer, duration: ::Integer, guid: ::String, index: ::Integer, key: ::String, library_section_id: ::Integer, library_section_key: ::String, library_section_title: ::String, originally_available_at: ::Date, 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::GetMediaMetaDataType, audience_rating_image: T.nilable(::String), chapter: T.nilable(T::Array[Models::Operations::Chapter]), chapter_source: T.nilable(::String), content_rating: T.nilable(::String), country: T.nilable(T::Array[Models::Operations::GetMediaMetaDataCountry]), created_at_accuracy: T.nilable(::String), created_at_tz_offset: T.nilable(::String), director: T.nilable(T::Array[Models::Operations::GetMediaMetaDataDirector]), extras: T.nilable(Models::Operations::Extras), genre: T.nilable(T::Array[Models::Operations::GetMediaMetaDataGenre]), 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::GetMediaMetaDataGuids]), image: T.nilable(T::Array[Models::Operations::GetMediaMetaDataImage]), last_rated_at: T.nilable(::Integer), last_viewed_at: T.nilable(::Integer), leaf_count: T.nilable(::Integer), location: T.nilable(T::Array[Models::Operations::GetMediaMetaDataLocation]), marker: T.nilable(T::Array[Models::Operations::Marker]), media: T.nilable(T::Array[Models::Operations::GetMediaMetaDataMedia]), 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::GetMediaMetaDataProducer]), rating_image: T.nilable(::String), ratings: T.nilable(T::Array[Models::Operations::Ratings]), role: T.nilable(T::Array[Models::Operations::GetMediaMetaDataRole]), similar: T.nilable(T::Array[Models::Operations::GetMediaMetaDataSimilar]), skip_count: T.nilable(::Integer), studio: T.nilable(::String), subtype: T.nilable(::String), ultra_blur_colors: T.nilable(Models::Operations::GetMediaMetaDataUltraBlurColors), 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::GetMediaMetaDataWriter]), year: T.nilable(::Integer)).void }
|
166
|
+
def initialize(added_at: nil, art: nil, audience_rating: nil, child_count: nil, duration: nil, guid: nil, index: nil, key: nil, library_section_id: nil, library_section_key: nil, library_section_title: nil, originally_available_at: 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, content_rating: nil, country: nil, created_at_accuracy: nil, created_at_tz_offset: nil, director: nil, extras: 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, location: nil, marker: nil, media: 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, similar: 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)
|
142
167
|
@added_at = added_at
|
143
168
|
@art = art
|
169
|
+
@audience_rating = audience_rating
|
170
|
+
@child_count = child_count
|
144
171
|
@duration = duration
|
145
172
|
@guid = guid
|
146
|
-
@
|
173
|
+
@index = index
|
147
174
|
@key = key
|
148
175
|
@library_section_id = library_section_id
|
149
176
|
@library_section_key = library_section_key
|
150
177
|
@library_section_title = library_section_title
|
178
|
+
@originally_available_at = originally_available_at
|
179
|
+
@rating = rating
|
151
180
|
@rating_key = rating_key
|
181
|
+
@season_count = season_count
|
182
|
+
@slug = slug
|
152
183
|
@summary = summary
|
184
|
+
@tagline = tagline
|
185
|
+
@theme = theme
|
153
186
|
@thumb = thumb
|
154
187
|
@title = title
|
188
|
+
@title_sort = title_sort
|
155
189
|
@type = type
|
156
|
-
@ultra_blur_colors = ultra_blur_colors
|
157
|
-
@updated_at = updated_at
|
158
|
-
@year = year
|
159
|
-
@audience_rating = audience_rating
|
160
190
|
@audience_rating_image = audience_rating_image
|
191
|
+
@chapter = chapter
|
161
192
|
@chapter_source = chapter_source
|
162
|
-
@child_count = child_count
|
163
193
|
@content_rating = content_rating
|
164
194
|
@country = country
|
195
|
+
@created_at_accuracy = created_at_accuracy
|
196
|
+
@created_at_tz_offset = created_at_tz_offset
|
165
197
|
@director = director
|
198
|
+
@extras = extras
|
166
199
|
@genre = genre
|
167
200
|
@grandparent_art = grandparent_art
|
168
201
|
@grandparent_guid = grandparent_guid
|
169
202
|
@grandparent_key = grandparent_key
|
170
203
|
@grandparent_rating_key = grandparent_rating_key
|
171
204
|
@grandparent_slug = grandparent_slug
|
205
|
+
@grandparent_theme = grandparent_theme
|
172
206
|
@grandparent_thumb = grandparent_thumb
|
173
207
|
@grandparent_title = grandparent_title
|
174
208
|
@guids = guids
|
175
|
-
@
|
209
|
+
@image = image
|
210
|
+
@last_rated_at = last_rated_at
|
176
211
|
@last_viewed_at = last_viewed_at
|
177
212
|
@leaf_count = leaf_count
|
178
213
|
@location = location
|
214
|
+
@marker = marker
|
179
215
|
@media = media
|
180
|
-
@originally_available_at = originally_available_at
|
181
216
|
@original_title = original_title
|
182
217
|
@parent_guid = parent_guid
|
183
218
|
@parent_index = parent_index
|
@@ -187,62 +222,74 @@ module PlexRubySDK
|
|
187
222
|
@parent_title = parent_title
|
188
223
|
@primary_extra_key = primary_extra_key
|
189
224
|
@producer = producer
|
190
|
-
@rating = rating
|
191
225
|
@rating_image = rating_image
|
192
226
|
@ratings = ratings
|
193
227
|
@role = role
|
194
228
|
@similar = similar
|
195
229
|
@skip_count = skip_count
|
196
|
-
@slug = slug
|
197
230
|
@studio = studio
|
198
|
-
@
|
199
|
-
@
|
231
|
+
@subtype = subtype
|
232
|
+
@ultra_blur_colors = ultra_blur_colors
|
233
|
+
@updated_at = updated_at
|
234
|
+
@user_rating = user_rating
|
200
235
|
@view_count = view_count
|
201
236
|
@viewed_leaf_count = viewed_leaf_count
|
237
|
+
@view_offset = view_offset
|
202
238
|
@writer = writer
|
239
|
+
@year = year
|
203
240
|
end
|
204
241
|
|
205
242
|
def ==(other)
|
206
243
|
return false unless other.is_a? self.class
|
207
244
|
return false unless @added_at == other.added_at
|
208
245
|
return false unless @art == other.art
|
246
|
+
return false unless @audience_rating == other.audience_rating
|
247
|
+
return false unless @child_count == other.child_count
|
209
248
|
return false unless @duration == other.duration
|
210
249
|
return false unless @guid == other.guid
|
211
|
-
return false unless @
|
250
|
+
return false unless @index == other.index
|
212
251
|
return false unless @key == other.key
|
213
252
|
return false unless @library_section_id == other.library_section_id
|
214
253
|
return false unless @library_section_key == other.library_section_key
|
215
254
|
return false unless @library_section_title == other.library_section_title
|
255
|
+
return false unless @originally_available_at == other.originally_available_at
|
256
|
+
return false unless @rating == other.rating
|
216
257
|
return false unless @rating_key == other.rating_key
|
258
|
+
return false unless @season_count == other.season_count
|
259
|
+
return false unless @slug == other.slug
|
217
260
|
return false unless @summary == other.summary
|
261
|
+
return false unless @tagline == other.tagline
|
262
|
+
return false unless @theme == other.theme
|
218
263
|
return false unless @thumb == other.thumb
|
219
264
|
return false unless @title == other.title
|
265
|
+
return false unless @title_sort == other.title_sort
|
220
266
|
return false unless @type == other.type
|
221
|
-
return false unless @ultra_blur_colors == other.ultra_blur_colors
|
222
|
-
return false unless @updated_at == other.updated_at
|
223
|
-
return false unless @year == other.year
|
224
|
-
return false unless @audience_rating == other.audience_rating
|
225
267
|
return false unless @audience_rating_image == other.audience_rating_image
|
268
|
+
return false unless @chapter == other.chapter
|
226
269
|
return false unless @chapter_source == other.chapter_source
|
227
|
-
return false unless @child_count == other.child_count
|
228
270
|
return false unless @content_rating == other.content_rating
|
229
271
|
return false unless @country == other.country
|
272
|
+
return false unless @created_at_accuracy == other.created_at_accuracy
|
273
|
+
return false unless @created_at_tz_offset == other.created_at_tz_offset
|
230
274
|
return false unless @director == other.director
|
275
|
+
return false unless @extras == other.extras
|
231
276
|
return false unless @genre == other.genre
|
232
277
|
return false unless @grandparent_art == other.grandparent_art
|
233
278
|
return false unless @grandparent_guid == other.grandparent_guid
|
234
279
|
return false unless @grandparent_key == other.grandparent_key
|
235
280
|
return false unless @grandparent_rating_key == other.grandparent_rating_key
|
236
281
|
return false unless @grandparent_slug == other.grandparent_slug
|
282
|
+
return false unless @grandparent_theme == other.grandparent_theme
|
237
283
|
return false unless @grandparent_thumb == other.grandparent_thumb
|
238
284
|
return false unless @grandparent_title == other.grandparent_title
|
239
285
|
return false unless @guids == other.guids
|
240
|
-
return false unless @
|
286
|
+
return false unless @image == other.image
|
287
|
+
return false unless @last_rated_at == other.last_rated_at
|
241
288
|
return false unless @last_viewed_at == other.last_viewed_at
|
242
289
|
return false unless @leaf_count == other.leaf_count
|
243
290
|
return false unless @location == other.location
|
291
|
+
return false unless @marker == other.marker
|
244
292
|
return false unless @media == other.media
|
245
|
-
return false unless @originally_available_at == other.originally_available_at
|
246
293
|
return false unless @original_title == other.original_title
|
247
294
|
return false unless @parent_guid == other.parent_guid
|
248
295
|
return false unless @parent_index == other.parent_index
|
@@ -252,19 +299,21 @@ module PlexRubySDK
|
|
252
299
|
return false unless @parent_title == other.parent_title
|
253
300
|
return false unless @primary_extra_key == other.primary_extra_key
|
254
301
|
return false unless @producer == other.producer
|
255
|
-
return false unless @rating == other.rating
|
256
302
|
return false unless @rating_image == other.rating_image
|
257
303
|
return false unless @ratings == other.ratings
|
258
304
|
return false unless @role == other.role
|
259
305
|
return false unless @similar == other.similar
|
260
306
|
return false unless @skip_count == other.skip_count
|
261
|
-
return false unless @slug == other.slug
|
262
307
|
return false unless @studio == other.studio
|
263
|
-
return false unless @
|
264
|
-
return false unless @
|
308
|
+
return false unless @subtype == other.subtype
|
309
|
+
return false unless @ultra_blur_colors == other.ultra_blur_colors
|
310
|
+
return false unless @updated_at == other.updated_at
|
311
|
+
return false unless @user_rating == other.user_rating
|
265
312
|
return false unless @view_count == other.view_count
|
266
313
|
return false unless @viewed_leaf_count == other.viewed_leaf_count
|
314
|
+
return false unless @view_offset == other.view_offset
|
267
315
|
return false unless @writer == other.writer
|
316
|
+
return false unless @year == other.year
|
268
317
|
true
|
269
318
|
end
|
270
319
|
end
|
@@ -13,27 +13,27 @@ module PlexRubySDK
|
|
13
13
|
extend T::Sig
|
14
14
|
include Crystalline::MetadataFields
|
15
15
|
|
16
|
-
# The filter string
|
16
|
+
# The filter string used to query this actor. For example, it may indicate that this is an actor with a given key.
|
17
17
|
field :filter, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('filter') } }
|
18
|
-
#
|
18
|
+
# Unique identifier for the actor or role.
|
19
19
|
field :id, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('id') } }
|
20
|
-
# The actor's name.
|
20
|
+
# The display tag for the actor (typically the actor's name).
|
21
21
|
field :tag, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('tag') } }
|
22
|
-
#
|
23
|
-
field :tag_key, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('tagKey') } }
|
24
|
-
# The character name or role.
|
22
|
+
# The role played by the actor in the media item.
|
25
23
|
field :role, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('role') } }
|
26
|
-
#
|
24
|
+
# A unique key associated with the actor's tag, used for internal identification.
|
25
|
+
field :tag_key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('tagKey') } }
|
26
|
+
# The URL of the thumbnail image for the actor.
|
27
27
|
field :thumb, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('thumb') } }
|
28
28
|
|
29
29
|
|
30
|
-
sig { params(filter: ::String, id: ::Integer, tag: ::String,
|
31
|
-
def initialize(filter: nil, id: nil, tag: nil,
|
30
|
+
sig { params(filter: ::String, id: ::Integer, tag: ::String, role: T.nilable(::String), tag_key: T.nilable(::String), thumb: T.nilable(::String)).void }
|
31
|
+
def initialize(filter: nil, id: nil, tag: nil, role: nil, tag_key: nil, thumb: nil)
|
32
32
|
@filter = filter
|
33
33
|
@id = id
|
34
34
|
@tag = tag
|
35
|
-
@tag_key = tag_key
|
36
35
|
@role = role
|
36
|
+
@tag_key = tag_key
|
37
37
|
@thumb = thumb
|
38
38
|
end
|
39
39
|
|
@@ -42,8 +42,8 @@ module PlexRubySDK
|
|
42
42
|
return false unless @filter == other.filter
|
43
43
|
return false unless @id == other.id
|
44
44
|
return false unless @tag == other.tag
|
45
|
-
return false unless @tag_key == other.tag_key
|
46
45
|
return false unless @role == other.role
|
46
|
+
return false unless @tag_key == other.tag_key
|
47
47
|
return false unless @thumb == other.thumb
|
48
48
|
true
|
49
49
|
end
|
@@ -21,10 +21,12 @@ module PlexRubySDK
|
|
21
21
|
field :extended_display_title, ::String, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('extendedDisplayTitle') } }
|
22
22
|
# Unique stream identifier.
|
23
23
|
field :id, ::Integer, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('id') } }
|
24
|
-
#
|
25
|
-
|
26
|
-
#
|
27
|
-
|
24
|
+
# Stream type:
|
25
|
+
# - 1 = video
|
26
|
+
# - 2 = audio
|
27
|
+
# - 3 = subtitle
|
28
|
+
#
|
29
|
+
field :stream_type, Models::Operations::GetMediaMetaDataStreamType, { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('streamType'), 'decoder': Utils.enum_from_string(Models::Operations::GetMediaMetaDataStreamType, false) } }
|
28
30
|
# Audio channel layout.
|
29
31
|
field :audio_channel_layout, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('audioChannelLayout') } }
|
30
32
|
# Bit depth of the video stream.
|
@@ -77,6 +79,8 @@ module PlexRubySDK
|
|
77
79
|
field :embedded_in_video, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('embeddedInVideo') } }
|
78
80
|
|
79
81
|
field :forced, T.nilable(T::Boolean), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('forced') } }
|
82
|
+
# Format of the stream (e.g., srt).
|
83
|
+
field :format, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('format') } }
|
80
84
|
# Frame rate of the stream.
|
81
85
|
field :frame_rate, T.nilable(::Float), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('frameRate') } }
|
82
86
|
|
@@ -87,6 +91,10 @@ module PlexRubySDK
|
|
87
91
|
field :hearing_impaired, T.nilable(T::Boolean), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('hearingImpaired') } }
|
88
92
|
# Height of the video stream.
|
89
93
|
field :height, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('height') } }
|
94
|
+
# Index of the stream.
|
95
|
+
field :index, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('index') } }
|
96
|
+
# Key to access this stream part.
|
97
|
+
field :key, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('key') } }
|
90
98
|
# Language of the stream.
|
91
99
|
field :language, T.nilable(::String), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('language') } }
|
92
100
|
# ISO language code.
|
@@ -113,13 +121,12 @@ module PlexRubySDK
|
|
113
121
|
field :width, T.nilable(::Integer), { 'format_json': { 'letter_case': ::PlexRubySDK::Utils.field_name('width') } }
|
114
122
|
|
115
123
|
|
116
|
-
sig { params(codec: ::String, display_title: ::String, extended_display_title: ::String, id: ::Integer,
|
117
|
-
def initialize(codec: nil, display_title: nil, extended_display_title: nil, id: nil,
|
124
|
+
sig { params(codec: ::String, display_title: ::String, extended_display_title: ::String, id: ::Integer, stream_type: Models::Operations::GetMediaMetaDataStreamType, audio_channel_layout: T.nilable(::String), bit_depth: T.nilable(::Integer), bitrate: T.nilable(::Integer), can_auto_sync: T.nilable(T::Boolean), channels: T.nilable(::Integer), chroma_location: T.nilable(::String), chroma_subsampling: T.nilable(::String), closed_captions: T.nilable(T::Boolean), coded_height: T.nilable(::Integer), coded_width: T.nilable(::Integer), color_primaries: T.nilable(::String), color_range: T.nilable(::String), color_space: T.nilable(::String), color_trc: T.nilable(::String), default: T.nilable(T::Boolean), dovibl_compat_id: T.nilable(::Integer), dovibl_present: T.nilable(T::Boolean), doviel_present: T.nilable(T::Boolean), dovi_level: T.nilable(::Integer), dovi_present: T.nilable(T::Boolean), dovi_profile: T.nilable(::Integer), dovirpu_present: T.nilable(T::Boolean), dovi_version: T.nilable(::String), dub: T.nilable(T::Boolean), embedded_in_video: T.nilable(::String), forced: T.nilable(T::Boolean), format: T.nilable(::String), frame_rate: T.nilable(::Float), has_scaling_matrix: T.nilable(T::Boolean), header_compression: T.nilable(T::Boolean), hearing_impaired: T.nilable(T::Boolean), height: T.nilable(::Integer), index: T.nilable(::Integer), key: T.nilable(::String), language: T.nilable(::String), language_code: T.nilable(::String), language_tag: T.nilable(::String), level: T.nilable(::Integer), original: T.nilable(T::Boolean), profile: T.nilable(::String), ref_frames: T.nilable(::Integer), sampling_rate: T.nilable(::Integer), scan_type: T.nilable(::String), selected: T.nilable(T::Boolean), title: T.nilable(::String), width: T.nilable(::Integer)).void }
|
125
|
+
def initialize(codec: nil, display_title: nil, extended_display_title: nil, id: nil, stream_type: nil, audio_channel_layout: nil, bit_depth: nil, bitrate: nil, can_auto_sync: nil, channels: nil, chroma_location: nil, chroma_subsampling: nil, closed_captions: nil, coded_height: nil, coded_width: nil, color_primaries: nil, color_range: nil, color_space: nil, color_trc: nil, default: nil, dovibl_compat_id: nil, dovibl_present: nil, doviel_present: nil, dovi_level: nil, dovi_present: nil, dovi_profile: nil, dovirpu_present: nil, dovi_version: nil, dub: nil, embedded_in_video: nil, forced: nil, format: nil, frame_rate: nil, has_scaling_matrix: nil, header_compression: nil, hearing_impaired: nil, height: nil, index: nil, key: nil, language: nil, language_code: nil, language_tag: nil, level: nil, original: nil, profile: nil, ref_frames: nil, sampling_rate: nil, scan_type: nil, selected: nil, title: nil, width: nil)
|
118
126
|
@codec = codec
|
119
127
|
@display_title = display_title
|
120
128
|
@extended_display_title = extended_display_title
|
121
129
|
@id = id
|
122
|
-
@index = index
|
123
130
|
@stream_type = stream_type
|
124
131
|
@audio_channel_layout = audio_channel_layout
|
125
132
|
@bit_depth = bit_depth
|
@@ -147,11 +154,14 @@ module PlexRubySDK
|
|
147
154
|
@dub = dub
|
148
155
|
@embedded_in_video = embedded_in_video
|
149
156
|
@forced = forced
|
157
|
+
@format = format
|
150
158
|
@frame_rate = frame_rate
|
151
159
|
@has_scaling_matrix = has_scaling_matrix
|
152
160
|
@header_compression = header_compression
|
153
161
|
@hearing_impaired = hearing_impaired
|
154
162
|
@height = height
|
163
|
+
@index = index
|
164
|
+
@key = key
|
155
165
|
@language = language
|
156
166
|
@language_code = language_code
|
157
167
|
@language_tag = language_tag
|
@@ -172,7 +182,6 @@ module PlexRubySDK
|
|
172
182
|
return false unless @display_title == other.display_title
|
173
183
|
return false unless @extended_display_title == other.extended_display_title
|
174
184
|
return false unless @id == other.id
|
175
|
-
return false unless @index == other.index
|
176
185
|
return false unless @stream_type == other.stream_type
|
177
186
|
return false unless @audio_channel_layout == other.audio_channel_layout
|
178
187
|
return false unless @bit_depth == other.bit_depth
|
@@ -200,11 +209,14 @@ module PlexRubySDK
|
|
200
209
|
return false unless @dub == other.dub
|
201
210
|
return false unless @embedded_in_video == other.embedded_in_video
|
202
211
|
return false unless @forced == other.forced
|
212
|
+
return false unless @format == other.format
|
203
213
|
return false unless @frame_rate == other.frame_rate
|
204
214
|
return false unless @has_scaling_matrix == other.has_scaling_matrix
|
205
215
|
return false unless @header_compression == other.header_compression
|
206
216
|
return false unless @hearing_impaired == other.hearing_impaired
|
207
217
|
return false unless @height == other.height
|
218
|
+
return false unless @index == other.index
|
219
|
+
return false unless @key == other.key
|
208
220
|
return false unless @language == other.language
|
209
221
|
return false unless @language_code == other.language_code
|
210
222
|
return false unless @language_tag == other.language_tag
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
|
7
|
+
module PlexRubySDK
|
8
|
+
module Models
|
9
|
+
module Operations
|
10
|
+
|
11
|
+
# GetMediaMetaDataStreamType - Stream type:
|
12
|
+
# - 1 = video
|
13
|
+
# - 2 = audio
|
14
|
+
# - 3 = subtitle
|
15
|
+
#
|
16
|
+
class GetMediaMetaDataStreamType < T::Enum
|
17
|
+
enums do
|
18
|
+
VIDEO = new(1)
|
19
|
+
AUDIO = new(2)
|
20
|
+
SUBTITLE = new(3)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
|
7
|
+
module PlexRubySDK
|
8
|
+
module Models
|
9
|
+
module Operations
|
10
|
+
|
11
|
+
# GetMediaMetaDataType - The type of media content
|
12
|
+
#
|
13
|
+
class GetMediaMetaDataType < T::Enum
|
14
|
+
enums do
|
15
|
+
MOVIE = new('movie')
|
16
|
+
TV_SHOW = new('show')
|
17
|
+
SEASON = new('season')
|
18
|
+
EPISODE = new('episode')
|
19
|
+
ARTIST = new('artist')
|
20
|
+
ALBUM = new('album')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|