diff --git a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ActualVideoPageUrlConverter.kt b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ActualVideoPageUrlConverter.kt index efa19e4..68ac127 100644 --- a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ActualVideoPageUrlConverter.kt +++ b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ActualVideoPageUrlConverter.kt @@ -10,7 +10,7 @@ class ActualVideoPageUrlConverter( ) : ParsingExceptionThrowingConverter() { @Throws(IndexOutOfBoundsException::class, CaptchaRequiredException::class) - override fun convertSafely(responseBody: ResponseBody): ActualVideoPageUrl? { + override fun convertSafely(responseBody: ResponseBody): ActualVideoPageUrl { val responseBodyAsString =responseBody.string() return try { val actualVideoPageUrl = responseBodyAsString diff --git a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ParsingExceptionThrowingConverter.kt b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ParsingExceptionThrowingConverter.kt index ee96af6..c9eac15 100644 --- a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ParsingExceptionThrowingConverter.kt +++ b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/ParsingExceptionThrowingConverter.kt @@ -9,13 +9,20 @@ abstract class ParsingExceptionThrowingConverter : Converter @Throws(ParsingException::class, CaptchaRequiredException::class) final override fun convert(value: ResponseBody): T? = - try { + doActionSafely { convertSafely(value) + } + + @Throws(ParsingException::class, CaptchaRequiredException::class) + fun doActionSafely(action: () -> T): T { + try { + return action() } catch (captchaRequiredException: CaptchaRequiredException) { throw captchaRequiredException } catch (throwable: Throwable) { throw ParsingException(cause = throwable) } + } - abstract fun convertSafely(responseBody: ResponseBody): T? + abstract fun convertSafely(responseBody: ResponseBody): T } \ No newline at end of file diff --git a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoFileUrlConverter.kt b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoFileUrlConverter.kt index 9e2256d..93210c3 100644 --- a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoFileUrlConverter.kt +++ b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoFileUrlConverter.kt @@ -3,6 +3,7 @@ package org.fnives.tiktokdownloader.data.network.parsing.converter import okhttp3.ResponseBody import org.fnives.tiktokdownloader.Logger import org.fnives.tiktokdownloader.data.network.exceptions.CaptchaRequiredException +import org.fnives.tiktokdownloader.data.network.exceptions.ParsingException import org.fnives.tiktokdownloader.data.network.parsing.response.VideoFileUrl class VideoFileUrlConverter( @@ -10,12 +11,17 @@ class VideoFileUrlConverter( ) : ParsingExceptionThrowingConverter() { @Throws(IllegalArgumentException::class, IndexOutOfBoundsException::class, CaptchaRequiredException::class) - override fun convertSafely(responseBody: ResponseBody): VideoFileUrl? { - return convertSafely(responseBody.string()) + override fun convertSafely(responseBody: ResponseBody): VideoFileUrl { + return convert(responseBody.string()) + } + + @Throws(ParsingException::class, CaptchaRequiredException::class) + fun convertSafely(responseBody: String): VideoFileUrl { + return doActionSafely { convert(responseBody) } } @Throws(IllegalArgumentException::class, IndexOutOfBoundsException::class, CaptchaRequiredException::class) - fun convertSafely(responseBody: String): VideoFileUrl { + private fun convert(responseBody: String): VideoFileUrl { val html = responseBody.also(throwIfIsCaptchaResponse::invoke) val url = tryToParseDownloadLink(html).also { Logger.logMessage("parsed download link = $it") } ?: tryToParseVideoSrc(html).also { Logger.logMessage("parsed video src = $it") } diff --git a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoResponseConverter.kt b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoResponseConverter.kt index f6c74ed..d233fe9 100644 --- a/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoResponseConverter.kt +++ b/app/src/main/java/org/fnives/tiktokdownloader/data/network/parsing/converter/VideoResponseConverter.kt @@ -5,6 +5,6 @@ import org.fnives.tiktokdownloader.data.network.parsing.response.VideoResponse class VideoResponseConverter : ParsingExceptionThrowingConverter() { - override fun convertSafely(responseBody: ResponseBody): VideoResponse? = + override fun convertSafely(responseBody: ResponseBody): VideoResponse = VideoResponse(responseBody.contentType(), responseBody.byteStream()) } \ No newline at end of file