mirror of https://github.com/PiyushXCoder/lupt.git
image send
This commit is contained in:
parent
6d18337f10
commit
65ecc030b8
|
|
@ -42,14 +42,14 @@ pub struct SendText {
|
||||||
pub text: String,
|
pub text: String,
|
||||||
pub reply: Option<String>,
|
pub reply: Option<String>,
|
||||||
}
|
}
|
||||||
/// Request to send image t
|
|
||||||
|
/// Request to send image
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct SendImage {
|
pub struct SendImage {
|
||||||
pub kaksh_kunjika: String,
|
pub kaksh_kunjika: String,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
pub part: String,
|
pub src: String
|
||||||
pub image_id: i32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request to send text t
|
// Request to send text t
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,14 @@ pub struct WsText {
|
||||||
pub sender_kunjika: String,
|
pub sender_kunjika: String,
|
||||||
pub msg_id: u128
|
pub msg_id: u128
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request to send transfer text
|
// Request to send transfer text
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct WsImage {
|
pub struct WsImage {
|
||||||
pub text: String,
|
pub src: String,
|
||||||
pub reply: Option<String>,
|
pub sender_kunjika: String,
|
||||||
pub sender_kunjika: String
|
pub msg_id: u128
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request to send transfer text
|
// Request to send transfer text
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,25 @@ impl Handler<ms::pind::SendText> for ChatPinnd {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// send image to everyone
|
||||||
|
impl Handler<ms::pind::SendImage> for ChatPinnd {
|
||||||
|
type Result = ();
|
||||||
|
|
||||||
|
fn handle(&mut self, msg: ms::pind::SendImage, _: &mut Self::Context) -> Self::Result {
|
||||||
|
if let Some(kaksh) = self.kaksh.get_mut(&msg.kaksh_kunjika) {
|
||||||
|
kaksh.last_message_id += 1;
|
||||||
|
let msg_id = kaksh.last_message_id;
|
||||||
|
kaksh.loog.iter().for_each(|c| {
|
||||||
|
c.addr.do_send(ms::sansad::WsImage {
|
||||||
|
sender_kunjika: msg.kunjika.to_owned(),
|
||||||
|
src: msg.src.to_owned(),
|
||||||
|
msg_id
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// send status to everyone
|
/// send status to everyone
|
||||||
impl Handler<ms::pind::SendStatus> for ChatPinnd {
|
impl Handler<ms::pind::SendStatus> for ChatPinnd {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ impl Actor for ChatPinnd {
|
||||||
fn started(&mut self, ctx: &mut Self::Context) {
|
fn started(&mut self, ctx: &mut Self::Context) {
|
||||||
// for actix broker
|
// for actix broker
|
||||||
self.subscribe_system_async::<ms::pind::SendText>(ctx);
|
self.subscribe_system_async::<ms::pind::SendText>(ctx);
|
||||||
|
self.subscribe_system_async::<ms::pind::SendImage>(ctx);
|
||||||
self.subscribe_system_async::<ms::pind::SendStatus>(ctx);
|
self.subscribe_system_async::<ms::pind::SendStatus>(ctx);
|
||||||
self.subscribe_system_async::<ms::pind::LeaveUser>(ctx);
|
self.subscribe_system_async::<ms::pind::LeaveUser>(ctx);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,20 @@ impl Handler<ms::sansad::WsText> for WsSansad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// send text message
|
||||||
|
impl Handler<ms::sansad::WsImage> for WsSansad {
|
||||||
|
type Result = ();
|
||||||
|
fn handle(&mut self, msg: ms::sansad::WsImage, ctx: &mut Self::Context) -> Self::Result {
|
||||||
|
let json = json!({
|
||||||
|
"cmd": "img",
|
||||||
|
"src": msg.src,
|
||||||
|
"kunjika": msg.sender_kunjika, // Sender's kunjuka
|
||||||
|
"msg_id": msg.msg_id.to_string()
|
||||||
|
});
|
||||||
|
ctx.text(json.to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// send text status
|
/// send text status
|
||||||
impl Handler<ms::sansad::WsStatus> for WsSansad {
|
impl Handler<ms::sansad::WsStatus> for WsSansad {
|
||||||
|
|
|
||||||
|
|
@ -86,4 +86,44 @@ impl WsSansad {
|
||||||
status
|
status
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// send text to vayakti in kaksh
|
||||||
|
pub async fn send_image(&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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// image src
|
||||||
|
let src = match val.get("src") {
|
||||||
|
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::SendImage {
|
||||||
|
kaksh_kunjika,
|
||||||
|
kunjika: self.kunjika.to_owned(),
|
||||||
|
src
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -101,20 +101,12 @@ impl WsSansad {
|
||||||
/// parse the request text from client
|
/// parse the request text from client
|
||||||
async fn parse_text_handle(&mut self, msg: String) {
|
async fn parse_text_handle(&mut self, msg: String) {
|
||||||
if let Ok(val) = serde_json::from_str::<Value>(&msg) {
|
if let Ok(val) = serde_json::from_str::<Value>(&msg) {
|
||||||
// let cmd = match val.get("cmd") {
|
|
||||||
// Some(v) => v,
|
|
||||||
// None => return
|
|
||||||
// };
|
|
||||||
// let cmd = match cmd.as_str() {
|
|
||||||
// Some(v) => v,
|
|
||||||
// None => return
|
|
||||||
// };
|
|
||||||
|
|
||||||
match val.get("cmd").unwrap().as_str().unwrap() {
|
match val.get("cmd").unwrap().as_str().unwrap() {
|
||||||
"join" => { self.join_kaksh(val).await },
|
"join" => { self.join_kaksh(val).await },
|
||||||
"rand" => { self.join_random(val).await },
|
"rand" => { self.join_random(val).await },
|
||||||
"randnext" => { self.join_random_next().await },
|
"randnext" => { self.join_random_next().await },
|
||||||
"text" => { self.send_text(val).await },
|
"text" => { self.send_text(val).await },
|
||||||
|
"img" => { self.send_image(val).await },
|
||||||
"status" => { self.send_status(val).await },
|
"status" => { self.send_status(val).await },
|
||||||
"list" => { self.list().await },
|
"list" => { self.list().await },
|
||||||
"leave" => { self.leave_kaksh().await },
|
"leave" => { self.leave_kaksh().await },
|
||||||
|
|
|
||||||
|
|
@ -163,10 +163,11 @@
|
||||||
<!-- Action Clip -->
|
<!-- Action Clip -->
|
||||||
<div id="action_clip" class="clip-win action-clip is-hidden">
|
<div id="action_clip" class="clip-win action-clip is-hidden">
|
||||||
<div style="padding-bottom: 10px;">
|
<div style="padding-bottom: 10px;">
|
||||||
<button class="button">
|
<button class="button" onclick="$('#file-input').click()">
|
||||||
<img src="img/image.svg" alt="Image" width="50" class="siimple--py-2 siimple--px-2">
|
<img src="img/image.svg" alt="Image" width="50" max-size="3072" class="siimple--py-2 siimple--px-2">
|
||||||
<div>send image</div>
|
<div>send image</div>
|
||||||
</button>
|
</button>
|
||||||
|
<input id="file-input" class="is-hidden" type="file" accept="image/png, image/jpeg"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button onclick="changeColor()" class="button"><img src="img/color.svg" alt="C" height="16"></button>
|
<button onclick="changeColor()" class="button"><img src="img/color.svg" alt="C" height="16"></button>
|
||||||
|
|
@ -206,9 +207,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="js/jquery-3.5.1.min.js"></script>
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
|
<script src="js/compressor.min.js"></script>
|
||||||
<script src="js/actions.js"></script>
|
<script src="js/actions.js"></script>
|
||||||
<script src="js/state.js"></script>
|
<script src="js/state.js"></script>
|
||||||
<script src="js/message.js"></script>
|
<script src="js/message.js"></script>
|
||||||
|
<script src="js/camera.js"></script>
|
||||||
<script src="js/app.js"></script>
|
<script src="js/app.js"></script>
|
||||||
<script src="js/onload.js"></script>
|
<script src="js/onload.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,9 @@ socket.addEventListener('message', function (event) {
|
||||||
case 'text':
|
case 'text':
|
||||||
Messages.pushMessage(j.kunjika, j.text, j.reply, j.msg_id);
|
Messages.pushMessage(j.kunjika, j.text, j.reply, j.msg_id);
|
||||||
break;
|
break;
|
||||||
|
case 'img':
|
||||||
|
Messages.pushImage(j.kunjika, j.src, j.msg_id);
|
||||||
|
break;
|
||||||
case 'connected':
|
case 'connected':
|
||||||
vayakti[j.kunjika] = j.name;
|
vayakti[j.kunjika] = j.name;
|
||||||
if(!$('#vayakti_model').hasClass('.is-hidden')) refreshVayaktiList();
|
if(!$('#vayakti_model').hasClass('.is-hidden')) refreshVayaktiList();
|
||||||
|
|
@ -216,30 +219,3 @@ function autosize(el){
|
||||||
$('#selected_clip').css('bottom', (el.scrollHeight + 10) + 'px');
|
$('#selected_clip').css('bottom', (el.scrollHeight + 10) + 'px');
|
||||||
},0);
|
},0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Camera
|
|
||||||
var video = $('#videoElement')[0];
|
|
||||||
if (navigator.mediaDevices.getUserMedia) {
|
|
||||||
navigator.mediaDevices.getUserMedia({ video: true, width: {max: 100} })
|
|
||||||
.then(function (stream) {
|
|
||||||
video.srcObject = stream;
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
console.log('Something went wrong!');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var resultb64='';
|
|
||||||
function capture() {
|
|
||||||
var canvas = $('<canvas>')[0];
|
|
||||||
var video = $('#videoElement')[0];
|
|
||||||
canvas.width = 200;
|
|
||||||
canvas.height = 200;
|
|
||||||
canvas.getContext('2d').drawImage(video, 0, 0, 120,120);
|
|
||||||
resultb64=canvas.toDataURL();
|
|
||||||
socket.send(JSON.stringify({
|
|
||||||
cmd: 'text',
|
|
||||||
text: resultb64,
|
|
||||||
reply: ''
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
var Camera = class {
|
||||||
|
static setupCamera() {
|
||||||
|
$('#file-input')[0].addEventListener('change', (e) => {
|
||||||
|
const file = e.target.files[0];
|
||||||
|
if (!file) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.compressImage(file, 0.1, 'image/webp');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static compressImage(file, qual, mime) {
|
||||||
|
new Compressor(file, {
|
||||||
|
quality: qual,
|
||||||
|
width: 320,
|
||||||
|
mimeType: mime,
|
||||||
|
success(result) {
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.readAsDataURL(result);
|
||||||
|
reader.onloadend = function() {
|
||||||
|
var base64data = reader.result;
|
||||||
|
if(base64data.length > 63000 && mime != 'image/jpeg') {
|
||||||
|
base64data = null;
|
||||||
|
result = null;
|
||||||
|
Camera.compressImage(file, 0.7, 'image/jpeg');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.send(JSON.stringify({
|
||||||
|
cmd: "img",
|
||||||
|
src: base64data
|
||||||
|
}));
|
||||||
|
$('#action_clip').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -88,6 +88,26 @@ let Messages = class {
|
||||||
scroll.scrollTop(scroll[0].scrollHeight);
|
scroll.scrollTop(scroll[0].scrollHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pushImage(sender, src, msg_id) {
|
||||||
|
var isMe = myinfo.kunjika == sender;
|
||||||
|
var area = $('#message_area');
|
||||||
|
var elm = $('<div>', {class: 'message '+(isMe?'message-me':'message-other'), msgid: msg_id});
|
||||||
|
if(!no_name_message) {
|
||||||
|
if(sender == myinfo.kunjika)
|
||||||
|
elm.append($('<div>', {class: 'message-by'}).append('me'))
|
||||||
|
else
|
||||||
|
elm.append($('<div>', {class: 'message-by'}).append(vayakti[sender]+'('+sender.substr(0, 8)+')'))
|
||||||
|
}
|
||||||
|
elm.append($('<img>', {src: src}));
|
||||||
|
elm.click(function() {
|
||||||
|
Messages.pick(this);
|
||||||
|
});
|
||||||
|
area.append(elm);
|
||||||
|
|
||||||
|
var scroll = $("#message_area_scroll");
|
||||||
|
scroll.scrollTop(scroll[0].scrollHeight);
|
||||||
|
}
|
||||||
|
|
||||||
// in message area
|
// in message area
|
||||||
static pushStatus(text) {
|
static pushStatus(text) {
|
||||||
var area = $('#message_area');
|
var area = $('#message_area');
|
||||||
|
|
|
||||||
|
|
@ -44,4 +44,6 @@ $(document).ready(() => {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
send();
|
send();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Camera.setupCamera();
|
||||||
});
|
});
|
||||||
Loading…
Reference in New Issue