Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.gradle.api.plugins.ExtensionContainer
import javax.inject.Inject

abstract class CloudstreamExtension @Inject constructor(project: Project) {

val userCache = project.gradle.gradleUserHomeDir.resolve("caches").resolve("cloudstream")

val apiVersion = 1
Expand All @@ -18,15 +19,14 @@ abstract class CloudstreamExtension @Inject constructor(project: Project) {
var buildBranch: String = "builds"

fun overrideUrlPrefix(url: String) {
if (apkinfo == null) {
apkinfo = ApkInfo(this, "pre-release")
}
if (apkinfo == null) apkinfo = ApkInfo(this, "pre-release")
apkinfo!!.urlPrefix = url
}

fun setRepo(user: String, repo: String, url: String, rawLinkFormat: String) {
repository = Repo(user, repo, url, rawLinkFormat)
}

fun setRepo(user: String, repo: String, type: String) {
when {
type == "github" -> setRepo(user, repo, "https://github.com/${user}/${repo}", "https://raw.githubusercontent.com/${user}/${repo}/%branch%/%filename%")
Expand All @@ -43,9 +43,9 @@ abstract class CloudstreamExtension @Inject constructor(project: Project) {
else -> throw IllegalArgumentException("Unknown type ${type}. Use github, gitlab, gitlab-<domain> or gitea-<domain> or set repository via setRepo(user, repo, url, rawLinkFormat)")
}
}

fun setRepo(url: String) {
var type: String? = null

var split = when {
url.startsWith("https://github.com") -> {
type = "github"
Expand Down Expand Up @@ -78,13 +78,6 @@ abstract class CloudstreamExtension @Inject constructor(project: Project) {
setRepo(split[0], split[1], type)
}

internal var pluginClassName: String? = null
internal var fileSize: Long? = null
internal var fileHash: String? = null

internal var jarFileSize: Long? = null
internal var jarHash: String? = null

var requiresResources = false
var description: String? = null
var authors = listOf<String>()
Expand All @@ -101,9 +94,8 @@ abstract class CloudstreamExtension @Inject constructor(project: Project) {

class ApkInfo(extension: CloudstreamExtension, release: String) {
val cache = extension.userCache.resolve("cloudstream")

var urlPrefix = "https://github.com/recloudstream/cloudstream/releases/download/${release}"
val jarFile = cache.resolve("cloudstream.jar")
var urlPrefix = "https://github.com/recloudstream/cloudstream/releases/download/${release}"
}

class Repo(val user: String, val repo: String, val url: String, val rawLinkFormat: String) {
Expand All @@ -117,7 +109,3 @@ class Repo(val user: String, val repo: String, val url: String, val rawLinkForma
fun ExtensionContainer.getCloudstream(): CloudstreamExtension {
return getByName("cloudstream") as CloudstreamExtension
}

fun ExtensionContainer.findCloudstream(): CloudstreamExtension? {
return findByName("cloudstream") as CloudstreamExtension?
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.lagradost.cloudstream3.gradle

import com.lagradost.cloudstream3.gradle.configuration.registerConfigurations
import com.lagradost.cloudstream3.gradle.tasks.registerTasks
import org.gradle.api.Plugin
import org.gradle.api.Project
import com.lagradost.cloudstream3.gradle.tasks.registerTasks
import com.lagradost.cloudstream3.gradle.configuration.registerConfigurations

abstract class CloudstreamPlugin : Plugin<Project> {

override fun apply(project: Project) {
project.extensions.create("cloudstream", CloudstreamExtension::class.java, project)

registerTasks(project)
registerConfigurations(project)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,10 @@
package com.lagradost.cloudstream3.gradle

import org.gradle.api.Project
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.logging.progress.ProgressLogger
import org.gradle.internal.logging.progress.ProgressLoggerFactory
import org.gradle.internal.service.ServiceRegistry
import java.io.File
import java.io.FileOutputStream
import java.net.URL


fun createProgressLogger(project: Project, loggerCategory: String): ProgressLogger {
return createProgressLogger((project as ProjectInternal).services, loggerCategory)
}

fun createProgressLogger(services: ServiceRegistry, loggerCategory: String): ProgressLogger {
val progressLoggerFactory = services.get(ProgressLoggerFactory::class.java)
return progressLoggerFactory.newOperation(loggerCategory).also { it.description = loggerCategory }
}

fun URL.download(file: File, progressLogger: ProgressLogger) {
progressLogger.started()
try {
Expand Down Expand Up @@ -67,4 +53,4 @@ private fun toLengthText(bytes: Long): String {
} else {
String.format("%.2f GB", bytes / (1024.0 * 1024.0 * 1024.0))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.lagradost.cloudstream3.gradle

import com.android.build.gradle.BaseExtension
import com.android.build.api.dsl.LibraryExtension
import com.android.build.api.variant.LibraryAndroidComponentsExtension
import com.android.build.gradle.BaseExtension
import org.gradle.api.Project
import java.io.File

Expand Down
73 changes: 0 additions & 73 deletions src/main/kotlin/com/lagradost/cloudstream3/gradle/Utils.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,37 +1,40 @@
package com.lagradost.cloudstream3.gradle.configuration

import com.lagradost.cloudstream3.gradle.ApkInfo
import com.lagradost.cloudstream3.gradle.createProgressLogger
import com.lagradost.cloudstream3.gradle.download
import com.lagradost.cloudstream3.gradle.getCloudstream
import groovy.json.JsonSlurper
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import java.lang.Integer.parseInt
import org.gradle.internal.logging.progress.ProgressLoggerFactory
import java.net.URI
import java.nio.file.Files
import javax.inject.Inject

class CloudstreamConfigurationProvider : IConfigurationProvider {
abstract class CloudstreamConfigurationProvider : IConfigurationProvider {

override val name: String
get() = "cloudstream"

@get:Inject
abstract val progressLoggerFactory: ProgressLoggerFactory

override fun provide(project: Project, dependency: Dependency) {
val extension = project.extensions.getCloudstream()
if (extension.apkinfo == null) {
extension.apkinfo = ApkInfo(extension, dependency.version ?: "pre-release")
}
val apkinfo = extension.apkinfo!!

val apkinfo = extension.apkinfo!!
apkinfo.cache.mkdirs()

if (!apkinfo.jarFile.exists()) {
project.logger.lifecycle("Fetching JAR")
project.logger.lifecycle("Fetching JAR: ${apkinfo.jarFile.name}")
val logger = progressLoggerFactory
.newOperation("Download JAR")
.apply { description = "Download JAR" }

val url = URI("${apkinfo.urlPrefix}/classes.jar").toURL()
url.download(apkinfo.jarFile, createProgressLogger(project, "Download JAR"))
url.download(apkinfo.jarFile, logger)
}

project.dependencies.add("compileOnly", project.files(apkinfo.jarFile))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package com.lagradost.cloudstream3.gradle.configuration
import org.gradle.api.Project

fun registerConfigurations(project: Project) {
val providers = arrayOf(CloudstreamConfigurationProvider())

val providers = arrayOf(
project.objects.newInstance(CloudstreamConfigurationProvider::class.java)
)

for (provider in providers) {
project.configurations.register(provider.name) {
Expand All @@ -15,7 +18,6 @@ fun registerConfigurations(project: Project) {
for (provider in providers) {
val configuration = project.configurations.getByName(provider.name)
val dependencies = configuration.dependencies

require(dependencies.size <= 1) {
"Only one '${provider.name}' dependency should be specified, but ${dependencies.size} were!"
}
Expand All @@ -25,4 +27,4 @@ fun registerConfigurations(project: Project) {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.lagradost.cloudstream3.gradle.entities

data class PluginManifest(
val pluginClassName: String?,
val pluginClassName: String,
val name: String,
val version: Int,
val requiresResources: Boolean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package com.lagradost.cloudstream3.gradle.tasks

import com.lagradost.cloudstream3.gradle.getCloudstream
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.Input
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.options.Option
import java.nio.charset.StandardCharsets

abstract class CleanCacheTask : DefaultTask() {
@TaskAction
fun cleanCache() {
val extension = project.extensions.getCloudstream()
val apkinfo = extension.apkinfo
if (apkinfo == null) return;

if (apkinfo.jarFile.exists()) {
apkinfo.jarFile.delete()
@get:Internal abstract val jarFile: RegularFileProperty

@TaskAction
fun clean() {
val file = jarFile.asFile.get()
if (file.exists()) file.delete() else {
logger.lifecycle("JAR file does not exist; nothing to clean.")
}
}
}
}
Loading