midori/midori/midori-historycompletion.vala

67 lines
2.4 KiB
Vala

/*
Copyright (C) 2012-2013 Christian Dywan <christian@twotoasts.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
See the file COPYING for the full license text.
*/
namespace Midori {
public class HistoryCompletion : Completion {
public HistoryDatabase? database = null;
public HistoryCompletion () {
GLib.Object (description: _("Bookmarks and History"));
}
public override void prepare (GLib.Object app) {
try {
database = new HistoryDatabase (app);
}
catch (Error error) {
warning (error.message);
}
}
public override bool can_complete (string text) {
return database != null;
}
public override bool can_action (string action) {
return false;
}
public override async List<Suggestion>? complete (string text, string? action, Cancellable cancellable) {
return_val_if_fail (database != null, null);
List<HistoryItem> items = yield database.list_by_count_with_bookmarks (text, max_items, cancellable);
if (items == null)
return null;
var suggestions = new List<Suggestion> ();
foreach (var item in items) {
if (item is Midori.HistoryWebsite) {
var website = item as Midori.HistoryWebsite;
suggestions.append (new Suggestion (website.uri, website.title,
true, null, yield Midori.URI.get_icon_fallback (website.uri, null, cancellable), this.position));
}
else if (item is Midori.HistorySearch) {
var search = item as Midori.HistorySearch;
suggestions.append (new Suggestion (search.uri, search.title + "\n" + search.uri,
false, "gray", yield Midori.URI.get_icon_fallback (search.uri, null, cancellable), this.position));
}
else
warn_if_reached ();
}
if (cancellable.is_cancelled ())
return null;
return suggestions;
}
}
}