1
0
mirror of https://github.com/nerzhul/ocsms.git synced 2025-06-07 16:06:15 +00:00

Implement Refresh conversation list and set new messages count into list

This commit is contained in:
Loic Blot 2014-10-23 10:38:11 +00:00
parent a09faa67ad
commit 6d26edb727
4 changed files with 93 additions and 4 deletions

View File

@ -21,5 +21,6 @@ $application->registerRoutes($this, array('routes' => array(
array('name' => 'sms#retrieve_all_ids_with_status', 'url' => '/get/smsidstate', 'verb' => 'GET'),
array('name' => 'sms#retrieve_all_peers', 'url' => '/get/peerlist', 'verb' => 'GET'),
array('name' => 'sms#get_conversation', 'url' => '/get/conversation', 'verb' => 'GET'),
array('name' => 'sms#check_new_messages', 'url' => '/get/new_messages', 'verb' => 'GET'),
array('name' => 'sms#get_api_version', 'url' => '/get/apiversion', 'verb' => 'GET'),
)));

View File

@ -170,6 +170,28 @@ class SmsController extends Controller {
"phoneNumbers" => $phoneNumbers, "msgCount" => $msgCount));
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*/
public function checkNewMessages($lastDate) {
$phoneList = $this->smsMapper->getNewMessagesCountForAllPhonesNumbers($this->userId, $lastDate);
$contactsSrc = $this->app->getContacts();
$contacts = array();
$countPhone = count($phoneList);
foreach ($phoneList as $number => $ts) {
$fmtPN = preg_replace("#[ ]#","/", $number);
if (isset($contactsSrc[$fmtPN])) {
$fmtPN2 = preg_replace("#\/#","", $fmtPN);
$contacts[$fmtPN] = $contactsSrc[$fmtPN];
$contacts[$fmtPN2] = $contactsSrc[$fmtPN];
}
}
return new JSONResponse(array("phonelist" => $phoneList, "contacts" => $contacts));
}
/**
* @NoAdminRequired
*/

View File

@ -133,6 +133,23 @@ class SmsMapper extends Mapper {
return $phoneList;
}
public function getNewMessagesCountForAllPhonesNumbers($userId, $lastDate) {
$sql = 'SELECT sms_address,count(sms_date) as ct FROM ' .
'*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_mailbox IN (?,?) ' .
'AND sms_date > ? GROUP BY sms_address';
$query = \OCP\DB::prepare($sql);
$result = $query->execute(array($userId, 0, 1, $lastDate));
$phoneList = array();
while ($row = $result->fetchRow()) {
$phoneNumber = preg_replace("#[ ]#", "/", $row["sms_address"]);
if (!in_array($phoneNumber, $phoneList)) {
$phoneList[$phoneNumber] = $row["ct"];
}
}
return $phoneList;
}
public function writeToDB ($userId, $smsList, $purgeAllSmsBeforeInsert = false) {
\OCP\DB::beginTransaction();

View File

@ -63,6 +63,53 @@ var refreshConversation = function() {
);
};
var checkNewMessages = function() {
$.getJSON(OC.generateUrl('/apps/ocsms/get/new_messages'),
{ 'lastDate': lastMsgDate },
function(jsondata, status) {
var peerListBuf = '';
var bufferedContacts = [];
$.each(jsondata['phonelist'], function(id, val) {
var fn, peerLabel, idxVal;
idxVal = id.replace(/\//g,' ');
idxVal2 = idxVal.replace('/ /g','');
if (typeof jsondata['contacts'][id] == 'undefined') {
fn = '';
peerLabel = id;
}
else {
fn = jsondata['contacts'][id];
peerLabel = fn;
}
if ($.inArray(peerLabel, bufferedContacts) == -1) {
$("a[mailbox-label='" + peerLabel + "']").remove();
peerListBuf = '<li><a href="#" mailbox-navigation="' + idxVal2 + '" style="font-weight: bold;" mailbox-label="' + peerLabel + '">' + peerLabel + ' (' + val + ')</a></li>';
$('#app-mailbox-peers ul').prepend(peerListBuf);
bufferedContacts.push(peerLabel);
if (idxVal == curPhoneNumber) {
changeSelectedConversation($("a[mailbox-navigation='" + idxVal + "']"));
}
// Now bind the events when we click on the phone number
$("a[mailbox-navigation='" + idxVal + "']").on('click', function (event) {
var phoneNumber = $(this).attr('mailbox-navigation');
OC.Util.History.pushState('phonenumber=' + phoneNumber);
// phoneNumber must exist
if (phoneNumber != null) {
fetchConversation(phoneNumber);
changeSelectedConversation($(this));
}
event.preventDefault();
});
}
});
}
);
};
function setMessageCountInfo(jsondata) {
if (typeof jsondata['msgCount'] != 'undefined') {
if (jsondata['msgCount'] == 1) {
@ -153,7 +200,8 @@ function formatConversation(jsondata) {
}
// Store the greater msg date for refresher
if (id > lastMsgDate) {
// Note: we divide by 100 because number compare too large integers
if ((id/100) > (lastMsgDate/100)) {
lastMsgDate = id;
}
@ -188,6 +236,8 @@ function changeSelectedConversation(item) {
}
selectedConversation = item;
selectedConversation.parent().addClass('selected');
selectedConversation.css("font-weight", "normal");
selectedConversation.html(selectedConversation.attr("mailbox-label"));
}
function fetchInitialPeerList(jsondata) {
@ -209,7 +259,7 @@ function fetchInitialPeerList(jsondata) {
peerLabel = fn;
}
if ($.inArray(peerLabel, bufferedContacts) == -1) {
peerListBuf += '<li><a href="#" mailbox-navigation="' + idxVal + '">' + peerLabel + '</a></li>';
peerListBuf += '<li><a href="#" mailbox-navigation="' + idxVal2 + '" mailbox-label="' + peerLabel + '">' + peerLabel + '</a></li>';
bufferedContacts.push(peerLabel);
}
});
@ -260,8 +310,6 @@ function desktopNotify(msg) {
$('#app-mailbox-peers').find('a[mailbox-navigation]').on('click', function (event) {
var phoneNumber = $(this).attr('mailbox-navigation');
OC.Util.History.pushState('phonenumber=' + phoneNumber);
// Reset it for refreshConversation
lastMsgDate = 0;
// phoneNumber must exist
if (phoneNumber != null) {
@ -293,6 +341,7 @@ function desktopNotify(msg) {
});
initDesktopNotifies();
setInterval(refreshConversation, 10000);
setInterval(checkNewMessages, 10000);
});
// reset count and title