Esempio n. 1
0
        static CommandArray <CommandData> configureCommands()
        {
            CommandArray <CommandData> cmds = new CommandArray <CommandData>();

            cmds.AddCommand(cmd => {
                cmd.Name = "search";
                CommandDataPattern pattern = new CommandDataPattern();
                pattern.AddOption('l', false);
                pattern.AddOption('w', true);
                pattern.AddOption('a', false);
                cmd.Execute = (arguments) => {
                    CommandData argument = arguments[0];
                    argument.SetPattern(pattern);
                    Stream outStream = null;
                    if (argument.IsKey('w'))
                    {
                        FileMode mode = FileMode.Create;
                        if (argument.IsKey('a'))
                        {
                            mode = FileMode.Append;
                        }
                        outStream = new FileStream(argument.GetKeyValue('w'), mode);
                    }
                    else
                    {
                        outStream = Console.OpenStandardOutput();
                    }
                    String searchPhrase = argument.args[0];
                    using (outStream) {
                        if (argument.IsKey('l'))
                        {//поиск в БД
                            writeToStream(outStream, DBRepository.findByQuery(searchPhrase), searchPhrase);
                        }
                        else
                        {//запрос к гуглу
                            Query searchResult = webSearchers[0].search(searchPhrase);
                            DBRepository.ConnectToDB(connect => {
                                Query query = (from q in connect.queries
                                               where q.title == searchPhrase
                                               select q).Include("links").FirstOrDefault();
                                if (query != null)
                                {
                                    if (!searchResult.Equals(query))
                                    {
                                        Console.WriteLine("update data base");
                                        connect.queries.Remove(query);
                                        connect.queries.Add(searchResult);
                                        connect.SaveChanges();
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("write to data base");
                                    connect.queries.Add(searchResult);
                                    connect.SaveChanges();
                                }
                            });
                            writeToStream(outStream, searchResult.links, searchPhrase);
                        }
                    }
                };
            });

            cmds.AddCommand(cmd => {
                cmd.Name    = "exit";
                cmd.Execute = (arguments) => {
                    Console.WriteLine("exiting...");
                    execute = false;
                };
            });

            return(cmds);
        }