loadSharedProfileSettingsFromFile function

Future<SharedProfileSettingsSnapshot> loadSharedProfileSettingsFromFile(
  1. File file
)

Implementation

Future<SharedProfileSettingsSnapshot> loadSharedProfileSettingsFromFile(File file) async {
  final decoded = await _readSettings(file);
  final users = decoded["users"];
  final activeUserId = _nullableString(decoded["active_user_id"]);
  final profiles = <SharedProfile>[];

  if (users is Map) {
    for (final entry in users.entries) {
      final userId = entry.key;
      final rawSettings = entry.value;
      if (userId is! String || userId == _localStateUserId || rawSettings is! Map) {
        continue;
      }

      final profile = SharedProfile.fromJson(userId: userId, isActive: userId == activeUserId, json: _objectMap(rawSettings));
      if (profile.canAuthenticate) {
        profiles.add(profile);
      }
    }
  }

  profiles.sort((a, b) {
    if (a.isActive != b.isActive) {
      return a.isActive ? -1 : 1;
    }
    return (a.profile?.displayName ?? a.userId).toLowerCase().compareTo((b.profile?.displayName ?? b.userId).toLowerCase());
  });

  return SharedProfileSettingsSnapshot(
    settingsFile: file,
    activeProfile: _firstActiveProfile(profiles),
    profiles: profiles,
    modified: await file.exists() ? await file.lastModified() : null,
  );
}