Closes #5745 libgee 0.8
This commit is contained in:
parent
6e68d67f34
commit
ddbd4c7213
65 changed files with 744 additions and 426 deletions
6
bindings/vapi/unity.deps
Normal file
6
bindings/vapi/unity.deps
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
glib-2.0
|
||||
gobject-2.0
|
||||
gio-2.0
|
||||
gio-unix-2.0
|
||||
dee-1.0
|
||||
Dbusmenu-0.4
|
||||
438
bindings/vapi/unity.vapi
Normal file
438
bindings/vapi/unity.vapi
Normal file
|
|
@ -0,0 +1,438 @@
|
|||
/* unity.vapi generated by valac 0.18.0, do not modify. */
|
||||
|
||||
namespace Unity {
|
||||
namespace IO {
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public static string[] get_system_data_dirs ();
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public static async GLib.FileInputStream? open_from_data_dirs (string filename) throws GLib.Error;
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public static async GLib.FileInputStream? open_from_dirs (string filename, string[] dirs) throws GLib.Error;
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public static async void read_stream_async (GLib.InputStream input, int io_priority = GLib.Priority.LOW, GLib.Cancellable? cancellable = null, out uint8[] data, out size_t size) throws GLib.IOError;
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class ActivationResponse : GLib.InitiallyUnowned {
|
||||
public ActivationResponse (Unity.HandledType handled, string goto_uri = "");
|
||||
public ActivationResponse.with_preview (Unity.Preview preview);
|
||||
public string goto_uri { get; set construct; }
|
||||
public Unity.HandledType handled { get; construct; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class AnnotatedIcon : GLib.Object {
|
||||
public AnnotatedIcon (GLib.Icon base_icon);
|
||||
public string to_string ();
|
||||
public Unity.CategoryType category { get; set; }
|
||||
public GLib.Icon icon { get; set; }
|
||||
public string ribbon { get; set; }
|
||||
public Unity.IconSizeHint size_hint { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class AppInfoManager : GLib.Object {
|
||||
public void clear ();
|
||||
public unowned string[]? get_categories (string id);
|
||||
public static Unity.AppInfoManager get_default ();
|
||||
[Deprecated (replacement = "AppInfoManager.get_default")]
|
||||
public static Unity.AppInfoManager get_instance ();
|
||||
public unowned string[]? get_keywords (string id);
|
||||
public string? get_path (string id);
|
||||
public GLib.AppInfo? lookup (string id);
|
||||
public async GLib.AppInfo? lookup_async (string id) throws GLib.Error;
|
||||
public signal void changed (string id, GLib.AppInfo? new_appinfo);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class ApplicationPreview : Unity.Preview {
|
||||
public ApplicationPreview (string title, string subtitle, string description, GLib.Icon? icon, GLib.Icon? screenshot);
|
||||
public void set_rating (float rating, uint num_ratings);
|
||||
public GLib.Icon app_icon { get; set; }
|
||||
public string copyright { get; set; }
|
||||
public string last_update { get; set; }
|
||||
public string license { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class AsyncPreview : Unity.Preview {
|
||||
public AsyncPreview ();
|
||||
[CCode (name = "unity_async_preview_preview_ready")]
|
||||
public void emit_preview_ready (Unity.Preview? preview);
|
||||
public AsyncPreview.with_cancellable (GLib.Cancellable cancellable);
|
||||
public GLib.Cancellable cancellable { get; set construct; }
|
||||
public signal void preview_ready (Unity.Preview? preview);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class Category : GLib.Object {
|
||||
public Category (string name, GLib.Icon icon_hint, Unity.CategoryRenderer renderer = CategoryRenderer.VERTICAL_TILE);
|
||||
public Unity.CategoryRenderer default_renderer { get; construct; }
|
||||
public GLib.Icon? icon_hint { get; construct; }
|
||||
public string name { get; construct; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class CheckOptionFilter : Unity.OptionsFilter {
|
||||
public CheckOptionFilter (string id, string display_name, GLib.Icon? icon_hint = null, bool collapsed = false);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class CheckOptionFilterCompact : Unity.OptionsFilter {
|
||||
public CheckOptionFilterCompact (string id, string display_name, GLib.Icon? icon_hint = null, bool collapsed = false);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public abstract class Filter : GLib.Object {
|
||||
public Filter ();
|
||||
public bool collapsed { get; construct; }
|
||||
public string display_name { get; internal set construct; }
|
||||
public bool filtering { get; internal set construct; }
|
||||
public GLib.Icon? icon_hint { get; construct; }
|
||||
public string id { get; construct; }
|
||||
public Unity.FilterRenderer renderer { get; construct; }
|
||||
public bool visible { get; set construct; }
|
||||
public signal void changed ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class FilterOption : GLib.Object {
|
||||
public FilterOption (string id, string display_name, GLib.Icon? icon_hint = null, bool active = false);
|
||||
public bool active { get; internal set construct; }
|
||||
public string display_name { get; construct; }
|
||||
public GLib.Icon icon_hint { get; construct; }
|
||||
public string id { get; construct; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class GenericPreview : Unity.Preview {
|
||||
public GenericPreview (string title, string description, GLib.Icon? image);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class InfoHint : GLib.InitiallyUnowned {
|
||||
public InfoHint (string id, string display_name, GLib.Icon? icon_hint, string data);
|
||||
public InfoHint.with_variant (string id, string display_name, GLib.Icon? icon_hint, GLib.Variant data);
|
||||
public GLib.Variant data { get; construct; }
|
||||
public string display_name { get; construct; }
|
||||
public GLib.Icon? icon_hint { get; construct; }
|
||||
public string id { get; construct; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class Inspector : GLib.Object {
|
||||
public static unowned Unity.Inspector get_default ();
|
||||
public string? unity_bus_name { get; }
|
||||
public bool unity_running { get; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class LauncherEntry : Dee.Serializable, GLib.Object {
|
||||
public static Unity.LauncherEntry get_for_app_uri (string app_uri);
|
||||
public static Unity.LauncherEntry get_for_desktop_file (string desktop_file);
|
||||
public static Unity.LauncherEntry get_for_desktop_id (string desktop_id);
|
||||
public string app_uri { get; set construct; }
|
||||
public int64 count { get; set; }
|
||||
public bool count_visible { get; set; }
|
||||
public double progress { get; set; }
|
||||
public bool progress_visible { get; set; }
|
||||
public Dbusmenu.Menuitem? quicklist { get; set; }
|
||||
public bool urgent { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class LauncherFavorites : GLib.Object {
|
||||
public GLib.AppInfo[] enumerate_app_infos ();
|
||||
public string[] enumerate_ids ();
|
||||
public static unowned Unity.LauncherFavorites get_default ();
|
||||
public bool has_app_id (string app_id);
|
||||
public bool has_app_info (GLib.AppInfo appinfo);
|
||||
public GLib.AppInfo? lookup (string app_id);
|
||||
public signal void changed ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class Lens : GLib.Object {
|
||||
public Lens (string dbus_path_, string id_);
|
||||
public void add_local_scope (Unity.Scope scope);
|
||||
public void export () throws GLib.IOError;
|
||||
public bool active { get; private set; }
|
||||
public GLib.List<Unity.Category> categories { get; set; }
|
||||
public string dbus_path { get; construct; }
|
||||
public bool exported { get; private set; }
|
||||
public GLib.List<Unity.Filter> filters { get; set; }
|
||||
public Unity.MergeStrategy global_merge_strategy { get; set; }
|
||||
public string home_lens_default_name { get; set; }
|
||||
public string id { get; construct; }
|
||||
public Unity.MergeStrategy merge_strategy { get; set; }
|
||||
public string search_hint { get; set; }
|
||||
public bool search_in_global { get; set; }
|
||||
public bool searching { get; private set; }
|
||||
public string sources_display_name { get; set construct; }
|
||||
public bool visible { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class LensSearch : GLib.InitiallyUnowned {
|
||||
public LensSearch (string search_string, GLib.HashTable<string,GLib.Variant> hints, Dee.SerializableModel results_model);
|
||||
[CCode (cname = "unity_lens_search_finished")]
|
||||
public void emit_finished ();
|
||||
public bool equals (Unity.LensSearch? other);
|
||||
public void set_reply_hint (string key, GLib.Variant variant);
|
||||
public GLib.HashTable<string,GLib.Variant> hints { get; construct; }
|
||||
public Dee.SerializableModel results_model { get; construct; }
|
||||
public string search_string { get; construct; }
|
||||
[Signal (action = true)]
|
||||
public signal void finished ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class MoviePreview : Unity.Preview {
|
||||
public MoviePreview (string title, string subtitle, string description, GLib.Icon? image);
|
||||
public void set_rating (float rating, uint num_ratings);
|
||||
public string year { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class MultiRangeFilter : Unity.OptionsFilter {
|
||||
public MultiRangeFilter (string id, string display_name, GLib.Icon? icon_hint = null, bool collapsed = false);
|
||||
public Unity.FilterOption? get_first_active ();
|
||||
public Unity.FilterOption? get_last_active ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class MusicPlayer : GLib.Object {
|
||||
public MusicPlayer (string desktop);
|
||||
public bool add_playlist (Unity.Playlist p);
|
||||
public void edit_playlist_name (string id, string name);
|
||||
public void export ();
|
||||
public Unity.Playlist[] get_playlists ();
|
||||
public bool remove_playlist (Unity.Playlist p);
|
||||
public void unexport ();
|
||||
public GLib.AppInfo app_info { get; construct; }
|
||||
public bool can_go_next { get; set; }
|
||||
public bool can_go_previous { get; set; }
|
||||
public bool can_pause { get; set; }
|
||||
public bool can_play { get; set; }
|
||||
public Unity.Playlist current_playlist { get; set; }
|
||||
public Unity.TrackMetadata current_track { get; set; }
|
||||
public string desktop_file_name { get; construct; }
|
||||
public bool is_blacklisted { get; set; }
|
||||
public Unity.PlaybackState playback_state { get; set; }
|
||||
public Dbusmenu.Menuitem? player_menu { get; set; }
|
||||
public string title { get; set; }
|
||||
public Dbusmenu.Menuitem? track_menu { get; set; }
|
||||
public signal void activate_playlist (GLib.ObjectPath playlist_id);
|
||||
public signal void next ();
|
||||
public signal void play_pause ();
|
||||
public signal void previous ();
|
||||
public signal void raise ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class MusicPreview : Unity.Preview {
|
||||
public enum TrackState {
|
||||
STOPPED,
|
||||
PLAYING,
|
||||
PAUSED
|
||||
}
|
||||
public MusicPreview (string title, string subtitle, GLib.Icon? image);
|
||||
public void add_track (Unity.TrackMetadata track);
|
||||
public float current_progress { get; set; }
|
||||
public Unity.MusicPreview.TrackState current_track_state { get; set; }
|
||||
public string current_track_uri { get; set; }
|
||||
public signal void pause (string uri);
|
||||
public signal void play (string uri);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class OptionsFilter : Unity.Filter {
|
||||
public enum SortType {
|
||||
MANUAL,
|
||||
DISPLAY_NAME,
|
||||
ID
|
||||
}
|
||||
public GLib.List<Unity.FilterOption> options;
|
||||
public OptionsFilter ();
|
||||
public Unity.FilterOption add_option (string id, string display_name, GLib.Icon? icon_hint = null);
|
||||
public Unity.FilterOption? get_option (string id);
|
||||
public bool remove_option (string id);
|
||||
public Unity.OptionsFilter.SortType sort_type { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class Playlist : GLib.Object {
|
||||
public Playlist (string id);
|
||||
public GLib.DateTime creation_date { get; set; }
|
||||
public GLib.Icon icon { get; set; }
|
||||
public string id { get; construct; }
|
||||
public GLib.DateTime last_play_date { get; set; }
|
||||
public GLib.DateTime modification_date { get; set; }
|
||||
public string name { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class PreferencesManager : GLib.Object {
|
||||
public enum RemoteContent {
|
||||
ALL,
|
||||
NONE
|
||||
}
|
||||
public static Unity.PreferencesManager get_default ();
|
||||
public Unity.PreferencesManager.RemoteContent remote_content_search { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public abstract class Preview : GLib.Object, Dee.Serializable {
|
||||
public Preview ();
|
||||
public void add_action (Unity.PreviewAction action);
|
||||
public void add_info (Unity.InfoHint info_hint);
|
||||
public string description_markup { get; set; }
|
||||
public GLib.Icon? image { get; set; }
|
||||
public string image_source_uri { get; set; }
|
||||
public string subtitle { get; set; }
|
||||
public string title { get; set; }
|
||||
public signal void closed ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class PreviewAction : GLib.Object, Dee.Serializable {
|
||||
public PreviewAction (string id, string display_name, GLib.Icon? icon_hint);
|
||||
public PreviewAction.with_layout_hint (string id, string display_name, GLib.Icon? icon_hint, Unity.LayoutHint layout);
|
||||
public string display_name { get; construct; }
|
||||
public string extra_text { get; set; }
|
||||
public GLib.HashTable<string,GLib.Variant>? hints { get; }
|
||||
public GLib.Icon? icon_hint { get; construct; }
|
||||
public string id { get; construct; }
|
||||
public Unity.LayoutHint layout_hint { get; construct; }
|
||||
public signal Unity.ActivationResponse activated (string uri);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class RadioOptionFilter : Unity.OptionsFilter {
|
||||
public RadioOptionFilter (string id, string display_name, GLib.Icon? icon_hint = null, bool collapsed = false);
|
||||
public Unity.FilterOption? get_active_option ();
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class RatingsFilter : Unity.Filter {
|
||||
public RatingsFilter (string id, string display_name, GLib.Icon? icon_hint = null, bool collapsed = false);
|
||||
public float rating { get; internal set construct; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class Scope : GLib.Object {
|
||||
public Scope (string dbus_path_);
|
||||
public void export () throws GLib.IOError;
|
||||
public Unity.Filter? get_filter (string id);
|
||||
public void invalidate_search (Unity.SearchType search_type);
|
||||
public void queue_search_changed (Unity.SearchType search_type);
|
||||
public bool active { get; set; }
|
||||
public string dbus_path { get; construct; }
|
||||
public bool exported { get; private set; }
|
||||
public GLib.List<Unity.Filter> filters { get; }
|
||||
public Dee.SerializableModel global_results_model { get; }
|
||||
public bool provides_personal_content { get; set; }
|
||||
public Dee.SerializableModel results_model { get; }
|
||||
public bool search_in_global { get; set; }
|
||||
public Unity.OptionsFilter sources { get; internal set; }
|
||||
public signal Unity.ActivationResponse? activate_uri (string uri);
|
||||
public signal void active_sources_changed (string[] active_ids);
|
||||
public signal void filters_changed ();
|
||||
[Signal (detailed = true)]
|
||||
public signal string generate_search_key (Unity.LensSearch search);
|
||||
public signal Unity.Preview? preview_uri (string uri);
|
||||
public signal void search_changed (Unity.LensSearch search, Unity.SearchType search_type, GLib.Cancellable cancellable);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class SocialPreview : Unity.Preview {
|
||||
public class Comment : GLib.InitiallyUnowned {
|
||||
public Comment (string id, string name, string text, string time);
|
||||
public string id { get; construct; }
|
||||
public string name { get; construct; }
|
||||
public string text { get; construct; }
|
||||
public string time { get; construct; }
|
||||
}
|
||||
public SocialPreview (string sender, string subtitle, string content, GLib.Icon? avatar);
|
||||
public void add_comment (Unity.SocialPreview.Comment comment);
|
||||
public GLib.Icon avatar { get; set; }
|
||||
public string content { get; set; }
|
||||
public string sender { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public class TrackMetadata : GLib.Object {
|
||||
public TrackMetadata ();
|
||||
public TrackMetadata.full (string uri, int track_no, string title, string artist, string album, uint length);
|
||||
public string album { get; set; }
|
||||
public GLib.Icon art_icon { get; set; }
|
||||
public GLib.File art_location { get; set; }
|
||||
public string artist { get; set; }
|
||||
public uint length { get; set; }
|
||||
public string title { get; set; }
|
||||
public int track_no { get; set; }
|
||||
public string uri { get; set; }
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public interface MergeStrategy : GLib.Object {
|
||||
public abstract unowned Dee.ModelIter? merge_result (Dee.Model target, GLib.Variant[] row);
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public struct ActivePlaylistContainer {
|
||||
public bool valid;
|
||||
public Unity.PlaylistDetails details;
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public struct PlaylistDetails {
|
||||
public GLib.ObjectPath id;
|
||||
public string name;
|
||||
public string icon_name;
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum CategoryRenderer {
|
||||
VERTICAL_TILE,
|
||||
HORIZONTAL_TILE,
|
||||
LIST_TILE,
|
||||
FLOW
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum CategoryType {
|
||||
NONE,
|
||||
APPLICATION,
|
||||
BOOK,
|
||||
MUSIC,
|
||||
MOVIE,
|
||||
GAMES,
|
||||
ELECTRONICS,
|
||||
COMPUTERS,
|
||||
OFFICE,
|
||||
HOME,
|
||||
GARDEN,
|
||||
PETS,
|
||||
TOYS,
|
||||
CHILDREN,
|
||||
BABY,
|
||||
CLOTHES,
|
||||
SHOES,
|
||||
WATCHES,
|
||||
SPORTS,
|
||||
OUTDOORS,
|
||||
GROCERY,
|
||||
HEALTH,
|
||||
BEAUTY,
|
||||
DIY,
|
||||
TOOLS,
|
||||
CAR,
|
||||
N_CATEGORIES
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum FilterRenderer {
|
||||
CHECK_OPTIONS,
|
||||
RADIO_OPTIONS,
|
||||
MULTIRANGE,
|
||||
RATINGS,
|
||||
CHECK_OPTIONS_COMPACT
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum HandledType {
|
||||
NOT_HANDLED,
|
||||
SHOW_DASH,
|
||||
HIDE_DASH,
|
||||
GOTO_DASH_URI,
|
||||
SHOW_PREVIEW
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum IconSizeHint {
|
||||
DEFAULT,
|
||||
SMALL,
|
||||
LARGE
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum LayoutHint {
|
||||
NONE,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
TOP,
|
||||
BOTTOM
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum PlaybackState {
|
||||
PLAYING,
|
||||
PAUSED
|
||||
}
|
||||
[CCode (cheader_filename = "unity.h")]
|
||||
public enum SearchType {
|
||||
DEFAULT,
|
||||
GLOBAL,
|
||||
N_TYPES
|
||||
}
|
||||
}
|
||||
4
debian/control
vendored
4
debian/control
vendored
|
|
@ -3,7 +3,7 @@ Section: gnome
|
|||
Priority: optional
|
||||
Maintainer: Jim Nelson <jim@yorba.org>
|
||||
Build-Depends: debhelper (>= 8),
|
||||
libgee-dev (>= 0.6.0),
|
||||
libgee-0.8-dev (>= 0.8.0),
|
||||
libglib2.0-dev (>= 2.30.0),
|
||||
libgtk-3-dev (>= 3.2.0),
|
||||
libunique-3.0-dev (>= 3.0.0),
|
||||
|
|
@ -26,7 +26,7 @@ Homepage: http://www.yorba.org
|
|||
Package: geary
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||
libgee2 (>= 0.6.0),
|
||||
libgee-0.8-2 (>= 0.8.0),
|
||||
libglib2.0-0 (>= 2.30.0),
|
||||
libgtk-3-0 (>= 3.2.0),
|
||||
libunique-3.0-0 (>= 3.0.0),
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ pkg_check_modules(DEPS REQUIRED
|
|||
glib-2.0>=${TARGET_GLIB}.0
|
||||
gio-2.0>=2.28.0
|
||||
gtk+-3.0>=3.4.0
|
||||
gee-1.0>=0.6.0
|
||||
gee-0.8>=0.8.0
|
||||
unique-3.0>=3.0.0
|
||||
libnotify>=0.7.5
|
||||
libcanberra>=0.28
|
||||
|
|
@ -359,7 +359,7 @@ pkg_check_modules(DEPS REQUIRED
|
|||
)
|
||||
|
||||
set(ENGINE_PACKAGES
|
||||
glib-2.0 gee-1.0 gio-2.0 gmime-2.6 unique-3.0 posix sqlite3
|
||||
glib-2.0 gee-0.8 gio-2.0 gmime-2.6 unique-3.0 posix sqlite3
|
||||
)
|
||||
|
||||
set(CLIENT_PACKAGES
|
||||
|
|
@ -371,7 +371,7 @@ set(CONSOLE_PACKAGES
|
|||
)
|
||||
|
||||
set(DBUSSERVICE_PACKAGES
|
||||
gee-1.0 glib-2.0
|
||||
gee-0.8 glib-2.0
|
||||
)
|
||||
|
||||
set(GSETTINGS_DIR ${CMAKE_SOURCE_DIR}/desktop)
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public class AccountDialogAccountListPane : AccountDialogPane {
|
|||
}
|
||||
|
||||
// Sort accounts and add them to the UI.
|
||||
account_list.sort((CompareFunc) Geary.AccountInformation.compare_ascending);
|
||||
account_list.sort(Geary.AccountInformation.compare_ascending);
|
||||
foreach (Geary.AccountInformation account in account_list)
|
||||
on_account_added(account);
|
||||
|
||||
|
|
|
|||
|
|
@ -153,8 +153,8 @@ public class AccountDialog : Gtk.Dialog {
|
|||
Geary.AccountInformation? real_info =
|
||||
GearyApplication.instance.get_real_account_information(info);
|
||||
if (real_info != null) {
|
||||
validate_connection = !real_info.imap_credentials.equals(info.imap_credentials) ||
|
||||
(info.smtp_credentials != null && !real_info.smtp_credentials.equals(info.smtp_credentials));
|
||||
validate_connection = !real_info.imap_credentials.equal_to(info.imap_credentials) ||
|
||||
(info.smtp_credentials != null && !real_info.smtp_credentials.equal_to(info.smtp_credentials));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,8 @@ public class ComposerWindow : Gtk.Window {
|
|||
public ComposeType compose_type { get; private set; default = ComposeType.NEW_MESSAGE; }
|
||||
|
||||
private string? body_html = null;
|
||||
private Gee.Set<File> attachment_files = new Gee.HashSet<File>(File.hash, (EqualFunc) File.equal);
|
||||
private Gee.Set<File> attachment_files = new Gee.HashSet<File>(Geary.Files.nullable_hash,
|
||||
Geary.Files.nullable_equal);
|
||||
|
||||
private Gtk.Builder builder;
|
||||
private Gtk.Label from_label;
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@ public class FolderList.AccountBranch : Sidebar.Branch {
|
|||
new ThemedIcon("folder-open"), new ThemedIcon("folder"));
|
||||
user_folder_group = new SpecialGrouping(2, "",
|
||||
IconFactory.instance.get_custom_icon("tags", IconFactory.ICON_SIDEBAR));
|
||||
folder_entries = new Gee.HashMap<Geary.FolderPath, FolderEntry>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
folder_entries = new Gee.HashMap<Geary.FolderPath, FolderEntry>();
|
||||
|
||||
account.information.notify["nickname"].connect(on_nicknamed_changed);
|
||||
|
||||
|
|
|
|||
|
|
@ -677,7 +677,7 @@ public class GearyController {
|
|||
return;
|
||||
}
|
||||
|
||||
all_accounts.sort((CompareFunc) Geary.AccountInformation.compare_ascending);
|
||||
all_accounts.sort(Geary.AccountInformation.compare_ascending);
|
||||
account_to_select = Geary.Engine.instance.get_account_instance(all_accounts.get(0));
|
||||
} catch (Error e) {
|
||||
debug("Error selecting first inbox: %s", e.message);
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public class ConversationListStore : Gtk.ListStore {
|
|||
if (conversation_lowest == null)
|
||||
continue;
|
||||
|
||||
if (lowest_id == null || conversation_lowest.compare(lowest_id) < 0)
|
||||
if (lowest_id == null || conversation_lowest.compare_to(lowest_id) < 0)
|
||||
lowest_id = conversation_lowest;
|
||||
} while (iter_next(ref iter));
|
||||
|
||||
|
|
@ -227,13 +227,11 @@ public class ConversationListStore : Gtk.ListStore {
|
|||
// sort the conversations so the previews are fetched from the newest to the oldest, matching
|
||||
// the user experience
|
||||
Gee.TreeSet<Geary.Conversation> sorted_conversations = new Geary.Collection.FixedTreeSet<Geary.Conversation>(
|
||||
(CompareFunc) compare_conversation_descending);
|
||||
compare_conversation_descending);
|
||||
sorted_conversations.add_all(conversation_monitor.get_conversations());
|
||||
|
||||
folder_emails = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
account_emails = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
folder_emails = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
account_emails = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
foreach (Geary.Conversation conversation in sorted_conversations) {
|
||||
Geary.Email? need_preview = conversation.get_latest_email();
|
||||
if (need_preview == null)
|
||||
|
|
@ -243,7 +241,7 @@ public class ConversationListStore : Gtk.ListStore {
|
|||
|
||||
// if all preview fields present and it's the same email, don't need to refresh
|
||||
if (current_preview != null
|
||||
&& need_preview.id.equals(current_preview.id)
|
||||
&& need_preview.id.equal_to(current_preview.id)
|
||||
&& current_preview.fields.is_all_set(ConversationListStore.WITH_PREVIEW_FIELDS)) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -301,7 +299,7 @@ public class ConversationListStore : Gtk.ListStore {
|
|||
|
||||
FormattedConversationData? existing_message_data = get_message_data_at_iter(iter);
|
||||
|
||||
if (existing_message_data == null || !existing_message_data.preview.id.equals(last_email.id)) {
|
||||
if (existing_message_data == null || !existing_message_data.preview.id.equal_to(last_email.id)) {
|
||||
set_row(iter, conversation, last_email);
|
||||
} else if (existing_message_data != null &&
|
||||
existing_message_data.num_emails != conversation.get_count()) {
|
||||
|
|
|
|||
|
|
@ -19,8 +19,7 @@ public class NewMessagesMonitor : Geary.BaseObject {
|
|||
public Cancellable? cancellable = null;
|
||||
public int count = 0;
|
||||
public Gee.HashSet<Geary.EmailIdentifier> new_ids
|
||||
= new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
= new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
|
||||
public MonitorInformation(Geary.Folder folder, Cancellable? cancellable) {
|
||||
this.folder = folder;
|
||||
|
|
@ -180,7 +179,7 @@ public class NewMessagesMonitor : Geary.BaseObject {
|
|||
MonitorInformation info = folder_information.get(folder);
|
||||
|
||||
foreach (Geary.EmailIdentifier email_id in email_ids) {
|
||||
if (last_new_message != null && last_new_message.id.equals(email_id)) {
|
||||
if (last_new_message != null && last_new_message.id.equal_to(email_id)) {
|
||||
last_new_message_folder = null;
|
||||
last_new_message = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,16 +48,13 @@ public class Sidebar.Branch : Object {
|
|||
this.comparator = comparator;
|
||||
}
|
||||
|
||||
private static int comparator_wrapper(void *a, void *b) {
|
||||
if (a == b)
|
||||
private static int comparator_wrapper(Node anode, Node bnode) {
|
||||
if (anode == bnode)
|
||||
return 0;
|
||||
|
||||
Node *anode = (Node *) a;
|
||||
Node *bnode = (Node *) b;
|
||||
assert(anode.parent == bnode.parent);
|
||||
|
||||
assert(anode->parent == bnode->parent);
|
||||
|
||||
return anode->parent.comparator(anode->entry, bnode->entry);
|
||||
return anode.parent.comparator(anode.entry, bnode.entry);
|
||||
}
|
||||
|
||||
public bool has_children() {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class FolderMenu : GtkUtil.ToggleToolbarDropdown {
|
|||
|
||||
public void add_folder(Geary.Folder folder) {
|
||||
folder_list.add(folder);
|
||||
folder_list.sort((CompareFunc) folder_sort);
|
||||
folder_list.sort(folder_sort);
|
||||
|
||||
int index = folder_list.index_of(folder);
|
||||
menu.insert(build_menu_item(folder), index);
|
||||
|
|
@ -65,7 +65,7 @@ public class FolderMenu : GtkUtil.ToggleToolbarDropdown {
|
|||
}
|
||||
|
||||
private static int folder_sort(Geary.Folder a, Geary.Folder b) {
|
||||
return a.get_path().compare(b.get_path());
|
||||
return a.get_path().compare_to(b.get_path());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class ConversationViewer : Gtk.Box {
|
|||
|
||||
// List of emails in this view.
|
||||
public Gee.TreeSet<Geary.Email> messages { get; private set; default =
|
||||
new Geary.Collection.FixedTreeSet<Geary.Email>((CompareFunc<Geary.Email>) Geary.Email.compare_date_ascending); }
|
||||
new Geary.Collection.FixedTreeSet<Geary.Email>(Geary.Email.compare_date_ascending); }
|
||||
|
||||
// The HTML viewer to view the emails.
|
||||
public ConversationWebView web_view { get; private set; }
|
||||
|
|
@ -52,8 +52,7 @@ public class ConversationViewer : Gtk.Box {
|
|||
|
||||
// Maps emails to their corresponding elements.
|
||||
private Gee.HashMap<Geary.EmailIdentifier, WebKit.DOM.HTMLElement> email_to_element = new
|
||||
Gee.HashMap<Geary.EmailIdentifier, WebKit.DOM.HTMLElement>(Geary.Hashable.hash_func,
|
||||
Geary.Equalable.equal_func);
|
||||
Gee.HashMap<Geary.EmailIdentifier, WebKit.DOM.HTMLElement>();
|
||||
|
||||
private string? hover_url = null;
|
||||
private Gtk.Menu? context_menu = null;
|
||||
|
|
@ -472,7 +471,7 @@ public class ConversationViewer : Gtk.Box {
|
|||
|
||||
// Update the flags in our message set.
|
||||
foreach (Geary.Email message in messages) {
|
||||
if (message.id.equals(email.id)) {
|
||||
if (message.id.equal_to(email.id)) {
|
||||
message.set_flags(flags);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class FormattedConversationData : Geary.BaseObject {
|
|||
private const int FONT_SIZE_PREVIEW = 8;
|
||||
private const int FONT_SIZE_MESSAGE_COUNT = 8;
|
||||
|
||||
private class ParticipantDisplay : Geary.BaseObject, Geary.Equalable {
|
||||
private class ParticipantDisplay : Geary.BaseObject, Gee.Hashable<ParticipantDisplay> {
|
||||
public string key;
|
||||
public Geary.RFC822.MailboxAddress address;
|
||||
public bool is_unread;
|
||||
|
|
@ -65,16 +65,16 @@ public class FormattedConversationData : Geary.BaseObject {
|
|||
is_unread ? "<b>" : "", Geary.HTML.escape_markup(participant), is_unread ? "</b>" : "");
|
||||
}
|
||||
|
||||
public bool equals(Geary.Equalable o) {
|
||||
ParticipantDisplay? other = o as ParticipantDisplay;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(ParticipantDisplay other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return key == other.key;
|
||||
}
|
||||
|
||||
public uint hash() {
|
||||
return key.hash();
|
||||
}
|
||||
}
|
||||
|
||||
private static int cell_height = -1;
|
||||
|
|
@ -185,7 +185,7 @@ public class FormattedConversationData : Geary.BaseObject {
|
|||
|
||||
// Build chronological list of AuthorDisplay records, setting to unread if any message by
|
||||
// that author is unread
|
||||
Gee.ArrayList<ParticipantDisplay> list = new Gee.ArrayList<ParticipantDisplay>(Geary.Equalable.equal_func);
|
||||
Gee.ArrayList<ParticipantDisplay> list = new Gee.ArrayList<ParticipantDisplay>();
|
||||
foreach (Geary.Email message in conversation.get_emails(Geary.Conversation.Ordering.DATE_ASCENDING)) {
|
||||
// only display if something to display
|
||||
Geary.RFC822.MailboxAddresses? addresses = use_to ? message.to : message.from;
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@
|
|||
namespace Geary.DBus {
|
||||
|
||||
public uint db_email_hash(Geary.Email key) {
|
||||
return key.id.to_hash();
|
||||
return key.id.hash();
|
||||
}
|
||||
|
||||
public bool db_email_equal(Geary.Email a, Geary.Email b) {
|
||||
return a.id.equals(b.id);
|
||||
return a.id.equal_to(b.id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public class Geary.ComposedEmail : BaseObject {
|
|||
public string? body_html { get; set; default = null; }
|
||||
public string? mailer { get; set; default = null; }
|
||||
public Gee.Set<File> attachment_files { get; private set;
|
||||
default = new Gee.HashSet<File>(File.hash, (EqualFunc) File.equal); }
|
||||
default = new Gee.HashSet<File>(Geary.Files.nullable_hash, Geary.Files.nullable_equal); }
|
||||
|
||||
public ComposedEmail(DateTime date, RFC822.MailboxAddresses from,
|
||||
RFC822.MailboxAddresses? to = null, RFC822.MailboxAddresses? cc = null,
|
||||
|
|
|
|||
|
|
@ -19,18 +19,16 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
|
||||
private int convnum;
|
||||
private weak Geary.ConversationMonitor? owner;
|
||||
private Gee.HashMap<EmailIdentifier, Email> emails = new Gee.HashMap<EmailIdentifier, Email>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashMultiSet<RFC822.MessageID> message_ids = new Gee.HashMultiSet<RFC822.MessageID>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashMap<EmailIdentifier, Email> emails = new Gee.HashMap<EmailIdentifier, Email>();
|
||||
private Gee.HashMultiSet<RFC822.MessageID> message_ids = new Gee.HashMultiSet<RFC822.MessageID>();
|
||||
private Geary.EmailIdentifier? lowest_id;
|
||||
|
||||
// this isn't ideal but the cost of adding an email to multiple sorted sets once versus
|
||||
// the number of times they're accessed makes it worth it
|
||||
private Gee.SortedSet<Email> date_ascending = new Collection.FixedTreeSet<Email>(
|
||||
(CompareFunc) compare_date_ascending);
|
||||
Geary.Email.compare_date_ascending);
|
||||
private Gee.SortedSet<Email> date_descending = new Collection.FixedTreeSet<Email>(
|
||||
(CompareFunc) compare_date_descending);
|
||||
Geary.Email.compare_date_descending);
|
||||
|
||||
public ImplConversation(Geary.ConversationMonitor owner) {
|
||||
convnum = next_convnum++;
|
||||
|
|
@ -114,8 +112,7 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
date_ascending.remove(email);
|
||||
date_descending.remove(email);
|
||||
|
||||
Gee.Set<RFC822.MessageID> removed_message_ids = new Gee.HashSet<RFC822.MessageID>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.Set<RFC822.MessageID> removed_message_ids = new Gee.HashSet<RFC822.MessageID>();
|
||||
|
||||
Gee.Set<RFC822.MessageID>? ancestors = email.get_ancestors();
|
||||
if (ancestors != null) {
|
||||
|
|
@ -135,30 +132,10 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
}
|
||||
|
||||
private void check_lowest_id(EmailIdentifier id) {
|
||||
if (id.get_folder_path() != null && (lowest_id == null || id.compare(lowest_id) < 0))
|
||||
if (id.get_folder_path() != null && (lowest_id == null || id.compare_to(lowest_id) < 0))
|
||||
lowest_id = id;
|
||||
}
|
||||
|
||||
private static int compare_date_ascending(Email a, Email b) {
|
||||
int diff = a.date.value.compare(b.date.value);
|
||||
|
||||
// stabilize the sort if the same date
|
||||
return (diff != 0) ? diff : compare_id_ascending(a, b);
|
||||
}
|
||||
|
||||
private static int compare_date_descending(Email a, Email b) {
|
||||
return compare_date_ascending(b, a);
|
||||
}
|
||||
|
||||
private static int compare_id_ascending(Email a, Email b) {
|
||||
// Arbitrarily, "account" email ids come after "folder" email ids.
|
||||
if (a.id.get_folder_path() == null && b.id.get_folder_path() != null)
|
||||
return 1;
|
||||
if (a.id.get_folder_path() != null && b.id.get_folder_path() == null)
|
||||
return -1;
|
||||
return a.id.compare(b.id);
|
||||
}
|
||||
|
||||
public string to_string() {
|
||||
return "[#%d] (%d emails)".printf(convnum, emails.size);
|
||||
}
|
||||
|
|
@ -198,9 +175,9 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
private bool readonly;
|
||||
private Gee.Set<ImplConversation> conversations = new Gee.HashSet<ImplConversation>();
|
||||
private Gee.HashMap<Geary.EmailIdentifier, ImplConversation> geary_id_map = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, ImplConversation>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailIdentifier, ImplConversation>();
|
||||
private Gee.HashMap<Geary.RFC822.MessageID, ImplConversation> message_id_map = new Gee.HashMap<
|
||||
Geary.RFC822.MessageID, ImplConversation>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.RFC822.MessageID, ImplConversation>();
|
||||
private Cancellable? cancellable_monitor = null;
|
||||
private bool retry_connection = false;
|
||||
private int64 last_retry_time = 0;
|
||||
|
|
@ -562,8 +539,7 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
folder.to_string(), emails.size);
|
||||
|
||||
// MessageIDs we're adding to each conversation.
|
||||
Gee.HashSet<RFC822.MessageID> new_message_ids = new Gee.HashSet<RFC822.MessageID>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<RFC822.MessageID> new_message_ids = new Gee.HashSet<RFC822.MessageID>();
|
||||
|
||||
Gee.HashSet<Conversation> new_conversations = new Gee.HashSet<Conversation>();
|
||||
Gee.MultiMap<Conversation, Geary.Email> appended_conversations = new Gee.HashMultiMap<
|
||||
|
|
@ -649,7 +625,7 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
};
|
||||
|
||||
Gee.ArrayList<Geary.FolderPath?> blacklist
|
||||
= new Gee.ArrayList<Geary.FolderPath?>(Equalable.nullable_equal_func);
|
||||
= new Gee.ArrayList<Geary.FolderPath?>();
|
||||
foreach (Geary.SpecialFolderType type in blacklisted_folder_types) {
|
||||
try {
|
||||
Geary.Folder? blacklist_folder = folder.account.get_special_folder(type);
|
||||
|
|
@ -699,7 +675,7 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
|
||||
// collect their results into a single collection of addt'l emails
|
||||
Gee.HashMap<Geary.EmailIdentifier, Geary.Email> needed_messages = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, Geary.Email>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailIdentifier, Geary.Email>();
|
||||
foreach (int id in batch.get_ids()) {
|
||||
LocalSearchOperation op = (LocalSearchOperation) batch.get_operation(id);
|
||||
if (op.emails != null) {
|
||||
|
|
@ -806,7 +782,7 @@ public class Geary.ConversationMonitor : BaseObject {
|
|||
Geary.EmailIdentifier? earliest_id = null;
|
||||
foreach (Geary.Conversation conversation in conversations) {
|
||||
Geary.EmailIdentifier? id = conversation.get_lowest_email_id();
|
||||
if (id != null && (earliest_id == null || id.compare(earliest_id) < 0))
|
||||
if (id != null && (earliest_id == null || id.compare_to(earliest_id) < 0))
|
||||
earliest_id = id;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* in the background and asking the user to reauthenticate each time is deemed inconvenient.
|
||||
*/
|
||||
|
||||
public class Geary.Credentials : BaseObject, Geary.Equalable {
|
||||
public class Geary.Credentials : BaseObject, Gee.Hashable<Geary.Credentials> {
|
||||
public string? user { get; set; }
|
||||
public string? pass { get; set; }
|
||||
|
||||
|
|
@ -43,15 +43,15 @@ public class Geary.Credentials : BaseObject, Geary.Equalable {
|
|||
return user;
|
||||
}
|
||||
|
||||
public bool equals(Equalable other) {
|
||||
Geary.Credentials? c = other as Geary.Credentials;
|
||||
if (c == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.Credentials c) {
|
||||
if (this == c)
|
||||
return true;
|
||||
|
||||
return user == c.user && pass == c.pass;
|
||||
}
|
||||
|
||||
public uint hash() {
|
||||
return to_string().hash();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,25 +4,21 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.EmailFlag : BaseObject, Geary.Equalable, Geary.Hashable {
|
||||
public class Geary.EmailFlag : BaseObject, Gee.Hashable<Geary.EmailFlag> {
|
||||
private string name;
|
||||
|
||||
public EmailFlag(string name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public bool equals(Equalable o) {
|
||||
EmailFlag? other = o as EmailFlag;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.EmailFlag other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return name.down() == other.name.down();
|
||||
}
|
||||
|
||||
public uint to_hash() {
|
||||
public uint hash() {
|
||||
return name.down().hash();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.EmailFlags : BaseObject, Geary.Equalable {
|
||||
public class Geary.EmailFlags : BaseObject, Gee.Hashable<Geary.EmailFlags> {
|
||||
private static EmailFlag? _unread = null;
|
||||
public static EmailFlag UNREAD { get {
|
||||
if (_unread == null)
|
||||
|
|
@ -21,7 +21,7 @@ public class Geary.EmailFlags : BaseObject, Geary.Equalable {
|
|||
return _flagged;
|
||||
} }
|
||||
|
||||
private Gee.Set<EmailFlag> list = new Gee.HashSet<EmailFlag>(Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.Set<EmailFlag> list = new Gee.HashSet<EmailFlag>();
|
||||
|
||||
public virtual signal void added(Gee.Collection<EmailFlag> flags) {
|
||||
}
|
||||
|
|
@ -96,11 +96,7 @@ public class Geary.EmailFlags : BaseObject, Geary.Equalable {
|
|||
return contains(FLAGGED);
|
||||
}
|
||||
|
||||
public bool equals(Equalable o) {
|
||||
Geary.EmailFlags? other = o as Geary.EmailFlags;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.EmailFlags other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
|
|
@ -115,6 +111,10 @@ public class Geary.EmailFlags : BaseObject, Geary.Equalable {
|
|||
return true;
|
||||
}
|
||||
|
||||
public uint hash() {
|
||||
return Geary.String.stri_hash(to_string());
|
||||
}
|
||||
|
||||
public string to_string() {
|
||||
string ret = "[";
|
||||
foreach (EmailFlag flag in list) {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@
|
|||
* passed to equals() and compare(). This may be added in the future.
|
||||
*/
|
||||
|
||||
public abstract class Geary.EmailIdentifier : BaseObject, Geary.Equalable, Geary.Comparable, Geary.Hashable {
|
||||
public abstract class Geary.EmailIdentifier : BaseObject, Gee.Comparable<Geary.EmailIdentifier>,
|
||||
Gee.Hashable<Geary.EmailIdentifier> {
|
||||
public int64 ordering { get; protected set; }
|
||||
|
||||
protected EmailIdentifier(int64 ordering) {
|
||||
|
|
@ -36,19 +37,15 @@ public abstract class Geary.EmailIdentifier : BaseObject, Geary.Equalable, Geary
|
|||
return null;
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
return Geary.Hashable.int64_hash(ordering);
|
||||
public virtual uint hash() {
|
||||
return Geary.Collection.int64_hash(ordering);
|
||||
}
|
||||
|
||||
// Virtual default implementation not provided because base class *must* verify that the
|
||||
// Equalable is of its own type.
|
||||
public abstract bool equals(Geary.Equalable other);
|
||||
public abstract bool equal_to(Geary.EmailIdentifier e);
|
||||
|
||||
public virtual int compare(Geary.Comparable o) {
|
||||
Geary.EmailIdentifier? other = o as Geary.EmailIdentifier;
|
||||
if (other == null)
|
||||
return -1;
|
||||
|
||||
public virtual int compare_to(Geary.EmailIdentifier other) {
|
||||
if (this == other)
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -287,8 +287,7 @@ public class Geary.Email : BaseObject {
|
|||
* this method to return a complete list.
|
||||
*/
|
||||
public Gee.Set<RFC822.MessageID>? get_ancestors() {
|
||||
Gee.Set<RFC822.MessageID> ancestors = new Gee.HashSet<RFC822.MessageID>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.Set<RFC822.MessageID> ancestors = new Gee.HashSet<RFC822.MessageID>();
|
||||
|
||||
// the email's Message-ID counts as its lineage
|
||||
if (message_id != null)
|
||||
|
|
@ -348,50 +347,47 @@ public class Geary.Email : BaseObject {
|
|||
* CompareFunc to sort Email by date. If the date field is not available on both Emails, their
|
||||
* identifiers are compared.
|
||||
*/
|
||||
public static int compare_date_ascending(void* a, void *b) {
|
||||
Geary.Email *aemail = (Geary.Email *) a;
|
||||
Geary.Email *bemail = (Geary.Email *) b;
|
||||
|
||||
public static int compare_date_ascending(Geary.Email aemail, Geary.Email bemail) {
|
||||
int diff = 0;
|
||||
if (aemail->date != null && bemail->date != null)
|
||||
diff = aemail->date.value.compare(bemail->date.value);
|
||||
if (aemail.date != null && bemail.date != null)
|
||||
diff = aemail.date.value.compare(bemail.date.value);
|
||||
|
||||
// stabilize sort by using the mail's ordering, which is always unique in a folder
|
||||
return (diff != 0) ? diff : aemail->id.compare(bemail->id);
|
||||
return (diff != 0) ? diff : aemail.id.compare_to(bemail.id);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by date. If the date field is not available on both Emails, their
|
||||
* identifiers are compared.
|
||||
*/
|
||||
public static int compare_date_descending(void* a, void *b) {
|
||||
return compare_date_ascending(b, a);
|
||||
public static int compare_date_descending(Geary.Email aemail, Geary.Email bemail) {
|
||||
return compare_date_ascending(bemail, aemail);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_id_ascending(void* a, void *b) {
|
||||
return ((Email *) a)->id.compare(((Email *) b)->id);
|
||||
public static int compare_id_ascending(Geary.Email aemail, Geary.Email bemail) {
|
||||
return aemail.id.compare_to(bemail.id);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_id_descending(void* a, void *b) {
|
||||
return compare_id_ascending(b, a);
|
||||
public static int compare_id_descending(Geary.Email aemail, Geary.Email bemail) {
|
||||
return compare_id_ascending(bemail, aemail);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailProperties.total_bytes. If not available, emails are
|
||||
* compared by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_size_ascending(void *a, void *b) {
|
||||
Geary.EmailProperties? aprop = (Geary.EmailProperties) ((Geary.Email *) a)->properties;
|
||||
Geary.EmailProperties? bprop = (Geary.EmailProperties) ((Geary.Email *) b)->properties;
|
||||
public static int compare_size_ascending(Geary.Email aemail, Geary.Email bemail) {
|
||||
Geary.EmailProperties? aprop = (Geary.EmailProperties) aemail.properties;
|
||||
Geary.EmailProperties? bprop = (Geary.EmailProperties) bemail.properties;
|
||||
|
||||
if (aprop == null || bprop == null)
|
||||
return compare_id_ascending(a, b);
|
||||
return compare_id_ascending(aemail, bemail);
|
||||
|
||||
long asize = aprop.total_bytes;
|
||||
long bsize = bprop.total_bytes;
|
||||
|
|
@ -401,39 +397,36 @@ public class Geary.Email : BaseObject {
|
|||
else if (asize > bsize)
|
||||
return 1;
|
||||
else
|
||||
return compare_id_ascending(a, b);
|
||||
return compare_id_ascending(aemail, bemail);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailProperties.total_bytes. If not available, emails are
|
||||
* compared by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_size_descending(void *a, void *b) {
|
||||
return compare_size_ascending(b, a);
|
||||
public static int compare_size_descending(Geary.Email aemail, Geary.Email bemail) {
|
||||
return compare_size_ascending(bemail, aemail);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailProperties.date_received. If not available, emails are
|
||||
* compared by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_date_received_ascending(void *a, void *b) {
|
||||
Geary.Email aemail = (Geary.Email) a;
|
||||
Geary.Email bemail = (Geary.Email) b;
|
||||
|
||||
public static int compare_date_received_ascending(Geary.Email aemail, Geary.Email bemail) {
|
||||
if (aemail.properties == null || bemail.properties == null)
|
||||
return compare_id_ascending(a, b);
|
||||
return compare_id_ascending(aemail, bemail);
|
||||
|
||||
int cmp = aemail.properties.date_received.compare(bemail.properties.date_received);
|
||||
|
||||
return (cmp != 0) ? cmp : compare_id_ascending(a, b);
|
||||
return (cmp != 0) ? cmp : compare_id_ascending(aemail, bemail);
|
||||
}
|
||||
|
||||
/**
|
||||
* CompareFunc to sort Email by EmailProperties.date_received. If not available, emails are
|
||||
* compared by EmailIdentifier.
|
||||
*/
|
||||
public static int compare_date_received_descending(void *a, void *b) {
|
||||
return compare_date_received_ascending(b, a);
|
||||
public static int compare_date_received_descending(Geary.Email aemail, Geary.Email bemail) {
|
||||
return compare_date_received_ascending(bemail, aemail);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,14 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.FolderPath : BaseObject, Hashable, Equalable, Comparable {
|
||||
public class Geary.FolderPath : BaseObject, Gee.Hashable<Geary.FolderPath>,
|
||||
Gee.Comparable<Geary.FolderPath> {
|
||||
public string basename { get; private set; }
|
||||
|
||||
private Gee.List<Geary.FolderPath>? path = null;
|
||||
private string? fullpath = null;
|
||||
private string? fullpath_separator = null;
|
||||
private uint hash = uint.MAX;
|
||||
private uint stored_hash = uint.MAX;
|
||||
|
||||
protected FolderPath(string basename) {
|
||||
assert(this is FolderRoot);
|
||||
|
|
@ -123,11 +124,7 @@ public class Geary.FolderPath : BaseObject, Hashable, Equalable, Comparable {
|
|||
* are less-than longer paths, assuming the path elements are equal up to the shorter path's
|
||||
* length.
|
||||
*/
|
||||
public int compare(Comparable o) {
|
||||
FolderPath? other = o as FolderPath;
|
||||
if (other == null)
|
||||
return -1;
|
||||
|
||||
public int compare_to(Geary.FolderPath other) {
|
||||
if (this == other)
|
||||
return 0;
|
||||
|
||||
|
|
@ -149,9 +146,9 @@ public class Geary.FolderPath : BaseObject, Hashable, Equalable, Comparable {
|
|||
return this_list.size - other_list.size;
|
||||
}
|
||||
|
||||
public uint to_hash() {
|
||||
if (hash != uint.MAX)
|
||||
return hash;
|
||||
public uint hash() {
|
||||
if (stored_hash != uint.MAX)
|
||||
return stored_hash;
|
||||
|
||||
bool cs = get_root().case_sensitive;
|
||||
|
||||
|
|
@ -162,23 +159,16 @@ public class Geary.FolderPath : BaseObject, Hashable, Equalable, Comparable {
|
|||
for (int ctr = 1; ctr < path_length; ctr++)
|
||||
calc ^= get_folder_at(ctr).get_basename_hash(cs);
|
||||
|
||||
hash = calc;
|
||||
stored_hash = calc;
|
||||
|
||||
return hash;
|
||||
return stored_hash;
|
||||
}
|
||||
|
||||
private bool is_basename_equal(string cmp, bool cs) {
|
||||
return cs ? (basename == cmp) : (basename.down() == cmp.down());
|
||||
}
|
||||
|
||||
public bool equals(Equalable o) {
|
||||
FolderPath? other = o as FolderPath;
|
||||
if (o == null)
|
||||
return false;
|
||||
|
||||
if (o == this)
|
||||
return true;
|
||||
|
||||
public bool equal_to(Geary.FolderPath other) {
|
||||
int path_length = get_path_length();
|
||||
if (other.get_path_length() != path_length)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@ public interface Geary.FolderSupportsArchive : Geary.Folder {
|
|||
*/
|
||||
public virtual async void archive_single_email_async(Geary.EmailIdentifier email_id,
|
||||
Cancellable? cancellable = null) throws Error {
|
||||
Gee.ArrayList<Geary.EmailIdentifier> ids = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
Gee.ArrayList<Geary.EmailIdentifier> ids = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
ids.add(email_id);
|
||||
|
||||
yield archive_email_async(ids, cancellable);
|
||||
|
|
|
|||
|
|
@ -26,8 +26,7 @@ public interface Geary.FolderSupportsMark : Geary.Folder {
|
|||
public virtual async void mark_single_email_async(Geary.EmailIdentifier to_mark,
|
||||
Geary.EmailFlags? flags_to_add, Geary.EmailFlags? flags_to_remove,
|
||||
Cancellable? cancellable = null) throws Error {
|
||||
Gee.ArrayList<Geary.EmailIdentifier> list = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
Gee.ArrayList<Geary.EmailIdentifier> list = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
list.add(to_mark);
|
||||
|
||||
yield mark_email_async(list, flags_to_add, flags_to_remove, cancellable);
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ public interface Geary.FolderSupportsRemove : Geary.Folder {
|
|||
*/
|
||||
public virtual async void remove_single_email_async(Geary.EmailIdentifier email_id,
|
||||
Cancellable? cancellable = null) throws Error {
|
||||
Gee.ArrayList<Geary.EmailIdentifier> ids = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
Gee.ArrayList<Geary.EmailIdentifier> ids = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
ids.add(email_id);
|
||||
|
||||
yield remove_email_async(ids, cancellable);
|
||||
|
|
|
|||
|
|
@ -18,10 +18,11 @@ public abstract class Geary.Common.MessageData : BaseObject {
|
|||
public abstract string to_string();
|
||||
}
|
||||
|
||||
public abstract class Geary.Common.StringMessageData : Geary.Common.MessageData, Hashable, Equalable {
|
||||
public abstract class Geary.Common.StringMessageData : Geary.Common.MessageData,
|
||||
Gee.Hashable<Geary.Common.StringMessageData> {
|
||||
public string value { get; private set; }
|
||||
|
||||
private uint hash = uint.MAX;
|
||||
private uint stored_hash = uint.MAX;
|
||||
|
||||
public StringMessageData(string value) {
|
||||
this.value = value;
|
||||
|
|
@ -30,22 +31,18 @@ public abstract class Geary.Common.StringMessageData : Geary.Common.MessageData,
|
|||
/**
|
||||
* Default definition of equals is case-sensitive comparison.
|
||||
*/
|
||||
public virtual bool equals(Equalable e) {
|
||||
StringMessageData? other = e as StringMessageData;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public virtual bool equal_to(StringMessageData other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
if (to_hash() != other.to_hash())
|
||||
if (hash() != other.hash())
|
||||
return false;
|
||||
|
||||
return (value == other.value);
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
return (hash != uint.MAX) ? hash : (hash = str_hash(value));
|
||||
public virtual uint hash() {
|
||||
return (stored_hash != uint.MAX) ? stored_hash : (stored_hash = str_hash(value));
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
|
|
@ -53,28 +50,24 @@ public abstract class Geary.Common.StringMessageData : Geary.Common.MessageData,
|
|||
}
|
||||
}
|
||||
|
||||
public abstract class Geary.Common.IntMessageData : Geary.Common.MessageData, Hashable, Equalable {
|
||||
public abstract class Geary.Common.IntMessageData : Geary.Common.MessageData, Gee.Hashable<Geary.Common.IntMessageData> {
|
||||
public int value { get; private set; }
|
||||
|
||||
private uint hash = uint.MAX;
|
||||
private uint stored_hash = uint.MAX;
|
||||
|
||||
public IntMessageData(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public virtual bool equals(Equalable e) {
|
||||
IntMessageData? other = e as IntMessageData;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public virtual bool equal_to(Geary.Common.IntMessageData other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return (value == other.value);
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
return (hash != uint.MAX) ? hash : (hash = int_hash(value));
|
||||
public virtual uint hash() {
|
||||
return (stored_hash != uint.MAX) ? stored_hash : (stored_hash = int_hash(value));
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
|
|
@ -82,28 +75,25 @@ public abstract class Geary.Common.IntMessageData : Geary.Common.MessageData, Ha
|
|||
}
|
||||
}
|
||||
|
||||
public abstract class Geary.Common.LongMessageData : Geary.Common.MessageData, Hashable, Equalable {
|
||||
public abstract class Geary.Common.LongMessageData : Geary.Common.MessageData,
|
||||
Gee.Hashable<Geary.Common.LongMessageData> {
|
||||
public long value { get; private set; }
|
||||
|
||||
private uint hash = uint.MAX;
|
||||
private uint stored_hash = uint.MAX;
|
||||
|
||||
public LongMessageData(long value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public virtual bool equals(Equalable e) {
|
||||
LongMessageData? other = e as LongMessageData;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public virtual bool equal_to(Geary.Common.LongMessageData other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return (value == other.value);
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
return (hash != uint.MAX) ? hash : (hash = int64_hash((int64) value));
|
||||
public virtual uint hash() {
|
||||
return (stored_hash != uint.MAX) ? stored_hash : (stored_hash = int64_hash((int64) value));
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
|
|
@ -111,28 +101,25 @@ public abstract class Geary.Common.LongMessageData : Geary.Common.MessageData, H
|
|||
}
|
||||
}
|
||||
|
||||
public abstract class Geary.Common.Int64MessageData : Geary.Common.MessageData, Hashable, Equalable {
|
||||
public abstract class Geary.Common.Int64MessageData : Geary.Common.MessageData,
|
||||
Gee.Hashable<Geary.Common.Int64MessageData> {
|
||||
public int64 value { get; private set; }
|
||||
|
||||
private uint hash = uint.MAX;
|
||||
private uint stored_hash = uint.MAX;
|
||||
|
||||
public Int64MessageData(int64 value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public virtual bool equals(Equalable e) {
|
||||
Int64MessageData? other = e as Int64MessageData;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public virtual bool equal_to(Geary.Common.Int64MessageData other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return (value == other.value);
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
return (hash != uint.MAX) ? hash : (hash = int64_hash(value));
|
||||
public virtual uint hash() {
|
||||
return (stored_hash != uint.MAX) ? stored_hash : (stored_hash = int64_hash(value));
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ private class Geary.ImapDB.Account : BaseObject {
|
|||
private AccountInformation account_information;
|
||||
private ImapDB.Database? db = null;
|
||||
private Gee.HashMap<Geary.FolderPath, FolderReference> folder_refs =
|
||||
new Gee.HashMap<Geary.FolderPath, FolderReference>(Hashable.hash_func, Equalable.equal_func);
|
||||
new Gee.HashMap<Geary.FolderPath, FolderReference>();
|
||||
public ContactStore contact_store { get; private set; }
|
||||
|
||||
public Account(Geary.AccountInformation account_information) {
|
||||
|
|
@ -233,9 +233,9 @@ private class Geary.ImapDB.Account : BaseObject {
|
|||
// TODO: A better solution here would be to only pull the FolderProperties if the Folder
|
||||
// object itself doesn't already exist
|
||||
Gee.HashMap<Geary.FolderPath, int64?> id_map = new Gee.HashMap<
|
||||
Geary.FolderPath, int64?>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.FolderPath, int64?>();
|
||||
Gee.HashMap<Geary.FolderPath, Geary.Imap.FolderProperties> prop_map = new Gee.HashMap<
|
||||
Geary.FolderPath, Geary.Imap.FolderProperties>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.FolderPath, Geary.Imap.FolderProperties>();
|
||||
yield db.exec_transaction_async(Db.TransactionType.RO, (cx) => {
|
||||
int64 parent_id = Db.INVALID_ROWID;
|
||||
if (parent != null) {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ private class Geary.ImapDB.EmailIdentifier : Geary.EmailIdentifier {
|
|||
base (message_id);
|
||||
}
|
||||
|
||||
public override bool equals(Geary.Equalable o) {
|
||||
public override bool equal_to(Geary.EmailIdentifier o) {
|
||||
Geary.ImapDB.EmailIdentifier? other = o as Geary.ImapDB.EmailIdentifier;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
|
|||
private string account_owner_email;
|
||||
private int64 folder_id;
|
||||
private Geary.Imap.FolderProperties properties;
|
||||
private Gee.HashSet<Geary.EmailIdentifier> marked_removed = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashSet<Geary.EmailIdentifier> marked_removed = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
|
||||
internal Folder(ImapDB.Database db, Geary.FolderPath path, ContactStore contact_store,
|
||||
string account_owner_email, int64 folder_id, Geary.Imap.FolderProperties properties) {
|
||||
|
|
@ -660,7 +659,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
|
|||
return null;
|
||||
|
||||
Gee.HashMap<Geary.EmailIdentifier, Geary.Email.Field> map = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, Geary.Email.Field>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailIdentifier, Geary.Email.Field>();
|
||||
|
||||
// Break up the work
|
||||
Gee.List<Geary.EmailIdentifier> list = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
|
|
@ -1054,7 +1053,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
|
|||
Db.Statement fetch_stmt = cx.prepare("SELECT flags FROM MessageTable WHERE id=?");
|
||||
|
||||
Gee.Map<Geary.EmailIdentifier, Geary.EmailFlags> map = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, Geary.EmailFlags>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailIdentifier, Geary.EmailFlags>();
|
||||
|
||||
foreach (Geary.EmailIdentifier id in ids) {
|
||||
int64 message_id = do_find_message(cx, id, ListFlags.NONE, cancellable);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ private class Geary.SmtpOutboxEmailIdentifier : Geary.EmailIdentifier {
|
|||
base (ordering);
|
||||
}
|
||||
|
||||
public override bool equals(Geary.Equalable o) {
|
||||
public override bool equal_to(Geary.EmailIdentifier o) {
|
||||
SmtpOutboxEmailIdentifier? other = o as SmtpOutboxEmailIdentifier;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -413,7 +413,7 @@ private class Geary.SmtpOutboxFolder : Geary.AbstractFolder, Geary.FolderSupport
|
|||
check_open();
|
||||
|
||||
Gee.Map<Geary.EmailIdentifier, Geary.Email.Field> map = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, Geary.Email.Field>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailIdentifier, Geary.Email.Field>();
|
||||
yield db.exec_transaction_async(Db.TransactionType.RO, (cx) => {
|
||||
Db.Statement stmt = cx.prepare(
|
||||
"SELECT id FROM SmtpOutboxTable WHERE ordering=?");
|
||||
|
|
|
|||
|
|
@ -41,8 +41,7 @@ private class Geary.ImapEngine.GmailAccount : Geary.ImapEngine.GenericAccount {
|
|||
base (name, account_information, remote, local);
|
||||
|
||||
if (path_type_map == null) {
|
||||
path_type_map = new Gee.HashMap<Geary.FolderPath, Geary.SpecialFolderType>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
path_type_map = new Gee.HashMap<Geary.FolderPath, Geary.SpecialFolderType>();
|
||||
|
||||
path_type_map.set(new Geary.FolderRoot(Imap.Account.INBOX_NAME, Imap.Account.ASSUMED_SEPARATOR,
|
||||
Imap.Folder.CASE_SENSITIVE), SpecialFolderType.INBOX);
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ private class Geary.ImapEngine.AccountSynchronizer : Geary.BaseObject {
|
|||
return cmp;
|
||||
|
||||
// sort by path to stabilize the sort
|
||||
return a.get_path().compare(b.get_path());
|
||||
return a.get_path().compare_to(b.get_path());
|
||||
}
|
||||
|
||||
// Lower the score, the higher the importance.
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ private class Geary.ImapEngine.EmailFlagWatcher : BaseObject {
|
|||
|
||||
// Get all email identifiers in the local folder; also, update the low and count arguments
|
||||
Gee.HashMap<Geary.EmailIdentifier, Geary.EmailFlags> local_map = new Gee.HashMap<
|
||||
Geary.EmailIdentifier, Geary.EmailFlags>(Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
Geary.EmailIdentifier, Geary.EmailFlags>();
|
||||
foreach (Geary.Email e in list_local) {
|
||||
if (low == -1)
|
||||
low = e.position;
|
||||
|
|
@ -131,13 +131,12 @@ private class Geary.ImapEngine.EmailFlagWatcher : BaseObject {
|
|||
|
||||
// Build map of emails that have changed.
|
||||
Gee.HashMap<Geary.EmailIdentifier, Geary.EmailFlags> changed_map =
|
||||
new Gee.HashMap<Geary.EmailIdentifier, Geary.EmailFlags>(Geary.Hashable.hash_func,
|
||||
Geary.Equalable.equal_func);
|
||||
new Gee.HashMap<Geary.EmailIdentifier, Geary.EmailFlags>();
|
||||
foreach (Geary.Email e in list_remote) {
|
||||
if (!local_map.has_key(e.id))
|
||||
continue;
|
||||
|
||||
if (!local_map.get(e.id).equals(e.email_flags))
|
||||
if (!local_map.get(e.id).equal_to(e.email_flags))
|
||||
changed_map.set(e.id, e.email_flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@ public class Geary.ImapEngine.EmailPrefetcher : Object {
|
|||
private unowned Geary.Folder folder;
|
||||
private int start_delay_sec;
|
||||
private NonblockingMutex mutex = new NonblockingMutex();
|
||||
private Gee.HashSet<Geary.EmailIdentifier> prefetch_ids = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashSet<Geary.EmailIdentifier> prefetch_ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
private uint schedule_id = 0;
|
||||
private Cancellable cancellable = new Cancellable();
|
||||
|
||||
|
|
@ -119,8 +118,7 @@ public class Geary.ImapEngine.EmailPrefetcher : Object {
|
|||
|
||||
low = Numeric.int_floor(low - PREFETCH_CHUNKS, 1);
|
||||
|
||||
Gee.HashSet<Geary.EmailIdentifier> ids = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.EmailIdentifier> ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
foreach (Geary.Email email in list)
|
||||
ids.add(email.id);
|
||||
|
||||
|
|
@ -176,7 +174,7 @@ public class Geary.ImapEngine.EmailPrefetcher : Object {
|
|||
private async void do_prefetch_batch() throws Error {
|
||||
// snarf up all requested EmailIdentifiers for this round
|
||||
Gee.HashSet<Geary.EmailIdentifier> ids = prefetch_ids;
|
||||
prefetch_ids = new Gee.HashSet<Geary.EmailIdentifier>(Hashable.hash_func, Equalable.equal_func);
|
||||
prefetch_ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
|
||||
if (ids.size == 0)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -14,11 +14,10 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.AbstractAccount {
|
|||
private ImapDB.Account local;
|
||||
private bool open = false;
|
||||
private Gee.HashMap<FolderPath, Imap.FolderProperties> properties_map = new Gee.HashMap<
|
||||
FolderPath, Imap.FolderProperties>(Hashable.hash_func, Equalable.equal_func);
|
||||
FolderPath, Imap.FolderProperties>();
|
||||
private Gee.HashMap<FolderPath, GenericFolder> existing_folders = new Gee.HashMap<
|
||||
FolderPath, GenericFolder>(Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashMap<FolderPath, Folder> local_only = new Gee.HashMap<FolderPath, Folder>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
FolderPath, GenericFolder>();
|
||||
private Gee.HashMap<FolderPath, Folder> local_only = new Gee.HashMap<FolderPath, Folder>();
|
||||
private uint refresh_folder_timeout_id = 0;
|
||||
private bool in_refresh_enumerate = false;
|
||||
private Cancellable refresh_cancellable = new Cancellable();
|
||||
|
|
@ -179,7 +178,7 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.AbstractAccount {
|
|||
foreach(FolderPath path in existing_folders.keys) {
|
||||
FolderPath? path_parent = path.get_parent();
|
||||
if ((parent == null && path_parent == null) ||
|
||||
(parent != null && path_parent != null && path_parent.equals(parent))) {
|
||||
(parent != null && path_parent != null && path_parent.equal_to(parent))) {
|
||||
matches.add(existing_folders.get(path));
|
||||
}
|
||||
}
|
||||
|
|
@ -317,8 +316,7 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.AbstractAccount {
|
|||
}
|
||||
|
||||
// update all remote folders properties in the local store and active in the system
|
||||
Gee.HashSet<Geary.FolderPath> altered_paths = new Gee.HashSet<Geary.FolderPath>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.FolderPath> altered_paths = new Gee.HashSet<Geary.FolderPath>();
|
||||
foreach (Imap.Folder remote_folder in remote_folders) {
|
||||
// only worry about alterations if the remote is openable
|
||||
if (remote_folder.get_properties().is_openable.is_possible()) {
|
||||
|
|
@ -347,14 +345,12 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.AbstractAccount {
|
|||
}
|
||||
|
||||
// Get local paths of all engine (local) folders
|
||||
Gee.Set<Geary.FolderPath> local_paths = new Gee.HashSet<Geary.FolderPath>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
Gee.Set<Geary.FolderPath> local_paths = new Gee.HashSet<Geary.FolderPath>();
|
||||
foreach (Geary.Folder local_folder in engine_folders)
|
||||
local_paths.add(local_folder.get_path());
|
||||
|
||||
// Get remote paths of all remote folders
|
||||
Gee.Set<Geary.FolderPath> remote_paths = new Gee.HashSet<Geary.FolderPath>(
|
||||
Geary.Hashable.hash_func, Geary.Equalable.equal_func);
|
||||
Gee.Set<Geary.FolderPath> remote_paths = new Gee.HashSet<Geary.FolderPath>();
|
||||
foreach (Geary.Imap.Folder remote_folder in remote_folders) {
|
||||
remote_paths.add(remote_folder.get_path());
|
||||
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
|
|||
Gee.Collection<Geary.EmailIdentifier> all_locally_appended_ids = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
Gee.Collection<Geary.EmailIdentifier> all_removed_ids = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
Gee.Map<Geary.EmailIdentifier, Geary.EmailFlags> all_flags_changed = new Gee.HashMap<Geary.EmailIdentifier,
|
||||
Geary.EmailFlags>(Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.EmailFlags>();
|
||||
|
||||
Geary.Imap.EmailIdentifier current_start_id = new Geary.Imap.EmailIdentifier(earliest_uid, local_folder.get_path());
|
||||
for (;;) {
|
||||
|
|
@ -218,7 +218,7 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
|
|||
Geary.Imap.EmailFlags? local_email_flags = (Geary.Imap.EmailFlags) local_email.email_flags;
|
||||
Geary.Imap.EmailFlags remote_email_flags = (Geary.Imap.EmailFlags) remote_email.email_flags;
|
||||
|
||||
if ((local_email_flags == null) || !local_email_flags.equals(remote_email_flags)) {
|
||||
if ((local_email_flags == null) || !local_email_flags.equal_to(remote_email_flags)) {
|
||||
// check before writebehind
|
||||
if (replay_queue.query_local_writebehind_operation(ReplayOperation.WritebehindOperation.UPDATE_FLAGS,
|
||||
remote_email.id, (Imap.EmailFlags) remote_email.email_flags)) {
|
||||
|
|
@ -364,8 +364,8 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
|
|||
|
||||
// if gone past both local and remote extremes, time to exit
|
||||
// TODO: If UIDNEXT isn't available on server, will need to fetch the highest UID
|
||||
if (current_start_id.uid.compare(latest_uid) >= 0
|
||||
&& current_start_id.uid.compare(remote_properties.uid_next) >= 0)
|
||||
if (current_start_id.uid.compare_to(latest_uid) >= 0
|
||||
&& current_start_id.uid.compare_to(remote_properties.uid_next) >= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -618,10 +618,8 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
|
|||
debug("do_replay_appended_messages %s: remote_count=%d new_remote_count=%d", to_string(),
|
||||
remote_count, new_remote_count);
|
||||
|
||||
Gee.HashSet<Geary.EmailIdentifier> created = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.EmailIdentifier> appended = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.EmailIdentifier> created = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
Gee.HashSet<Geary.EmailIdentifier> appended = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
|
||||
try {
|
||||
// If remote doesn't fully open, then don't fire signal, as we'll be unable to
|
||||
|
|
@ -1066,8 +1064,7 @@ private class Geary.ImapEngine.GenericFolder : Geary.AbstractFolder, Geary.Folde
|
|||
|
||||
int mutex_token = yield normalize_email_positions_mutex.claim_async(cancellable);
|
||||
|
||||
Gee.HashSet<Geary.EmailIdentifier> created_ids = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.EmailIdentifier> created_ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
Error? error = null;
|
||||
try {
|
||||
local_count = yield local_folder.get_email_count_async(ImapDB.Folder.ListFlags.NONE,
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
|
||||
private class Geary.ImapEngine.CopyEmail : Geary.ImapEngine.SendReplayOperation {
|
||||
private GenericFolder engine;
|
||||
private Gee.List<Geary.EmailIdentifier> to_copy = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
private Gee.List<Geary.EmailIdentifier> to_copy = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
private Geary.FolderPath destination;
|
||||
private Cancellable? cancellable;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
|
||||
private class Geary.ImapEngine.ExpungeEmail : Geary.ImapEngine.SendReplayOperation {
|
||||
private GenericFolder engine;
|
||||
private Gee.List<Geary.EmailIdentifier> to_remove = new Gee.ArrayList<EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
private Gee.List<Geary.EmailIdentifier> to_remove = new Gee.ArrayList<EmailIdentifier>();
|
||||
private Cancellable? cancellable;
|
||||
private int original_count = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ private class Geary.ImapEngine.FetchEmail : Geary.ImapEngine.SendReplayOperation
|
|||
|
||||
public override bool query_local_writebehind_operation(ReplayOperation.WritebehindOperation op,
|
||||
EmailIdentifier id, Imap.EmailFlags? flags) {
|
||||
if (!this.id.equals(id))
|
||||
if (!this.id.equal_to(id))
|
||||
return true;
|
||||
|
||||
switch (op) {
|
||||
|
|
|
|||
|
|
@ -73,8 +73,7 @@ private class Geary.ImapEngine.ListEmailBySparseID : Geary.ImapEngine.SendReplay
|
|||
}
|
||||
|
||||
private GenericFolder owner;
|
||||
private Gee.HashSet<Geary.EmailIdentifier> ids = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashSet<Geary.EmailIdentifier> ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
private Geary.Email.Field required_fields;
|
||||
private Folder.ListFlags flags;
|
||||
private bool local_only;
|
||||
|
|
@ -83,7 +82,7 @@ private class Geary.ImapEngine.ListEmailBySparseID : Geary.ImapEngine.SendReplay
|
|||
private unowned EmailCallback cb;
|
||||
private Cancellable? cancellable;
|
||||
private Gee.HashMultiMap<Geary.Email.Field, Geary.EmailIdentifier> unfulfilled = new Gee.HashMultiMap<
|
||||
Geary.Email.Field, Geary.EmailIdentifier>(null, null, Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.Email.Field, Geary.EmailIdentifier>();
|
||||
|
||||
public ListEmailBySparseID(GenericFolder owner, Gee.Collection<Geary.EmailIdentifier> ids,
|
||||
Geary.Email.Field required_fields, Folder.ListFlags flags, Gee.List<Geary.Email>? accumulator,
|
||||
|
|
@ -173,7 +172,7 @@ private class Geary.ImapEngine.ListEmailBySparseID : Geary.ImapEngine.SendReplay
|
|||
if (accumulator != null) {
|
||||
Gee.HashSet<Geary.Email> wb_removed = new Gee.HashSet<Geary.Email>();
|
||||
foreach (Geary.Email email in accumulator) {
|
||||
if (email.id.equals(id))
|
||||
if (email.id.equal_to(id))
|
||||
wb_removed.add(email);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ private class Geary.ImapEngine.ListEmail : Geary.ImapEngine.SendReplayOperation
|
|||
private Gee.List<Geary.Email>? local_list = null;
|
||||
private int local_list_size = 0;
|
||||
private Gee.HashMultiMap<Geary.Email.Field, Geary.EmailIdentifier> unfulfilled = new Gee.HashMultiMap<
|
||||
Geary.Email.Field, Geary.EmailIdentifier>(null, null, Hashable.hash_func, Equalable.equal_func);
|
||||
Geary.Email.Field, Geary.EmailIdentifier>();
|
||||
|
||||
public ListEmail(GenericFolder engine, int low, int count, Geary.Email.Field required_fields,
|
||||
Folder.ListFlags flags, Gee.List<Geary.Email>? accumulator, EmailCallback? cb, Cancellable? cancellable) {
|
||||
|
|
@ -215,7 +215,7 @@ private class Geary.ImapEngine.ListEmail : Geary.ImapEngine.SendReplayOperation
|
|||
if (accumulator != null) {
|
||||
Gee.HashSet<Geary.Email> wb_removed = new Gee.HashSet<Geary.Email>();
|
||||
foreach (Geary.Email email in accumulator) {
|
||||
if (email.id.equals(id))
|
||||
if (email.id.equal_to(id))
|
||||
wb_removed.add(email);
|
||||
}
|
||||
|
||||
|
|
@ -372,8 +372,7 @@ private class Geary.ImapEngine.ListEmail : Geary.ImapEngine.SendReplayOperation
|
|||
assert(create_op.merged != null);
|
||||
|
||||
// report locally added (non-duplicate, not unknown) emails & collect emails post-merge
|
||||
Gee.HashSet<Geary.EmailIdentifier> created_ids = new Gee.HashSet<Geary.EmailIdentifier>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
Gee.HashSet<Geary.EmailIdentifier> created_ids = new Gee.HashSet<Geary.EmailIdentifier>();
|
||||
foreach (Geary.Email email in create_op.created.keys) {
|
||||
// true means created
|
||||
if (create_op.created.get(email))
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
|
||||
private class Geary.ImapEngine.MarkEmail : Geary.ImapEngine.SendReplayOperation {
|
||||
private GenericFolder engine;
|
||||
private Gee.List<Geary.EmailIdentifier> to_mark = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
private Gee.List<Geary.EmailIdentifier> to_mark = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
private Geary.EmailFlags? flags_to_add;
|
||||
private Geary.EmailFlags? flags_to_remove;
|
||||
private Gee.Map<Geary.EmailIdentifier, Geary.EmailFlags>? original_flags = null;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
|
||||
private class Geary.ImapEngine.MoveEmail : Geary.ImapEngine.SendReplayOperation {
|
||||
private GenericFolder engine;
|
||||
private Gee.List<Geary.EmailIdentifier> to_move = new Gee.ArrayList<Geary.EmailIdentifier>(
|
||||
Equalable.equal_func);
|
||||
private Gee.List<Geary.EmailIdentifier> to_move = new Gee.ArrayList<Geary.EmailIdentifier>();
|
||||
private Geary.FolderPath destination;
|
||||
private Cancellable? cancellable;
|
||||
private int original_count = 0;
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ private class Geary.ImapEngine.YahooAccount : Geary.ImapEngine.GenericAccount {
|
|||
base (name, account_information, remote, local);
|
||||
|
||||
if (special_map == null) {
|
||||
special_map = new Gee.HashMap<Geary.FolderPath, Geary.SpecialFolderType>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
special_map = new Gee.HashMap<Geary.FolderPath, Geary.SpecialFolderType>();
|
||||
|
||||
special_map.set(new Geary.FolderRoot(Imap.Account.INBOX_NAME, Imap.Account.ASSUMED_SEPARATOR, false),
|
||||
Geary.SpecialFolderType.INBOX);
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@ public class Geary.Imap.EmailFlags : Geary.EmailFlags {
|
|||
|
||||
protected override void notify_added(Gee.Collection<EmailFlag> added) {
|
||||
foreach (EmailFlag flag in added) {
|
||||
if (flag.equals(UNREAD))
|
||||
if (flag.equal_to(UNREAD))
|
||||
message_flags.remove(MessageFlag.SEEN);
|
||||
|
||||
if (flag.equals(FLAGGED))
|
||||
if (flag.equal_to(FLAGGED))
|
||||
message_flags.add(MessageFlag.FLAGGED);
|
||||
}
|
||||
|
||||
|
|
@ -31,10 +31,10 @@ public class Geary.Imap.EmailFlags : Geary.EmailFlags {
|
|||
|
||||
protected override void notify_removed(Gee.Collection<EmailFlag> removed) {
|
||||
foreach (EmailFlag flag in removed) {
|
||||
if (flag.equals(UNREAD))
|
||||
if (flag.equal_to(UNREAD))
|
||||
message_flags.add(MessageFlag.SEEN);
|
||||
|
||||
if (flag.equals(FLAGGED))
|
||||
if (flag.equal_to(FLAGGED))
|
||||
message_flags.remove(MessageFlag.FLAGGED);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@ private class Geary.Imap.EmailIdentifier : Geary.EmailIdentifier {
|
|||
return folder_path;
|
||||
}
|
||||
|
||||
public override uint to_hash() {
|
||||
return uid.to_hash();
|
||||
public override uint hash() {
|
||||
return uid.hash();
|
||||
}
|
||||
|
||||
public override bool equals(Equalable o) {
|
||||
public override bool equal_to(Geary.EmailIdentifier o) {
|
||||
Geary.Imap.EmailIdentifier? other = o as Geary.Imap.EmailIdentifier;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
|
@ -31,7 +31,7 @@ private class Geary.Imap.EmailIdentifier : Geary.EmailIdentifier {
|
|||
if (this == other)
|
||||
return true;
|
||||
|
||||
return uid.equals(other.uid) && folder_path.equals(other.folder_path);
|
||||
return uid.equal_to(other.uid) && folder_path.equal_to(other.folder_path);
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.Imap.EmailProperties : Geary.EmailProperties, Equalable {
|
||||
public class Geary.Imap.EmailProperties : Geary.EmailProperties, Gee.Hashable<Geary.Imap.EmailProperties> {
|
||||
public InternalDate? internaldate { get; private set; }
|
||||
public RFC822.Size? rfc822_size { get; private set; }
|
||||
|
||||
|
|
@ -15,11 +15,7 @@ public class Geary.Imap.EmailProperties : Geary.EmailProperties, Equalable {
|
|||
this.rfc822_size = rfc822_size;
|
||||
}
|
||||
|
||||
public bool equals(Equalable e) {
|
||||
Imap.EmailProperties? other = e as Imap.EmailProperties;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.Imap.EmailProperties other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
|
|
@ -34,6 +30,10 @@ public class Geary.Imap.EmailProperties : Geary.EmailProperties, Equalable {
|
|||
return true;
|
||||
}
|
||||
|
||||
public uint hash() {
|
||||
return to_string().hash();
|
||||
}
|
||||
|
||||
public override string to_string() {
|
||||
return "internaldate:%s/size:%s".printf((internaldate != null) ? internaldate.to_string() : "(none)",
|
||||
(rfc822_size != null) ? rfc822_size.to_string() : "(none)");
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class Geary.Imap.FolderProperties : Geary.FolderProperties {
|
|||
*/
|
||||
public Trillian have_contents_changed(Geary.Imap.FolderProperties other) {
|
||||
// UIDNEXT changes indicate messages have been added, but not if they've been removed
|
||||
if (uid_next != null && other.uid_next != null && !uid_next.equals(other.uid_next))
|
||||
if (uid_next != null && other.uid_next != null && !uid_next.equal_to(other.uid_next))
|
||||
return Trillian.TRUE;
|
||||
|
||||
// Gmail includes Chat messages in STATUS results but not in SELECT/EXAMINE
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public abstract class Geary.Imap.Flag : BaseObject, Equalable, Hashable {
|
||||
public abstract class Geary.Imap.Flag : BaseObject, Gee.Hashable<Geary.Imap.Flag> {
|
||||
public string value { get; private set; }
|
||||
|
||||
public Flag(string value) {
|
||||
|
|
@ -19,15 +19,11 @@ public abstract class Geary.Imap.Flag : BaseObject, Equalable, Hashable {
|
|||
return this.value.down() == value.down();
|
||||
}
|
||||
|
||||
public bool equals(Equalable b) {
|
||||
Flag? flag = b as Flag;
|
||||
if (flag == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.Imap.Flag flag) {
|
||||
return (flag == this) ? true : flag.equals_string(value);
|
||||
}
|
||||
|
||||
public uint to_hash() {
|
||||
public uint hash() {
|
||||
return str_hash(value.down());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
public interface Geary.Imap.MessageData : Geary.Common.MessageData {
|
||||
}
|
||||
|
||||
public class Geary.Imap.UID : Geary.Common.Int64MessageData, Geary.Imap.MessageData, Comparable {
|
||||
public class Geary.Imap.UID : Geary.Common.Int64MessageData, Geary.Imap.MessageData, Gee.Comparable<Geary.Imap.UID> {
|
||||
// Using statics because int32.MAX is static, not const (??)
|
||||
public static int64 MIN = 1;
|
||||
public static int64 MAX = int32.MAX;
|
||||
|
|
@ -63,11 +63,7 @@ public class Geary.Imap.UID : Geary.Common.Int64MessageData, Geary.Imap.MessageD
|
|||
return new UID(Numeric.int64_floor(value - 1, MIN));
|
||||
}
|
||||
|
||||
public virtual int compare(Comparable o) {
|
||||
UID? other = o as UID;
|
||||
if (other == null)
|
||||
return -1;
|
||||
|
||||
public virtual int compare_to(Geary.Imap.UID other) {
|
||||
if (value < other.value)
|
||||
return -1;
|
||||
else if (value > other.value)
|
||||
|
|
@ -94,13 +90,14 @@ public class Geary.Imap.MessageNumber : Geary.Common.IntMessageData, Geary.Imap.
|
|||
}
|
||||
}
|
||||
|
||||
public abstract class Geary.Imap.Flags : Geary.Common.MessageData, Geary.Imap.MessageData, Equalable {
|
||||
public abstract class Geary.Imap.Flags : Geary.Common.MessageData, Geary.Imap.MessageData,
|
||||
Gee.Hashable<Geary.Imap.Flags> {
|
||||
public int size { get { return list.size; } }
|
||||
|
||||
protected Gee.Set<Flag> list;
|
||||
|
||||
public Flags(Gee.Collection<Flag> flags) {
|
||||
list = new Gee.HashSet<Flag>(Hashable.hash_func, Equalable.equal_func);
|
||||
list = new Gee.HashSet<Flag>();
|
||||
list.add_all(flags);
|
||||
}
|
||||
|
||||
|
|
@ -120,11 +117,7 @@ public abstract class Geary.Imap.Flags : Geary.Common.MessageData, Geary.Imap.Me
|
|||
return to_string();
|
||||
}
|
||||
|
||||
public bool equals(Equalable e) {
|
||||
Imap.Flags? other = e as Imap.Flags;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.Imap.Flags other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
|
|
@ -150,6 +143,10 @@ public abstract class Geary.Imap.Flags : Geary.Common.MessageData, Geary.Imap.Me
|
|||
|
||||
return builder.str;
|
||||
}
|
||||
|
||||
public uint hash() {
|
||||
return to_string().hash();
|
||||
}
|
||||
}
|
||||
|
||||
public class Geary.Imap.MessageFlags : Geary.Imap.Flags {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
* (version 2.1 or later). See the COPYING file in this distribution.
|
||||
*/
|
||||
|
||||
public class Geary.Imap.Tag : StringParameter, Hashable, Equalable {
|
||||
public class Geary.Imap.Tag : StringParameter, Gee.Hashable<Geary.Imap.Tag> {
|
||||
public const string UNTAGGED_VALUE = "*";
|
||||
public const string CONTINUATION_VALUE = "+";
|
||||
public const string UNASSIGNED_VALUE = "----";
|
||||
|
|
@ -54,15 +54,11 @@ public class Geary.Imap.Tag : StringParameter, Hashable, Equalable {
|
|||
return (value != UNASSIGNED_VALUE) && (value != CONTINUATION_VALUE);
|
||||
}
|
||||
|
||||
public uint to_hash() {
|
||||
public uint hash() {
|
||||
return str_hash(value);
|
||||
}
|
||||
|
||||
public bool equals(Equalable e) {
|
||||
Tag? tag = e as Tag;
|
||||
if (tag == null)
|
||||
return false;
|
||||
|
||||
public bool equal_to(Geary.Imap.Tag tag) {
|
||||
if (this == tag)
|
||||
return true;
|
||||
|
||||
|
|
|
|||
|
|
@ -89,8 +89,7 @@ public class Geary.Imap.ClientConnection : BaseObject {
|
|||
private char tag_prefix = 'a';
|
||||
private uint flush_timeout_id = 0;
|
||||
private bool idle_when_quiet = false;
|
||||
private Gee.HashSet<Tag> posted_idle_tags = new Gee.HashSet<Tag>(Hashable.hash_func,
|
||||
Equalable.equal_func);
|
||||
private Gee.HashSet<Tag> posted_idle_tags = new Gee.HashSet<Tag>();
|
||||
private uint timeout_id = 0;
|
||||
private uint timeout_cmd_count = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -181,10 +181,8 @@ public class Geary.Imap.ClientSession : BaseObject {
|
|||
private ClientConnection? cx = null;
|
||||
private string? current_mailbox = null;
|
||||
private bool current_mailbox_readonly = false;
|
||||
private Gee.HashMap<Tag, CommandCallback> tag_cb = new Gee.HashMap<Tag, CommandCallback>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashMap<Tag, CommandResponse> tag_response = new Gee.HashMap<Tag, CommandResponse>(
|
||||
Hashable.hash_func, Equalable.equal_func);
|
||||
private Gee.HashMap<Tag, CommandCallback> tag_cb = new Gee.HashMap<Tag, CommandCallback>();
|
||||
private Gee.HashMap<Tag, CommandResponse> tag_response = new Gee.HashMap<Tag, CommandResponse>();
|
||||
private Capabilities capabilities = new Capabilities(0);
|
||||
private int next_capabilities_revision = 1;
|
||||
private CommandResponse current_cmd_response = new CommandResponse();
|
||||
|
|
@ -1311,7 +1309,7 @@ public class Geary.Imap.ClientSession : BaseObject {
|
|||
assert(removed);
|
||||
|
||||
assert(cmd_response.is_sealed());
|
||||
assert(cmd_response.status_response.tag.equals(cmd.tag));
|
||||
assert(cmd_response.status_response.tag.equal_to(cmd.tag));
|
||||
|
||||
if (!imap_server_pipeline && claim_stub != NonblockingMutex.INVALID_TOKEN) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ public class Geary.NonblockingMailbox<G> : BaseObject {
|
|||
if (comparator == null)
|
||||
queue = new Gee.LinkedList<G>();
|
||||
else
|
||||
queue = new Gee.PriorityQueue<G>(comparator);
|
||||
queue = new Gee.PriorityQueue<G>();
|
||||
}
|
||||
|
||||
public bool send(G msg) {
|
||||
|
|
|
|||
|
|
@ -97,7 +97,8 @@ public class Geary.RFC822.MessageIDList : Geary.Common.MessageData, Geary.RFC822
|
|||
}
|
||||
}
|
||||
|
||||
public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.Common.MessageData, Equalable, Hashable {
|
||||
public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.Common.MessageData,
|
||||
Gee.Hashable<Geary.RFC822.Date> {
|
||||
public string original { get; private set; }
|
||||
public DateTime value { get; private set; }
|
||||
public time_t as_time_t { get; private set; }
|
||||
|
|
@ -111,18 +112,14 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.Common.MessageD
|
|||
original = iso8601;
|
||||
}
|
||||
|
||||
public virtual bool equals(Equalable e) {
|
||||
RFC822.Date? other = e as RFC822.Date;
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
public virtual bool equal_to(Geary.RFC822.Date other) {
|
||||
if (this == other)
|
||||
return true;
|
||||
|
||||
return value.equal(other.value);
|
||||
}
|
||||
|
||||
public virtual uint to_hash() {
|
||||
public virtual uint hash() {
|
||||
return value.hash();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public string reply_references(Geary.Email source) {
|
|||
|
||||
// 2. If there's an In-Reply-To Message-ID and it's not the last Message-ID on the
|
||||
// References list, append it
|
||||
if (source.in_reply_to != null && list.size > 0 && !list.last().equals(source.in_reply_to))
|
||||
if (source.in_reply_to != null && list.size > 0 && !list.last().equal_to(source.in_reply_to))
|
||||
list.add(source.in_reply_to);
|
||||
|
||||
// 3. Append the source's Message-ID, if available.
|
||||
|
|
|
|||
|
|
@ -31,11 +31,45 @@ public bool are_sets_equal<G>(Gee.Set<G> a, Gee.Set<G> b) {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* To be used by a Hashable's to_hash() method.
|
||||
*/
|
||||
public static uint int64_hash(int64 value) {
|
||||
return hash_memory(&value, sizeof(int64));
|
||||
}
|
||||
|
||||
/**
|
||||
* To be used as a raw HashFunc where an int64 is being stored directly.
|
||||
*/
|
||||
public static uint bare_int64_hash(void *ptr) {
|
||||
return hash_memory(ptr, sizeof(int64));
|
||||
}
|
||||
|
||||
/**
|
||||
* A HashFunc for DateTime.
|
||||
*/
|
||||
public static uint date_time_hash(void *a) {
|
||||
return ((DateTime) a).hash();
|
||||
}
|
||||
|
||||
/**
|
||||
* A rotating-XOR hash that can be used to hash memory buffers of any size. Use only if
|
||||
* equality is determined by memory contents.
|
||||
*/
|
||||
public static uint hash_memory(void *ptr, size_t bytes) {
|
||||
uint8 *u8 = (uint8 *) ptr;
|
||||
uint hash = 0;
|
||||
for (int ctr = 0; ctr < bytes; ctr++)
|
||||
hash = (hash << 4) ^ (hash >> 28) ^ (*u8++);
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
// This *must* be used in place of Gee,TreeSet until the fix for this bug is widely distributed:
|
||||
// https://bugzilla.gnome.org/show_bug.cgi?id=695045
|
||||
public class FixedTreeSet<G> : Gee.TreeSet<G> {
|
||||
public FixedTreeSet(CompareFunc? compare_func = null) {
|
||||
base (compare_func);
|
||||
public FixedTreeSet(owned GLib.CompareDataFunc<G>? compare_func = null) {
|
||||
base ( (owned) compare_func);
|
||||
}
|
||||
|
||||
~FixedTreeSet() {
|
||||
|
|
|
|||
|
|
@ -54,5 +54,27 @@ public async void recursive_delete_async(File folder, Cancellable? cancellable =
|
|||
}
|
||||
}
|
||||
|
||||
public uint hash(File file) {
|
||||
return file.hash();
|
||||
}
|
||||
|
||||
public bool equal(File a, File b) {
|
||||
return a.equal(b);
|
||||
}
|
||||
|
||||
public uint nullable_hash(File? file) {
|
||||
return (file != null) ? file.hash() : 0;
|
||||
}
|
||||
|
||||
public bool nullable_equal(File? a, File? b) {
|
||||
if (a == null && b == null)
|
||||
return true;
|
||||
|
||||
if (a == null || b == null)
|
||||
return false;
|
||||
|
||||
return a.equal(b);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,11 @@ public class Geary.GenericCapabilities : BaseObject {
|
|||
public string name_separator { get; private set; }
|
||||
public string? value_separator { get; private set; }
|
||||
|
||||
// All params must be nullable to support both libgee 0.8.0 and 0.8.6 (for Quantal and Rarring, respectively.)
|
||||
// This behavior was changed in the following libgee commit:
|
||||
// https://git.gnome.org/browse/libgee/commit/?id=5a35303cb04154d0e929a7d8895d4a4812ba7a1c
|
||||
private Gee.HashMultiMap<string, string?> map = new Gee.HashMultiMap<string, string?>(
|
||||
String.stri_hash, String.stri_equal, String.nullable_stri_hash, String.nullable_stri_equal);
|
||||
String.nullable_stri_hash, String.nullable_stri_equal, String.nullable_stri_hash, String.nullable_stri_equal);
|
||||
|
||||
/**
|
||||
* Creates an empty set of capabilities.
|
||||
|
|
|
|||
|
|
@ -41,82 +41,3 @@ public interface Geary.Comparable {
|
|||
}
|
||||
}
|
||||
|
||||
public interface Geary.Equalable {
|
||||
public abstract bool equals(Equalable other);
|
||||
|
||||
/**
|
||||
* An EqualFunc for any object that implements Equalable.
|
||||
*/
|
||||
public static bool equal_func(void *a, void *b) {
|
||||
return ((Equalable *) a)->equals((Equalable *) b);
|
||||
}
|
||||
|
||||
/**
|
||||
* EqualFunc for nullable objects that implement Equalable.
|
||||
*/
|
||||
public static bool nullable_equal_func(void *a, void *b) {
|
||||
if (a == null || b == null)
|
||||
return (a == null && b == null);
|
||||
return equal_func(a, b);
|
||||
}
|
||||
|
||||
/**
|
||||
* The EqualsFunc counterpart to Hashable.bare_int64_hash().
|
||||
*/
|
||||
public static bool bare_int64_equals(void *a, void *b) {
|
||||
return *((int64 *) a) == *((int64 *) b);
|
||||
}
|
||||
|
||||
/**
|
||||
* An EqualFunc for DateTime.
|
||||
*/
|
||||
public static bool date_time_equal(void *a, void *b) {
|
||||
return ((DateTime) a).equal((DateTime) b);
|
||||
}
|
||||
}
|
||||
|
||||
public interface Geary.Hashable {
|
||||
public abstract uint to_hash();
|
||||
|
||||
/**
|
||||
* A HashFunc for any object that implements Hashable.
|
||||
*/
|
||||
public static uint hash_func(void *ptr) {
|
||||
return ((Hashable *) ptr)->to_hash();
|
||||
}
|
||||
|
||||
/**
|
||||
* To be used by a Hashable's to_hash() method.
|
||||
*/
|
||||
public static uint int64_hash(int64 value) {
|
||||
return hash_memory(&value, sizeof(int64));
|
||||
}
|
||||
|
||||
/**
|
||||
* To be used as a raw HashFunc where an int64 is being stored directly.
|
||||
*/
|
||||
public static uint bare_int64_hash(void *ptr) {
|
||||
return hash_memory(ptr, sizeof(int64));
|
||||
}
|
||||
|
||||
/**
|
||||
* A HashFunc for DateTime.
|
||||
*/
|
||||
public static uint date_time_hash(void *a) {
|
||||
return ((DateTime) a).hash();
|
||||
}
|
||||
|
||||
/**
|
||||
* A rotating-XOR hash that can be used to hash memory buffers of any size. Use only if
|
||||
* equality is determined by memory contents.
|
||||
*/
|
||||
public static uint hash_memory(void *ptr, size_t bytes) {
|
||||
uint8 *u8 = (uint8 *) ptr;
|
||||
uint hash = 0;
|
||||
for (int ctr = 0; ctr < bytes; ctr++)
|
||||
hash = (hash << 4) ^ (hash >> 28) ^ (*u8++);
|
||||
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,10 @@
|
|||
* Singleton is a simple way of creating a one-item read-only collection.
|
||||
*/
|
||||
private class Geary.Singleton<G> : Gee.AbstractCollection<G> {
|
||||
private class IteratorImpl<G> : BaseObject, Gee.Iterator<G> {
|
||||
private class IteratorImpl<G> : BaseObject, Gee.Traversable<G>, Gee.Iterator<G> {
|
||||
public bool read_only { get { return true; } }
|
||||
public bool valid { get { return !done; } }
|
||||
|
||||
private G item;
|
||||
private bool done = false;
|
||||
|
||||
|
|
@ -16,12 +19,6 @@ private class Geary.Singleton<G> : Gee.AbstractCollection<G> {
|
|||
this.item = item;
|
||||
}
|
||||
|
||||
public bool first() {
|
||||
done = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public new G? get() {
|
||||
return item;
|
||||
}
|
||||
|
|
@ -41,23 +38,27 @@ private class Geary.Singleton<G> : Gee.AbstractCollection<G> {
|
|||
|
||||
public void remove() {
|
||||
message("Geary.Singleton is read-only");
|
||||
}
|
||||
}
|
||||
|
||||
public new bool @foreach(Gee.ForallFunc<G> f) {
|
||||
return f(item);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool read_only { get { return true; } }
|
||||
public G item { get; private set; }
|
||||
public override int size { get { return 1; } }
|
||||
|
||||
private EqualFunc equal_func;
|
||||
private Gee.EqualDataFunc equal_func;
|
||||
|
||||
public Singleton(G item, EqualFunc? equal_func = null) {
|
||||
public Singleton(G item, owned Gee.EqualDataFunc? equal_func = null) {
|
||||
this.item = item;
|
||||
|
||||
if (equal_func != null)
|
||||
this.equal_func = equal_func;
|
||||
else if (typeof(G).is_a(typeof(Geary.Equalable)))
|
||||
this.equal_func = Geary.Equalable.equal_func;
|
||||
else
|
||||
this.equal_func = (owned) equal_func;
|
||||
else {
|
||||
this.equal_func = Gee.Functions.get_equal_func_for(typeof(G));
|
||||
}
|
||||
}
|
||||
|
||||
public override bool add(G element) {
|
||||
|
|
|
|||
|
|
@ -48,23 +48,23 @@ public inline bool ascii_equali(string a, string b) {
|
|||
return ascii_cmpi(a, b) == 0;
|
||||
}
|
||||
|
||||
public uint stri_hash(void *str) {
|
||||
return str_hash(((string *) str)->down());
|
||||
public uint stri_hash(string str) {
|
||||
return str_hash(str.down());
|
||||
}
|
||||
|
||||
public uint nullable_stri_hash(void *str) {
|
||||
public uint nullable_stri_hash(string? str) {
|
||||
return (str != null) ? stri_hash(str) : 0;
|
||||
}
|
||||
|
||||
public bool stri_equal(void *a, void *b) {
|
||||
return str_equal(((string *) a)->down(), ((string *) b)->down());
|
||||
public bool stri_equal(string a, string b) {
|
||||
return str_equal(a.down(), b.down());
|
||||
}
|
||||
|
||||
public bool equals_ci(string a, string b) {
|
||||
return a.down() == b.down();
|
||||
}
|
||||
|
||||
public bool nullable_stri_equal(void *a, void *b) {
|
||||
public bool nullable_stri_equal(string? a, string? b) {
|
||||
if (a == null)
|
||||
return (b == null);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue