Skip to content

Commit

Permalink
format the download code
Browse files Browse the repository at this point in the history
Signed-off-by: the-dagger <harshithdwivedi@gmail.com>
  • Loading branch information
harshithdwivedi committed Dec 2, 2018
1 parent 95f24e9 commit 70f8b30
Show file tree
Hide file tree
Showing 13 changed files with 47 additions and 48 deletions.
Expand Up @@ -7,7 +7,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.ahmadrosid.svgloader.SvgLoader
import com.codingblocks.cbonlineapp.Utils.ProgressBarAnimation
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.adapters.SectionsDataAdapter
import com.codingblocks.onlineapi.Clients
import com.codingblocks.onlineapi.models.Sections
Expand Down Expand Up @@ -64,7 +64,7 @@ class CourseActivity : AppCompatActivity(), AnkoLogger {

val service = Clients.onlineV2PublicClient

Clients.onlineV2PublicClient.courseById(courseId).enqueue(retrofitcallback { t, resp ->
Clients.onlineV2PublicClient.courseById(courseId).enqueue(retrofitCallback { t, resp ->
resp?.body()?.let { it ->
skeletonScreen.hide()
coursePageTitle.text = courseName
Expand Down Expand Up @@ -138,7 +138,7 @@ class CourseActivity : AppCompatActivity(), AnkoLogger {
}

fun fetchRating() {
Clients.api.getCourseRating(courseId).enqueue(retrofitcallback { throwable, response ->
Clients.api.getCourseRating(courseId).enqueue(retrofitCallback { throwable, response ->
response?.body().let { it?.apply {
coursePageRatingCountTv.text = count.toString() + " Rating"
coursePageRatingTv.text = rating + " out of 5 stars"
Expand Down
Expand Up @@ -10,7 +10,7 @@ import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.fragments.AllCourseFragment
import com.codingblocks.cbonlineapp.fragments.HomeFragment
import com.codingblocks.cbonlineapp.fragments.MyCoursesFragment
Expand Down Expand Up @@ -54,7 +54,7 @@ class HomeActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
private fun fetchUser() {
if (!prefs.SP_ACCESS_TOKEN_KEY.equals("access_token")) {
info { prefs.SP_ACCESS_TOKEN_KEY }
Clients.api.getMe("JWT " + prefs.SP_JWT_TOKEN_KEY).enqueue(retrofitcallback { t, resp ->
Clients.api.getMe("JWT " + prefs.SP_JWT_TOKEN_KEY).enqueue(retrofitCallback { t, resp ->
resp?.body()?.let { it ->
if (resp.isSuccessful) {
val jSONObject = resp.body()!!.getAsJsonObject("data").getAsJsonObject("attributes")
Expand Down
Expand Up @@ -7,7 +7,7 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.onlineapi.Clients
import kotlinx.android.synthetic.main.activity_login.*
import org.jetbrains.anko.AnkoLogger
Expand Down Expand Up @@ -44,7 +44,7 @@ class LoginActivity : AppCompatActivity(), AnkoLogger {
authComplete = true
info { "grant code $grantCode" }

Clients.apiToken.getToken(grantCode).enqueue(retrofitcallback { _, response ->
Clients.apiToken.getToken(grantCode).enqueue(retrofitCallback { _, response ->
info { "token" + response!!.message() }

if (response!!.isSuccessful) {
Expand Down
Expand Up @@ -2,7 +2,7 @@ package com.codingblocks.cbonlineapp

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.adapters.TabLayoutAdapter
import com.codingblocks.cbonlineapp.database.*
import com.codingblocks.cbonlineapp.fragments.AnnouncementsFragment
Expand Down Expand Up @@ -42,7 +42,7 @@ class MyCourseActivity : AppCompatActivity(), AnkoLogger {
setupViewPager()


Clients.onlineV2PublicClient.enrolledCourseById("JWT " + prefs.SP_JWT_TOKEN_KEY, attempt_Id).enqueue(retrofitcallback { throwable, response ->
Clients.onlineV2PublicClient.enrolledCourseById("JWT " + prefs.SP_JWT_TOKEN_KEY, attempt_Id).enqueue(retrofitCallback { throwable, response ->
response?.body()?.let {

val course = it.run?.course?.run {
Expand Down
Expand Up @@ -22,7 +22,6 @@ class VideoPlayerActivity : AppCompatActivity(), View.OnClickListener, OnPrepare

override fun onStart() {
super.onStart()
//TODO : Pass the url from the course content activity to this activity
val url = intent.getStringExtra("FOLDER_NAME")
setupVideoView(url)
}
Expand Down
Expand Up @@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.ahmadrosid.svgloader.SvgLoader
import com.codingblocks.cbonlineapp.MyCourseActivity
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.prefs
import com.codingblocks.onlineapi.Clients
import com.codingblocks.onlineapi.models.MyCourseRuns
Expand Down Expand Up @@ -70,7 +70,7 @@ MyCoursesDataAdapter(private var courseData: ArrayList<MyCourseRuns>?, var conte
instructors += "+" + (data.course!!.instructors!!.size - 2) + " more"
break
}
Clients.onlineV2PublicClient.instructorsById(data.course!!.instructors!![i].id!!).enqueue(retrofitcallback { throwable, response ->
Clients.onlineV2PublicClient.instructorsById(data.course!!.instructors!![i].id!!).enqueue(retrofitCallback { throwable, response ->
response?.body().let {
instructors += it?.name + ", "
if (i == 0)
Expand All @@ -95,7 +95,7 @@ MyCoursesDataAdapter(private var courseData: ArrayList<MyCourseRuns>?, var conte
}

Clients.api.getMyCourseProgress("JWT "+ prefs.SP_JWT_TOKEN_KEY,
data.run_attempts!![0].id!!).enqueue(retrofitcallback { t, progressResponse ->
data.run_attempts!![0].id!!).enqueue(retrofitCallback { t, progressResponse ->
progressResponse?.body().let {
var progress = it!!["percent"] as Double
itemView.courseProgress.progress = (progress).toInt()
Expand Down
Expand Up @@ -14,7 +14,7 @@ import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.RecyclerView
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.VideoPlayerActivity
import com.codingblocks.cbonlineapp.database.AppDatabase
import com.codingblocks.cbonlineapp.database.ContentDao
Expand Down Expand Up @@ -89,37 +89,33 @@ class SectionDetailsAdapter(private var sectionData: ArrayList<CourseSection>?,
ll.addView(inflatedView)
inflatedView.setOnClickListener {
info { "onclick" }
// download lecture index.m3u8,video.key and video.m3u8
//TODO
///refractor this code
Clients.apiVideo.getVideoFiles(url, "index.m3u8").enqueue(retrofitcallback { index_throwable, index_response ->
index_response?.body()?.let {
writeResponseBodyToDisk(it, url, "index.m3u8")
Clients.apiVideo.getVideoFiles(url, "video.m3u8").enqueue(retrofitcallback { video_throwable, video_response ->
video_response?.body()?.let {
writeResponseBodyToDisk(it, url, "video.m3u8")
Clients.apiVideo.getVideoFiles(url, "video.key").enqueue(retrofitcallback { key_throwable, key_response ->
key_response?.body()?.let {
writeResponseBodyToDisk(it, url, "video.key")
val videoChunks = MediaUtils.getCourseDownloadUrls(url, context)
videoChunks.forEach { videoName: String ->
Clients.apiVideo.getVideoFiles(url, videoName).enqueue(retrofitcallback { throwable, response ->
response?.body().let {
writeResponseBodyToDisk(it!!, url, videoName)
}
})
}
}
})

}
})


// download lecture index.m3u8,video.key and video.m3u8
//TODO : Error handling
//No need to nest every call within one another, we can start the larger downloads sequentially once the smaller
//downloads (m3u8 and key) have been completed
Clients.initiateDowload(url, "index.m3u8").enqueue(retrofitCallback { _, response ->
response?.body()?.let { indexResponse ->
writeResponseBodyToDisk(indexResponse, url, "index.m3u8")
}
})

Clients.initiateDowload(url, "video.m3u8").enqueue(retrofitCallback { throwable, response ->
response?.body()?.let { videoResponse ->
writeResponseBodyToDisk(videoResponse, url, "video.m3u8")
}
})

Clients.initiateDowload(url, "video.key").enqueue(retrofitCallback { throwable, response ->
response?.body()?.let { keyResponse ->
writeResponseBodyToDisk(keyResponse, url, "video.key")
val videoChunks = MediaUtils.getCourseDownloadUrls(url, context)
videoChunks.forEach { videoName: String ->
Clients.initiateDowload(url, videoName).enqueue(retrofitCallback { throwable, response ->
writeResponseBodyToDisk(response?.body()!!, url, videoName)
})
}
}
})
}
var arrowAnimation: RotateAnimation

Expand Down
Expand Up @@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.codingblocks.cbonlineapp.adapters.CourseDataAdapter
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.ui.AllCourseFragmentUi
import com.codingblocks.onlineapi.Clients
import com.ethanhua.skeleton.Skeleton
Expand Down Expand Up @@ -55,7 +55,7 @@ class AllCourseFragment : Fragment(), AnkoLogger {
private fun fetchAllCourses() {


Clients.onlineV2PublicClient.getAllCourses().enqueue(retrofitcallback { t, resp ->
Clients.onlineV2PublicClient.getAllCourses().enqueue(retrofitCallback { t, resp ->
resp?.body()?.let {
courseDataAdapter.setData(it)
skeletonScreen.hide()
Expand Down
Expand Up @@ -12,6 +12,7 @@ import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.adapters.SectionDetailsAdapter
import com.codingblocks.cbonlineapp.database.AppDatabase
import com.codingblocks.cbonlineapp.database.CourseSection
import kotlinx.android.synthetic.main.activity_course.view.*
import kotlinx.android.synthetic.main.fragment_course_content.view.*
import org.jetbrains.anko.AnkoLogger
import org.jetbrains.anko.info
Expand Down
Expand Up @@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.codingblocks.cbonlineapp.adapters.CourseDataAdapter
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.ui.HomeFragmentUi
import com.codingblocks.onlineapi.Clients
import com.ethanhua.skeleton.Skeleton
Expand Down Expand Up @@ -53,7 +53,7 @@ class HomeFragment : Fragment() {
private fun fetchRecommendedCourses() {


Clients.onlineV2PublicClient.getRecommendedCourses().enqueue(retrofitcallback { t, resp ->
Clients.onlineV2PublicClient.getRecommendedCourses().enqueue(retrofitCallback { t, resp ->
resp?.body()?.let {
courseDataAdapter.setData(it)
skeletonScreen.hide()
Expand Down
Expand Up @@ -8,7 +8,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.codingblocks.cbonlineapp.R
import com.codingblocks.cbonlineapp.Utils.retrofitcallback
import com.codingblocks.cbonlineapp.Utils.retrofitCallback
import com.codingblocks.cbonlineapp.adapters.MyCoursesDataAdapter
import com.codingblocks.cbonlineapp.prefs
import com.codingblocks.cbonlineapp.ui.AllCourseFragmentUi
Expand Down Expand Up @@ -57,7 +57,7 @@ class MyCoursesFragment : Fragment(), AnkoLogger {
private fun fetchAllCourses() {


Clients.onlineV2PublicClient.getMyCourses("JWT " + prefs.SP_JWT_TOKEN_KEY).enqueue(retrofitcallback { t, resp ->
Clients.onlineV2PublicClient.getMyCourses("JWT " + prefs.SP_JWT_TOKEN_KEY).enqueue(retrofitCallback { t, resp ->
resp?.body()?.let {
info { it.toString() }
courseDataAdapter.setData(it)
Expand Down
Expand Up @@ -4,7 +4,7 @@ import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

fun <T> retrofitcallback(fn: (Throwable?, Response<T>?) -> Unit): Callback<T> {
fun <T> retrofitCallback(fn: (Throwable?, Response<T>?) -> Unit): Callback<T> {
return object : Callback<T> {
override fun onFailure(call: Call<T>?, t: Throwable?) = fn(t, null)
override fun onResponse(call: Call<T>?, response: Response<T>?) = fn(null, response)
Expand Down
Expand Up @@ -11,6 +11,8 @@ import com.github.jasminb.jsonapi.retrofit.JSONAPIConverterFactory
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

Expand Down Expand Up @@ -94,6 +96,7 @@ object Clients {

val apiVideo = videoDownloadClient.create(OnlinePublicApi::class.java)

fun initiateDowload(url: String, fileName: String) = apiVideo.getVideoFiles(url, fileName)


}

0 comments on commit 70f8b30

Please sign in to comment.