listDirectoryNames method

Future<void> listDirectoryNames(
  1. String path
)

NLST: list only filenames, one per line (RFC 959).

Implementation

Future<void> listDirectoryNames(String path) async {
  if (!checkDataProtection()) return;

  if (!await openDataConnection()) {
    return;
  }

  try {
    transferInProgress = true;
    var dirContents = await fileOperations.listDirectory(path);

    for (FileSystemEntity entity in dirContents) {
      if (!transferInProgress || dataSocket == null) break;

      try {
        String fileName = entity.path.split(Platform.pathSeparator).last;
        dataSocket!.write('$fileName\r\n');
      } catch (e) {
        logger.generalLog('Socket write error during NLST: $e');
        transferInProgress = false;
        break;
      }
    }

    if (transferInProgress) {
      transferInProgress = false;
      await _closeDataSocket();
      sendResponse('226 Transfer complete');
    } else {
      await _closeDataSocket();
      sendResponse('426 Transfer aborted');
    }
  } catch (e) {
    logger.generalLog('Error listing directory names: $e');
    sendResponse('550 Failed to list directory');
    transferInProgress = false;
    await _closeDataSocket();
  }
}