コード例 #1
0
        static void Main(string[] args)
        {
            //Console.OutputEncoding = System.Text.Encoding.Unicode;
            CommandConsole console = new CommandConsole()
            {
                Prefix = "", PrintTimestamp = false, VerboseLevel = VerboseTag.Info
            };
            bool running = true;

            Dictionary <string, BaseCDNModule> modules    = new Dictionary <string, BaseCDNModule>();
            LinkedList <ScriptedProvider>      dynModules = new LinkedList <ScriptedProvider>();

            modules.Add("dailymotion", new DailymotionModule("dailymotion"));
            modules.Add("youtube", new YoutubeModule("youtube"));
            modules.Add("vimeo", new ScriptedProvider("vimeo", "Modules\\vimeo.lua"));
            dynModules.AddLast((ScriptedProvider)modules["vimeo"]);
            //TODO: Add more modules here

            //Commands (TODO: package this better than anonymous functions)
            console.RegisterCommand("quit", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                running = false;
            })));
            //console.RegisterCommand("exec",
            console.RegisterCommand("help", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                console.Print("List of functions:\n    ->" + string.Join("\n    ->", console.GetCommandList()));
            })));
            console.RegisterCommand("list_modules", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                console.Print("Modules:\n    ->" + string.Join("\n    ->", modules.Keys.ToArray()));
            })));
            console.RegisterCommand("load_module", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                if (eventArgs.Arguments.Length == 2)
                {
                    modules.Add(eventArgs.Arguments[0], new ScriptedProvider(eventArgs.Arguments[0], eventArgs.Arguments[1]));
                }
                else
                {
                    console.Print("Usage: load_module [name] [module_file]");
                }
            })));
            console.RegisterCommand("reload_module", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                if (eventArgs.Arguments.Length == 1)
                {
                    ScriptedProvider module = modules[eventArgs.Arguments[0]] as ScriptedProvider;
                    if (module != null)
                    {
                        module.Reload();
                    }
                }
                else
                {
                    console.Print("Usage: reload_module [module]");
                }
            })));
            console.RegisterCommand("browse", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                if (eventArgs.Arguments.Length == 3)
                {
                    console.Print(string.Join("\n", modules[eventArgs.Arguments[0]].Browse(eventArgs.Arguments[1], Convert.ToInt32(eventArgs.Arguments[2])).GetEnumerator()));
                }
                else
                {
                    console.Print("Usage: browse [module] [type] [page]");
                }
            })));
            console.RegisterCommand("get_list", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                if (eventArgs.Arguments.Length == 2)
                {
                    ContentSeries show = modules[eventArgs.Arguments[0]].GetContentList(eventArgs.Arguments[1]);
                    console.Print(show.Name + "\n" + string.Join("\n", show.Installments.GetEnumerator()));
                }
                else
                {
                    console.Print("Usage: get_list [module] [relative_path]");
                }
            })));
            console.RegisterCommand("get_link", new EventCommand(new Action <object, EventCmdArgs>((sender, eventArgs) =>
            {
                if (eventArgs.Arguments.Length == 2)
                {
                    console.Print(string.Join("\n", modules[eventArgs.Arguments[0]].GetContentLink(eventArgs.Arguments[1]).GetEnumerator()));
                }
                else
                {
                    console.Print("Usage: get_link [module] [relative_path]");
                }
            })));

            EventCommandValue val = new EventCommandValue()
            {
                Value = "0"
            };

            val.OnValueChange += new EventHandler <ValueArgs>((sender, eventArgs) =>
            {
                foreach (ScriptedProvider module in dynModules)
                {
                    if (eventArgs.NewValue == "1")
                    {
                        module.AssertErrors = true;
                    }
                    else if (eventArgs.NewValue == "0")
                    {
                        module.AssertErrors = false;
                    }
                    else
                    {
                        break;
                    }
                }
            });
            console.RegisterCommand("debug_module", val);

            //Runs the CLI arguments if there are any arguments, else the console goes into interactive mode
            if (args.Length != 0)
            {
                console.Call(string.Join(" ", args), false, true);
            }
            else
            {
                while (running)
                {
                    console.Call(Console.ReadLine(), false, true);
                }
            }
        }