Skip to content

Commit caa62fa

Browse files
committed
Ultimedia added
1 parent a4d27ad commit caa62fa

File tree

11 files changed

+194
-34
lines changed

11 files changed

+194
-34
lines changed

app/src/main/java/com/gapps/videonoapi/ui/base/BaseActivity.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import android.widget.Toast
77
import androidx.appcompat.app.AppCompatActivity
88
import com.gapps.library.api.models.video.VideoPreviewModel
99
import com.gapps.library.ui.bottom_menu.BottomVideoController
10+
import com.gapps.videonoapi.R
1011

11-
abstract class BaseActivity: AppCompatActivity() {
12+
abstract class BaseActivity : AppCompatActivity() {
1213

1314
protected fun showVideo(model: VideoPreviewModel) {
1415
val host = model.videoHosting
@@ -31,7 +32,16 @@ abstract class BaseActivity: AppCompatActivity() {
3132
setSize(model.width, model.height)
3233
setTitle(title)
3334
setVideoUrl(initUrl)
34-
setProgressView(TextView(this@BaseActivity).apply { text = "Loading" })
35+
setBackgroundColor(R.color.colorBackground)
36+
setTextColor(R.color.colorHostName)
37+
setTitleColor(R.color.colorVideoTitle)
38+
setLeftButtonText(R.string.vna_close)
39+
setRightButtonText(R.string.vna_open_in)
40+
setRightButtonTextColor(R.color.colorVideoTitle)
41+
setLeftButtonTextColor(R.color.colorVideoTitle)
42+
setCenterButtonIcon(R.drawable.ic_vna_content_copy)
43+
setCenterButtonIconTint(R.color.colorVideoTitle)
44+
setProgressView(TextView(this@BaseActivity).apply { text = "Loading"; setTextColor(-1) })
3545
show()
3646
}
3747
}

app/src/main/java/com/gapps/videonoapi/ui/main/MainActivity.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ class MainActivity : BaseActivity() {
3636
"https://vzaar.com/videos/401431",
3737
"http://www.hulu.com/w/154323",
3838
"https://ustream.tv/channel/6540154",
39+
"https://ustream.tv/recorded/101541339",
3940
"https://www.ted.com/talks/jill_bolte_taylor_my_stroke_of_insight",
4041
"https://coub.com/view/um0um0",
41-
"https://ustream.tv/recorded/101541339",
42-
"https://asdasdasdasd.tv/recorded/101541339",
43-
"https://www.ultimedia.com/default/index/videogeneric/id/pzkk35/"
42+
"https://www.ultimedia.com/default/index/videogeneric/id/pzkk35/",
43+
"https://notAVideoHost.tv/recorded/101541339"
4444
)
4545

4646
override fun onCreate(savedInstanceState: Bundle?) {
@@ -65,8 +65,8 @@ class MainActivity : BaseActivity() {
6565
videoService = VideoService.build {
6666
with(this@MainActivity)
6767
httpClient(okHttpClient)
68-
enableCache(false)
69-
enableLog(true)
68+
enableCache(true)
69+
enableLog(false)
7070
withCustomVideoInfoModels(UltimediaVideoInfoModel(), MyYoutubeVideoInfoModel())
7171
}
7272
}

app/src/main/res/values/colors.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@
33
<color name="colorPrimary">#008577</color>
44
<color name="colorPrimaryDark">#00574B</color>
55
<color name="colorAccent">#D81B60</color>
6+
<color name="colorBackground">#161627</color>
7+
<color name="colorHostName">#AAAAE2</color>
8+
<color name="colorVideoTitle">#ffffff</color>
9+
610
</resources>

library/src/main/java/com/gapps/library/api/VideoLoadHelper.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.gapps.library.api
22

33
import android.content.Context
4+
import android.util.Log
45
import com.gapps.library.api.models.api.base.VideoInfoModel
56
import com.gapps.library.api.models.video.VideoPreviewModel
67
import com.gapps.library.api.models.video.base.BaseVideoResponse
@@ -20,7 +21,8 @@ import kotlin.coroutines.CoroutineContext
2021
internal class VideoLoadHelper(
2122
private val context: Context?,
2223
private val client: OkHttpClient,
23-
private val isCacheEnabled: Boolean
24+
private val isCacheEnabled: Boolean,
25+
val isLogEnabled: Boolean
2426
) : CoroutineScope {
2527
private val job = Job()
2628
override val coroutineContext: CoroutineContext
@@ -30,6 +32,7 @@ internal class VideoLoadHelper(
3032

3133
private var gson = GsonBuilder()
3234
.setLenient()
35+
.setPrettyPrinting()
3336
.create()
3437

3538
fun getVideoInfo(
@@ -69,13 +72,17 @@ internal class VideoLoadHelper(
6972
try {
7073
val jsonBody = makeCallGetBody(client, finalUrl)
7174

75+
if (isLogEnabled) {
76+
Log.i(VideoService.TAG, "a response from $originalUrl:\n${gson.toJson(jsonBody)}")
77+
}
78+
7279
if (jsonBody == null) {
7380
onSuccess.invoke(VideoPreviewModel.error(originalUrl, "$ERROR_2 \n---> Response is null"))
7481

7582
return@launch
7683
}
7784

78-
val result = fromJson(jsonBody, videoInfoModel.type)
85+
val result = (gson.fromJson(jsonBody, videoInfoModel.type) as BaseVideoResponse)
7986
.toPreview(originalUrl, playLink, videoInfoModel.hostingName, videoId)
8087

8188
onSuccess.invoke(result)

library/src/main/java/com/gapps/library/api/VideoService.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class VideoService(
1818
private val customModels: List<VideoInfoModel<out BaseVideoResponse>>
1919
) {
2020
companion object {
21+
const val TAG = "VideoService"
22+
2123
val videoInfoModelsList = mutableListOf(
2224
CoubVideoInfoModel(),
2325
DailymotionVideoInfoModel(),
@@ -30,7 +32,8 @@ class VideoService(
3032
VzaarVideoInfoModel(),
3133
WistiaVideoInfoModel(),
3234
YoutubeMusicVideoInfoModel(),
33-
YoutubeVideoInfoModel()
35+
YoutubeVideoInfoModel(),
36+
UltimediaVideoInfoModel()
3437
)
3538

3639
inline fun build(block: Builder.() -> Unit) = Builder().apply(block).build()
@@ -51,15 +54,15 @@ class VideoService(
5154
videoInfoModelsList.addAll(customModels)
5255
}
5356

54-
private val videoHelper = VideoLoadHelper(context, client, isCacheEnabled)
57+
private val videoHelper = VideoLoadHelper(context, client, isCacheEnabled, isLogEnabled)
5558

5659
fun loadVideoPreview(
5760
url: String,
5861
onSuccess: (VideoPreviewModel) -> Unit,
5962
onError: ((String, String) -> Unit)? = null
6063
) {
6164
if (isLogEnabled) {
62-
Log.i("VideoService", "loading url: $url")
65+
Log.i(TAG, "loading url: $url")
6366
}
6467

6568
val callback: (VideoPreviewModel) -> Unit = { model: VideoPreviewModel ->
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.gapps.library.api.models.api
2+
3+
import com.gapps.library.api.FORMAT
4+
import com.gapps.library.api.FORMAT_JSON
5+
import com.gapps.library.api.URL
6+
import com.gapps.library.api.models.api.base.VideoInfoModel
7+
import com.gapps.library.api.models.video.ultimedia.UltimediaResponse
8+
9+
class UltimediaVideoInfoModel: VideoInfoModel<UltimediaResponse>() {
10+
override val baseUrl: String
11+
get() = "https://www.ultimedia.com"
12+
//https://regex101.com/r/2AsrOc/1
13+
override val pattern: String
14+
get() = "(?:http[s]?:\\/\\/)?(?:www)?\\.?ultimedia\\.com\\/(?:deliver|default|api)\\/.*\\/([_a-zA-Z0-9]+)\\S*"
15+
override val idPattern: String
16+
get() = pattern
17+
override val type: Class<UltimediaResponse>
18+
get() = UltimediaResponse::class.java
19+
override val hostingName: String
20+
get() = "Ultimedia"
21+
22+
override fun getInfoUrl(incomingUrl: String?): String? {
23+
return "$baseUrl/api/search/oembed?$FORMAT=$FORMAT_JSON&$URL=$incomingUrl"
24+
}
25+
26+
override fun getPlayLink(videoId: String): String {
27+
return "https://www.ultimedia.com/deliver/generic/iframe/src/$videoId/"
28+
}
29+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.gapps.library.api.models.video.ultimedia
2+
3+
4+
import com.gapps.library.api.models.video.VideoPreviewModel
5+
import com.gapps.library.api.models.video.base.BaseVideoResponse
6+
import com.google.gson.annotations.SerializedName
7+
8+
data class UltimediaResponse(
9+
@SerializedName("version")
10+
val version: String = "",
11+
@SerializedName("type")
12+
val type: String = "",
13+
@SerializedName("title")
14+
val title: String = "",
15+
@SerializedName("description")
16+
val description: String = "",
17+
@SerializedName("html")
18+
val html: String = "",
19+
@SerializedName("width")
20+
val width: String = "",
21+
@SerializedName("height")
22+
val height: String = "",
23+
@SerializedName("thumbnail_url")
24+
val thumbnailUrl: String = "",
25+
@SerializedName("thumbnail_width")
26+
val thumbnailWidth: String = "",
27+
@SerializedName("thumbnail_height")
28+
val thumbnailHeight: String = "",
29+
@SerializedName("provider_name")
30+
val providerName: String = "",
31+
@SerializedName("provider_url")
32+
val providerUrl: String = "",
33+
@SerializedName("author_name")
34+
val authorName: String = ""
35+
): BaseVideoResponse{
36+
override fun toPreview(url: String?, linkToPlay: String, hostingName: String, videoId: String): VideoPreviewModel {
37+
return VideoPreviewModel(url, linkToPlay, hostingName, videoId).apply {
38+
this.thumbnailUrl = this@UltimediaResponse.thumbnailUrl
39+
this.videoTitle = this@UltimediaResponse.authorName
40+
this.width = this@UltimediaResponse.width.toInt()
41+
this.height = this@UltimediaResponse.height.toInt()
42+
}
43+
}
44+
}

library/src/main/java/com/gapps/library/cache/VideoModelORM.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.gapps.library.utils.toMD5
99
import java.util.*
1010

1111

12-
private const val TAG = "VideoModelsORM"
12+
private const val TAG = "VideoServiceORM"
1313
private const val TABLE_NAME = "video_model"
1414
private const val COMMA_SEP = ", "
1515

0 commit comments

Comments
 (0)