private static int InstructionsOnFileCommand(CommandLineItemCollection commandLine) { var commands = new List <CommandLineItemCollection>(); Console.WriteLine("[Files]"); foreach (var instructionsFilePath in commandLine.GetArguments().Select(argument => argument.Value)) { var fullPath = Path.GetFullPath(instructionsFilePath); Console.WriteLine($"\t{fullPath}\t{instructionsFilePath}"); foreach (var line in File .ReadAllLines(fullPath, Utf8Encoding) .Where(line => !string.IsNullOrWhiteSpace(line)) .Where(line => line[0] != '#')) { commands.Add(GetCommandLine(line)); } } Console.WriteLine("[Commands]"); foreach (var command in commands) { Console.WriteLine($"> {string.Join(" ", command)}"); var exitCode = Main(command); Console.WriteLine($"< {exitCode}"); if (exitCode != EXIT_CODE_OK) { return(exitCode); } } Console.WriteLine($"[{nameof(EXIT_CODE_OK)}]"); return(EXIT_CODE_OK); }
private static string GetTargetFileName(CommandLineItemCollection commandLine, string targetFileName, FileStream fileStream, Spinner spinner) { var dateTimePattern = commandLine.GetOptionOrDefault("dateTimePattern")?.Value ?? "yyyy\\/MM\\/yyyy\\-MM\\-dd\\_HH\\-mm\\-ss"; switch (Path.GetExtension(targetFileName)?.ToLowerInvariant()) { case ".jpg": case ".jpeg": try { using (var reader = new ExifReader(fileStream, true)) { if (reader.GetTagValue(ExifTags.DateTimeDigitized, out DateTime timestampPictureTaken)) { return($"{timestampPictureTaken.ToString(dateTimePattern, CultureInfo.InvariantCulture)}.jpg"); } spinner.Warn("Timestamp not found in EXIF data."); return(targetFileName); } } catch (ExifLibException exifLibException) { spinner.Warn($"No EXIF data found (Error: '{exifLibException}')."); return(targetFileName); } default: return(targetFileName); } }
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 Main(CommandLineItemCollection commandLine) { try { switch (commandLine.GetCommandOrDefault()?.Key) { case "systeminfo": case "si": return(SystemInfoCommand(commandLine)); case "deviceinfo": case "di": return(DeviceInfoCommand(commandLine)); case "transfer": case "t": return(TransferCommand(commandLine)); case "windowautosize": case "was": return(WindowAutoSizeCommand()); case "instructionsonfile": case "iof": return(InstructionsOnFileCommand(commandLine)); case "update": return(UpdateCommand()); case "interactive": case "i": case null: return(InteractiveCommand()); default: Console.WriteLine($"[{nameof(EXIT_CODE_UNKNOWN_COMMAND)}]"); return(EXIT_CODE_UNKNOWN_COMMAND); } } catch (Exception unhandledError) { Console.WriteLine($"[{nameof(EXIT_CODE_UNKNOWN_ERROR)}]"); Console.WriteLine(unhandledError.ToString()); return(EXIT_CODE_UNKNOWN_ERROR); } }
public static int SystemInfoCommand(CommandLineItemCollection commandLine) { PrintCommandName(); var includeFriendlyName = commandLine.HasFlag("friendlyName"); var devices = new PortableDeviceCollection(); devices.Refresh(); Console.WriteLine("[Devices]"); foreach (var device in devices) { string deviceFriendlyName; if (includeFriendlyName) { try { device.Connect(); deviceFriendlyName = device.FriendlyName; } finally { device.Disconnect(); } } else { deviceFriendlyName = "-"; } Console.WriteLine($"{deviceFriendlyName}\t{device.DeviceId}"); } 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); }