Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 82a8c04

Browse files
add setup for Firebase Storage and initial FirebaseStorage class
1 parent 2fc9c04 commit 82a8c04

File tree

12 files changed

+331
-1
lines changed

12 files changed

+331
-1
lines changed

‎build.gradle.kts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ tasks {
4444
"firebase-firestore:updateVersion", "firebase-firestore:updateDependencyVersion",
4545
"firebase-functions:updateVersion", "firebase-functions:updateDependencyVersion",
4646
"firebase-installations:updateVersion", "firebase-installations:updateDependencyVersion",
47-
"firebase-perf:updateVersion", "firebase-perf:updateDependencyVersion"
47+
"firebase-perf:updateVersion", "firebase-perf:updateDependencyVersion",
48+
"firebase-storage:updateVersion", "firebase-storage:updateDependencyVersion"
4849
)
4950
}
5051
}

‎firebase-storage/build.gradle.kts‎

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
/*
2+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
6+
import org.jetbrains.kotlin.konan.target.KonanTarget
7+
8+
version = project.property("firebase-storage.version") as String
9+
10+
plugins {
11+
id("com.android.library")
12+
kotlin("multiplatform")
13+
kotlin("native.cocoapods")
14+
}
15+
16+
android {
17+
compileSdk = property("targetSdkVersion") as Int
18+
defaultConfig {
19+
minSdk = property("minSdkVersion") as Int
20+
targetSdk = property("targetSdkVersion") as Int
21+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
22+
multiDexEnabled = true
23+
}
24+
sourceSets {
25+
getByName("main") {
26+
manifest.srcFile("src/androidMain/AndroidManifest.xml")
27+
}
28+
getByName("androidTest"){
29+
java.srcDir(file("src/androidAndroidTest/kotlin"))
30+
manifest.srcFile("src/androidAndroidTest/AndroidManifest.xml")
31+
}
32+
}
33+
testOptions {
34+
unitTests.apply {
35+
isIncludeAndroidResources = true
36+
}
37+
}
38+
packagingOptions {
39+
resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module")
40+
resources.pickFirsts.add("META-INF/AL2.0")
41+
resources.pickFirsts.add("META-INF/LGPL2.1")
42+
}
43+
lint {
44+
abortOnError = false
45+
}
46+
}
47+
48+
val supportIosTarget = project.property("skipIosTarget") != "true"
49+
50+
kotlin {
51+
52+
android {
53+
publishAllLibraryVariants()
54+
}
55+
56+
if (supportIosTarget) {
57+
ios()
58+
iosSimulatorArm64()
59+
cocoapods {
60+
ios.deploymentTarget = "11.0"
61+
framework {
62+
baseName = "FirebaseStorage"
63+
}
64+
noPodspec()
65+
pod("FirebaseStorage") {
66+
version = "10.7.0"
67+
}
68+
}
69+
}
70+
71+
js {
72+
useCommonJs()
73+
browser {
74+
testTask {
75+
useKarma {
76+
useChromeHeadless()
77+
}
78+
}
79+
}
80+
}
81+
82+
sourceSets {
83+
all {
84+
languageSettings.apply {
85+
apiVersion = "1.6"
86+
languageVersion = "1.6"
87+
progressiveMode = true
88+
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
89+
}
90+
}
91+
92+
val commonMain by getting {
93+
dependencies {
94+
api(project(":firebase-app"))
95+
implementation(project(":firebase-common"))
96+
}
97+
}
98+
99+
val androidMain by getting {
100+
dependencies {
101+
api("com.google.firebase:firebase-storage")
102+
}
103+
}
104+
105+
if (supportIosTarget) {
106+
val iosMain by getting
107+
val iosSimulatorArm64Main by getting
108+
iosSimulatorArm64Main.dependsOn(iosMain)
109+
110+
val iosTest by sourceSets.getting
111+
val iosSimulatorArm64Test by sourceSets.getting
112+
iosSimulatorArm64Test.dependsOn(iosTest)
113+
}
114+
115+
val jsMain by getting
116+
}
117+
}
118+
119+
if (project.property("firebase-storage.skipIosTests") == "true") {
120+
tasks.forEach {
121+
if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false }
122+
}
123+
}
124+
125+
if (project.property("firebase-storage.skipJsTests") == "true") {
126+
tasks.forEach {
127+
if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false }
128+
}
129+
}
130+
131+
signing {
132+
val signingKey: String? by project
133+
val signingPassword: String? by project
134+
useInMemoryPgpKeys(signingKey, signingPassword)
135+
sign(publishing.publications)
136+
}

‎firebase-storage/firebase_storage.podspec‎

Whitespace-only changes.

‎firebase-storage/package.json‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"name": "@gitlive/firebase-storage",
3+
"version": "1.8.1",
4+
"description": "Wrapper around firebase for usage in Kotlin Multiplatform projects",
5+
"main": "firebase-storage.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/GitLiveApp/firebase-kotlin-sdk.git"
12+
},
13+
"keywords": [
14+
"kotlin",
15+
"multiplatform",
16+
"kotlin-js",
17+
"firebase"
18+
],
19+
"author": "dev.gitlive",
20+
"license": "Apache-2.0",
21+
"bugs": {
22+
"url": "https://github.com/GitLiveApp/firebase-kotlin-sdk/issues"
23+
},
24+
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
25+
"dependencies": {
26+
"@gitlive/firebase-app": "1.8.1",
27+
"firebase": "9.19.1",
28+
"kotlin": "1.6.10",
29+
"kotlinx-coroutines-core": "1.6.1-native-mt"
30+
}
31+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
package="dev.gitlive.firebase.storage">
3+
4+
<application android:usesCleartextTraffic="true" />
5+
</manifest>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<manifest package="dev.gitlive.firebase.storage"/>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
@file:JvmName("android")
6+
package dev.gitlive.firebase.storage
7+
8+
import dev.gitlive.firebase.Firebase
9+
import dev.gitlive.firebase.FirebaseApp
10+
import dev.gitlive.firebase.FirebaseException
11+
12+
actual val Firebase.storage get() =
13+
FirebaseStorage(com.google.firebase.storage.FirebaseStorage.getInstance())
14+
15+
actual fun Firebase.storage(app: FirebaseApp) =
16+
FirebaseStorage(com.google.firebase.storage.FirebaseStorage.getInstance(app.android))
17+
18+
actual class FirebaseStorage(val android: com.google.firebase.storage.FirebaseStorage) {
19+
20+
actual fun getMaxOperationRetryTimeMillis(): Long = android.maxOperationRetryTimeMillis
21+
22+
actual fun getMaxUploadRetryTimeMillis(): Long = android.maxUploadRetryTimeMillis
23+
24+
actual fun setMaxOperationRetryTimeMillis(maxOperationRetryTimeMillis: Long) {
25+
android.maxOperationRetryTimeMillis = maxOperationRetryTimeMillis
26+
}
27+
28+
actual fun setMaxUploadRetryTimeMillis(maxUploadRetryTimeMillis: Long) {
29+
android.maxUploadRetryTimeMillis = maxUploadRetryTimeMillis
30+
}
31+
32+
actual fun useEmulator(host: String, port: Int) {
33+
android.useEmulator(host, port)
34+
}
35+
36+
}
37+
38+
actual open class StorageException(message: String) : FirebaseException(message)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package dev.gitlive.firebase.storage
2+
3+
import dev.gitlive.firebase.Firebase
4+
import dev.gitlive.firebase.FirebaseApp
5+
import dev.gitlive.firebase.FirebaseException
6+
import kotlinx.coroutines.flow.Flow
7+
8+
/** Returns the [FirebaseStorage] instance of the default [FirebaseApp]. */
9+
expect val Firebase.storage: FirebaseStorage
10+
11+
/** Returns the [FirebaseStorage] instance of a given [FirebaseApp]. */
12+
expect fun Firebase.storage(app: FirebaseApp): FirebaseStorage
13+
14+
expect class FirebaseStorage {
15+
fun getMaxOperationRetryTimeMillis(): Long
16+
fun getMaxUploadRetryTimeMillis(): Long
17+
fun setMaxOperationRetryTimeMillis(maxOperationRetryTimeMillis: Long)
18+
fun setMaxUploadRetryTimeMillis(maxUploadRetryTimeMillis: Long)
19+
fun useEmulator(host: String, port: Int)
20+
}
21+
22+
expect open class StorageException : FirebaseException
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package dev.gitlive.firebase.storage
6+
7+
import cocoapods.FirebaseStorage.FIRStorage
8+
import dev.gitlive.firebase.Firebase
9+
import dev.gitlive.firebase.FirebaseApp
10+
import dev.gitlive.firebase.FirebaseException
11+
12+
13+
actual val Firebase.storage get() =
14+
FirebaseStorage(FIRStorage.storage())
15+
16+
actual fun Firebase.storage(app: FirebaseApp): FirebaseStorage = FirebaseStorage(
17+
FIRStorage.storageForApp(app.ios as objcnames.classes.FIRApp)
18+
)
19+
20+
actual class FirebaseStorage(val ios: FIRStorage) {
21+
22+
actual fun getMaxOperationRetryTimeMillis(): Long = ios.maxOperationRetryTime().toLong()
23+
24+
actual fun getMaxUploadRetryTimeMillis(): Long = ios.maxUploadRetryTime().toLong()
25+
26+
actual fun setMaxOperationRetryTimeMillis(maxOperationRetryTimeMillis: Long) {
27+
ios.setMaxOperationRetryTime(maxOperationRetryTimeMillis.toDouble())
28+
}
29+
30+
actual fun setMaxUploadRetryTimeMillis(maxUploadRetryTimeMillis: Long) {
31+
ios.setMaxUploadRetryTime(maxUploadRetryTimeMillis.toDouble())
32+
}
33+
34+
actual fun useEmulator(host: String, port: Int) {
35+
ios.useEmulatorWithHost(host, port.toLong())
36+
}
37+
38+
}
39+
40+
actual open class StorageException(message: String) : FirebaseException(message)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package dev.gitlive.firebase.storage
6+
7+
import dev.gitlive.firebase.Firebase
8+
import dev.gitlive.firebase.FirebaseApp
9+
import dev.gitlive.firebase.FirebaseException
10+
import dev.gitlive.firebase.firebase
11+
12+
13+
actual val Firebase.storage get() =
14+
rethrow { dev.gitlive.firebase.firestore; FirebaseStorage(firebase.storage()) }
15+
16+
actual fun Firebase.storage(app: FirebaseApp) =
17+
rethrow { dev.gitlive.firebase.firestore; FirebaseStorage(firebase.app().storage()) }
18+
19+
actual class FirebaseStorage(val js: firebase.storage.Storage) {
20+
21+
actual fun getMaxOperationRetryTimeMillis(): Long = js.maxOperationRetryTime.toLong()
22+
23+
actual fun getMaxUploadRetryTimeMillis(): Long = js.maxUploadRetryTime.toLong()
24+
25+
actual fun setMaxOperationRetryTimeMillis(maxOperationRetryTimeMillis: Long) {
26+
js.setMaxOperationRetryTime(maxOperationRetryTimeMillis.toInt())
27+
}
28+
29+
actual fun setMaxUploadRetryTimeMillis(maxUploadRetryTimeMillis: Long) {
30+
js.setMaxUploadRetryTime(maxUploadRetryTimeMillis.toInt())
31+
}
32+
33+
actual fun useEmulator(host: String, port: Int) {
34+
js.useEmulator(host, port)
35+
}
36+
37+
}
38+
39+
inline fun <T, R> T.rethrow(function: T.() -> R): R = dev.gitlive.firebase.storage.rethrow { function() }
40+
41+
inline fun <R> rethrow(function: () -> R): R {
42+
try {
43+
return function()
44+
} catch (e: Exception) {
45+
throw e
46+
} catch(e: dynamic) {
47+
throw StorageException(e.code as String, e)
48+
}
49+
}
50+
51+
actual open class StorageException(code: String, cause: Throwable) :
52+
FirebaseException(code, cause)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /