Ejemplo n.º 1
0
        public Bitmap GetIcon(SearchEngine engine)
        {
            Bitmap icon = _search_icon;

            if (!string.IsNullOrEmpty(engine.IconSource))
            {
                if (!_icons.ContainsKey(engine) ||
                    (_ttl == TimeSpan.Zero ? false :
                     DateTime.Now - _time_stamps[engine] >= _ttl))
                {
                    RetrieveIcon(engine);
                }
                else
                {
                    icon = _icons[engine];
                }
            }
            return(icon);
        }
Ejemplo n.º 2
0
        private void okButton_Click(object sender, EventArgs e)
        {
            if (siteNameTextBox.Text == string.Empty)
            {
                siteNameTextBox.Focus();
                _tooltip.SetToolTip(siteNameTextBox, "Error");
                _tooltip.Show("You must specify a name.", siteNameTextBox, 3000);
                //_tooltip.RemoveAll();
                return;
            }
            else if (_parent.SearchEngines.Find(delegate(SearchEngine se) { return(se.Name == siteNameTextBox.Text); }) != null)
            {
                siteNameTextBox.Focus();
                _tooltip.SetToolTip(siteNameTextBox, "Error");
                _tooltip.Show("A website with this name alreay exists. Please specify a different one.", siteNameTextBox, 3000);
                //_tooltip.RemoveAll();
                return;
            }
            else if (siteUrlTextBox.Text == string.Empty)
            {
                siteUrlTextBox.Focus();
                _tooltip.SetToolTip(siteUrlTextBox, "Error");
                _tooltip.Show("You must specify a URL.", siteUrlTextBox, 3000);
                //_tooltip.RemoveAll();
                return;
            }
            else if (!_parent.UrlRegex.IsMatch(siteUrlTextBox.Text))
            {
                siteUrlTextBox.Focus();
                _tooltip.SetToolTip(siteUrlTextBox, "Error");
                _tooltip.Show("This is not a valid URL.", siteUrlTextBox, 3000);
                //_tooltip.RemoveAll();
                return;
            }
            else if (siteQueryTextBox.Text != string.Empty)
            {
                if (!_parent.UrlRegex.IsMatch(siteQueryTextBox.Text))
                {
                    siteQueryTextBox.Focus();
                    _tooltip.SetToolTip(siteQueryTextBox, "Error");
                    _tooltip.Show("This is not a valid search query.", siteQueryTextBox, 3000);
                    //_tooltip.RemoveAll();
                    return;
                }
                else if (!siteQueryTextBox.Text.Contains(SearchEngine.SearchTermToken))
                {
                    siteQueryTextBox.Focus();
                    _tooltip.SetToolTip(siteQueryTextBox, "Error");
                    _tooltip.Show("The search query must have a search term ('" + SearchEngine.SearchTermToken + "').", siteQueryTextBox, 3000);
                    //_tooltip.RemoveAll();
                    return;
                }
            }
            else if (siteIconTextBox.Text != string.Empty)
            {
                if (!_parent.UrlRegex.IsMatch(siteIconTextBox.Text))
                {
                    siteIconTextBox.Focus();
                    _tooltip.SetToolTip(siteIconTextBox, "Error");
                    _tooltip.Show("This is not a valid icon url.", siteIconTextBox, 3000);
                    //_tooltip.RemoveAll();
                    return;
                }
            }

            SearchEngine new_engine = new SearchEngine(siteNameTextBox.Text, siteUrlTextBox.Text, siteQueryTextBox.Text, siteIconTextBox.Text);

            _parent.SearchEngines.Add(new_engine);

            Command new_command = new Command(siteNameTextBox.Text);

            new_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                return(true);
            }));
            new_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                if (parameters.Trim() == string.Empty)
                {
                    return(new_engine.Name);
                }
                else
                {
                    return(new_engine.Name + " " + parameters);
                }
            }));
            new_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                if (parameters == string.Empty || new_engine.SearchQuery == string.Empty) // no search term or no search query was specified
                {
                    return("Go to " + new_engine.Name + " web page.");
                }
                else
                {
                    return("Search for " + parameters + " on " + new_engine.Name);
                }
            }));
            new_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                if (parameters == string.Empty)
                {
                    return(new_engine.Name);
                }
                else
                {
                    return(new_engine.Name + " " + parameters);
                }
            }));
            new_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_parent.IconCache.GetIcon(new_engine));
            }));
            new_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                args.Add("term");
                if (parameters != string.Empty)
                {
                    comp.Add("term", true);
                }
                else
                {
                    comp.Add("term", false);
                }

                return(new CommandUsage(new_command.Name, args, comp));
            }));
            new_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                try
                {
                    if (parameters == string.Empty) // no search term
                    {
                        System.Diagnostics.Process.Start(new_engine.Url);
                    }
                    else
                    {
                        System.Diagnostics.Process.Start(new_engine.GetSearchQuery(parameters));
                    }
                }
                catch
                {
                }
            }));

            _parent.Commands.Add(new_command);
            DialogResult = DialogResult.OK;
            Close();
        }
Ejemplo n.º 3
0
        //private void LoadDefaultEngines()
        //{
        //    _search_engines = new List<SearchEngine>();
        //    _search_engine_names = new List<string>();
        //    //// add search engines
        //    // Google
        //    _search_engine_names.Add("Google");
        //    _search_engines.Add(new SearchEngine("Google",
        //                                        @"http://www.google.com/ncr",
        //                                        @"http://www.google.com/search?hl=en&q=%s&btnG=Google+Search&aq=f&oq=",
        //                                        @"http://www.iconarchive.com/icons/fasticon/web-2/32/Google-icon.png"));
        //    _favorite_engine = 0;
        //    // Youtube
        //    _search_engine_names.Add("YouTube");
        //    _search_engines.Add(new SearchEngine("YouTube",
        //                                        @"http://www.youtube.com/",
        //                                        @"http://www.youtube.com/results?search_query=%s",
        //                                        @"http://www.iconarchive.com/icons/fasticon/web-2/32/Youtube-icon.png"));
        //    // Wikipedia
        //    _search_engine_names.Add("Wikipedia");
        //    _search_engines.Add(new SearchEngine("Wikipedia",
        //                                        @"http://www.wikipedia.org/",
        //                                        @"http://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go",
        //                                        @"http://www.iconarchive.com/icons/sykonist/popular-sites/32/Wikipedia-globe-icon.png"));
        //    // IMDB
        //    _search_engine_names.Add("IMDB");
        //    _search_engines.Add(new SearchEngine("IMDB",
        //                                        @"http://www.imdb.com/",
        //                                        @"http://www.imdb.com/find?s=all&q=%s",
        //                                        @"http://www.iconarchive.com/icons/iconshock/cinema/32/film-reel-icon.png"));
        //    // Yahoo
        //    _search_engine_names.Add("Yahoo");
        //    _search_engines.Add(new SearchEngine("Yahoo",
        //                                        @"http://search.yahoo.com/",
        //                                        @"http://search.yahoo.com/search?p=%s",
        //                                        @"http://www.iconarchive.com/icons/deleket/puck/32/Yahoo-Messenger-Alternate-icon.png"));
        //    // Weather
        //    _search_engine_names.Add("Weather");
        //    _search_engines.Add(new SearchEngine("Weather",
        //                                        @"http://www.weather.com/",
        //                                        @"http://www.weather.com/weather/today/%s",
        //                                        @"http://www.iconarchive.com/icons/icons-land/weather/32/Snow-Occasional-icon.png"));
        //    // Maps
        //    _search_engine_names.Add("Maps");
        //    _search_engines.Add(new SearchEngine("Maps",
        //                                        @"http://maps.google.com/",
        //                                        @"http://maps.google.com/maps?f=q&hl=en&geocode=&q=%s&ie=UTF8&z=12&iwloc=addr&om=1",
        //                                        @"http://www.iconarchive.com/icons/walrick/openphone/32/Maps-icon.png"));
        //    // Bing
        //    _search_engine_names.Add("Bing");
        //    _search_engines.Add(new SearchEngine("Bing",
        //                                        @"http://www.bing.com/",
        //                                        @"http://www.bing.com/search?q=%s",
        //                                        @"http://www.bing.com/"));
        //    // Dictionary
        //    _search_engine_names.Add("Dictionary");
        //    _search_engines.Add(new SearchEngine("Dictionary",
        //                                        @"http://www.dictionary.com/",
        //                                        @"http://www.dictionary.com/browse/%s",
        //                                        @"http://www.iconarchive.com/icons/dimension-of-deskmod/micro/32/Dictionary-icon.png"));
        //    // Thesaurus
        //    _search_engine_names.Add("Thesaurus");
        //    _search_engines.Add(new SearchEngine("Thesaurus",
        //                                        @"http://thesaurus.com/",
        //                                        @"http://thesaurus.reference.com/browse/%s",
        //                                        @"http://www.iconarchive.com/icons/dimension-of-deskmod/micro/32/Dictionary-icon.png"));
        //    // MSDN
        //    _search_engine_names.Add("MSDN");
        //    _search_engines.Add(new SearchEngine("MSDN",
        //                                        @"http://msdn.microsoft.com/",
        //                                        @"http://search.msdn.microsoft.com/search/default.aspx?siteId=0&tab=0&query=%s",
        //                                        @"http://msdn.microsoft.com/"));
        //    // Amazon
        //    _search_engine_names.Add("Amazon");
        //    _search_engines.Add(new SearchEngine("Amazon",
        //                                        @"http://www.amazon.com/",
        //                                        @"http://www.amazon.com/gp/search?keywords=%s&index=blended",
        //                                        @"http://www.amazon.com/"));
        //    // Facebook
        //    _search_engine_names.Add("Facebook");
        //    _search_engines.Add(new SearchEngine("Facebook",
        //                                        @"http://www.facebook.com/",
        //                                        @"http://www.facebook.com/search/?ref=search&q=%s",
        //                                        @"http://www.iconarchive.com/icons/fasticon/web-2/32/FaceBook-icon.png"));
        //    // Twitter
        //    _search_engine_names.Add("Twitter");
        //    _search_engines.Add(new SearchEngine("Twitter",
        //                                        @"http://twitter.com/",
        //                                        @"http://twitter.com/#search?q=%s",
        //                                        @"http://www.iconarchive.com/icons/fasticon/web-2/32/Twitter-icon.png"));
        //    // Flickr
        //    _search_engine_names.Add("Flickr");
        //    _search_engines.Add(new SearchEngine("Flickr",
        //                                        @"http://www.flickr.com/",
        //                                        @"http://www.flickr.com/search/?q=%s",
        //                                        @"http://www.iconarchive.com/icons/fasticon/web-2/32/Flickr-icon.png"));
        //}
        #endregion

        #region Overrided Methods
        protected override void SetupCommands()
        {
            LoadSettings();
            // create search commands
            // problema com os delegates e ciclos: http://decav.com/blogs/andre/archive/2007/11/18/wtf-quot-problems-quot-with-anonymous-delegates-linq-lambdas-and-quot-foreach-quot-or-quot-for-quot-loops.aspx
            foreach (SearchEngine engine in SearchEngines)
            {
                SearchEngine eng = new SearchEngine(engine);
                Command      cmd;
                if (eng.Name != SearchEngines[FavoriteEngine].Name)
                {
                    cmd = new Command(eng.Name);
                }
                else
                {
                    cmd = new Command(eng.Name, Command.PriorityType.Medium | Command.PriorityType.Low);
                }

                cmd.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
                {
                    return(true);
                }));
                cmd.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
                {
                    if (parameters.Trim() == string.Empty)
                    {
                        return(eng.Name);
                    }
                    else
                    {
                        return(eng.Name + " " + parameters);
                    }
                }));
                cmd.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
                {
                    if (parameters == string.Empty || eng.SearchQuery == string.Empty) // no search term or no search query was specified
                    {
                        return("Go to " + eng.Name + " web page.");
                    }
                    else
                    {
                        return("Search for " + parameters + " on " + eng.Name);
                    }
                }));
                cmd.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
                {
                    if (parameters == string.Empty)
                    {
                        return(eng.Name);
                    }
                    else
                    {
                        return(eng.Name + " " + parameters);
                    }
                }));
                cmd.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
                {
                    //return _search_icon.ToBitmap();
                    return(_icon_cache.GetIcon(eng));
                }));
                cmd.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
                {
                    List <string> args             = new List <string>();
                    Dictionary <string, bool> comp = new Dictionary <string, bool>();

                    args.Add("term");
                    if (parameters != string.Empty)
                    {
                        comp.Add("term", true);
                    }
                    else
                    {
                        comp.Add("term", false);
                    }

                    return(new CommandUsage(cmd.Name, args, comp));
                }));
                cmd.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
                {
                    try
                    {
                        if (parameters == string.Empty) // no search term
                        {
                            System.Diagnostics.Process.Start(eng.Url);
                        }
                        else
                        {
                            System.Diagnostics.Process.Start(eng.GetSearchQuery(parameters));
                        }
                    }
                    catch
                    {
                    }
                }));
                _commands.Add(cmd);
            }

            //_add_command = new Command("Add New Website", new string[] { "add", "new", "website", "search", "engine" }, "Add a new search engine.", Command.PriorityType.Medium);
            _add_command = new Command("Add New Website", "Add a new search engine.", Command.PriorityType.Medium);
            _add_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                return(false);
            }));
            _add_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(_add_command.Name);
            }));
            _add_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(_add_command.Description);
            }));
            _add_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(_add_command.Name);
            }));
            _add_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_add_icon.ToBitmap());
            }));
            _add_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                return(new CommandUsage(_add_command.Name, args, comp));
            }));
            _add_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                EnginePicker ep = new EnginePicker(this);
                if (ep.ShowDialog() == DialogResult.OK)
                {
                    SaveSettings();
                }
                ep.Dispose();
            }));

            _process_url_command = new Command("Process URL", Command.PriorityType.High);
            _process_url_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                //Regex regex = new Regex(@"^(((h|H)(t|T)(t|T)(p|P)(s?|S?))\://)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\..*$");
                return(_regex.IsMatch(parameters));
            }));
            _process_url_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(parameters);
            }));
            _process_url_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return("Browse to " + parameters);
            }));
            _process_url_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(parameters);
            }));
            _process_url_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_browser_icon.ToBitmap());
            }));
            _process_url_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                return(new CommandUsage(@"Valid URL. i.e.: http://www.google.com", args, comp));
            }));
            _process_url_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                try
                {
                    System.Diagnostics.Process.Start(FixUrl(parameters));
                }
                catch
                {
                }
            }));

            _commands.Add(_add_command);
            _commands.Add(_process_url_command);
        }
Ejemplo n.º 4
0
        private void RetrieveIcon(SearchEngine engine)
        {
            if (_worker_thread != null && (
                    _worker_thread.ThreadState != ThreadState.Background ||
                    _worker_thread.ThreadState != ThreadState.Running ||
                    _worker_thread.ThreadState != ThreadState.Unstarted ||
                    _worker_thread.ThreadState != ThreadState.WaitSleepJoin ||
                    DateTime.Now - _worker_thread_timestamp >= _worker_thread_ttl))
            {
                _worker_thread = null;
            }
            if (_worker_thread == null)
            {
                ThreadStart ts = new ThreadStart(delegate()
                {
                    Bitmap icon      = null;
                    bool found_in_hd = false;

                    try
                    {
                        // Retrieve from the hard drive
                        string icon_file = _cache_path + @"\" + engine.Name + ".png";
                        if (Directory.Exists(_cache_path) && File.Exists(icon_file))
                        {
                            icon        = (Bitmap)Bitmap.FromFile(icon_file);
                            found_in_hd = true;
                        }
                        //

                        // Retrieve from the web
                        if (icon == null)
                        {
                            string iconUrl;
                            if (_wwwImageRegex.IsMatch(engine.IconSource))
                            {
                                iconUrl = engine.IconSource;
                            }
                            else
                            {
                                iconUrl = @"http://www.getfavicon.org/?url=" + engine.IconSource + @"/favicon.32.png";
                            }
                            System.Net.HttpWebRequest wr  = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(iconUrl);
                            System.Net.HttpWebResponse ws = (System.Net.HttpWebResponse)wr.GetResponse();
                            System.IO.Stream stream       = ws.GetResponseStream();
                            icon = (Bitmap)Bitmap.FromStream(stream);
                        }
                        //

                        if (icon != null)
                        {
                            if (_icons.ContainsKey(engine))
                            {
                                _icons[engine]       = icon;
                                _time_stamps[engine] = DateTime.Now;
                                if (!found_in_hd)
                                {
                                    if (!Directory.Exists(_cache_path))
                                    {
                                        Directory.CreateDirectory(_cache_path);
                                    }
                                    icon.Save(icon_file, System.Drawing.Imaging.ImageFormat.Png);
                                }
                            }
                            else
                            {
                                _icons.Add(engine, icon);
                                _time_stamps.Add(engine, DateTime.Now);
                                if (!found_in_hd)
                                {
                                    if (!Directory.Exists(_cache_path))
                                    {
                                        Directory.CreateDirectory(_cache_path);
                                    }
                                    icon.Save(icon_file, System.Drawing.Imaging.ImageFormat.Png);
                                }
                            }
                        }
                    }
                    catch
                    {
                        // TODO
                    }
                    _worker_thread_timestamp = DateTime.Now;
                });
                _worker_thread = new Thread(ts);
                _worker_thread.Start();
            }
        }