handleWebdavStart method

Future<void> handleWebdavStart(
  1. ArgResults argResults
)

Implementation

Future<void> handleWebdavStart(ArgResults argResults) async {
  final bool background = argResults['background'] ?? false;
  final bool isDaemon = argResults['daemon'] ?? false;
  final int port = int.tryParse(argResults['port'] ?? '8080') ?? 8080;

  if (isDaemon) {
    await handleMount(argResults);
    return;
  }

  final existingPid = await config.readWebdavPid();
  if (existingPid != null) {
    final isRunning = await _isProcessRunning(existingPid);
    if (isRunning) {
      stderr.writeln(
          '\u274c WebDAV server is already running (PID: $existingPid).');
      exit(1);
    } else {
      await config.clearWebdavPid();
    }
  }

  if (background) {
    print('\ud83d\ude80 Starting WebDAV server in background...');
    try {
      final process = await Process.start(
        Platform.executable,
        [
          Platform.script.toFilePath(),
          'webdav-start',
          '--daemon',
          '--port=$port'
        ],
        mode: ProcessStartMode.detached,
      );
      await Future.delayed(Duration(milliseconds: 1000));

      final isRunning = await _isProcessRunning(process.pid);
      if (!isRunning) {
        stderr.writeln('\u274c Failed to start background process');
        await config.clearWebdavPid();
        exit(1);
      }

      await config.saveWebdavPid(process.pid);
      print('\u2705 WebDAV server started (PID: ${process.pid})');
      print('   URL: http://localhost:$port/');
      print('   User: filen / Pass: filen-webdav');
      exit(0);
    } catch (e) {
      stderr.writeln('\u274c Failed to start background process: $e');
      exit(1);
    }
  }

  print('\ud83d\ude80 Starting WebDAV server in foreground...');
  print('   (Press Ctrl+C to stop)');
  await handleMount(argResults);
}