Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove ImageUrl in favor of a regular String #52

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@@ -17,12 +16,12 @@ data class Channel(
override val title: String,
override val lead: String? = null,
override val description: String? = null,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageFocalPoint: FocalPoint? = null,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
override val transmission: Transmission,
override val timeTableUrl: String? = null,
@SerialName("imageUrlRaw")
override val rawImageUrl: ImageUrl? = null
override val rawImageUrl: String? = null
) : SRGChannelMetadata
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -23,7 +22,7 @@ data class Chapter(
override val title: String,
override val lead: String? = null,
override val description: String? = null,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
override val blockReason: BlockReason? = null,
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
@@ -17,7 +16,7 @@ import java.util.Date
data class Episode(
val id: String,
override val title: String,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val lead: String? = null,
override val description: String? = null,
override val imageTitle: String? = null,
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -24,7 +23,7 @@ data class Media(
override val type: Type,
override val date: Date,
override val duration: Long,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageFocalPoint: FocalPoint? = null,
override val lead: String? = null,
override val description: String? = null,
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@@ -17,14 +16,14 @@ data class NowAndNext(
override val title: String,
override val lead: String? = null,
override val description: String? = null,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageFocalPoint: FocalPoint? = null,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
override val transmission: Transmission,
override val timeTableUrl: String? = null,
@SerialName("imageUrlRaw")
override val rawImageUrl: ImageUrl? = null,
override val rawImageUrl: String? = null,
val now: Program? = null,
val next: Program? = null
) : SRGChannelMetadata
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -21,7 +20,7 @@ data class Program(
val endTime: Date,
override val lead: String? = null,
override val description: String? = null,
val imageUrl: ImageUrl? = null,
val imageUrl: String? = null,
val imageFocalPoint: FocalPoint? = null,
val imageTitle: String? = null,
val imageCopyright: String? = null,
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlinx.serialization.Serializable

/**
@@ -31,7 +30,7 @@ data class Representation(
val pickRandomElement: Boolean
get() = properties?.pickRandomElement == true

val imageUrl: ImageUrl?
val imageUrl: String?
get() = properties?.imageUrl

val imageFocalPoint: FocalPoint?
@@ -47,7 +46,7 @@ data class Representation(
val label: String? = null,
val hasDetailPage: Boolean? = null,
val pickRandomElement: Boolean? = null,
val imageUrl: ImageUrl? = null,
val imageUrl: String? = null,
val imageFocalPoint: FocalPoint? = null,
val link: Link? = null,
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl

/**
* Copyright (c) SRG SSR. All rights reserved.
* <p>
@@ -23,7 +21,7 @@ interface SRGMetadata {
}

interface SRGImageMetadata {
val imageUrl: ImageUrl
val imageUrl: String
val imageTitle: String?
val imageCopyright: String?
val imageFocalPoint: FocalPoint?
@@ -32,5 +30,5 @@ interface SRGImageMetadata {
interface SRGChannelMetadata : SRGIdentifierMetadata, SRGMetadata, SRGImageMetadata {
val transmission: Transmission
val timeTableUrl: String?
val rawImageUrl: ImageUrl?
val rawImageUrl: String?
}
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -36,7 +35,7 @@ data class Segment @JvmOverloads constructor(
override val playableAbroad: Boolean,
override val lead: String? = null,
override val description: String? = null,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageFocalPoint: FocalPoint? = null,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlinx.serialization.Serializable

/**
@@ -15,18 +14,18 @@ data class Show(
val transmission: Transmission,
override val urn: String,
override val title: String,
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val lead: String? = null,
override val description: String? = null,
val primaryChannelUrn: String? = null,
val primaryChannelId: String? = null,
override val imageFocalPoint: FocalPoint? = null,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
val bannerImageUrl: ImageUrl? = null,
val posterImageUrl: ImageUrl? = null,
val bannerImageUrl: String? = null,
val posterImageUrl: String? = null,
val posterImageIsFallbackUrl: Boolean = true,
val podcastImageUrl: ImageUrl? = null,
val podcastImageUrl: String? = null,
val podcastImageIsFallbackUrl: Boolean = true,
val podcastSubscriptionUrl: String? = null,
val podcastFeedSdUrl: String? = null,
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@

package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.serializer.DateSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
@@ -26,8 +25,8 @@ data class Song(
@Serializable
data class Cd(
val name: String,
val coverUrlSmall: ImageUrl? = null,
val coverUrlLarge: ImageUrl? = null
val coverUrlSmall: String? = null,
val coverUrlLarge: String? = null
)

@Serializable
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlinx.serialization.Serializable

/**
@@ -18,7 +17,7 @@ data class Topic(
override val lead: String? = null,
override val description: String? = null,
val viewedMedias: Int? = null,
val imageUrl: ImageUrl? = null,
val imageUrl: String? = null,
val imageTitle: String? = null,
val imageFocalPoint: FocalPoint? = null,
val imageCopyright: String? = null,

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import java.util.Date
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -101,7 +100,7 @@ class ChapterTest {
vendor = Vendor.RTS,
urn = "urn:rts:video:123456",
title = "chapter-title",
imageUrl = ImageUrl("https://image.url"),
imageUrl = "https://image.url",
type = Type.EPISODE,
date = Date(),
duration = 90.minutes.inWholeMilliseconds,
@@ -127,7 +126,7 @@ class ChapterTest {
duration = 30.minutes.inWholeMilliseconds,
displayable = true,
playableAbroad = true,
imageUrl = ImageUrl("https://image.url"),
imageUrl = "https://image.url",
blockReason = BlockReason.LEGAL.takeIf { blocked },
)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import java.util.Date
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -51,7 +50,7 @@ class MediaCompositionTest {
vendor = Vendor.RTS,
urn = urn,
title = "chapter-title",
imageUrl = ImageUrl("https://image.url"),
imageUrl = "https://image.url",
type = Type.EPISODE,
date = Date(),
duration = 90.minutes.inWholeMilliseconds,
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlin.test.Test
import kotlin.test.assertEquals

@@ -29,7 +28,7 @@ class ProgramGuideTest {
vendor = Vendor.RTS,
urn = "urn:rts:video:$index",
title = "channel-title$index",
imageUrl = ImageUrl("https://image.url/"),
imageUrl = "https://image.url/",
transmission = Transmission.TV,
)
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
@@ -49,7 +48,7 @@ class RepresentationTest {
label = "label",
hasDetailPage = true,
pickRandomElement = true,
imageUrl = ImageUrl("https://image.url/image.jpg"),
imageUrl = "https://image.url/image.jpg",
imageFocalPoint = FocalPoint(25, 75),
link = Link(
targetType = "target-type",
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.remote.BlockReason.ENDDATE
import ch.srg.dataProvider.integrationlayer.data.remote.BlockReason.STARTDATE
import ch.srg.dataProvider.integrationlayer.data.remote.TimeAvailability.AVAILABLE
@@ -267,7 +266,7 @@ class SRGMediaMetadataTest {
override val id: String,
override val vendor: Vendor,
// SRGImageMetadata
override val imageUrl: ImageUrl,
override val imageUrl: String,
override val imageTitle: String? = null,
override val imageCopyright: String? = null,
override val imageFocalPoint: FocalPoint? = null,
@@ -291,7 +290,7 @@ class SRGMediaMetadataTest {
urn = "urn:rts:video:123456",
id = "media-id",
vendor = Vendor.RTS,
imageUrl = ImageUrl("https://image.url/"),
imageUrl = "https://image.url/",
title = "media-title",
)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package ch.srg.dataProvider.integrationlayer.data.remote

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import java.util.Date
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -23,7 +22,7 @@ class SegmentTest {
duration = 90.minutes.inWholeMilliseconds,
displayable = true,
playableAbroad = true,
imageUrl = ImageUrl("https://image.url/"),
imageUrl = "https://image.url/",
)

assertNull(segment.markInDate)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,29 +1,32 @@
package ch.srg.dataProvider.integrationlayer.request.image

import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.data.ImageUrlDecorator
import ch.srg.dataProvider.integrationlayer.request.IlHost

@JvmOverloads
fun ImageUrl.decorated(widthPixels: Int, ilHost: IlHost = IlHost.PROD): String {
fun String.decorated(widthPixels: Int, ilHost: IlHost = IlHost.PROD): String {
return decorated(ImageUrlDecoratorInstances.getOrCreate(ilHost), widthPixels)
}

@JvmOverloads
fun ImageUrl.decorated(width: ImageWidth, ilHost: IlHost = IlHost.PROD): String {
fun String.decorated(width: ImageWidth, ilHost: IlHost = IlHost.PROD): String {
return decorated(widthPixels = width.widthPixels, ilHost = ilHost)
}

@JvmOverloads
fun ImageUrl.decorated(imageSize: ImageSize, ilHost: IlHost = IlHost.PROD): String {
fun String.decorated(imageSize: ImageSize, ilHost: IlHost = IlHost.PROD): String {
return decorated(width = imageSize.width, ilHost = ilHost)
}

fun ImageUrl.decorated(decorator: ImageUrlDecorator, width: ImageWidth): String {
fun String.decorated(decorator: ImageUrlDecorator, widthPixels: Int): String {
return decorator.decorate(this, widthPixels)
}

fun String.decorated(decorator: ImageUrlDecorator, width: ImageWidth): String {
return decorated(decorator, width.widthPixels)
}

fun ImageUrl.decorated(decorator: ImageUrlDecorator, imageSize: ImageSize): String {
fun String.decorated(decorator: ImageUrlDecorator, imageSize: ImageSize): String {
return decorated(decorator, imageSize.width)
}

Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@ package ch.srg.dataProvider.integrationlayer

import android.net.Uri
import androidx.test.ext.junit.runners.AndroidJUnit4
import ch.srg.dataProvider.integrationlayer.data.ImageUrl
import ch.srg.dataProvider.integrationlayer.request.IlHost
import ch.srg.dataProvider.integrationlayer.request.image.DefaultImageUrlDecorator
import ch.srg.dataProvider.integrationlayer.request.image.ImageSize
@@ -19,56 +18,56 @@ class TestDefaultImageUrlDecorator {

@Test
fun testPixelValid() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=480"
assertEquals(expected, input.decorated(decorator, 480))
}

@Test
fun testPixelWidthInvalid() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=480"
assertEquals(expected, input.decorated(decorator, 460))
}

@Test
fun testImageSize() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=480"
assertEquals(expected, input.decorated(decorator, ImageSize.MEDIUM))
}

@Test
fun testImageWidth() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=1920"
assertEquals(expected, input.decorated(decorator, ImageWidth.W1920))
}

@Test
fun testOtherIlHost() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il-stage.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=1920"
assertEquals(expected, input.decorated(decorator = DefaultImageUrlDecorator(IlHost.STAGE), width = ImageWidth.W1920))
}

@Test
fun testExtensionImageWidthWithIlHost() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il-stage.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=1920"
assertEquals(expected, input.decorated(ilHost = IlHost.STAGE, width = ImageWidth.W1920))
}

@Test
fun testExtensionImageSizeWithIlHost() {
val input = ImageUrl("https://ws.srf.ch/asset/image/audio/123")
val encodedInput = Uri.encode("https://ws.srf.ch/asset/image/audio/123")
val input = "https://ws.srf.ch/asset/image/audio/123"
val encodedInput = Uri.encode(input)
val expected = "https://il-test.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=480"
assertEquals(expected, input.decorated(ilHost = IlHost.TEST, imageSize = ImageSize.MEDIUM))
}
@@ -87,17 +86,15 @@ class TestDefaultImageUrlDecorator {
"https://swi-services-ch/asset/image/audio/123",
)
for (url in tests) {
val input = ImageUrl(url)
val encodedInput = Uri.encode(url)
val expected = "https://il-test.srgssr.ch/images/?imageUrl=${encodedInput}&format=webp&width=480"
assertEquals(expected, input.decorated(ilHost = IlHost.TEST, imageSize = ImageSize.MEDIUM))
assertEquals(expected, url.decorated(ilHost = IlHost.TEST, imageSize = ImageSize.MEDIUM))
}
}

@Test
fun testInvalidHostNameUrlReturnInputUrl() {
val input = ImageUrl("https://akamai.playsuisse.ch/asset/image/audio/123")
val expected = input.rawUrl
assertEquals(expected, input.decorated(ilHost = IlHost.TEST, imageSize = ImageSize.MEDIUM))
val input = "https://akamai.playsuisse.ch/asset/image/audio/123"
assertEquals(input, input.decorated(ilHost = IlHost.TEST, imageSize = ImageSize.MEDIUM))
}
}