Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }