add method

  1. @override
Future<bool> add(
  1. ProtocolScheme scheme
)
override

Used to add a scheme.

Implementation

@override
Future<bool> add(ProtocolScheme scheme) async {
  final String entry = getEntry(scheme);
  final String path = getDesktopFilePath(scheme);

  final File file = File(path);
  if (await file.exists() == false) {
    await file.create(recursive: true);
    await file.writeAsString(entry);
  } else {
    final List<String> lines = (await file.readAsString()).split('\n');
    final List<String> mimes = lines
            .firstWhereOrNull(
              (final String x) => x.startsWith('MimeType='),
            )
            ?.replaceFirst('MimeType=', '')
            .split(';') ??
        <String>[];

    lines.removeWhere((final String x) => x.startsWith('MimeType='));

    if (!mimes.contains(scheme.scheme)) {
      mimes.add(scheme.scheme);
    }

    await file.writeAsString(
      <String>[...lines, 'MimeType=${mimes.join(';')}'].join('\n'),
    );
  }

  await installDesktopFile(path, scheme);
  return true;
}