diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 8751719d7..f89a4e9f1 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -6,19 +6,9 @@
-
-
-
+
@@ -138,6 +128,7 @@
+
diff --git a/models/detekt_baseline.xml b/models/detekt_baseline.xml
index 96238ae01..14f7906e9 100644
--- a/models/detekt_baseline.xml
+++ b/models/detekt_baseline.xml
@@ -546,43 +546,6 @@
UndocumentedPublicProperty:UserInteractions.kt$UserInteractions$/** * Information related to the Twitter connected app. */ @Json(name = "twitter_connected_app") val twitterConnectedApp: ConnectedAppInteraction? = nullUndocumentedPublicProperty:UserInteractions.kt$UserInteractions$/** * Information related to the YouTube connected app. */ @Json(name = "youtube_connected_app") val youTubeConnectedApp: ConnectedAppInteraction? = nullUndocumentedPublicProperty:UserInteractions.kt$UserInteractions$/** * Information related to the block status of this user. */ @Json(name = "block") val block: BasicInteraction? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * 360 spatial data. */ @Json(name = "spatial") val spatial: Spatial? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * A brief explanation of the video's content. */ @Json(name = "description") val description: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * A collection of stats associated with this video. */ @Json(name = "stats") val stats: VideoStats? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * An array of all tags assigned to this video. */ @Json(name = "tags") val tags: List<Tag>? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information about embedding this video. */ @Json(name = "embed") val embed: VideoEmbed? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information about the Vimeo Create session of a video. */ @Json(name = "edit_session") val editSession: EditSession? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information about the file transfer page associated with this video. This data * requires a bearer token with the private scope. */ @Internal @Json(name = "file_transfer") val fileTransferPage: FileTransferPage? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information about the folder that contains the video, or null if it is in the root directory. */ @Json(name = "parent_project") val parentFolder: Folder? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information about the review page associated with this video. This data requires a * bearer token with the private scope. */ @Internal @Json(name = "review_page") val reviewPage: ReviewPage? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Information for the video's badge. */ @Json(name = "badge") val badge: VideoBadge? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Live playback information. */ @Json(name = "live") val live: Live? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The Creative Commons license used for the video. * @see Video.licenseType */ @Json(name = "license") val license: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The Play representation. */ @Internal @Json(name = "play") val play: Play? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The active picture for this video. */ @Json(name = "pictures") val pictures: PictureCollection? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The categories to which this video belongs. */ @Json(name = "categories") val categories: List<Category>? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The content ratings of this video. */ @Json(name = "content_rating") val contentRating: List<String>? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The context of the video's subscription, if this video is part of a subscription. */ @Json(name = "context") val context: VideoContext? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The link to the video. */ @Json(name = "link") val link: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The privacy-enabled password to watch this video. * This data requires a bearer token with the private scope. */ @Internal @Json(name = "password") val password: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The resource key string of the video. */ @Json(name = "resource_key") val resourceKey: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The status code for the availability of the video. This field is deprecated in favor * of [upload] and [transcode]. * @see Video.statusType */ @Json(name = "status") @Deprecated("This property is deprecated in favor of upload and transcode.") val status: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The time in ISO 8601 format when the user last modified the video. */ @Json(name = "last_user_action_event_date") val lastUserActionEventDate: Date? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The time in ISO 8601 format when the video metadata was last modified. */ @Json(name = "modified_time") val modifiedTime: Date? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The time in ISO 8601 format when the video was created. */ @Json(name = "created_time") val createdTime: Date? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The time in ISO 8601 format when the video was released. */ @Json(name = "release_time") val releaseTime: Date? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The transcode information for a video upload. */ @Json(name = "transcode") val transcode: Transcode? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The upload information for this video. */ @Json(name = "upload") val upload: Upload? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video owner. */ @Json(name = "user") val user: User? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's canonical relative URI. */ @Json(name = "uri") val uri: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's duration in seconds. */ @Json(name = "duration") val duration: Int? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's height in pixels. */ @Json(name = "height") val height: Int? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's metadata. */ @Json(name = "metadata") val metadata: Metadata<VideoConnections, VideoInteractions>? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's primary language. */ @Json(name = "language") val language: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's privacy setting. */ @Json(name = "privacy") val privacy: Privacy? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's title. */ @Json(name = "name") val name: String? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * The video's width in pixels. */ @Json(name = "width") val width: Int? = null
- UndocumentedPublicProperty:Video.kt$Video$/** * Whether the clip is playable. */ @Json(name = "is_playable") val isPlayable: Boolean? = nullUndocumentedPublicProperty:VideoBadge.kt$VideoBadge$/** * The badge image. */ @Json(name = "pictures") val pictures: PictureCollection? = nullUndocumentedPublicProperty:VideoBadge.kt$VideoBadge$/** * The festival that this badge represents. */ @Internal @Json(name = "festival") val festival: String? = nullUndocumentedPublicProperty:VideoBadge.kt$VideoBadge$/** * The link for the badge */ @Json(name = "link") val link: String? = null
diff --git a/models/src/main/java/com/vimeo/networking2/Billing.kt b/models/src/main/java/com/vimeo/networking2/Billing.kt
index 52a7ea421..1612ae02e 100644
--- a/models/src/main/java/com/vimeo/networking2/Billing.kt
+++ b/models/src/main/java/com/vimeo/networking2/Billing.kt
@@ -1,3 +1,5 @@
+@file:JvmName("BillingUtils")
+
package com.vimeo.networking2
import com.squareup.moshi.Json
diff --git a/models/src/main/java/com/vimeo/networking2/DashVideoFile.kt b/models/src/main/java/com/vimeo/networking2/DashVideoFile.kt
index 088dddc0e..a6411ba05 100644
--- a/models/src/main/java/com/vimeo/networking2/DashVideoFile.kt
+++ b/models/src/main/java/com/vimeo/networking2/DashVideoFile.kt
@@ -3,7 +3,7 @@ package com.vimeo.networking2
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.vimeo.networking2.annotations.Internal
-import com.vimeo.networking2.common.VideoFile
+import com.vimeo.networking2.common.LoggingVideoFile
import java.util.Date
/**
@@ -44,4 +44,4 @@ data class DashVideoFile(
@Internal
@Json(name = "license_link")
val licenseLink: String? = null
-) : VideoFile
+) : LoggingVideoFile
diff --git a/models/src/main/java/com/vimeo/networking2/DownloadableVideoFile.kt b/models/src/main/java/com/vimeo/networking2/DownloadableVideoFile.kt
new file mode 100644
index 000000000..8e7793e83
--- /dev/null
+++ b/models/src/main/java/com/vimeo/networking2/DownloadableVideoFile.kt
@@ -0,0 +1,75 @@
+@file:JvmName("DownloadableVideoFileUtils")
+
+package com.vimeo.networking2
+
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+import com.vimeo.networking2.common.VideoFile
+import com.vimeo.networking2.enums.VideoQualityType
+import com.vimeo.networking2.enums.VideoSourceType
+import com.vimeo.networking2.enums.asEnum
+import java.util.Date
+
+/**
+ * A downloadable video file.
+ *
+ * @param publicName A name describing the file, suitable for display.
+ * @param size The size of the file, in bytes.
+ * @param sizeShort A short description of the file size, accurate to two decimal places.
+ * @param md5 The MD5 hash of the file.
+ * @param width The width of the video content, in pixels.
+ * @param height The height of the video content, in pixels.
+ * @param videoQuality The quality of the video file. See [qualityType].
+ * @param fps The FPS of the video file.
+ * @param rawType The type of the video file. See [type].
+ */
+@JsonClass(generateAdapter = true)
+data class DownloadableVideoFile(
+
+ @Json(name = "public_name")
+ val publicName: String? = null,
+
+ @Json(name = "size")
+ val size: Long? = null,
+
+ @Json(name = "size_short")
+ val sizeShort: String? = null,
+
+ @Json(name = "md5")
+ val md5: String? = null,
+
+ @Json(name = "link")
+ override val link: String? = null,
+
+ @Json(name = "width")
+ val width: Int? = null,
+
+ @Json(name = "height")
+ val height: Int? = null,
+
+ @Json(name = "quality")
+ val videoQuality: String? = null,
+
+ @Json(name = "expires")
+ override val linkExpirationTime: Date? = null,
+
+ @Json(name = "fps")
+ val fps: Double? = null,
+
+ @Json(name = "type")
+ val rawType: String? = null
+) : VideoFile
+
+/**
+ * @see DownloadableVideoFile.videoQuality
+ * @see VideoQualityType
+ */
+val DownloadableVideoFile.qualityType: VideoQualityType
+ get() = videoQuality.asEnum(VideoQualityType.UNKNOWN)
+
+/**
+ * @see DownloadableVideoFile.rawType
+ * @see VideoSourceType
+ */
+val DownloadableVideoFile.type: VideoSourceType
+ get() = rawType.asEnum(VideoSourceType.UNKNOWN)
diff --git a/models/src/main/java/com/vimeo/networking2/HlsVideoFile.kt b/models/src/main/java/com/vimeo/networking2/HlsVideoFile.kt
index d20d81154..874ea3f62 100644
--- a/models/src/main/java/com/vimeo/networking2/HlsVideoFile.kt
+++ b/models/src/main/java/com/vimeo/networking2/HlsVideoFile.kt
@@ -3,7 +3,7 @@ package com.vimeo.networking2
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.vimeo.networking2.annotations.Internal
-import com.vimeo.networking2.common.VideoFile
+import com.vimeo.networking2.common.LoggingVideoFile
import java.util.Date
/**
@@ -31,4 +31,4 @@ data class HlsVideoFile(
@Internal
@Json(name = "live")
val live: LiveHeartbeat? = null
-) : VideoFile
+) : LoggingVideoFile
diff --git a/models/src/main/java/com/vimeo/networking2/Play.kt b/models/src/main/java/com/vimeo/networking2/Play.kt
index cff7402d8..a1cbf58a3 100644
--- a/models/src/main/java/com/vimeo/networking2/Play.kt
+++ b/models/src/main/java/com/vimeo/networking2/Play.kt
@@ -10,57 +10,44 @@ import com.vimeo.networking2.enums.asEnum
/**
* Play information.
+ *
+ * @param dash The DASH video file.
+ * @param hls HLS video files.
+ * @param progress The play progress in seconds.
+ * @param progressive Progressive files.
+ * @param source The source file of the video.
+ * @param videoPlayStatus The play status of the video. See [Play.videoPlayStatusType].
+ * @param drm The DRM play data for a protected stream.
*/
@Internal
@JsonClass(generateAdapter = true)
data class Play(
- /**
- * The DASH video file.
- */
@Internal
@Json(name = "dash")
val dash: DashVideoFile? = null,
- /**
- * HLS video files.
- */
@Internal
@Json(name = "hls")
val hls: HlsVideoFile? = null,
- /**
- * The play progress in seconds.
- */
@Internal
@Json(name = "progress")
val progress: PlayProgress? = null,
- /**
- * Progressive files.
- */
+ @Deprecated("Use the download property on a Video instead")
@Internal
@Json(name = "progressive")
val progressive: List? = null,
- /**
- * The source file of the video.
- */
@Internal
@Json(name = "source")
val source: List? = null,
- /**
- * The play status of the video.
- * @see Play.videoPlayStatusType
- */
@Internal
@Json(name = "status")
val videoPlayStatus: String? = null,
- /**
- * The DRM play data for a protected stream.
- */
@Internal
@Json(name = "drm")
val drm: Drm? = null
diff --git a/models/src/main/java/com/vimeo/networking2/ProgrammedContentItem.kt b/models/src/main/java/com/vimeo/networking2/ProgrammedContentItem.kt
index 9e6b4ec83..22224e273 100644
--- a/models/src/main/java/com/vimeo/networking2/ProgrammedContentItem.kt
+++ b/models/src/main/java/com/vimeo/networking2/ProgrammedContentItem.kt
@@ -1,4 +1,4 @@
-@file:JvmName("CinemaUtils")
+@file:JvmName("ProgrammedContentItemUtils")
package com.vimeo.networking2
diff --git a/models/src/main/java/com/vimeo/networking2/ProgressiveVideoFile.kt b/models/src/main/java/com/vimeo/networking2/ProgressiveVideoFile.kt
index 2f40e93c9..e44d9b8a7 100644
--- a/models/src/main/java/com/vimeo/networking2/ProgressiveVideoFile.kt
+++ b/models/src/main/java/com/vimeo/networking2/ProgressiveVideoFile.kt
@@ -4,7 +4,7 @@ package com.vimeo.networking2
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
-import com.vimeo.networking2.common.VideoFile
+import com.vimeo.networking2.common.LoggingVideoFile
import com.vimeo.networking2.enums.VideoQualityType
import com.vimeo.networking2.enums.VideoSourceType
import com.vimeo.networking2.enums.asEnum
@@ -13,6 +13,7 @@ import java.util.Date
/**
* The representation of a video file that could be one of a number of types.
*/
+@Deprecated("Use DownloadableVideoFile instead")
@JsonClass(generateAdapter = true)
data class ProgressiveVideoFile(
@@ -81,7 +82,7 @@ data class ProgressiveVideoFile(
@Json(name = "width")
val width: Int? = null
-) : VideoFile
+) : LoggingVideoFile
/**
* @see ProgressiveVideoFile.videoQuality
diff --git a/models/src/main/java/com/vimeo/networking2/TeamMembership.kt b/models/src/main/java/com/vimeo/networking2/TeamMembership.kt
index edfada5fc..0f5a08cce 100644
--- a/models/src/main/java/com/vimeo/networking2/TeamMembership.kt
+++ b/models/src/main/java/com/vimeo/networking2/TeamMembership.kt
@@ -1,3 +1,5 @@
+@file:JvmName("TeamMembershipUtils")
+
package com.vimeo.networking2
import com.squareup.moshi.Json
diff --git a/models/src/main/java/com/vimeo/networking2/Video.kt b/models/src/main/java/com/vimeo/networking2/Video.kt
index 330dc86bf..5a71881dc 100644
--- a/models/src/main/java/com/vimeo/networking2/Video.kt
+++ b/models/src/main/java/com/vimeo/networking2/Video.kt
@@ -13,242 +13,171 @@ import java.util.Date
/**
* Video data.
+ *
+ * @param badge Information for the video's badge.
+ * @param categories The categories to which this video belongs.
+ * @param contentRating The content ratings of this video.
+ * @param context The context of the video's subscription, if this video is part of a subscription.
+ * @param createdTime The time in ISO 8601 format when the video was created.
+ * @param description A brief explanation of the video's content.
+ * @param download A list of downloadable files.
+ * @param duration The video's duration in seconds.
+ * @param editSession Information about the Vimeo Create session of a video.
+ * @param embed Information about embedding this video.
+ * @param fileTransferPage Information about the file transfer page associated with this video. This data requires a
+ * bearer token with the private scope.
+ * @param height The video's height in pixels.
+ * @param isPlayable Whether the clip is playable.
+ * @param language The video's primary language.
+ * @param lastUserActionEventDate The time in ISO 8601 format when the user last modified the video.
+ * @param license The Creative Commons license used for the video. See [Video.licenseType].
+ * @param link The link to the video.
+ * @param live Live playback information.
+ * @param metadata The video's metadata.
+ * @param modifiedTime The time in ISO 8601 format when the video metadata was last modified.
+ * @param name The video's title.
+ * @param parentFolder Information about the folder that contains the video, or null if it is in the root directory.
+ * @param password The privacy-enabled password to watch this video. This data requires a bearer token with the private
+ * scope.
+ * @param pictures The active picture for this video.
+ * @param play The Play representation.
+ * @param privacy The video's privacy setting.
+ * @param releaseTime The time in ISO 8601 format when the video was released.
+ * @param resourceKey The resource key string of the video.
+ * @param reviewPage Information about the review page associated with this video. This data requires a bearer token
+ * with the private scope.
+ * @param spatial 360 spatial data.
+ * @param stats A collection of stats associated with this video.
+ * @param status The status code for the availability of the video. This field is deprecated in favor of [upload] and
+ * [transcode]. See [Video.statusType].
+ * @param tags An array of all tags assigned to this video.
+ * @param transcode The transcode information for a video upload.
+ * @param upload The upload information for this video.
+ * @param uri The video's canonical relative URI.
+ * @param user The video owner.
+ * @param width The video's width in pixels.
*/
@JsonClass(generateAdapter = true)
data class Video(
- /**
- * Information for the video's badge.
- */
@Json(name = "badge")
val badge: VideoBadge? = null,
- /**
- * The categories to which this video belongs.
- */
@Json(name = "categories")
val categories: List? = null,
- /**
- * The content ratings of this video.
- */
@Json(name = "content_rating")
val contentRating: List? = null,
- /**
- * The context of the video's subscription, if this video is part of a subscription.
- */
@Json(name = "context")
val context: VideoContext? = null,
- /**
- * The time in ISO 8601 format when the video was created.
- */
@Json(name = "created_time")
val createdTime: Date? = null,
- /**
- * A brief explanation of the video's content.
- */
@Json(name = "description")
val description: String? = null,
- /**
- * The video's duration in seconds.
- */
+ @Json(name = "download")
+ val download: List? = null,
+
@Json(name = "duration")
val duration: Int? = null,
- /**
- * Information about embedding this video.
- */
+ @Json(name = "edit_session")
+ val editSession: EditSession? = null,
+
@Json(name = "embed")
val embed: VideoEmbed? = null,
- /**
- * The video's height in pixels.
- */
+ @Internal
+ @Json(name = "file_transfer")
+ val fileTransferPage: FileTransferPage? = null,
+
@Json(name = "height")
val height: Int? = null,
- /**
- * The video's primary language.
- */
+ @Json(name = "is_playable")
+ val isPlayable: Boolean? = null,
+
@Json(name = "language")
val language: String? = null,
- /**
- * The time in ISO 8601 format when the user last modified the video.
- */
@Json(name = "last_user_action_event_date")
val lastUserActionEventDate: Date? = null,
- /**
- * The Creative Commons license used for the video.
- * @see Video.licenseType
- */
@Json(name = "license")
val license: String? = null,
- /**
- * The link to the video.
- */
@Json(name = "link")
val link: String? = null,
- /**
- * Live playback information.
- */
@Json(name = "live")
val live: Live? = null,
- /**
- * The video's metadata.
- */
@Json(name = "metadata")
val metadata: Metadata? = null,
- /**
- * The time in ISO 8601 format when the video metadata was last modified.
- */
@Json(name = "modified_time")
val modifiedTime: Date? = null,
- /**
- * The video's title.
- */
@Json(name = "name")
val name: String? = null,
- /**
- * Information about the folder that contains the video, or null if it is in the root directory.
- */
@Json(name = "parent_project")
val parentFolder: Folder? = null,
- /**
- * The privacy-enabled password to watch this video.
- * This data requires a bearer token with the private scope.
- */
@Internal
@Json(name = "password")
val password: String? = null,
- /**
- * The active picture for this video.
- */
@Json(name = "pictures")
val pictures: PictureCollection? = null,
- /**
- * The Play representation.
- */
@Internal
@Json(name = "play")
val play: Play? = null,
- /**
- * The video's privacy setting.
- */
@Json(name = "privacy")
val privacy: Privacy? = null,
- /**
- * The time in ISO 8601 format when the video was released.
- */
@Json(name = "release_time")
val releaseTime: Date? = null,
- /**
- * The resource key string of the video.
- */
@Json(name = "resource_key")
val resourceKey: String? = null,
- /**
- * Information about the review page associated with this video. This data requires a
- * bearer token with the private scope.
- */
@Internal
@Json(name = "review_page")
val reviewPage: ReviewPage? = null,
- /**
- * Information about the file transfer page associated with this video. This data
- * requires a bearer token with the private scope.
- */
- @Internal
- @Json(name = "file_transfer")
- val fileTransferPage: FileTransferPage? = null,
-
- /**
- * 360 spatial data.
- */
@Json(name = "spatial")
val spatial: Spatial? = null,
- /**
- * A collection of stats associated with this video.
- */
@Json(name = "stats")
val stats: VideoStats? = null,
- /**
- * The status code for the availability of the video. This field is deprecated in favor
- * of [upload] and [transcode].
- * @see Video.statusType
- */
@Json(name = "status")
@Deprecated("This property is deprecated in favor of upload and transcode.")
val status: String? = null,
- /**
- * An array of all tags assigned to this video.
- */
@Json(name = "tags")
val tags: List? = null,
- /**
- * The transcode information for a video upload.
- */
@Json(name = "transcode")
val transcode: Transcode? = null,
- /**
- * The upload information for this video.
- */
@Json(name = "upload")
val upload: Upload? = null,
- /**
- * The video's canonical relative URI.
- */
@Json(name = "uri")
val uri: String? = null,
- /**
- * The video owner.
- */
@Json(name = "user")
val user: User? = null,
- /**
- * The video's width in pixels.
- */
@Json(name = "width")
- val width: Int? = null,
-
- /**
- * Information about the Vimeo Create session of a video.
- */
- @Json(name = "edit_session")
- val editSession: EditSession? = null,
-
- /**
- * Whether the clip is playable.
- */
- @Json(name = "is_playable")
- val isPlayable: Boolean? = null
+ val width: Int? = null
) : Entity {
diff --git a/models/src/main/java/com/vimeo/networking2/VideoStatus.kt b/models/src/main/java/com/vimeo/networking2/VideoStatus.kt
index b8455778d..b257ba797 100644
--- a/models/src/main/java/com/vimeo/networking2/VideoStatus.kt
+++ b/models/src/main/java/com/vimeo/networking2/VideoStatus.kt
@@ -1,3 +1,5 @@
+@file:JvmName("VideoStatusUtils")
+
package com.vimeo.networking2
import com.squareup.moshi.Json
diff --git a/models/src/main/java/com/vimeo/networking2/common/Connection.kt b/models/src/main/java/com/vimeo/networking2/common/Connection.kt
index d50860626..2979e98ff 100644
--- a/models/src/main/java/com/vimeo/networking2/common/Connection.kt
+++ b/models/src/main/java/com/vimeo/networking2/common/Connection.kt
@@ -19,6 +19,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
+@file:JvmName("ConnectionUtils")
+
package com.vimeo.networking2.common
import com.vimeo.networking2.enums.ApiOptionsType
diff --git a/models/src/main/java/com/vimeo/networking2/common/LoggingVideoFile.kt b/models/src/main/java/com/vimeo/networking2/common/LoggingVideoFile.kt
new file mode 100644
index 000000000..73e16df13
--- /dev/null
+++ b/models/src/main/java/com/vimeo/networking2/common/LoggingVideoFile.kt
@@ -0,0 +1,11 @@
+package com.vimeo.networking2.common
+
+/**
+ * A [VideoFile] that supports logging.
+ */
+interface LoggingVideoFile : VideoFile {
+ /**
+ * The URL for logging events.
+ */
+ val log: String?
+}
diff --git a/models/src/main/java/com/vimeo/networking2/common/VideoFile.kt b/models/src/main/java/com/vimeo/networking2/common/VideoFile.kt
index 0711f2312..e0e3d95a2 100644
--- a/models/src/main/java/com/vimeo/networking2/common/VideoFile.kt
+++ b/models/src/main/java/com/vimeo/networking2/common/VideoFile.kt
@@ -16,9 +16,4 @@ interface VideoFile {
* The time in ISO 8601 format when the link to the playable file expires.
*/
val linkExpirationTime: Date?
-
- /**
- * The URL for logging events.
- */
- val log: String?
}
diff --git a/models/src/main/java/com/vimeo/networking2/enums/VideoQualityType.kt b/models/src/main/java/com/vimeo/networking2/enums/VideoQualityType.kt
index 73011798e..26c4ab89c 100644
--- a/models/src/main/java/com/vimeo/networking2/enums/VideoQualityType.kt
+++ b/models/src/main/java/com/vimeo/networking2/enums/VideoQualityType.kt
@@ -13,5 +13,7 @@ enum class VideoQualityType(override val value: String?) : StringValue {
SD("sd"),
+ SOURCE("source"),
+
UNKNOWN(null)
}