From 13d5e9ff268c2fb4aee04cc1a382ec26152500ae Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Thu, 25 Jun 2015 21:59:59 +0000 Subject: [PATCH] Fix messages/conversation removal sync with contact list and also add atomic delete for messages --- appinfo/routes.php | 2 +- controller/smscontroller.php | 5 +++++ db/smsmapper.php | 12 ++++++++++++ js/public/app.js | 28 ++++++++++++++++------------ templates/main.php | 2 +- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 8046f28..3a6d7c8 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -19,7 +19,7 @@ $application->registerRoutes($this, array('routes' => array( array('name' => 'sms#get_conversation', 'url' => '/get/conversation', 'verb' => 'GET'), array('name' => 'sms#delete_conversation', 'url' => '/delete/conversation', 'verb' => 'POST'), array('name' => 'sms#check_new_messages', 'url' => '/get/new_messages', 'verb' => 'GET'), - array('name' => 'sms#delete_message', 'url' => '/delete/message', 'verb' => 'GET'), + array('name' => 'sms#delete_message', 'url' => '/delete/message', 'verb' => 'POST'), array('name' => 'sms#set_country', 'url'=> '/set/country', 'verb' => 'POST'), array('name' => 'sms#get_country', 'url'=> '/get/country', 'verb' => 'GET'), diff --git a/controller/smscontroller.php b/controller/smscontroller.php index acb2391..53374e8 100644 --- a/controller/smscontroller.php +++ b/controller/smscontroller.php @@ -16,6 +16,7 @@ use \OCP\IRequest; use \OCP\AppFramework\Http\TemplateResponse; use \OCP\AppFramework\Controller; use \OCP\AppFramework\Http\JSONResponse; +use \OCP\AppFramework\Http; use \OCA\OcSms\AppInfo\OcSmsApp; @@ -217,6 +218,10 @@ class SmsController extends Controller { * @NoCSRFRequired */ public function deleteMessage ($messageId, $phoneNumber) { + if (!preg_match('#^[0-9]+$#',$messageId)) { + return new JSONResponse(array(), Http::STATUS_BAD_REQUEST); + } + $this->smsMapper->removeMessage($this->userId, $phoneNumber, $messageId); return new JSONResponse(array()); } diff --git a/db/smsmapper.php b/db/smsmapper.php index f41c1de..094d47a 100644 --- a/db/smsmapper.php +++ b/db/smsmapper.php @@ -181,6 +181,18 @@ class SmsMapper extends Mapper { \OCP\DB::commit(); } + /* + * WARN: messageId is sms_date here + */ + public function removeMessage ($userId, $phoneNumber, $messageId) { + \OCP\DB::beginTransaction(); + $query = \OCP\DB::prepare('DELETE FROM ' . + '*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_address = ? ' . + 'AND sms_date = ?'); + $query->execute(array($userId, $phoneNumber, $messageId)); + \OCP\DB::commit(); + } + public function getLastMessageTimestampForAllPhonesNumbers ($userId, $order = true) { $sql = 'SELECT sms_address,MAX(sms_date) as mx FROM ' . '*PREFIX*ocsms_smsdatas WHERE user_id = ? AND sms_mailbox IN (?,?) ' . diff --git a/js/public/app.js b/js/public/app.js index f50aaa7..b552e66 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -54,10 +54,8 @@ app.controller('OcSmsController', ['$scope', '$interval', '$timeout', '$compile' } }; $scope.fetchConversation = function (phoneNumber) { - $.getJSON(OC.generateUrl('/apps/ocsms/get/conversation'), - { - 'phoneNumber': phoneNumber - }, + $scope.messages = []; + $.getJSON(OC.generateUrl('/apps/ocsms/get/conversation'), {'phoneNumber': phoneNumber}, function(jsondata, status) { var phoneNumberLabel = phoneNumber; @@ -67,7 +65,6 @@ app.controller('OcSmsController', ['$scope', '$interval', '$timeout', '$compile' } // Reinit messages before showing conversation - $scope.messages = []; $scope.formatConversation(jsondata); if (typeof jsondata['contactName'] == 'undefined' || jsondata['contactName'] == '') { @@ -204,10 +201,12 @@ app.controller('OcSmsController', ['$scope', '$interval', '$timeout', '$compile' $('#ocsms-phone-label').html(''); $('#ocsms-phone-opt-number').html(''); $('#ocsms-phone-msg-nb').html(''); - $('#app-content-wrapper').html('
Please choose a conversation on the left menu
'); $('#ocsms-conversation-removal').hide(); $('#app-content-header').hide(); - $("li[peer-label='" + g_curContactName + "']").remove(); + $scope.removeContact({'nav': g_curPhoneNumber}); + $scope.$apply(function () { + $scope.messages = []; + }); g_curPhoneNumber = null; }); }; @@ -230,7 +229,9 @@ app.controller('OcSmsController', ['$scope', '$interval', '$timeout', '$compile' for (var i=0; i < len; i++) { var curCt = $scope.contacts[i]; if (curCt['nav'] == ct['nav']) { - $scope.contacts.splice(i, 1); + $scope.$apply(function () { + $scope.contacts.splice(i, 1); + }); return; } } @@ -244,13 +245,16 @@ app.controller('OcSmsController', ['$scope', '$interval', '$timeout', '$compile' $scope.messages.push(msg); }); } - $scope.removeConversationMessage = function (msg) { - alert('test'); + $scope.removeConversationMessage = function (msgId) { var len = $scope.messages.length; for (var i=0; i < len; i++) { var curMsg = $scope.messages[i]; - if (curMsg['id'] == msg['id']) { - $scope.messages.splice(i, 1); + if (curMsg['id'] == msgId) { + $.post(OC.generateUrl('/apps/ocsms/delete/message'), {"messageId": msgId, "phoneNumber": g_curContactName}, function(data) { + $scope.$apply(function () { + $scope.messages.splice(i, 1); + }); + }); return; } } diff --git a/templates/main.php b/templates/main.php index 1a1392d..9b901ba 100644 --- a/templates/main.php +++ b/templates/main.php @@ -41,7 +41,7 @@ use \OCA\OcSms\Lib\CountryCodes;
{{ message.content }}
-
+
{{ message.date }}