parent
14bc3d6717
commit
117f193812
|
@ -15,12 +15,14 @@ protected class ConferenceList {
|
||||||
|
|
||||||
private ListBox list_box = new ListBox();
|
private ListBox list_box = new ListBox();
|
||||||
private HashMap<Account, Set<Conference>> lists = new HashMap<Account, Set<Conference>>(Account.hash_func, Account.equals_func);
|
private HashMap<Account, Set<Conference>> lists = new HashMap<Account, Set<Conference>>(Account.hash_func, Account.equals_func);
|
||||||
private HashMap<Account, HashMap<Jid, Widget>> widgets = new HashMap<Account, HashMap<Jid, Widget>>(Account.hash_func, Account.equals_func);
|
private HashMap<Account, HashMap<Jid, ListBoxRow>> widgets = new HashMap<Account, HashMap<Jid, ListBoxRow>>(Account.hash_func, Account.equals_func);
|
||||||
|
|
||||||
|
ulong bookmarks_updated_handler_id = -1;
|
||||||
|
|
||||||
public ConferenceList(StreamInteractor stream_interactor) {
|
public ConferenceList(StreamInteractor stream_interactor) {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
|
|
||||||
stream_interactor.get_module(MucManager.IDENTITY).bookmarks_updated.connect((account, conferences) => {
|
bookmarks_updated_handler_id = stream_interactor.get_module(MucManager.IDENTITY).bookmarks_updated.connect((account, conferences) => {
|
||||||
lists[account] = conferences;
|
lists[account] = conferences;
|
||||||
refresh_conferences();
|
refresh_conferences();
|
||||||
});
|
});
|
||||||
|
@ -36,13 +38,21 @@ protected class ConferenceList {
|
||||||
stream_interactor.get_module(MucManager.IDENTITY).conference_removed.connect(remove_conference);
|
stream_interactor.get_module(MucManager.IDENTITY).conference_removed.connect(remove_conference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~ConferenceList() {
|
||||||
|
stream_interactor.get_module(MucManager.IDENTITY).disconnect(bookmarks_updated_handler_id);
|
||||||
|
stream_interactor.get_module(MucManager.IDENTITY).conference_added.disconnect(add_conference);
|
||||||
|
stream_interactor.get_module(MucManager.IDENTITY).conference_removed.disconnect(remove_conference);
|
||||||
|
}
|
||||||
|
|
||||||
private void add_conference(Account account, Conference conference) {
|
private void add_conference(Account account, Conference conference) {
|
||||||
if (!widgets.has_key(account)) {
|
if (!widgets.has_key(account)) {
|
||||||
widgets[account] = new HashMap<Jid, Widget>(Jid.hash_func, Jid.equals_func);
|
widgets[account] = new HashMap<Jid, ListBoxRow>(Jid.hash_func, Jid.equals_func);
|
||||||
}
|
}
|
||||||
var widget = new ConferenceListRow(stream_interactor, conference, account);
|
var widget = new ConferenceListRow(stream_interactor, conference, account);
|
||||||
widgets[account][conference.jid] = widget;
|
var list_box_row = new ListBoxRow();
|
||||||
list_box.append(widget);
|
list_box_row.set_child(widget);
|
||||||
|
widgets[account][conference.jid] = list_box_row;
|
||||||
|
list_box.append(list_box_row);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void remove_conference(Account account, Jid jid) {
|
private void remove_conference(Account account, Jid jid) {
|
||||||
|
@ -54,7 +64,11 @@ protected class ConferenceList {
|
||||||
|
|
||||||
public void refresh_conferences() {
|
public void refresh_conferences() {
|
||||||
foreach (Account account in widgets.keys) {
|
foreach (Account account in widgets.keys) {
|
||||||
foreach (Jid jid in widgets[account].keys) {
|
|
||||||
|
var account_widgets_cpy = new HashMap<Jid, ListBoxRow>();
|
||||||
|
account_widgets_cpy.set_all(widgets[account]);
|
||||||
|
|
||||||
|
foreach (Jid jid in account_widgets_cpy.keys) {
|
||||||
remove_conference(account, jid);
|
remove_conference(account, jid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,11 @@ public class SelectJidFragment : Gtk.Box {
|
||||||
list.row_selected.connect(() => { done = true; }); // just for notifying
|
list.row_selected.connect(() => { done = true; }); // just for notifying
|
||||||
entry.changed.connect(() => { set_filter(entry.text); });
|
entry.changed.connect(() => { set_filter(entry.text); });
|
||||||
add_button.clicked.connect(() => { add_jid(); });
|
add_button.clicked.connect(() => { add_jid(); });
|
||||||
remove_button.clicked.connect(() => { remove_jid(list.get_selected_row() as ListRow); });
|
remove_button.clicked.connect(() => {
|
||||||
|
var list_row = list.get_selected_row();
|
||||||
|
if (list_row == null) return;
|
||||||
|
remove_jid(list_row.child as ListRow);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set_filter(string str) {
|
public void set_filter(string str) {
|
||||||
|
|
Loading…
Reference in a new issue