Browse Source

Set first the chatrooms with unread messages

pull/978/head
Timothée Jaussoin 5 years ago
parent
commit
ef7492867b
  1. 1
      CHANGELOG.md
  2. 13
      app/widgets/Rooms/Rooms.php
  3. 1
      app/widgets/Rooms/_rooms_room.tpl
  4. 4
      app/widgets/Rooms/rooms.css
  5. 10
      app/widgets/Rooms/rooms.js
  6. 18
      public/scripts/movim_websocket.js
  7. 2
      src/Movim/RPC.php

1
CHANGELOG.md

@ -25,6 +25,7 @@ v0.18.1 (trunk)
* Rename Communities page in Explore
* Add WebM and H264 video embedding support in the Chat
* Add Tenor support for GIF/videos search and integration in Chat
* Set first the chatrooms with unread messages
v0.18
---------------------------

13
app/widgets/Rooms/Rooms.php

@ -56,11 +56,13 @@ class Rooms extends Base
{
$message = $packet->content;
$chatStates = ChatStates::getInstance();
$chatStates->clearState($message->jidfrom, $message->resource);
if ($message->type == 'groupchat') {
$chatStates = ChatStates::getInstance();
$chatStates->clearState($message->jidfrom, $message->resource);
$this->onChatState($chatStates->getState($message->jidfrom));
$this->setCounter($message->jidfrom);
$this->onChatState($chatStates->getState($message->jidfrom));
$this->setCounter($message->jidfrom);
}
}
public function onDestroyed($packet)
@ -143,6 +145,9 @@ class Rooms extends Base
'#' . cleanupId($room.'_rooms_primary'),
$this->prepareRoomCounter($conference, $conference->getPhoto())
);
$unread = ($conference->unreads_count > 0 || $conference->quoted_count > 0);
$this->rpc('Rooms.setUnread', cleanupId($room), $unread);
}
}

1
app/widgets/Rooms/_rooms_room.tpl

@ -4,6 +4,7 @@
class="room
{if="$conference->connected"}connected{/if}
{if="$conference->isGroupChat()"}groupchat{/if}
{if="$conference->unreads_count > 0 || $conference->quoted_count > 0"}unread{/if}
">
{$url = $conference->getPhoto()}
{if="$url"}

4
app/widgets/Rooms/rooms.css

@ -31,6 +31,10 @@
opacity: 0.5;
}
#rooms_widget ul.list.rooms li.connected.unread {
order: -1;
}
#rooms_widget ul.list.rooms li.connected {
order: 1;
}

10
app/widgets/Rooms/rooms.js

@ -98,6 +98,16 @@ var Rooms = {
}
Rooms.refresh();
},
setUnread: function(id, unread) {
var element = document.querySelector('#rooms_widget ul.list.rooms #' + id);
if (unread) {
element.classList.add('unread');
} else {
element.classList.remove('unread');
}
}
}

18
public/scripts/movim_websocket.js

@ -103,11 +103,11 @@ var MovimWebsocket = {
var obj = JSON.parse(e.data);
if (obj != null) {
if (obj.f == 'registered') {
if (obj.func == 'registered') {
MovimWebsocket.launchRegistered();
}
if (obj.f == 'started') {
if (obj.func == 'started') {
// If the linker was started but we're not on the login page
if (!['login', 'account', 'accountnext', 'tag', 'admin', 'adminlogin', 'about'].includes(MovimUtils.urlParts().page)) {
MovimUtils.disconnect();
@ -116,11 +116,11 @@ var MovimWebsocket = {
}
}
if (obj.f == 'disconnected') {
if (obj.func == 'disconnected') {
MovimUtils.disconnect();
}
if (obj.f == 'pong') {
if (obj.func == 'pong') {
MovimWebsocket.pong = true;
}
@ -254,20 +254,20 @@ var MovimWebsocket = {
},
handle : function(funcall) {
if (funcall.f != null && (typeof window[funcall.f] == 'function')) {
if (funcall.func != null && (typeof window[funcall.func] == 'function')) {
try {
window[funcall.f].apply(null, funcall.p);
window[funcall.func].apply(null, funcall.p);
} catch(err) {
console.log("Error caught: "
+ err.toString()
+ " - "
+ funcall.f
+ funcall.func
+ ":"
+ JSON.stringify(funcall.p)
);
}
} else if (funcall.f != null) {
var funcs = funcall.f.split('.');
} else if (funcall.func != null) {
var funcs = funcall.func.split('.');
var called = funcs[0];
if (typeof window[called] == 'object'
&& typeof window[funcs[0]][funcs[1]] != 'undefined') {

2
src/Movim/RPC.php

@ -11,7 +11,7 @@ class RPC
public static function call($funcname, ...$args)
{
$payload = [
'f' => $funcname
'func' => $funcname
];
if (!empty($args)) {

Loading…
Cancel
Save