Browse Source

Merge pull request #2025 from nextcloud/chore/download-webrtc-task

build: Improve handling of webrtc download
Andy Scherzinger 3 years ago
parent
commit
e14c110b22

+ 9 - 18
app/build.gradle

@@ -24,6 +24,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 import com.github.spotbugs.snom.SpotBugsTask
+import com.nextcloud.talk.gradle.DownloadWebRtcTask
 
 apply plugin: 'com.android.application'
 apply plugin: 'kotlin-android'
@@ -33,20 +34,6 @@ apply plugin: 'com.github.spotbugs'
 apply plugin: 'io.gitlab.arturbosch.detekt'
 apply plugin: "org.jlleitschuh.gradle.ktlint"
 
-def urlFile = { url, fileName ->
-    File file = new File("$buildDir/download/${fileName}")
-    file.parentFile.mkdirs()
-    if (!file.exists()) {
-        new URL(url).withInputStream { downloadStream ->
-            file.withOutputStream { fileOut ->
-                fileOut << downloadStream
-            }
-        }
-    }
-    files(file.absolutePath)
-}
-
-
 android {
     compileSdkVersion 30
     buildToolsVersion '30.0.3'
@@ -147,7 +134,6 @@ android {
     }
 
     check.dependsOn 'spotbugsGplayDebug', 'lint', 'ktlintCheck', 'detekt'
-    lint.dependsOn 'preBuild'
 
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
@@ -176,10 +162,16 @@ ext {
     powermockVersion = "2.0.9"
     retrofit2Version = "2.9.0"
     workVersion = "2.6.0"
-    markwonVersion =  "4.6.2"
+    markwonVersion = "4.6.2"
     espressoVersion = "3.4.0"
 }
 
+def webRtcVersion = "96.4664.0"
+tasks.register('downloadWebRtc', DownloadWebRtcTask){
+    version = webRtcVersion
+}
+preBuild.dependsOn('downloadWebRtc')
+
 configurations.all {
     exclude group: 'com.google.firebase', module: 'firebase-core'
     exclude group: 'com.google.firebase', module: 'firebase-analytics'
@@ -253,8 +245,7 @@ dependencies {
     kapt "com.jakewharton:butterknife-compiler:${butterknifeVersion}"
     implementation 'eu.davidea:flexible-adapter:5.1.0'
     implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
-    implementation urlFile('https://github.com/nextcloud-releases/talk-clients-webrtc/releases/download/96.4664.0-RC1/libwebrtc-96.4664.0.aar',
-        'libwebrtc-96.4664.0.aar')
+    implementation fileTree(downloadWebRtc.getOutputPath())
     implementation 'com.yarolegovich:lovely-dialog:1.1.1'
     implementation 'com.yarolegovich:mp:1.1.6'
     implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'

+ 22 - 0
buildSrc/build.gradle

@@ -0,0 +1,22 @@
+/*
+* Nextcloud Talk application
+*
+* @author Álvaro Brey
+* Copyright (C) 2022 Álvaro Brey
+* Copyright (C) 2022 Nextcloud GmbH
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+apply plugin: 'groovy'

+ 67 - 0
buildSrc/src/main/groovy/com/nextcloud/talk/gradle/DownloadWebRtcTask.groovy

@@ -0,0 +1,67 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Álvaro Brey
+ * Copyright (C) 2022 Álvaro Brey
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.talk.gradle
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.provider.Property
+import org.gradle.api.tasks.CacheableTask
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.OutputFile
+import org.gradle.api.tasks.TaskAction
+
+@CacheableTask
+abstract class DownloadWebRtcTask extends DefaultTask {
+    @Input
+    abstract Property<String> getVersion()
+
+    @OutputFile
+    File getLibFile() {
+        return new File(getOutputPath())
+    }
+
+    private String getFileName() {
+        def webRtcVersion = version.get()
+        return "libwebrtc-${webRtcVersion}.aar"
+    }
+
+    private String getDownloadUrl() {
+        def webRtcVersion = version.get()
+        return "https://github.com/nextcloud-releases/talk-clients-webrtc/releases/download/${webRtcVersion}-RC1/${getFileName()}"
+    }
+
+    String getOutputPath() {
+        return "${project.buildDir}/download/${getFileName()}"
+    }
+
+    @TaskAction
+    def run() {
+        libFile.parentFile.mkdirs()
+        if (!libFile.exists()) {
+            logger.lifecycle("Downloading libWebRTC ${version.get()} from ${getDownloadUrl()}")
+            new URL(getDownloadUrl()).withInputStream { downloadStream ->
+                libFile.withOutputStream { fileOut ->
+                    fileOut << downloadStream
+                }
+            }
+        }
+    }
+}