Skip to content

Commit

Permalink
fix(storage): pass StorageMetadata as nullable for putFile() API. M…
Browse files Browse the repository at this point in the history
…etadata ought to be inferred from File. (#12612)
  • Loading branch information
russellwheatley committed Apr 23, 2024
1 parent 933e343 commit e75d134
Show file tree
Hide file tree
Showing 14 changed files with 37 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -493,16 +493,18 @@ public void referencePutFile(
@NonNull GeneratedAndroidFirebaseStorage.PigeonStorageFirebaseApp app,
@NonNull GeneratedAndroidFirebaseStorage.PigeonStorageReference reference,
@NonNull String filePath,
@NonNull GeneratedAndroidFirebaseStorage.PigeonSettableMetadata settableMetaData,
@Nullable GeneratedAndroidFirebaseStorage.PigeonSettableMetadata settableMetaData,
@NonNull Long handle,
@NonNull GeneratedAndroidFirebaseStorage.Result<String> result) {

StorageReference androidReference = getReferenceFromPigeon(app, reference);
StorageMetadata androidMetaData = getMetaDataFromPigeon(settableMetaData);

FlutterFirebaseStorageTask storageTask =
FlutterFirebaseStorageTask.uploadFile(
handle.intValue(), androidReference, Uri.fromFile(new File(filePath)), androidMetaData);
handle.intValue(),
androidReference,
Uri.fromFile(new File(filePath)),
settableMetaData == null ? null : getMetaDataFromPigeon(settableMetaData));

try {
TaskStateChannelStreamHandler handler = storageTask.startTaskWithMethodChannel(channel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -796,7 +796,7 @@ void referencePutFile(
@NonNull PigeonStorageFirebaseApp app,
@NonNull PigeonStorageReference reference,
@NonNull String filePath,
@NonNull PigeonSettableMetadata settableMetaData,
@Nullable PigeonSettableMetadata settableMetaData,
@NonNull Long handle,
@NonNull Result<String> result);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,11 +452,15 @@ - (void)referencePutFileApp:(PigeonStorageFirebaseApp *)app
completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion {
FIRStorageReference *storage_reference = [self getFIRStorageReferenceFromPigeon:app
reference:reference];
FIRStorageMetadata *metadata = [self getFIRStorageMetadataFromPigeon:settableMetaData];

NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
FIRStorageObservableTask<FIRStorageTaskManagement> *task = [storage_reference putFile:fileUrl
metadata:metadata];
FIRStorageObservableTask<FIRStorageTaskManagement> *task;
if (settableMetaData == nil) {
task = [storage_reference putFile:fileUrl];
} else {
FIRStorageMetadata *metadata = [self getFIRStorageMetadataFromPigeon:settableMetaData];
task = [storage_reference putFile:fileUrl metadata:metadata];
}

@synchronized(self->_tasks) {
self->_tasks[handle] = task;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ NSObject<FlutterMessageCodec> *FirebaseStorageHostApiGetCodec(void);
- (void)referencePutFileApp:(PigeonStorageFirebaseApp *)app
reference:(PigeonStorageReference *)reference
filePath:(NSString *)filePath
settableMetaData:(PigeonSettableMetadata *)settableMetaData
settableMetaData:(nullable PigeonSettableMetadata *)settableMetaData
handle:(NSNumber *)handle
completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion;
- (void)referenceDownloadFileApp:(PigeonStorageFirebaseApp *)app
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,7 @@ void FirebaseStoragePlugin::ReferencePutFile(
const PigeonStorageFirebaseApp& pigeon_app,
const PigeonStorageReference& pigeon_reference,
const std::string& file_path,
const PigeonSettableMetadata& settable_meta_data, int64_t handle,
const PigeonSettableMetadata* settable_meta_data, int64_t handle,
std::function<void(ErrorOr<std::string> reply)> result) {
Storage* cpp_storage =
GetCPPStorageFromPigeon(pigeon_app, pigeon_reference.bucket());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class FirebaseStoragePlugin : public flutter::Plugin,
virtual void ReferencePutFile(
const PigeonStorageFirebaseApp& app,
const PigeonStorageReference& reference, const std::string& file_path,
const PigeonSettableMetadata& settable_meta_data, int64_t handle,
const PigeonSettableMetadata* settable_meta_data, int64_t handle,
std::function<void(ErrorOr<std::string> reply)> result) override;
virtual void ReferenceDownloadFile(
const PigeonStorageFirebaseApp& app,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1253,14 +1253,10 @@ void FirebaseStorageHostApi::SetUp(flutter::BinaryMessenger* binary_messenger,
const auto& file_path_arg =
std::get<std::string>(encodable_file_path_arg);
const auto& encodable_settable_meta_data_arg = args.at(3);
if (encodable_settable_meta_data_arg.IsNull()) {
reply(WrapError("settable_meta_data_arg unexpectedly null."));
return;
}
const auto& settable_meta_data_arg =
std::any_cast<const PigeonSettableMetadata&>(
const auto* settable_meta_data_arg =
&(std::any_cast<const PigeonSettableMetadata&>(
std::get<CustomEncodableValue>(
encodable_settable_meta_data_arg));
encodable_settable_meta_data_arg)));
const auto& encodable_handle_arg = args.at(4);
if (encodable_handle_arg.IsNull()) {
reply(WrapError("handle_arg unexpectedly null."));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ class FirebaseStorageHostApi {
virtual void ReferencePutFile(
const PigeonStorageFirebaseApp& app,
const PigeonStorageReference& reference, const std::string& file_path,
const PigeonSettableMetadata& settable_meta_data, int64_t handle,
const PigeonSettableMetadata* settable_meta_data, int64_t handle,
std::function<void(ErrorOr<std::string> reply)> result) = 0;
virtual void ReferenceDownloadFile(
const PigeonStorageFirebaseApp& app,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,9 @@ class MethodChannelPutFileTask extends MethodChannelTask {
MethodChannelFirebaseStorage.getPigeonReference(
storage.bucket, path, 'putFile'),
file.path,
MethodChannelFirebaseStorage.getPigeonSettableMetaData(metadata),
metadata == null
? null
: MethodChannelFirebaseStorage.getPigeonSettableMetaData(metadata),
handle,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,7 @@ class FirebaseStorageHostApi {
PigeonStorageFirebaseApp arg_app,
PigeonStorageReference arg_reference,
String arg_filePath,
PigeonSettableMetadata arg_settableMetaData,
PigeonSettableMetadata? arg_settableMetaData,
int arg_handle) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutFile',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ abstract class FirebaseStorageHostApi {
PigeonStorageFirebaseApp app,
PigeonStorageReference reference,
String filePath,
PigeonSettableMetadata settableMetaData,
PigeonSettableMetadata? settableMetaData,
int handle,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ abstract class TestFirebaseStorageHostApi {
PigeonStorageFirebaseApp app,
PigeonStorageReference reference,
String filePath,
PigeonSettableMetadata settableMetaData,
PigeonSettableMetadata? settableMetaData,
int handle);

Future<String> referenceDownloadFile(PigeonStorageFirebaseApp app,
Expand Down Expand Up @@ -570,17 +570,11 @@ abstract class TestFirebaseStorageHostApi {
'Argument for dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutFile was null, expected non-null String.');
final PigeonSettableMetadata? arg_settableMetaData =
(args[3] as PigeonSettableMetadata?);
assert(arg_settableMetaData != null,
'Argument for dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutFile was null, expected non-null PigeonSettableMetadata.');
final int? arg_handle = (args[4] as int?);
assert(arg_handle != null,
'Argument for dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutFile was null, expected non-null int.');
final String output = await api.referencePutFile(
arg_app!,
arg_reference!,
arg_filePath!,
arg_settableMetaData!,
arg_handle!);
final String output = await api.referencePutFile(arg_app!,
arg_reference!, arg_filePath!, arg_settableMetaData, arg_handle!);
return <Object?>[output];
});
}
Expand Down
8 changes: 8 additions & 0 deletions tests/integration_test/firebase_storage/reference_e2e.dart
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,14 @@ void setupReferenceTests() {
// Metadata isn't saved on objects when using the emulator which fails test
// expect(complete.metadata?.contentLanguage, 'en');
// expect(complete.metadata?.customMetadata!['activity'], 'test');

// Check without SettableMetadata
final Reference ref2 =
storage.ref('flutter-tests').child('flt-ok-2.txt');
final TaskSnapshot complete2 = await ref2.putFile(
file,
);
expect(complete2.metadata?.size, kTestString.length);
},
// putFile is not supported on the web platform.
skip: kIsWeb,
Expand Down
2 changes: 1 addition & 1 deletion tests/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
};
AC660AAB7696B4DD121B84D0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
Expand Down

0 comments on commit e75d134

Please sign in to comment.