Merge pull request #1353 from realm/kneth/lazy-enable-sync

Enable SyncManager late
This commit is contained in:
blagoev 2017-09-28 11:21:38 +03:00 committed by GitHub
commit fc4f6f6c20
7 changed files with 105 additions and 86 deletions

View File

@ -1,3 +1,15 @@
x.x.x Release notes (yyyy-MM-dd)
=============================================================
### Breaking changes
* None.
### Enhancements
* None.
### Bug fixes
* Configuration of sync file system is not done on module import but later when actually needed by sync (#1351)
2.0.0 Release notes (2017-9-28) 2.0.0 Release notes (2017-9-28)
============================================================= =============================================================
### Breaking changes ### Breaking changes
@ -25,6 +37,9 @@
* Alignment of permission schemas. * Alignment of permission schemas.
* Updating sync (2.0.0-rc24). * Updating sync (2.0.0-rc24).
2.0.0-rc10 Release notes (2017-9-19) 2.0.0-rc10 Release notes (2017-9-19)
============================================================= =============================================================
### Breaking changes ### Breaking changes

6
lib/index.d.ts vendored
View File

@ -288,7 +288,7 @@ declare namespace Realm.Sync {
openManagementRealm(): Realm; openManagementRealm(): Realm;
retrieveAccount(provider: string, username: string): Promise<Account>; retrieveAccount(provider: string, username: string): Promise<Account>;
getGrantedPermissions(recipient: 'any' | 'currentUser' | 'otherUser'): Results<Permission>; getGrantedPermissions(recipient: 'any' | 'currentUser' | 'otherUser'): Results<Permission>;
applyPermissions(condition: PermissionCondition, realmUrl: string, accessLevel: AccessLevel): Promise<PermissionChange>; applyPermissions(condition: PermissionCondition, realmUrl: string, accessLevel: AccessLevel): Promise<PermissionChange>;
offerPermissions(realmUrl: string, accessLevel: AccessLevel, expiresAt?: Date): Promise<string>; offerPermissions(realmUrl: string, accessLevel: AccessLevel, expiresAt?: Date): Promise<string>;
acceptPermissionOffer(token: string): Promise<string> acceptPermissionOffer(token: string): Promise<string>
@ -300,7 +300,7 @@ declare namespace Realm.Sync {
{ metadataKey: string, metadataValue: string } { metadataKey: string, metadataValue: string }
}; };
type AccessLevel = 'none' | 'read' | 'write' | 'admin'; type AccessLevel = 'none' | 'read' | 'write' | 'admin';
class Permission { class Permission {
readonly id: string; readonly id: string;
@ -437,7 +437,7 @@ declare namespace Realm.Sync {
interface ProgressPromise extends Promise<Realm> { interface ProgressPromise extends Promise<Realm> {
progress(callback: Realm.Sync.ProgressNotificationCallback) : Promise<Realm> progress(callback: Realm.Sync.ProgressNotificationCallback): Promise<Realm>
} }
declare class Realm { declare class Realm {

View File

@ -39,6 +39,15 @@
namespace realm { namespace realm {
namespace js { namespace js {
inline realm::SyncManager& syncManagerShared() {
static bool configured = []{
ensure_directory_exists_for_file(default_realm_file_directory());
SyncManager::shared().configure_file_system(default_realm_file_directory(), SyncManager::MetadataMode::NoEncryption);
return true;
}();
return SyncManager::shared();
}
using SharedUser = std::shared_ptr<realm::SyncUser>; using SharedUser = std::shared_ptr<realm::SyncUser>;
using WeakSession = std::weak_ptr<realm::SyncSession>; using WeakSession = std::weak_ptr<realm::SyncSession>;
@ -127,7 +136,7 @@ void UserClass<T>::create_user(ContextType ctx, FunctionType, ObjectType this_ob
Value::validated_to_string(ctx, arguments[1], "identity"), Value::validated_to_string(ctx, arguments[1], "identity"),
Value::validated_to_string(ctx, arguments[0], "authServerUrl") Value::validated_to_string(ctx, arguments[0], "authServerUrl")
}; };
SharedUser *user = new SharedUser(SyncManager::shared().get_user( SharedUser *user = new SharedUser(syncManagerShared().get_user(
userIdentifier, userIdentifier,
Value::validated_to_string(ctx, arguments[2], "refreshToken") Value::validated_to_string(ctx, arguments[2], "refreshToken")
)); ));
@ -141,7 +150,7 @@ void UserClass<T>::create_user(ContextType ctx, FunctionType, ObjectType this_ob
template<typename T> template<typename T>
void UserClass<T>::admin_user(ContextType ctx, FunctionType, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) { void UserClass<T>::admin_user(ContextType ctx, FunctionType, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) {
validate_argument_count(argc, 2, 2); validate_argument_count(argc, 2, 2);
SharedUser *user = new SharedUser(SyncManager::shared().get_admin_token_user( SharedUser *user = new SharedUser(syncManagerShared().get_admin_token_user(
Value::validated_to_string(ctx, arguments[0], "authServerUrl"), Value::validated_to_string(ctx, arguments[0], "authServerUrl"),
Value::validated_to_string(ctx, arguments[1], "refreshToken") Value::validated_to_string(ctx, arguments[1], "refreshToken")
)); ));
@ -151,7 +160,7 @@ void UserClass<T>::admin_user(ContextType ctx, FunctionType, ObjectType this_obj
template<typename T> template<typename T>
void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &return_value) { void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &return_value) {
auto users = Object::create_empty(ctx); auto users = Object::create_empty(ctx);
for (auto user : SyncManager::shared().all_logged_in_users()) { for (auto user : syncManagerShared().all_logged_in_users()) {
if (user->token_type() == SyncUser::TokenType::Normal) { if (user->token_type() == SyncUser::TokenType::Normal) {
Object::set_property(ctx, users, user->identity(), create_object<T, UserClass<T>>(ctx, new SharedUser(user)), ReadOnly | DontDelete); Object::set_property(ctx, users, user->identity(), create_object<T, UserClass<T>>(ctx, new SharedUser(user)), ReadOnly | DontDelete);
} }
@ -537,10 +546,6 @@ inline typename T::Function SyncClass<T>::create_constructor(ContextType ctx) {
Object::set_property(ctx, sync_constructor, "User", ObjectWrap<T, UserClass<T>>::create_constructor(ctx), attributes); Object::set_property(ctx, sync_constructor, "User", ObjectWrap<T, UserClass<T>>::create_constructor(ctx), attributes);
Object::set_property(ctx, sync_constructor, "Session", ObjectWrap<T, SessionClass<T>>::create_constructor(ctx), attributes); Object::set_property(ctx, sync_constructor, "Session", ObjectWrap<T, SessionClass<T>>::create_constructor(ctx), attributes);
// setup synced realmFile paths
ensure_directory_exists_for_file(default_realm_file_directory());
SyncManager::shared().configure_file_system(default_realm_file_directory(), SyncManager::MetadataMode::NoEncryption);
return sync_constructor; return sync_constructor;
} }
@ -555,7 +560,7 @@ void SyncClass<T>::set_sync_log_level(ContextType ctx, FunctionType, ObjectType
in >> log_level_2; // Throws in >> log_level_2; // Throws
if (!in || !in.eof()) if (!in || !in.eof())
throw std::runtime_error("Bad log level"); throw std::runtime_error("Bad log level");
realm::SyncManager::shared().set_log_level(log_level_2); syncManagerShared().set_log_level(log_level_2);
} }
template<typename T> template<typename T>
@ -639,7 +644,7 @@ void SyncClass<T>::populate_sync_config(ContextType ctx, ObjectType realm_constr
config.schema_mode = SchemaMode::Additive; config.schema_mode = SchemaMode::Additive;
config.path = realm::SyncManager::shared().path_for_realm(*shared_user, raw_realm_url); config.path = syncManagerShared().path_for_realm(*shared_user, raw_realm_url);
if (!config.encryption_key.empty()) { if (!config.encryption_key.empty()) {
config.sync_config->realm_encryption_key = std::array<char, 64>(); config.sync_config->realm_encryption_key = std::array<char, 64>();

View File

@ -46,7 +46,6 @@ if (global.enableSyncTests) {
// FIXME: Permission tests currently fail in chrome debugging mode. // FIXME: Permission tests currently fail in chrome debugging mode.
if (typeof navigator === 'undefined' || if (typeof navigator === 'undefined' ||
!/Chrome/.test(navigator.userAgent)) { // eslint-disable-line no-undef !/Chrome/.test(navigator.userAgent)) { // eslint-disable-line no-undef
//TESTS.PermissionTests = require('./permission-tests'); //TESTS.PermissionTests = require('./permission-tests');
} }
} }