32 lines
1.6 KiB
Dart
32 lines
1.6 KiB
Dart
/// Builds a globalKey string from [serverId] and [ratingKey].
|
|
String buildGlobalKey(String serverId, String ratingKey) => '$serverId:$ratingKey';
|
|
|
|
/// Separator used by profile-owned rows whose public media identity is still
|
|
/// [buildGlobalKey]. Profile ids are generated by the app and do not contain
|
|
/// this character.
|
|
const String profileScopedGlobalKeySeparator = '|';
|
|
|
|
/// Builds a profile-owned sync-rule key from [profileId] and public media id.
|
|
String buildProfileScopedGlobalKey(String profileId, String serverId, String ratingKey) {
|
|
return '$profileId$profileScopedGlobalKeySeparator${buildGlobalKey(serverId, ratingKey)}';
|
|
}
|
|
|
|
/// Parses a globalKey string (format: "serverId:ratingKey") into its components.
|
|
///
|
|
/// Returns `null` if the key does not contain a colon separator.
|
|
/// Uses [indexOf] so ratingKeys containing colons are handled correctly.
|
|
({String serverId, String ratingKey})? parseGlobalKey(String globalKey) {
|
|
final idx = globalKey.indexOf(':');
|
|
if (idx < 0) return null;
|
|
return (serverId: globalKey.substring(0, idx), ratingKey: globalKey.substring(idx + 1));
|
|
}
|
|
|
|
/// Parses a profile-owned sync-rule key, returning `null` for legacy public keys.
|
|
({String profileId, String serverId, String ratingKey})? parseProfileScopedGlobalKey(String globalKey) {
|
|
final idx = globalKey.indexOf(profileScopedGlobalKeySeparator);
|
|
if (idx < 0) return null;
|
|
final publicKey = parseGlobalKey(globalKey.substring(idx + 1));
|
|
if (publicKey == null) return null;
|
|
return (profileId: globalKey.substring(0, idx), serverId: publicKey.serverId, ratingKey: publicKey.ratingKey);
|
|
}
|