This commit is contained in:
Piyush मिश्रः 2021-05-11 13:37:55 +05:30
parent a2d4e7e70b
commit 7db8c3e981
12 changed files with 189 additions and 16 deletions

View File

@ -70,6 +70,16 @@ pub struct DeleteMsg {
pub msg_id: Vec<String>
}
// Request to delete messages
#[derive(Clone, Message)]
#[rtype(result = "()")]
pub struct EditMsg {
pub kaksh_kunjika: String,
pub kunjika: String,
pub text: String,
pub msg_id: String
}
// Request to send list of users
#[derive(Clone, Message)]
#[rtype(result = "String")]

View File

@ -44,6 +44,15 @@ pub struct WsDeleteMsg {
pub sender_kunjika: String
}
// Request to delete messages
#[derive(Clone, Message)]
#[rtype(result = "()")]
pub struct WsEditMsg {
pub text: String,
pub sender_kunjika: String,
pub msg_id: String
}
// Request to send transfer text
#[derive(Clone, Message)]
#[rtype(result = "()")]

View File

@ -59,7 +59,6 @@ impl Handler<ms::pind::SendStatus> for ChatPinnd {
}
}
/// send delete messages for everyone
impl Handler<ms::pind::DeleteMsg> for ChatPinnd {
type Result = ();
@ -75,3 +74,21 @@ impl Handler<ms::pind::DeleteMsg> for ChatPinnd {
}
}
}
/// send delete messages for everyone
impl Handler<ms::pind::EditMsg> for ChatPinnd {
type Result = ();
fn handle(&mut self, msg: ms::pind::EditMsg, _: &mut Self::Context) -> Self::Result {
if let Some(kaksh) = self.kaksh.get_mut(&msg.kaksh_kunjika) {
kaksh.loog.iter().for_each(|c| {
c.addr.do_send(ms::sansad::WsEditMsg {
sender_kunjika: msg.kunjika.to_owned(),
msg_id: msg.msg_id.to_owned(),
text: msg.text.to_owned()
});
});
}
}
}

View File

@ -49,6 +49,7 @@ impl Actor for ChatPinnd {
self.subscribe_system_async::<ms::pind::SendText>(ctx);
self.subscribe_system_async::<ms::pind::SendImage>(ctx);
self.subscribe_system_async::<ms::pind::DeleteMsg>(ctx);
self.subscribe_system_async::<ms::pind::EditMsg>(ctx);
self.subscribe_system_async::<ms::pind::SendStatus>(ctx);
self.subscribe_system_async::<ms::pind::LeaveUser>(ctx);
}

View File

@ -56,6 +56,20 @@ impl Handler<ms::sansad::WsDeleteMsg> for WsSansad {
}
}
/// delete messages
impl Handler<ms::sansad::WsEditMsg> for WsSansad {
type Result = ();
fn handle(&mut self, msg: ms::sansad::WsEditMsg, ctx: &mut Self::Context) -> Self::Result {
let json = json!({
"cmd": "edit",
"msg_id": msg.msg_id,
"text": msg.text,
"kunjika": msg.sender_kunjika // Sender's kunjuka
});
ctx.text(json.to_string());
}
}
/// List Vayakti
impl Handler<ms::sansad::WsList> for WsSansad {
type Result = ();

View File

@ -174,4 +174,54 @@ impl WsSansad {
msg_id
});
}
/// send text to vayakti in kaksh
pub async fn edit_msg(&mut self, val: Value) {
// check if vayakti exist
if let Isthiti::None = self.isthiti {
self.send_err_response("Not in any Kaksh");
return;
}
// check if connected to any kaksh
match self.isthiti {
Isthiti::Kaksh(_) => (),
_ => {
self.send_err_response("Kaksh not connected");
return;
}
}
// edit text
let text = match val.get("text") {
Some(val) => val,
None => {
self.send_err_response("Invalid request");
return;
}
}.as_str().unwrap().to_owned();
// msg_id
let msg_id = match val.get("msg_id") {
Some(val) => val,
None => {
self.send_err_response("Invalid request");
return;
}
}.as_str().unwrap().to_owned();
let kaksh_kunjika = match &self.isthiti {
Isthiti::Kaksh(kaksh_kunjika) => {
kaksh_kunjika.to_owned()
}, _ => {
return;
}
};
Broker::<SystemBroker>::issue_async(ms::pind::EditMsg {
kaksh_kunjika,
kunjika: self.kunjika.to_owned(),
text,
msg_id
});
}
}

View File

@ -109,6 +109,7 @@ impl WsSansad {
"img" => { self.send_image(val).await },
"status" => { self.send_status(val).await },
"del" => { self.delete_msg(val).await },
"edit" => { self.edit_msg(val).await },
"list" => { self.list().await },
"leave" => { self.leave_kaksh().await },
_ => ()

View File

@ -225,7 +225,7 @@ input {
background-color: var(--msg-reply-bg-color);
}
.message .message-by {
.message .message-sub {
font-size: 1.3rem;
font-style: italic;
text-decoration: underline;

View File

@ -145,9 +145,10 @@
<!-- Reply Clip -->
<div id="reply_clip" class="clip-win reply-clip is-hidden">
<img id="replyicon" src="img/edit.svg" class="svg-filter is-hidden" style="height: 1.6rem;">
<span></span>
<a onclick="$('#reply_clip > span').text(''); $('#reply_clip').attr('msg', '');
$('#reply_clip').addClass('is-hidden');" style="float: right; padding: 3px 6px;">
$('#reply_clip').addClass('is-hidden'); $('#replyicon').addClass('is-hidden');" style="float: right; padding: 3px 6px;">
<img src="img/close.svg" alt="X" style="height: 1.8rem; width: auto; cursor: pointer;">
</a>
</div>
@ -158,7 +159,7 @@
<button onclick="deleteMessages()" class="button outline primary" style="padding: 1rem 1rem;">
<img src="img/delete.svg" style="height: 1.6rem;">
</button>
<button onclick="Messages.copyMessagesToClipboard()" class="button outline primary" style="padding: 1rem 1rem;">
<button onclick="Messages.prepareEditMessages()" class="button outline primary" style="padding: 1rem 1rem;">
<img src="img/edit.svg" class="svg-filter" style="height: 1.6rem;">
</button>
<button onclick="Messages.copyMessagesToClipboard()" class="button outline primary" style="padding: 1rem 1rem;">

View File

@ -47,7 +47,7 @@ socket.onerror = function(event) {
// Listen for messages
socket.onmessage = function(event) {
var j = JSON.parse(event.data);
console.log(j);
// console.log(j);
switch(j.cmd) {
case 'resp':
if(j.result == 'Err') {
@ -92,6 +92,9 @@ socket.onmessage = function(event) {
case 'del':
Messages.deleteMessages(j.msg_id);
break;
case 'edit':
Messages.editMessages(j.msg_id, j.text);
break;
case 'connected':
vayakti[j.kunjika] = j.name;
if(!$('#vayakti_model').hasClass('.is-hidden')) refreshVayaktiList();
@ -191,11 +194,21 @@ function sendTypingEnd() {
function send() {
var text = $('#send_box').val().trim();
if(text.length == 0) return;
socket.send(JSON.stringify({
cmd: "text",
text: text,
reply: $('#reply_clip').attr('msg')
}));
if($('#replyicon').hasClass('is-hidden')) {
socket.send(JSON.stringify({
cmd: "text",
text: text,
reply: $('#reply_clip').attr('msg')
}));
} else {
socket.send(JSON.stringify({
cmd: "edit",
text: text,
msg_id: $('#reply_clip').attr('msg')
}));
$('#replyicon').addClass('is-hidden');
}
$('#send_box').val('');
$('#reply_clip').attr('msg', '');
$('#reply_clip').addClass('is-hidden');

View File

@ -25,7 +25,11 @@ let Camera = class {
Camera.compressImage(file, 0.7, 'image/jpeg');
return;
} else if(base64data.length > 63488 && mime == 'image/jpeg') {
window.alert('file is too large!');
var prop = {
title: 'Warning',
text: 'file is too large!',
check: false
}; dialog(prop, function() {});
return;
}

View File

@ -67,15 +67,17 @@ let Messages = class {
var area = $('#message_area');
var elm = $('<div>', {class: 'message '+(isMe?'message-me':'message-other'), msgid: msg_id});
if(!no_name_message) {
elm.append($('<div>', {class: 'message-by'}).append(vayakti[sender]+'('+sender.substr(0, 8)+')'))
elm.append($('<div>', {class: 'message-sub'})
.append(vayakti[sender]+'('+sender.substr(0, 8)+')')
.append($('<span>', {class: 'pull-right'}).text(Messages.currentTime())));
}
if(reply != null && reply.length > 0) {
elm.append(
$('<div>', {class: 'message message-reply'})
.append($('<pre>').append(reply))
.append($('<pre>').text(reply))
);
}
elm.append($('<pre>').append(text));
elm.append($('<pre>').text(text));
elm.click(function() {
Messages.pick(this);
});
@ -128,7 +130,7 @@ let Messages = class {
var el = $('#reply_clip');
el.removeClass('is-hidden');
el.attr('msg', text);
$('#reply_clip > span').text(text.substr(0, 15)+ '...');
$('#reply_clip > span').text(text.substr(0, 20)+ '...');
Messages.unselectAll();
}
@ -141,6 +143,46 @@ let Messages = class {
Messages.unselectAll();
}
static prepareEditMessages() {
var msgs = $('.message.active');
if(msgs.length > 1) {
var prop = {
title: 'Warning',
text: 'Select only one Message!',
check: false
}; dialog(prop, function() {});
return;
}
var msg = $(msgs[0]);
if(msg.find('pre').length == 0 || !msg.hasClass('message-me')) {
var prop = {
title: 'Warning',
text: 'Can\'t edit this Message!',
check: false
}; dialog(prop, function() {});
return;
}
var prop = {
title: 'Edit Messages',
text: 'Do you really want to edit?',
check: false
}
dialog(prop, function() {
var msg = $($('.message.active')[0]);
$('#reply_clip > span').text(msg.find('pre').text().substr(0, 20)+ '...');
$('#reply_clip').attr('msg', msg.attr('msgid'));
Messages.unselectAll();
$('#replyicon').removeClass('is-hidden');
$('#reply_clip').removeClass('is-hidden');
});
$('#selected_clip').addClass('is-hidden');
}
static cleanMessage() {
$('#message_area').empty();
$('#status_area').empty();
@ -153,6 +195,17 @@ let Messages = class {
});
}
static editMessages(msgid, text) {
var msg = $('[msgid='+msgid+']');
if(msg.find('[name=edited]').length == 0) {
if(msg.find('[name=bar_msg]').length == 0) {
msg.append($('<div>', {class: 'message-sub', name: 'bar_msg'}));
}
msg.find('[name=bar_msg]').append($('<span>', {name: 'edited'}).text('edited'));
}
$('[msgid='+msgid+']').find('pre').text(text);
}
static currentTime() {
var today = new Date();
return today.getHours()+':'+('0' + today.getMinutes()).slice(-2);