diff --git a/app/widgets/ContactActions/contactactions.js b/app/widgets/ContactActions/contactactions.js
index 8a678fb8d..a4f321bec 100644
--- a/app/widgets/ContactActions/contactactions.js
+++ b/app/widgets/ContactActions/contactactions.js
@@ -13,19 +13,19 @@ var ContactActions = {
button.remove();
ContactActions_ajaxHttpGetLinks(jid, page);
},
- resolveSessionsStates : function(jid) {
+ resolveSessionsStates : function(jid, room = false) {
var store = new ChatOmemoStorage();
store.getSessionsIds(jid).map(id => {
store.getSessionState(jid + '.' + id).then(state => {
if (state) {
- let icon = document.querySelector('span#sessionicon_' + id);
+ let icon = document.querySelector('span#sessionicon_' + MovimUtils.cleanupId(jid) + '_' + id);
if (icon) {
icon.classList.remove('blue');
icon.classList.add('blue');
}
- let checkbox = document.querySelector('input[name=sessionstate_' + id + ']');
+ let checkbox = document.querySelector('input[name=sessionstate_' + MovimUtils.cleanupId(jid) + '_'+ id + ']');
if (checkbox) {
checkbox.checked = true;
@@ -34,11 +34,13 @@ var ContactActions = {
})
});
- store.getContactState(jid).then(enabled => {
- if (!enabled) {
- document.querySelector('#omemo_fingerprints ul.list').classList.add('disabled');
- }
- });
+ if (room == false) {
+ store.getContactState(jid).then(enabled => {
+ if (!enabled) {
+ document.querySelector('#omemo_fingerprints ul.list').classList.add('disabled');
+ }
+ });
+ }
},
toggleFingerprintState : function(checkbox) {
var store = new ChatOmemoStorage();
diff --git a/app/widgets/RoomsUtils/RoomsUtils.php b/app/widgets/RoomsUtils/RoomsUtils.php
index 5b3577f78..7a7322311 100644
--- a/app/widgets/RoomsUtils/RoomsUtils.php
+++ b/app/widgets/RoomsUtils/RoomsUtils.php
@@ -16,6 +16,7 @@ use Movim\Widget\Base;
use Movim\Image;
use App\Conference;
+use App\Contact;
use App\Info;
use Respect\Validation\Validator;
@@ -93,6 +94,14 @@ class RoomsUtils extends Base
$view->assign('me', $this->user->id);
+ $hasFingerprints = ($this->user->bundles()->whereIn('jid', function ($query) use ($room) {
+ $query->select('jid')
+ ->from('members')
+ ->where('conference', $room);
+ })->count() > 0);
+
+ $view->assign('hasfingerprints', $hasFingerprints);
+
Drawer::fill($view->draw('_rooms_drawer'));
$this->rpc('Tabs.create');
@@ -103,6 +112,37 @@ class RoomsUtils extends Base
if ($linksCount > 0) {
$this->rpc('RoomsUtils_ajaxHttpGetLinks', $room);
}
+
+ if ($hasFingerprints) {
+ $this->rpc('RoomsUtils.getDrawerFingerprints', $room);
+ }
+ }
+
+ public function ajaxGetDrawerFingerprints($room, $deviceId)
+ {
+ $fingerprints = $this->user->bundles()
+ ->whereIn('jid', function ($query) use ($room) {
+ $query->select('jid')
+ ->from('members')
+ ->where('conference', $room);
+ })
+ ->with('capability.identities')
+ ->get()
+ ->mapToGroups(function ($tuple) {
+ return [$tuple['jid'] => $tuple];
+ });
+
+ $tpl = $this->tpl();
+ $tpl->assign('fingerprints', $fingerprints);
+ $tpl->assign('deviceid', $deviceId);
+ $tpl->assign('clienttype', getClientTypes());
+ $tpl->assign('contacts', Contact::whereIn('id', $fingerprints->keys())->get()->keyBy('id'));
+
+ $this->rpc('MovimTpl.fill', '#room_omemo_fingerprints', $tpl->draw('_rooms_drawer_fingerprints'));
+ foreach ($fingerprints as $jid => $value) {
+ $this->rpc('ContactActions.resolveSessionsStates', $jid, true);
+ }
+ $this->rpc('RoomsUtils.resolveRoomEncryptionState', $room);
}
/**
diff --git a/app/widgets/RoomsUtils/_rooms_drawer.tpl b/app/widgets/RoomsUtils/_rooms_drawer.tpl
index 4aeb42e0a..8ac67328d 100644
--- a/app/widgets/RoomsUtils/_rooms_drawer.tpl
+++ b/app/widgets/RoomsUtils/_rooms_drawer.tpl
@@ -391,4 +391,8 @@
{if="$conference->links()->count() > 0"}
{/if}
+
+ {if="$hasfingerprints"}
+
+ {/if}
\ No newline at end of file
diff --git a/app/widgets/RoomsUtils/_rooms_drawer_fingerprints.tpl b/app/widgets/RoomsUtils/_rooms_drawer_fingerprints.tpl
new file mode 100644
index 000000000..0dbda2a5d
--- /dev/null
+++ b/app/widgets/RoomsUtils/_rooms_drawer_fingerprints.tpl
@@ -0,0 +1,53 @@
+
diff --git a/app/widgets/RoomsUtils/roomsutils.js b/app/widgets/RoomsUtils/roomsutils.js
index f8438751a..bf1a7bbf3 100644
--- a/app/widgets/RoomsUtils/roomsutils.js
+++ b/app/widgets/RoomsUtils/roomsutils.js
@@ -1,4 +1,10 @@
var RoomsUtils = {
+ getDrawerFingerprints: function (room) {
+ var store = new ChatOmemoStorage();
+ store.getLocalRegistrationId().then(deviceId => {
+ RoomsUtils_ajaxGetDrawerFingerprints(room, deviceId);
+ });
+ },
morePictures(button, room, page) {
button.remove();
RoomsUtils_ajaxHttpGetPictures(room, page);
@@ -14,5 +20,13 @@ var RoomsUtils = {
setTimeout(e => {
Rooms_ajaxExit(room);
}, 2000)
+ },
+ resolveRoomEncryptionState(room) {
+ var store = new ChatOmemoStorage();
+ store.getContactState(room).then(enabled => {
+ if (!enabled) {
+ document.querySelector('#room_omemo_fingerprints ul.list').classList.add('disabled');
+ }
+ });
}
}
\ No newline at end of file
diff --git a/lib/moxl/src/Xec/Payload/Presence.php b/lib/moxl/src/Xec/Payload/Presence.php
index 8fd83a045..3a25d9b49 100644
--- a/lib/moxl/src/Xec/Payload/Presence.php
+++ b/lib/moxl/src/Xec/Payload/Presence.php
@@ -13,7 +13,7 @@ class Presence extends Payload
// Subscribe request
if ((string)$stanza->attributes()->type == 'subscribe') {
$session = Session::start();
- $notifs = $session->get('activenotifs');
+ $notifs = $session->get('activenotifs', []);
$notifs[(string)$stanza->attributes()->from] = 'sub';
$session->set('activenotifs', $notifs);