diff options
Diffstat (limited to 'Firestore/Source/Remote/FSTDatastore.mm')
-rw-r--r-- | Firestore/Source/Remote/FSTDatastore.mm | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/Firestore/Source/Remote/FSTDatastore.mm b/Firestore/Source/Remote/FSTDatastore.mm index 02d868c..8017c58 100644 --- a/Firestore/Source/Remote/FSTDatastore.mm +++ b/Firestore/Source/Remote/FSTDatastore.mm @@ -23,9 +23,7 @@ #import "Firestore/Source/API/FIRFirestore+Internal.h" #import "Firestore/Source/API/FIRFirestoreVersion.h" #import "Firestore/Source/Auth/FSTCredentialsProvider.h" -#import "Firestore/Source/Core/FSTDatabaseInfo.h" #import "Firestore/Source/Local/FSTLocalStore.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocument.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTMutation.h" @@ -37,6 +35,14 @@ #import "Firestore/Protos/objc/google/firestore/v1beta1/Firestore.pbrpc.h" +#include "Firestore/core/src/firebase/firestore/core/database_info.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::core::DatabaseInfo; +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN // GRPC does not publicly declare a means of disabling SSL, which we need for testing. Firestore @@ -71,7 +77,7 @@ typedef GRPCProtoCall * (^RPCFactory)(void); @implementation FSTDatastore -+ (instancetype)datastoreWithDatabase:(FSTDatabaseInfo *)databaseInfo ++ (instancetype)datastoreWithDatabase:(const DatabaseInfo *)databaseInfo workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials { return [[FSTDatastore alloc] initWithDatabaseInfo:databaseInfo @@ -79,25 +85,29 @@ typedef GRPCProtoCall * (^RPCFactory)(void); credentials:credentials]; } -- (instancetype)initWithDatabaseInfo:(FSTDatabaseInfo *)databaseInfo +- (instancetype)initWithDatabaseInfo:(const DatabaseInfo *)databaseInfo workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials { if (self = [super init]) { _databaseInfo = databaseInfo; - if (!databaseInfo.isSSLEnabled) { - GRPCHost *hostConfig = [GRPCHost hostWithAddress:databaseInfo.host]; + NSString *host = util::WrapNSStringNoCopy(databaseInfo->host()); + if (!databaseInfo->ssl_enabled()) { + GRPCHost *hostConfig = [GRPCHost hostWithAddress:host]; hostConfig.secure = NO; } - _service = [GCFSFirestore serviceWithHost:databaseInfo.host]; + _service = [GCFSFirestore serviceWithHost:host]; _workerDispatchQueue = workerDispatchQueue; _credentials = credentials; - _serializer = [[FSTSerializerBeta alloc] initWithDatabaseID:databaseInfo.databaseID]; + _serializer = [[FSTSerializerBeta alloc] initWithDatabaseID:&databaseInfo->database_id()]; } return self; } - (NSString *)description { - return [NSString stringWithFormat:@"<FSTDatastore: %@>", self.databaseInfo]; + return [NSString + stringWithFormat:@"<FSTDatastore: <DatabaseInfo: database_id:%@ host:%@>>", + util::WrapNSStringNoCopy(self.databaseInfo->database_id().database_id()), + util::WrapNSStringNoCopy(self.databaseInfo->host())]; } /** @@ -168,9 +178,10 @@ typedef GRPCProtoCall * (^RPCFactory)(void); } /** Returns the string to be used as google-cloud-resource-prefix header value. */ -+ (NSString *)googleCloudResourcePrefixForDatabaseID:(FSTDatabaseID *)databaseID { - return [NSString - stringWithFormat:@"projects/%@/databases/%@", databaseID.projectID, databaseID.databaseID]; ++ (NSString *)googleCloudResourcePrefixForDatabaseID:(const DatabaseId *)databaseID { + return [NSString stringWithFormat:@"projects/%@/databases/%@", + util::WrapNSStringNoCopy(databaseID->project_id()), + util::WrapNSStringNoCopy(databaseID->database_id())]; } /** * Takes a dictionary of (HTTP) response headers and returns the set of whitelisted headers @@ -298,7 +309,7 @@ typedef GRPCProtoCall * (^RPCFactory)(void); } else { GRPCProtoCall *rpc = rpcFactory(); [FSTDatastore prepareHeadersForRPC:rpc - databaseID:self.databaseInfo.databaseID + databaseID:&self.databaseInfo->database_id() token:result.token]; [rpc start]; } @@ -322,7 +333,7 @@ typedef GRPCProtoCall * (^RPCFactory)(void); /** Adds headers to the RPC including any OAuth access token if provided .*/ + (void)prepareHeadersForRPC:(GRPCCall *)rpc - databaseID:(FSTDatabaseID *)databaseID + databaseID:(const DatabaseId *)databaseID token:(nullable NSString *)token { rpc.oauth2AccessToken = token; rpc.requestHeaders[kXGoogAPIClientHeader] = [FSTDatastore googAPIClientHeaderValue]; |