mirror of https://github.com/PiyushXCoder/lupt.git
edit
This commit is contained in:
parent
a2d4e7e70b
commit
7db8c3e981
|
|
@ -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")]
|
||||
|
|
|
|||
|
|
@ -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 = "()")]
|
||||
|
|
|
|||
|
|
@ -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 = ();
|
||||
|
|
@ -74,4 +73,22 @@ 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()
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = ();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
_ => ()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;">
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
@ -140,6 +142,46 @@ let Messages = class {
|
|||
$temp.remove();
|
||||
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();
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue