diff --git a/src/all/shabakatycinemana/build.gradle b/src/all/shabakatycinemana/build.gradle new file mode 100644 index 00000000..f9455ea1 --- /dev/null +++ b/src/all/shabakatycinemana/build.gradle @@ -0,0 +1,11 @@ +ext { + extName = 'ShabakatyCinemana' + extClass = '.ShabakatyCinemana' + extVersionCode = 1 + isNsfw = false +} + +apply from: "$rootDir/common.gradle" + +dependencies { +} \ No newline at end of file diff --git a/src/all/shabakatycinemana/res/mipmap-hdpi/ic_launcher.png b/src/all/shabakatycinemana/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..c151c1af Binary files /dev/null and b/src/all/shabakatycinemana/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/all/shabakatycinemana/res/mipmap-mdpi/ic_launcher.png b/src/all/shabakatycinemana/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..e6165950 Binary files /dev/null and b/src/all/shabakatycinemana/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/all/shabakatycinemana/res/mipmap-xhdpi/ic_launcher.png b/src/all/shabakatycinemana/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..ad6d8cda Binary files /dev/null and b/src/all/shabakatycinemana/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/all/shabakatycinemana/res/mipmap-xxhdpi/ic_launcher.png b/src/all/shabakatycinemana/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..b021a32b Binary files /dev/null and b/src/all/shabakatycinemana/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/all/shabakatycinemana/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/shabakatycinemana/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..3748b4bd Binary files /dev/null and b/src/all/shabakatycinemana/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/all/shabakatycinemana/src/eu/kanade/tachiyomi/animeextension/all/shabakatycinemana/ShabakatyCinemana.kt b/src/all/shabakatycinemana/src/eu/kanade/tachiyomi/animeextension/all/shabakatycinemana/ShabakatyCinemana.kt new file mode 100644 index 00000000..de6d7488 --- /dev/null +++ b/src/all/shabakatycinemana/src/eu/kanade/tachiyomi/animeextension/all/shabakatycinemana/ShabakatyCinemana.kt @@ -0,0 +1,628 @@ +package eu.kanade.tachiyomi.animeextension.all.shabakatycinemana + +import android.app.Application +import android.content.SharedPreferences +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Track +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.parseAs +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.buildClassSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale + +inline fun Response.asModel(deserializer: DeserializationStrategy): T { + return Json.decodeFromString(deserializer, this.body.string()) +} + +inline fun Response.asModelList(deserializer: DeserializationStrategy): List { + return Json.parseToJsonElement(this.body.string()).jsonArray.map { + Json.decodeFromJsonElement(deserializer, it) + } +} + +object SEpisodeDeserializer : DeserializationStrategy { + override val descriptor: SerialDescriptor + get() = buildClassSerialDescriptor("SEpisode") + + override fun deserialize(decoder: Decoder): SEpisode { + val jsonDecoder = decoder as JsonDecoder + val jsonObject = jsonDecoder.decodeJsonElement() as JsonObject + + val nb = jsonObject["nb"]?.jsonPrimitive?.content!! + val episodeNumber = jsonObject["episodeNummer"]?.jsonPrimitive?.content + val seasonNumber = jsonObject["season"]?.jsonPrimitive?.content + val seasonEpisode = arrayOf(seasonNumber, episodeNumber).joinToString(ShabakatyCinemana.SEASON_EPISODE_DELIMITER) + val uploadDate = jsonObject["videoUploadDate"]?.jsonPrimitive?.content.runCatching { + this?.let { ShabakatyCinemana.DATE_FORMATTER.parse(it)?.time } + }.getOrNull() ?: 0L + + return SEpisode.create().apply { + url = nb + episode_number = "$seasonNumber.$episodeNumber".parseAs() + name = seasonEpisode + date_upload = uploadDate + } + } +} + +object VideoDeserializer : DeserializationStrategy