renameItem method

Future<void> renameItem(
  1. String uuid,
  2. String newName,
  3. String type
)

Implementation

Future<void> renameItem(String uuid, String newName, String type) async {
  await cache.clearParentCache(uuid, type, api, crypto, masterKeys);
  final mk = masterKeys.last;
  if (mk.isEmpty) throw Exception('No master keys available');
  final nameHashed = await crypto.hashFileName(newName, masterKeys, email);

  if (type == 'folder') {
    final encName =
        await crypto.encryptMetadata002(json.encode({'name': newName}), mk);
    await api.post('/v3/dir/rename',
        {'uuid': uuid, 'name': encName, 'nameHashed': nameHashed});
  } else {
    final metaRaw = await getFileMetadata(uuid);
    final metadata = metaRaw['data'] ?? metaRaw;
    final metaStr = await crypto.tryDecrypt(metadata['metadata'], masterKeys);
    final metaJson = json.decode(metaStr);
    metaJson['name'] = newName;

    final fileKey = metaJson['key'];
    final nameEncrypted = await crypto.encryptMetadata002(newName, fileKey);
    final metadataEncrypted =
        await crypto.encryptMetadata002(json.encode(metaJson), mk);

    await api.post('/v3/file/rename', {
      'uuid': uuid,
      'name': nameEncrypted,
      'metadata': metadataEncrypted,
      'nameHashed': nameHashed
    });
  }
  cache.clearPathCache();
}