private bool AddFileToMCEBuddyQueue(ICore pipeProxy, string file)
 {
     try
     {
         pipeProxy.AddManualJob(file);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Exemple #2
0
        static int Main(string[] args)
        {
            Log.AppLog   = new Log(Log.LogDestination.Console); // Redirect to console all output
            Log.LogLevel = Log.LogEntryType.Debug;              // Print all messages
            ICore      _pipeProxy     = null;
            CLIOptions cliOptions     = new CLIOptions();
            string     currentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

            Log.AppLog.WriteEntry("", "\r\nMCEBuddy.UserCLI is a Command Line Interface for users to interact with the MCEBuddy engine", Log.LogEntryType.Debug);
            Log.AppLog.WriteEntry("", "Copyright (c) Ramit Bhalla, Build Version : " + currentVersion, Log.LogEntryType.Debug);
            Log.AppLog.WriteEntry("", "Build Date : " + System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString(System.Globalization.CultureInfo.InvariantCulture), Log.LogEntryType.Debug);
            Log.AppLog.WriteEntry("", "", Log.LogEntryType.Debug);

            if (args.Length < 2) // Atleast 2 arguments are required
            {
                Usage();
                return(-1);
            }

            try
            {
                CommandLineParser parser = new CommandLineParser();
                if (!parser.ParseArguments(args, cliOptions))
                {
                    throw new Exception("Invalid Options");
                }
            }
            catch (Exception e)
            {
                Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI Invalid Input Error -> " + e.ToString() + "\r\n", Log.LogEntryType.Error);
                Usage();
                return(-1); // Bad usage
            }

            Log.AppLog.WriteEntry("", "\r\nMCEBuddy.UserCLI trying to connect to Engine " + cliOptions.Server + " on Port " + cliOptions.Port + "\r\n", Log.LogEntryType.Debug);

            // Connect to the engine
            try // Try to reconnect
            {
                string remoteServerName = cliOptions.Server;
                int    remoteServerPort = cliOptions.Port;

                _pipeProxy = MCEBuddyEngineConnect.ConnectToRemoteEngine(remoteServerName, remoteServerPort);
                _pipeProxy.EngineRunning(); // Test to check if we are really connected

                Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI successfully connected to MCEBuddy engine", Log.LogEntryType.Debug);

                // Pass the command to the engine
                switch (cliOptions.Command)
                {
                // Engine commands
                case "engine":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command engine", Log.LogEntryType.Debug);

                    // Engine actions
                    switch (cliOptions.Action)
                    {
                    case "start":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI starting engine", Log.LogEntryType.Debug);
                        _pipeProxy.Start();
                        break;

                    case "stop":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI stopping engine", Log.LogEntryType.Debug);
                        _pipeProxy.Stop(true);
                        break;

                    case "pause":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI pausing engine", Log.LogEntryType.Debug);
                        _pipeProxy.SuspendConversion(true);
                        break;

                    case "resume":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI resuming engine", Log.LogEntryType.Debug);
                        _pipeProxy.SuspendConversion(false);
                        break;

                    case "rescan":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI rescanning monitor locations and logs", Log.LogEntryType.Debug);
                        _pipeProxy.Rescan();
                        break;

                    default:
                        Log.AppLog.WriteEntry("", "Invalid action " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }
                    break;

                // Adding a file to the queue
                case "addfile":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command addfile", Log.LogEntryType.Debug);
                    if (String.IsNullOrWhiteSpace(cliOptions.Action))
                    {
                        Log.AppLog.WriteEntry("", "Invalid filename " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }

                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI adding file " + cliOptions.Action + " to the conversion queue", Log.LogEntryType.Debug);
                    if (Util.Net.IsUNCPath(Util.Net.GetUNCPath(cliOptions.Action)))     // check if the files are on a remote computer
                    {
                        Log.AppLog.WriteEntry("", "Networked files will be accessed using the logon credentials of the MCEBuddy Service, not the currently logged on user. You can manually specify the network credentials from the Settings -> Expert Settings page in MCEBuddy.", Log.LogEntryType.Warning);
                    }
                    _pipeProxy.AddManualJob(cliOptions.Action);
                    break;

                // Removing a job from the queue
                case "removejob":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command removejob", Log.LogEntryType.Debug);
                    int fileNo;
                    if (String.IsNullOrWhiteSpace(cliOptions.Action) || (!int.TryParse(cliOptions.Action, out fileNo)) || (fileNo < 1))     // job starts at 1 for users
                    {
                        Log.AppLog.WriteEntry("", "Invalid job number " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }

                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI removing job " + fileNo + " from the conversion queue", Log.LogEntryType.Debug);
                    _pipeProxy.CancelJob(new int[] { --fileNo });   // MCEBuddy start jobs at 0
                    break;

                // Change priority
                case "priority":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command change priority", Log.LogEntryType.Debug);
                    switch (cliOptions.Action)
                    {
                    case "low":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI setting priority to low", Log.LogEntryType.Debug);
                        _pipeProxy.ChangePriority("Low");
                        break;

                    case "normal":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI setting priority to normal", Log.LogEntryType.Debug);
                        _pipeProxy.ChangePriority("Normal");
                        break;

                    case "high":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI setting priority to high", Log.LogEntryType.Debug);
                        _pipeProxy.ChangePriority("High");
                        break;

                    default:
                        Log.AppLog.WriteEntry("", "Invalid priority " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }
                    break;

                // Remove file from History
                case "deletehistoryitem":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command deleting file entry from history", Log.LogEntryType.Debug);
                    if (String.IsNullOrWhiteSpace(cliOptions.Action))
                    {
                        Log.AppLog.WriteEntry("", "Invalid filename " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }

                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI deleting item " + cliOptions.Action + " from History", Log.LogEntryType.Debug);
                    _pipeProxy.DeleteHistoryItem(cliOptions.Action);
                    break;

                // UPnP
                case "upnp":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command UPnP", Log.LogEntryType.Debug);
                    switch (cliOptions.Action)
                    {
                    case "enable":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI enabling UPnP access port fowarding", Log.LogEntryType.Debug);
                        _pipeProxy.SetUPnPState(true);
                        break;

                    case "disable":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI disabling UPnP access port fowarding", Log.LogEntryType.Debug);
                        _pipeProxy.SetUPnPState(false);
                        break;

                    default:
                        Log.AppLog.WriteEntry("", "Invalid UPnP state " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }
                    break;

                // Firewall
                case "firewall":
                    Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI processing command Firewall", Log.LogEntryType.Debug);
                    switch (cliOptions.Action)
                    {
                    case "enable":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI enabling Firewall exception for MCEBuddy remote access", Log.LogEntryType.Debug);
                        _pipeProxy.SetFirewallException(true);
                        break;

                    case "disable":
                        Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI disabling Firewall exception for MCEBuddy remote access", Log.LogEntryType.Debug);
                        _pipeProxy.SetFirewallException(false);
                        break;

                    default:
                        Log.AppLog.WriteEntry("", "Invalid Firewall exception state " + cliOptions.Action, Log.LogEntryType.Error);
                        Usage();
                        return(-1);
                    }
                    break;

                default:
                    Log.AppLog.WriteEntry("", "Invalid command " + cliOptions.Command, Log.LogEntryType.Error);
                    Usage();
                    return(-1);
                }

                // Successful
                Log.AppLog.WriteEntry("", "\r\nMCEBuddy.UserCLI Successful!!", Log.LogEntryType.Debug);
                return(0); // we good here
            }
            catch (Exception e)
            {
                Log.AppLog.WriteEntry("", "MCEBuddy.UserCLI Error -> " + e.ToString() + "\r\n", Log.LogEntryType.Error);
                Log.AppLog.WriteEntry("", "\r\nMCEBuddy.UserCLI Failed!!", Log.LogEntryType.Debug);
                return(-2); // too bad
            }
        }