public static int DeviceInfoCommand(CommandLineItemCollection commandLine) { int?exitCode; PrintCommandName(); var deviceId = commandLine.GetArgument(0)?.Value; var directoryPath = commandLine.GetArgument(1)?.Value; PortableDevice device = default; try { PortableDeviceFolder directory; (exitCode, device, directory) = ConnectAndGetDeviceAndDirectory(deviceId, directoryPath); if (exitCode.HasValue) { return(exitCode.Value); } PrintDirectory(directory); } finally { device?.Disconnect(); } Console.WriteLine($"[{nameof(EXIT_CODE_OK)}]"); return(EXIT_CODE_OK); }
public static int TransferCommand(CommandLineItemCollection commandLine) { int?exitCode; PrintCommandName(); var deviceId = commandLine.GetArgument(0)?.Value; var sourceDirectoryPath = commandLine.GetArgument(1)?.Value; var targetDirectoryPath = commandLine.GetArgument(2)?.Value; if (string.IsNullOrEmpty(targetDirectoryPath) || !Directory.Exists(targetDirectoryPath)) { Console.WriteLine($"[{nameof(EXIT_CODE_TARGET_DIRECTORY_NOT_FOUND)}]"); return(EXIT_CODE_TARGET_DIRECTORY_NOT_FOUND); } var tempTargetDirectoryPath = Path.Combine(targetDirectoryPath, $".{nameof(BlinctureMTP)}-temp", Guid.NewGuid().ToString("N")); SetHidden(CreateDirectoryIfMissing(tempTargetDirectoryPath)); PortableDevice device = default; PortableDeviceFolder directory; try { (exitCode, device, directory) = ConnectAndGetDeviceAndDirectory(deviceId, sourceDirectoryPath); if (exitCode.HasValue) { return(exitCode.Value); } foreach (var file in directory.Files.OfType <PortableDeviceFile>()) { Spinner.Start($"Transfering '{file.Name}' ...", spinner => { var flagTargetFilePath = Path.Combine(targetDirectoryPath, $".{nameof(BlinctureMTP)}-flags", file.Name); SetHidden(CreateContainingDirectoryIfMissing(flagTargetFilePath)); if (File.Exists(flagTargetFilePath)) { spinner.Info("File already transferred."); return; } var tempTargetFilePath = Path.Combine(tempTargetDirectoryPath, file.Name); string targetFileName; using (var tempTargetFileStream = new FileStream(tempTargetFilePath, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)) { var data = device.DownloadFileToStream(file); tempTargetFileStream.Write(data, 0, data.Length); tempTargetFileStream.Position = 0; targetFileName = GetTargetFileName(commandLine, file.Name, tempTargetFileStream, spinner); tempTargetFileStream.Close(); } var targetFilePath = Path.Combine(targetDirectoryPath, targetFileName); CreateContainingDirectoryIfMissing(targetFilePath); File.Move(tempTargetFilePath, targetFilePath); File.WriteAllText(flagTargetFilePath, DateTimeOffset.Now.ToString("O"), Utf8Encoding); spinner.Succeed($"Transferred '{file.Name}' as '{targetFileName}'."); }); } } finally { device?.Disconnect(); } Directory.Delete(tempTargetDirectoryPath); Console.WriteLine($"[{nameof(EXIT_CODE_OK)}]"); return(EXIT_CODE_OK); }