@onekeyfe/react-native-range-downloader 3.0.67 → 3.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/android/build.gradle +3 -0
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ConcurrentRangeDownloader.kt +179 -11
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/RangeDownloadLogic.kt +98 -0
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +24 -25
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/ConcurrentRangeDownloaderOcdsTest.kt +554 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FaultServer.kt +282 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/IsPermanentHttpStatusTest.kt +63 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/MonotonicProgressGateTest.kt +368 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/Ocds416ResumeTest.kt +272 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/OcdsBadTotalRejectTest.kt +147 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/OcdsMultipartRejectTest.kt +114 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/OcdsReadOnlyFsTest.kt +250 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/OcdsTransient5xxTest.kt +275 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/RangeDownloadLogicTest.kt +124 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/RunRegistrySingleFlightTest.kt +217 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/SegmentArtifactSweepTest.kt +350 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/SmokeTest.kt +65 -0
- package/ios/RangeDownloadLogic.swift +187 -0
- package/ios/ReactNativeRangeDownloader.swift +669 -133
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +7 -1
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridReactNativeRangeDownloaderSpec.cpp +4 -0
- package/nitrogen/generated/android/c++/JRangeDownloadOutcome.hpp +6 -0
- package/nitrogen/generated/android/c++/JRangeDownloadParams.hpp +19 -3
- package/nitrogen/generated/android/c++/JRangeDownloadResult.hpp +9 -3
- package/nitrogen/generated/android/c++/JRangeFallbackKind.hpp +83 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadOutcome.kt +3 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadParams.kt +15 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeDownloadResult.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/RangeFallbackKind.kt +29 -0
- package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.hpp +18 -0
- package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Umbrella.hpp +3 -0
- package/nitrogen/generated/ios/c++/HybridReactNativeRangeDownloaderSpecSwift.hpp +3 -0
- package/nitrogen/generated/ios/swift/RangeDownloadOutcome.swift +8 -0
- package/nitrogen/generated/ios/swift/RangeDownloadParams.swift +93 -1
- package/nitrogen/generated/ios/swift/RangeDownloadResult.swift +24 -1
- package/nitrogen/generated/ios/swift/RangeFallbackKind.swift +72 -0
- package/nitrogen/generated/shared/c++/RangeDownloadOutcome.hpp +9 -1
- package/nitrogen/generated/shared/c++/RangeDownloadParams.hpp +18 -2
- package/nitrogen/generated/shared/c++/RangeDownloadResult.hpp +9 -2
- package/nitrogen/generated/shared/c++/RangeFallbackKind.hpp +108 -0
- package/package.json +1 -1
- package/src/ReactNativeRangeDownloader.nitro.ts +36 -2
|
@@ -8,12 +8,18 @@ export interface RangeDownloadParams {
|
|
|
8
8
|
expectedSha256?: string;
|
|
9
9
|
segmentCount?: number;
|
|
10
10
|
minConcurrentBytes?: number;
|
|
11
|
+
maxSegmentAttempts?: number;
|
|
12
|
+
requestTimeoutSeconds?: number;
|
|
13
|
+
stallTimeoutSeconds?: number;
|
|
14
|
+
overallDeadlineSeconds?: number;
|
|
11
15
|
}
|
|
12
|
-
export type RangeDownloadOutcome = 'completed' | 'fallback';
|
|
16
|
+
export type RangeDownloadOutcome = 'completed' | 'fallbackTransient' | 'fallbackPermanent' | 'fallback';
|
|
17
|
+
export type RangeFallbackKind = 'serverIgnoredRange' | 'rangeUnsupported' | 'authExpired' | 'notFound' | 'redirectRejected' | 'checksumMismatch' | 'multipartOrBadTotal' | 'transientNetwork' | 'throttled' | 'budgetExhausted';
|
|
13
18
|
export interface RangeDownloadResult {
|
|
14
19
|
outcome: RangeDownloadOutcome;
|
|
15
20
|
filePath: string;
|
|
16
21
|
fallbackReason?: string;
|
|
22
|
+
fallbackKind?: RangeFallbackKind;
|
|
17
23
|
}
|
|
18
24
|
export interface RangeDownloadEvent {
|
|
19
25
|
channel: DownloadChannel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAI5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAWD,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,UAAU,CAAC;AAKf,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,WAAW,GACX,iBAAiB,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IAIzD,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAMpE,gBAAgB,CACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAKjB,MAAM,CACJ,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,CAAC;IAC3E,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAKzC,eAAe,IAAI,MAAM,CAAC;CAC3B"}
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadResult; }
|
|
12
12
|
// Forward declaration of `RangeDownloadOutcome` to properly resolve imports.
|
|
13
13
|
namespace margelo::nitro::reactnativerangedownloader { enum class RangeDownloadOutcome; }
|
|
14
|
+
// Forward declaration of `RangeFallbackKind` to properly resolve imports.
|
|
15
|
+
namespace margelo::nitro::reactnativerangedownloader { enum class RangeFallbackKind; }
|
|
14
16
|
// Forward declaration of `RangeDownloadParams` to properly resolve imports.
|
|
15
17
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadParams; }
|
|
16
18
|
// Forward declaration of `DownloadChannel` to properly resolve imports.
|
|
@@ -26,6 +28,8 @@ namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadEvent
|
|
|
26
28
|
#include "JRangeDownloadOutcome.hpp"
|
|
27
29
|
#include <string>
|
|
28
30
|
#include <optional>
|
|
31
|
+
#include "RangeFallbackKind.hpp"
|
|
32
|
+
#include "JRangeFallbackKind.hpp"
|
|
29
33
|
#include "RangeDownloadParams.hpp"
|
|
30
34
|
#include "JRangeDownloadParams.hpp"
|
|
31
35
|
#include "DownloadChannel.hpp"
|
|
@@ -42,11 +42,17 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
42
42
|
static jni::alias_ref<JRangeDownloadOutcome> fromCpp(RangeDownloadOutcome value) {
|
|
43
43
|
static const auto clazz = javaClassStatic();
|
|
44
44
|
static const auto fieldCOMPLETED = clazz->getStaticField<JRangeDownloadOutcome>("COMPLETED");
|
|
45
|
+
static const auto fieldFALLBACKTRANSIENT = clazz->getStaticField<JRangeDownloadOutcome>("FALLBACKTRANSIENT");
|
|
46
|
+
static const auto fieldFALLBACKPERMANENT = clazz->getStaticField<JRangeDownloadOutcome>("FALLBACKPERMANENT");
|
|
45
47
|
static const auto fieldFALLBACK = clazz->getStaticField<JRangeDownloadOutcome>("FALLBACK");
|
|
46
48
|
|
|
47
49
|
switch (value) {
|
|
48
50
|
case RangeDownloadOutcome::COMPLETED:
|
|
49
51
|
return clazz->getStaticFieldValue(fieldCOMPLETED);
|
|
52
|
+
case RangeDownloadOutcome::FALLBACKTRANSIENT:
|
|
53
|
+
return clazz->getStaticFieldValue(fieldFALLBACKTRANSIENT);
|
|
54
|
+
case RangeDownloadOutcome::FALLBACKPERMANENT:
|
|
55
|
+
return clazz->getStaticFieldValue(fieldFALLBACKPERMANENT);
|
|
50
56
|
case RangeDownloadOutcome::FALLBACK:
|
|
51
57
|
return clazz->getStaticFieldValue(fieldFALLBACK);
|
|
52
58
|
default:
|
|
@@ -48,6 +48,14 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
48
48
|
jni::local_ref<jni::JDouble> segmentCount = this->getFieldValue(fieldSegmentCount);
|
|
49
49
|
static const auto fieldMinConcurrentBytes = clazz->getField<jni::JDouble>("minConcurrentBytes");
|
|
50
50
|
jni::local_ref<jni::JDouble> minConcurrentBytes = this->getFieldValue(fieldMinConcurrentBytes);
|
|
51
|
+
static const auto fieldMaxSegmentAttempts = clazz->getField<jni::JDouble>("maxSegmentAttempts");
|
|
52
|
+
jni::local_ref<jni::JDouble> maxSegmentAttempts = this->getFieldValue(fieldMaxSegmentAttempts);
|
|
53
|
+
static const auto fieldRequestTimeoutSeconds = clazz->getField<jni::JDouble>("requestTimeoutSeconds");
|
|
54
|
+
jni::local_ref<jni::JDouble> requestTimeoutSeconds = this->getFieldValue(fieldRequestTimeoutSeconds);
|
|
55
|
+
static const auto fieldStallTimeoutSeconds = clazz->getField<jni::JDouble>("stallTimeoutSeconds");
|
|
56
|
+
jni::local_ref<jni::JDouble> stallTimeoutSeconds = this->getFieldValue(fieldStallTimeoutSeconds);
|
|
57
|
+
static const auto fieldOverallDeadlineSeconds = clazz->getField<jni::JDouble>("overallDeadlineSeconds");
|
|
58
|
+
jni::local_ref<jni::JDouble> overallDeadlineSeconds = this->getFieldValue(fieldOverallDeadlineSeconds);
|
|
51
59
|
return RangeDownloadParams(
|
|
52
60
|
channel->toCpp(),
|
|
53
61
|
taskId->toStdString(),
|
|
@@ -55,7 +63,11 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
55
63
|
destFilePath->toStdString(),
|
|
56
64
|
expectedSha256 != nullptr ? std::make_optional(expectedSha256->toStdString()) : std::nullopt,
|
|
57
65
|
segmentCount != nullptr ? std::make_optional(segmentCount->value()) : std::nullopt,
|
|
58
|
-
minConcurrentBytes != nullptr ? std::make_optional(minConcurrentBytes->value()) : std::nullopt
|
|
66
|
+
minConcurrentBytes != nullptr ? std::make_optional(minConcurrentBytes->value()) : std::nullopt,
|
|
67
|
+
maxSegmentAttempts != nullptr ? std::make_optional(maxSegmentAttempts->value()) : std::nullopt,
|
|
68
|
+
requestTimeoutSeconds != nullptr ? std::make_optional(requestTimeoutSeconds->value()) : std::nullopt,
|
|
69
|
+
stallTimeoutSeconds != nullptr ? std::make_optional(stallTimeoutSeconds->value()) : std::nullopt,
|
|
70
|
+
overallDeadlineSeconds != nullptr ? std::make_optional(overallDeadlineSeconds->value()) : std::nullopt
|
|
59
71
|
);
|
|
60
72
|
}
|
|
61
73
|
|
|
@@ -65,7 +77,7 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
65
77
|
*/
|
|
66
78
|
[[maybe_unused]]
|
|
67
79
|
static jni::local_ref<JRangeDownloadParams::javaobject> fromCpp(const RangeDownloadParams& value) {
|
|
68
|
-
using JSignature = JRangeDownloadParams(jni::alias_ref<JDownloadChannel>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>);
|
|
80
|
+
using JSignature = JRangeDownloadParams(jni::alias_ref<JDownloadChannel>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>);
|
|
69
81
|
static const auto clazz = javaClassStatic();
|
|
70
82
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
71
83
|
return create(
|
|
@@ -76,7 +88,11 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
76
88
|
jni::make_jstring(value.destFilePath),
|
|
77
89
|
value.expectedSha256.has_value() ? jni::make_jstring(value.expectedSha256.value()) : nullptr,
|
|
78
90
|
value.segmentCount.has_value() ? jni::JDouble::valueOf(value.segmentCount.value()) : nullptr,
|
|
79
|
-
value.minConcurrentBytes.has_value() ? jni::JDouble::valueOf(value.minConcurrentBytes.value()) : nullptr
|
|
91
|
+
value.minConcurrentBytes.has_value() ? jni::JDouble::valueOf(value.minConcurrentBytes.value()) : nullptr,
|
|
92
|
+
value.maxSegmentAttempts.has_value() ? jni::JDouble::valueOf(value.maxSegmentAttempts.value()) : nullptr,
|
|
93
|
+
value.requestTimeoutSeconds.has_value() ? jni::JDouble::valueOf(value.requestTimeoutSeconds.value()) : nullptr,
|
|
94
|
+
value.stallTimeoutSeconds.has_value() ? jni::JDouble::valueOf(value.stallTimeoutSeconds.value()) : nullptr,
|
|
95
|
+
value.overallDeadlineSeconds.has_value() ? jni::JDouble::valueOf(value.overallDeadlineSeconds.value()) : nullptr
|
|
80
96
|
);
|
|
81
97
|
}
|
|
82
98
|
};
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
#include "RangeDownloadResult.hpp"
|
|
12
12
|
|
|
13
13
|
#include "JRangeDownloadOutcome.hpp"
|
|
14
|
+
#include "JRangeFallbackKind.hpp"
|
|
14
15
|
#include "RangeDownloadOutcome.hpp"
|
|
16
|
+
#include "RangeFallbackKind.hpp"
|
|
15
17
|
#include <optional>
|
|
16
18
|
#include <string>
|
|
17
19
|
|
|
@@ -40,10 +42,13 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
40
42
|
jni::local_ref<jni::JString> filePath = this->getFieldValue(fieldFilePath);
|
|
41
43
|
static const auto fieldFallbackReason = clazz->getField<jni::JString>("fallbackReason");
|
|
42
44
|
jni::local_ref<jni::JString> fallbackReason = this->getFieldValue(fieldFallbackReason);
|
|
45
|
+
static const auto fieldFallbackKind = clazz->getField<JRangeFallbackKind>("fallbackKind");
|
|
46
|
+
jni::local_ref<JRangeFallbackKind> fallbackKind = this->getFieldValue(fieldFallbackKind);
|
|
43
47
|
return RangeDownloadResult(
|
|
44
48
|
outcome->toCpp(),
|
|
45
49
|
filePath->toStdString(),
|
|
46
|
-
fallbackReason != nullptr ? std::make_optional(fallbackReason->toStdString()) : std::nullopt
|
|
50
|
+
fallbackReason != nullptr ? std::make_optional(fallbackReason->toStdString()) : std::nullopt,
|
|
51
|
+
fallbackKind != nullptr ? std::make_optional(fallbackKind->toCpp()) : std::nullopt
|
|
47
52
|
);
|
|
48
53
|
}
|
|
49
54
|
|
|
@@ -53,14 +58,15 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
53
58
|
*/
|
|
54
59
|
[[maybe_unused]]
|
|
55
60
|
static jni::local_ref<JRangeDownloadResult::javaobject> fromCpp(const RangeDownloadResult& value) {
|
|
56
|
-
using JSignature = JRangeDownloadResult(jni::alias_ref<JRangeDownloadOutcome>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>);
|
|
61
|
+
using JSignature = JRangeDownloadResult(jni::alias_ref<JRangeDownloadOutcome>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<JRangeFallbackKind>);
|
|
57
62
|
static const auto clazz = javaClassStatic();
|
|
58
63
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
59
64
|
return create(
|
|
60
65
|
clazz,
|
|
61
66
|
JRangeDownloadOutcome::fromCpp(value.outcome),
|
|
62
67
|
jni::make_jstring(value.filePath),
|
|
63
|
-
value.fallbackReason.has_value() ? jni::make_jstring(value.fallbackReason.value()) : nullptr
|
|
68
|
+
value.fallbackReason.has_value() ? jni::make_jstring(value.fallbackReason.value()) : nullptr,
|
|
69
|
+
value.fallbackKind.has_value() ? JRangeFallbackKind::fromCpp(value.fallbackKind.value()) : nullptr
|
|
64
70
|
);
|
|
65
71
|
}
|
|
66
72
|
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JRangeFallbackKind.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "RangeFallbackKind.hpp"
|
|
12
|
+
|
|
13
|
+
namespace margelo::nitro::reactnativerangedownloader {
|
|
14
|
+
|
|
15
|
+
using namespace facebook;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The C++ JNI bridge between the C++ enum "RangeFallbackKind" and the the Kotlin enum "RangeFallbackKind".
|
|
19
|
+
*/
|
|
20
|
+
struct JRangeFallbackKind final: public jni::JavaClass<JRangeFallbackKind> {
|
|
21
|
+
public:
|
|
22
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/reactnativerangedownloader/RangeFallbackKind;";
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
/**
|
|
26
|
+
* Convert this Java/Kotlin-based enum to the C++ enum RangeFallbackKind.
|
|
27
|
+
*/
|
|
28
|
+
[[maybe_unused]]
|
|
29
|
+
[[nodiscard]]
|
|
30
|
+
RangeFallbackKind toCpp() const {
|
|
31
|
+
static const auto clazz = javaClassStatic();
|
|
32
|
+
static const auto fieldOrdinal = clazz->getField<int>("value");
|
|
33
|
+
int ordinal = this->getFieldValue(fieldOrdinal);
|
|
34
|
+
return static_cast<RangeFallbackKind>(ordinal);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public:
|
|
38
|
+
/**
|
|
39
|
+
* Create a Java/Kotlin-based enum with the given C++ enum's value.
|
|
40
|
+
*/
|
|
41
|
+
[[maybe_unused]]
|
|
42
|
+
static jni::alias_ref<JRangeFallbackKind> fromCpp(RangeFallbackKind value) {
|
|
43
|
+
static const auto clazz = javaClassStatic();
|
|
44
|
+
static const auto fieldSERVERIGNOREDRANGE = clazz->getStaticField<JRangeFallbackKind>("SERVERIGNOREDRANGE");
|
|
45
|
+
static const auto fieldRANGEUNSUPPORTED = clazz->getStaticField<JRangeFallbackKind>("RANGEUNSUPPORTED");
|
|
46
|
+
static const auto fieldAUTHEXPIRED = clazz->getStaticField<JRangeFallbackKind>("AUTHEXPIRED");
|
|
47
|
+
static const auto fieldNOTFOUND = clazz->getStaticField<JRangeFallbackKind>("NOTFOUND");
|
|
48
|
+
static const auto fieldREDIRECTREJECTED = clazz->getStaticField<JRangeFallbackKind>("REDIRECTREJECTED");
|
|
49
|
+
static const auto fieldCHECKSUMMISMATCH = clazz->getStaticField<JRangeFallbackKind>("CHECKSUMMISMATCH");
|
|
50
|
+
static const auto fieldMULTIPARTORBADTOTAL = clazz->getStaticField<JRangeFallbackKind>("MULTIPARTORBADTOTAL");
|
|
51
|
+
static const auto fieldTRANSIENTNETWORK = clazz->getStaticField<JRangeFallbackKind>("TRANSIENTNETWORK");
|
|
52
|
+
static const auto fieldTHROTTLED = clazz->getStaticField<JRangeFallbackKind>("THROTTLED");
|
|
53
|
+
static const auto fieldBUDGETEXHAUSTED = clazz->getStaticField<JRangeFallbackKind>("BUDGETEXHAUSTED");
|
|
54
|
+
|
|
55
|
+
switch (value) {
|
|
56
|
+
case RangeFallbackKind::SERVERIGNOREDRANGE:
|
|
57
|
+
return clazz->getStaticFieldValue(fieldSERVERIGNOREDRANGE);
|
|
58
|
+
case RangeFallbackKind::RANGEUNSUPPORTED:
|
|
59
|
+
return clazz->getStaticFieldValue(fieldRANGEUNSUPPORTED);
|
|
60
|
+
case RangeFallbackKind::AUTHEXPIRED:
|
|
61
|
+
return clazz->getStaticFieldValue(fieldAUTHEXPIRED);
|
|
62
|
+
case RangeFallbackKind::NOTFOUND:
|
|
63
|
+
return clazz->getStaticFieldValue(fieldNOTFOUND);
|
|
64
|
+
case RangeFallbackKind::REDIRECTREJECTED:
|
|
65
|
+
return clazz->getStaticFieldValue(fieldREDIRECTREJECTED);
|
|
66
|
+
case RangeFallbackKind::CHECKSUMMISMATCH:
|
|
67
|
+
return clazz->getStaticFieldValue(fieldCHECKSUMMISMATCH);
|
|
68
|
+
case RangeFallbackKind::MULTIPARTORBADTOTAL:
|
|
69
|
+
return clazz->getStaticFieldValue(fieldMULTIPARTORBADTOTAL);
|
|
70
|
+
case RangeFallbackKind::TRANSIENTNETWORK:
|
|
71
|
+
return clazz->getStaticFieldValue(fieldTRANSIENTNETWORK);
|
|
72
|
+
case RangeFallbackKind::THROTTLED:
|
|
73
|
+
return clazz->getStaticFieldValue(fieldTHROTTLED);
|
|
74
|
+
case RangeFallbackKind::BUDGETEXHAUSTED:
|
|
75
|
+
return clazz->getStaticFieldValue(fieldBUDGETEXHAUSTED);
|
|
76
|
+
default:
|
|
77
|
+
std::string stringValue = std::to_string(static_cast<int>(value));
|
|
78
|
+
throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
} // namespace margelo::nitro::reactnativerangedownloader
|
|
@@ -37,7 +37,19 @@ data class RangeDownloadParams(
|
|
|
37
37
|
val segmentCount: Double?,
|
|
38
38
|
@DoNotStrip
|
|
39
39
|
@Keep
|
|
40
|
-
val minConcurrentBytes: Double
|
|
40
|
+
val minConcurrentBytes: Double?,
|
|
41
|
+
@DoNotStrip
|
|
42
|
+
@Keep
|
|
43
|
+
val maxSegmentAttempts: Double?,
|
|
44
|
+
@DoNotStrip
|
|
45
|
+
@Keep
|
|
46
|
+
val requestTimeoutSeconds: Double?,
|
|
47
|
+
@DoNotStrip
|
|
48
|
+
@Keep
|
|
49
|
+
val stallTimeoutSeconds: Double?,
|
|
50
|
+
@DoNotStrip
|
|
51
|
+
@Keep
|
|
52
|
+
val overallDeadlineSeconds: Double?
|
|
41
53
|
) {
|
|
42
54
|
/* primary constructor */
|
|
43
55
|
|
|
@@ -49,8 +61,8 @@ data class RangeDownloadParams(
|
|
|
49
61
|
@Keep
|
|
50
62
|
@Suppress("unused")
|
|
51
63
|
@JvmStatic
|
|
52
|
-
private fun fromCpp(channel: DownloadChannel, taskId: String, url: String, destFilePath: String, expectedSha256: String?, segmentCount: Double?, minConcurrentBytes: Double?): RangeDownloadParams {
|
|
53
|
-
return RangeDownloadParams(channel, taskId, url, destFilePath, expectedSha256, segmentCount, minConcurrentBytes)
|
|
64
|
+
private fun fromCpp(channel: DownloadChannel, taskId: String, url: String, destFilePath: String, expectedSha256: String?, segmentCount: Double?, minConcurrentBytes: Double?, maxSegmentAttempts: Double?, requestTimeoutSeconds: Double?, stallTimeoutSeconds: Double?, overallDeadlineSeconds: Double?): RangeDownloadParams {
|
|
65
|
+
return RangeDownloadParams(channel, taskId, url, destFilePath, expectedSha256, segmentCount, minConcurrentBytes, maxSegmentAttempts, requestTimeoutSeconds, stallTimeoutSeconds, overallDeadlineSeconds)
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
}
|
|
@@ -25,7 +25,10 @@ data class RangeDownloadResult(
|
|
|
25
25
|
val filePath: String,
|
|
26
26
|
@DoNotStrip
|
|
27
27
|
@Keep
|
|
28
|
-
val fallbackReason: String
|
|
28
|
+
val fallbackReason: String?,
|
|
29
|
+
@DoNotStrip
|
|
30
|
+
@Keep
|
|
31
|
+
val fallbackKind: RangeFallbackKind?
|
|
29
32
|
) {
|
|
30
33
|
/* primary constructor */
|
|
31
34
|
|
|
@@ -37,8 +40,8 @@ data class RangeDownloadResult(
|
|
|
37
40
|
@Keep
|
|
38
41
|
@Suppress("unused")
|
|
39
42
|
@JvmStatic
|
|
40
|
-
private fun fromCpp(outcome: RangeDownloadOutcome, filePath: String, fallbackReason: String?): RangeDownloadResult {
|
|
41
|
-
return RangeDownloadResult(outcome, filePath, fallbackReason)
|
|
43
|
+
private fun fromCpp(outcome: RangeDownloadOutcome, filePath: String, fallbackReason: String?, fallbackKind: RangeFallbackKind?): RangeDownloadResult {
|
|
44
|
+
return RangeDownloadResult(outcome, filePath, fallbackReason, fallbackKind)
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// RangeFallbackKind.kt
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
package com.margelo.nitro.reactnativerangedownloader
|
|
9
|
+
|
|
10
|
+
import androidx.annotation.Keep
|
|
11
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Represents the JavaScript enum/union "RangeFallbackKind".
|
|
15
|
+
*/
|
|
16
|
+
@DoNotStrip
|
|
17
|
+
@Keep
|
|
18
|
+
enum class RangeFallbackKind(@DoNotStrip @Keep val value: Int) {
|
|
19
|
+
SERVERIGNOREDRANGE(0),
|
|
20
|
+
RANGEUNSUPPORTED(1),
|
|
21
|
+
AUTHEXPIRED(2),
|
|
22
|
+
NOTFOUND(3),
|
|
23
|
+
REDIRECTREJECTED(4),
|
|
24
|
+
CHECKSUMMISMATCH(5),
|
|
25
|
+
MULTIPARTORBADTOTAL(6),
|
|
26
|
+
TRANSIENTNETWORK(7),
|
|
27
|
+
THROTTLED(8),
|
|
28
|
+
BUDGETEXHAUSTED(9);
|
|
29
|
+
}
|
|
@@ -18,6 +18,8 @@ namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadEvent
|
|
|
18
18
|
namespace margelo::nitro::reactnativerangedownloader { enum class RangeDownloadOutcome; }
|
|
19
19
|
// Forward declaration of `RangeDownloadResult` to properly resolve imports.
|
|
20
20
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadResult; }
|
|
21
|
+
// Forward declaration of `RangeFallbackKind` to properly resolve imports.
|
|
22
|
+
namespace margelo::nitro::reactnativerangedownloader { enum class RangeFallbackKind; }
|
|
21
23
|
|
|
22
24
|
// Forward declarations of Swift defined types
|
|
23
25
|
// Forward declaration of `HybridReactNativeRangeDownloaderSpec_cxx` to properly resolve imports.
|
|
@@ -29,6 +31,7 @@ namespace ReactNativeRangeDownloader { class HybridReactNativeRangeDownloaderSpe
|
|
|
29
31
|
#include "RangeDownloadEvent.hpp"
|
|
30
32
|
#include "RangeDownloadOutcome.hpp"
|
|
31
33
|
#include "RangeDownloadResult.hpp"
|
|
34
|
+
#include "RangeFallbackKind.hpp"
|
|
32
35
|
#include <NitroModules/Promise.hpp>
|
|
33
36
|
#include <NitroModules/PromiseHolder.hpp>
|
|
34
37
|
#include <NitroModules/Result.hpp>
|
|
@@ -59,6 +62,21 @@ namespace margelo::nitro::reactnativerangedownloader::bridge::swift {
|
|
|
59
62
|
return *optional;
|
|
60
63
|
}
|
|
61
64
|
|
|
65
|
+
// pragma MARK: std::optional<RangeFallbackKind>
|
|
66
|
+
/**
|
|
67
|
+
* Specialized version of `std::optional<RangeFallbackKind>`.
|
|
68
|
+
*/
|
|
69
|
+
using std__optional_RangeFallbackKind_ = std::optional<RangeFallbackKind>;
|
|
70
|
+
inline std::optional<RangeFallbackKind> create_std__optional_RangeFallbackKind_(const RangeFallbackKind& value) noexcept {
|
|
71
|
+
return std::optional<RangeFallbackKind>(value);
|
|
72
|
+
}
|
|
73
|
+
inline bool has_value_std__optional_RangeFallbackKind_(const std::optional<RangeFallbackKind>& optional) noexcept {
|
|
74
|
+
return optional.has_value();
|
|
75
|
+
}
|
|
76
|
+
inline RangeFallbackKind get_std__optional_RangeFallbackKind_(const std::optional<RangeFallbackKind>& optional) noexcept {
|
|
77
|
+
return *optional;
|
|
78
|
+
}
|
|
79
|
+
|
|
62
80
|
// pragma MARK: std::shared_ptr<Promise<RangeDownloadResult>>
|
|
63
81
|
/**
|
|
64
82
|
* Specialized version of `std::shared_ptr<Promise<RangeDownloadResult>>`.
|
|
@@ -20,6 +20,8 @@ namespace margelo::nitro::reactnativerangedownloader { enum class RangeDownloadO
|
|
|
20
20
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadParams; }
|
|
21
21
|
// Forward declaration of `RangeDownloadResult` to properly resolve imports.
|
|
22
22
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadResult; }
|
|
23
|
+
// Forward declaration of `RangeFallbackKind` to properly resolve imports.
|
|
24
|
+
namespace margelo::nitro::reactnativerangedownloader { enum class RangeFallbackKind; }
|
|
23
25
|
|
|
24
26
|
// Include C++ defined types
|
|
25
27
|
#include "DownloadChannel.hpp"
|
|
@@ -28,6 +30,7 @@ namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadResul
|
|
|
28
30
|
#include "RangeDownloadOutcome.hpp"
|
|
29
31
|
#include "RangeDownloadParams.hpp"
|
|
30
32
|
#include "RangeDownloadResult.hpp"
|
|
33
|
+
#include "RangeFallbackKind.hpp"
|
|
31
34
|
#include <NitroModules/Promise.hpp>
|
|
32
35
|
#include <NitroModules/Result.hpp>
|
|
33
36
|
#include <exception>
|
|
@@ -16,6 +16,8 @@ namespace ReactNativeRangeDownloader { class HybridReactNativeRangeDownloaderSpe
|
|
|
16
16
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadResult; }
|
|
17
17
|
// Forward declaration of `RangeDownloadOutcome` to properly resolve imports.
|
|
18
18
|
namespace margelo::nitro::reactnativerangedownloader { enum class RangeDownloadOutcome; }
|
|
19
|
+
// Forward declaration of `RangeFallbackKind` to properly resolve imports.
|
|
20
|
+
namespace margelo::nitro::reactnativerangedownloader { enum class RangeFallbackKind; }
|
|
19
21
|
// Forward declaration of `RangeDownloadParams` to properly resolve imports.
|
|
20
22
|
namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadParams; }
|
|
21
23
|
// Forward declaration of `DownloadChannel` to properly resolve imports.
|
|
@@ -28,6 +30,7 @@ namespace margelo::nitro::reactnativerangedownloader { struct RangeDownloadEvent
|
|
|
28
30
|
#include "RangeDownloadOutcome.hpp"
|
|
29
31
|
#include <string>
|
|
30
32
|
#include <optional>
|
|
33
|
+
#include "RangeFallbackKind.hpp"
|
|
31
34
|
#include "RangeDownloadParams.hpp"
|
|
32
35
|
#include "DownloadChannel.hpp"
|
|
33
36
|
#include "RangeDownloadEvent.hpp"
|
|
@@ -19,6 +19,10 @@ public extension RangeDownloadOutcome {
|
|
|
19
19
|
switch string {
|
|
20
20
|
case "completed":
|
|
21
21
|
self = .completed
|
|
22
|
+
case "fallbackTransient":
|
|
23
|
+
self = .fallbacktransient
|
|
24
|
+
case "fallbackPermanent":
|
|
25
|
+
self = .fallbackpermanent
|
|
22
26
|
case "fallback":
|
|
23
27
|
self = .fallback
|
|
24
28
|
default:
|
|
@@ -33,6 +37,10 @@ public extension RangeDownloadOutcome {
|
|
|
33
37
|
switch self {
|
|
34
38
|
case .completed:
|
|
35
39
|
return "completed"
|
|
40
|
+
case .fallbacktransient:
|
|
41
|
+
return "fallbackTransient"
|
|
42
|
+
case .fallbackpermanent:
|
|
43
|
+
return "fallbackPermanent"
|
|
36
44
|
case .fallback:
|
|
37
45
|
return "fallback"
|
|
38
46
|
}
|
|
@@ -19,7 +19,7 @@ public extension RangeDownloadParams {
|
|
|
19
19
|
/**
|
|
20
20
|
* Create a new instance of `RangeDownloadParams`.
|
|
21
21
|
*/
|
|
22
|
-
init(channel: DownloadChannel, taskId: String, url: String, destFilePath: String, expectedSha256: String?, segmentCount: Double?, minConcurrentBytes: Double?) {
|
|
22
|
+
init(channel: DownloadChannel, taskId: String, url: String, destFilePath: String, expectedSha256: String?, segmentCount: Double?, minConcurrentBytes: Double?, maxSegmentAttempts: Double?, requestTimeoutSeconds: Double?, stallTimeoutSeconds: Double?, overallDeadlineSeconds: Double?) {
|
|
23
23
|
self.init(channel, std.string(taskId), std.string(url), std.string(destFilePath), { () -> bridge.std__optional_std__string_ in
|
|
24
24
|
if let __unwrappedValue = expectedSha256 {
|
|
25
25
|
return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
|
|
@@ -38,6 +38,30 @@ public extension RangeDownloadParams {
|
|
|
38
38
|
} else {
|
|
39
39
|
return .init()
|
|
40
40
|
}
|
|
41
|
+
}(), { () -> bridge.std__optional_double_ in
|
|
42
|
+
if let __unwrappedValue = maxSegmentAttempts {
|
|
43
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
44
|
+
} else {
|
|
45
|
+
return .init()
|
|
46
|
+
}
|
|
47
|
+
}(), { () -> bridge.std__optional_double_ in
|
|
48
|
+
if let __unwrappedValue = requestTimeoutSeconds {
|
|
49
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
50
|
+
} else {
|
|
51
|
+
return .init()
|
|
52
|
+
}
|
|
53
|
+
}(), { () -> bridge.std__optional_double_ in
|
|
54
|
+
if let __unwrappedValue = stallTimeoutSeconds {
|
|
55
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
56
|
+
} else {
|
|
57
|
+
return .init()
|
|
58
|
+
}
|
|
59
|
+
}(), { () -> bridge.std__optional_double_ in
|
|
60
|
+
if let __unwrappedValue = overallDeadlineSeconds {
|
|
61
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
62
|
+
} else {
|
|
63
|
+
return .init()
|
|
64
|
+
}
|
|
41
65
|
}())
|
|
42
66
|
}
|
|
43
67
|
|
|
@@ -142,4 +166,72 @@ public extension RangeDownloadParams {
|
|
|
142
166
|
}()
|
|
143
167
|
}
|
|
144
168
|
}
|
|
169
|
+
|
|
170
|
+
var maxSegmentAttempts: Double? {
|
|
171
|
+
@inline(__always)
|
|
172
|
+
get {
|
|
173
|
+
return self.__maxSegmentAttempts.value
|
|
174
|
+
}
|
|
175
|
+
@inline(__always)
|
|
176
|
+
set {
|
|
177
|
+
self.__maxSegmentAttempts = { () -> bridge.std__optional_double_ in
|
|
178
|
+
if let __unwrappedValue = newValue {
|
|
179
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
180
|
+
} else {
|
|
181
|
+
return .init()
|
|
182
|
+
}
|
|
183
|
+
}()
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
var requestTimeoutSeconds: Double? {
|
|
188
|
+
@inline(__always)
|
|
189
|
+
get {
|
|
190
|
+
return self.__requestTimeoutSeconds.value
|
|
191
|
+
}
|
|
192
|
+
@inline(__always)
|
|
193
|
+
set {
|
|
194
|
+
self.__requestTimeoutSeconds = { () -> bridge.std__optional_double_ in
|
|
195
|
+
if let __unwrappedValue = newValue {
|
|
196
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
197
|
+
} else {
|
|
198
|
+
return .init()
|
|
199
|
+
}
|
|
200
|
+
}()
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
var stallTimeoutSeconds: Double? {
|
|
205
|
+
@inline(__always)
|
|
206
|
+
get {
|
|
207
|
+
return self.__stallTimeoutSeconds.value
|
|
208
|
+
}
|
|
209
|
+
@inline(__always)
|
|
210
|
+
set {
|
|
211
|
+
self.__stallTimeoutSeconds = { () -> bridge.std__optional_double_ in
|
|
212
|
+
if let __unwrappedValue = newValue {
|
|
213
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
214
|
+
} else {
|
|
215
|
+
return .init()
|
|
216
|
+
}
|
|
217
|
+
}()
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
var overallDeadlineSeconds: Double? {
|
|
222
|
+
@inline(__always)
|
|
223
|
+
get {
|
|
224
|
+
return self.__overallDeadlineSeconds.value
|
|
225
|
+
}
|
|
226
|
+
@inline(__always)
|
|
227
|
+
set {
|
|
228
|
+
self.__overallDeadlineSeconds = { () -> bridge.std__optional_double_ in
|
|
229
|
+
if let __unwrappedValue = newValue {
|
|
230
|
+
return bridge.create_std__optional_double_(__unwrappedValue)
|
|
231
|
+
} else {
|
|
232
|
+
return .init()
|
|
233
|
+
}
|
|
234
|
+
}()
|
|
235
|
+
}
|
|
236
|
+
}
|
|
145
237
|
}
|
|
@@ -19,13 +19,19 @@ public extension RangeDownloadResult {
|
|
|
19
19
|
/**
|
|
20
20
|
* Create a new instance of `RangeDownloadResult`.
|
|
21
21
|
*/
|
|
22
|
-
init(outcome: RangeDownloadOutcome, filePath: String, fallbackReason: String?) {
|
|
22
|
+
init(outcome: RangeDownloadOutcome, filePath: String, fallbackReason: String?, fallbackKind: RangeFallbackKind?) {
|
|
23
23
|
self.init(outcome, std.string(filePath), { () -> bridge.std__optional_std__string_ in
|
|
24
24
|
if let __unwrappedValue = fallbackReason {
|
|
25
25
|
return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
|
|
26
26
|
} else {
|
|
27
27
|
return .init()
|
|
28
28
|
}
|
|
29
|
+
}(), { () -> bridge.std__optional_RangeFallbackKind_ in
|
|
30
|
+
if let __unwrappedValue = fallbackKind {
|
|
31
|
+
return bridge.create_std__optional_RangeFallbackKind_(__unwrappedValue)
|
|
32
|
+
} else {
|
|
33
|
+
return .init()
|
|
34
|
+
}
|
|
29
35
|
}())
|
|
30
36
|
}
|
|
31
37
|
|
|
@@ -74,4 +80,21 @@ public extension RangeDownloadResult {
|
|
|
74
80
|
}()
|
|
75
81
|
}
|
|
76
82
|
}
|
|
83
|
+
|
|
84
|
+
var fallbackKind: RangeFallbackKind? {
|
|
85
|
+
@inline(__always)
|
|
86
|
+
get {
|
|
87
|
+
return self.__fallbackKind.value
|
|
88
|
+
}
|
|
89
|
+
@inline(__always)
|
|
90
|
+
set {
|
|
91
|
+
self.__fallbackKind = { () -> bridge.std__optional_RangeFallbackKind_ in
|
|
92
|
+
if let __unwrappedValue = newValue {
|
|
93
|
+
return bridge.create_std__optional_RangeFallbackKind_(__unwrappedValue)
|
|
94
|
+
} else {
|
|
95
|
+
return .init()
|
|
96
|
+
}
|
|
97
|
+
}()
|
|
98
|
+
}
|
|
99
|
+
}
|
|
77
100
|
}
|