Skip to content

Commit

Permalink
Show contact status in "Start chat" window
Browse files Browse the repository at this point in the history
should close dino#139
- adds svg dino-status-offline.svg
  • Loading branch information
eerielili committed Jan 10, 2024
1 parent 85ea7e5 commit e5f12d9
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions main/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ set(RESOURCE_LIST
icons/scalable/status/dino-status-chat.svg
icons/scalable/status/dino-status-dnd.svg
icons/scalable/status/dino-status-online.svg
icons/scalable/status/dino-status-offline.svg
icons/scalable/status/dino-tick-symbolic.svg
icons/scalable/status/dino-video-off-symbolic.svg
icons/scalable/status/dino-video-symbolic.svg
Expand Down
9 changes: 9 additions & 0 deletions main/data/add_conversation/list_row.ui
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkImage" id="status_dot">
<property name="pixel-size">10</property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</layout>
</object>
</child>
<child>
<object class="GtkGrid">
<property name="valign">center</property>
Expand Down
1 change: 1 addition & 0 deletions main/data/gresource.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
<file>icons/scalable/status/dino-status-chat.svg</file>
<file>icons/scalable/status/dino-status-dnd.svg</file>
<file>icons/scalable/status/dino-status-online.svg</file>
<file>icons/scalable/status/dino-status-offline.svg</file>
<file>icons/scalable/status/dino-tick-symbolic.svg</file>
<file>icons/scalable/status/dino-video-off-symbolic.svg</file>
<file>icons/scalable/status/dino-video-symbolic.svg</file>
Expand Down
6 changes: 6 additions & 0 deletions main/data/icons/scalable/status/dino-status-offline.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions main/src/ui/add_conversation/conference_list.vala
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ internal class ConferenceListRow : ListRow {
this.account = account;
this.bookmark = bookmark;

status_dot.visible = false;
name_label.label = bookmark.name != null && bookmark.name != "" ? bookmark.name : bookmark.jid.to_string();
if (stream_interactor.get_accounts().size > 1) {
via_label.label = "via " + account.bare_jid.to_string();
Expand Down
27 changes: 27 additions & 0 deletions main/src/ui/add_conversation/list_row.vala
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class ListRow : Widget {
public Grid outer_grid;
public AvatarPicture picture;
public Label name_label;
public Image status_dot;
public Label via_label;

public Jid? jid;
Expand All @@ -21,14 +22,39 @@ public class ListRow : Widget {
outer_grid = (Grid) builder.get_object("outer_grid");
picture = (AvatarPicture) builder.get_object("picture");
name_label = (Label) builder.get_object("name_label");
status_dot = (Image) builder.get_object("status_dot");
via_label = (Label) builder.get_object("via_label");


this.layout_manager = new BinLayout();
outer_grid.set_parent(this);
}

public ListRow() {}

private void set_status_dot(StreamInteractor stream_interactor, Jid jid, Account account){
Gee.List<Jid>? full_jids = stream_interactor.get_module(PresenceManager.IDENTITY).get_full_jids(jid, account);
string presence_str = null;
if (full_jids != null){
int devices = 0;
string newline_if_more_devices;
for (int i = 0; i < full_jids.size; i++) {
Jid full_jid = full_jids[i];
presence_str = stream_interactor.get_module(PresenceManager.IDENTITY).get_last_show(full_jid, account);
if(presence_str != null) devices += 1;
newline_if_more_devices = devices > 1 ? "\r\n" : "";
switch(presence_str){
case "dnd": this.status_dot.set_from_icon_name("dino-status-dnd"); i = full_jids.size; break; // dnd detected = marked as dnd for all devices
case "online": this.status_dot.set_from_icon_name("dino-status-online"); i = full_jids.size; break;
case "away": this.status_dot.set_from_icon_name("dino-status-away"); break;
case "xa": this.status_dot.set_from_icon_name("dino-status-away"); break;
case "chat": this.status_dot.set_from_icon_name("dino-status-chat"); break;
}
}
}
else status_dot.set_from_icon_name("dino-status-offline");
}

public ListRow.from_jid(StreamInteractor stream_interactor, Jid jid, Account account, bool show_account) {
this.jid = jid;
this.account = account;
Expand All @@ -46,6 +72,7 @@ public class ListRow : Widget {
}
name_label.label = display_name;
picture.model = new ViewModel.CompatAvatarPictureModel(stream_interactor).set_conversation(conv);
set_status_dot(stream_interactor, jid, account);
}

public override void dispose() {
Expand Down

0 comments on commit e5f12d9

Please sign in to comment.