fix(location): another nesting

This commit is contained in:
dignifiedquire
2019-09-11 18:13:21 +02:00
parent ca9dccfcd7
commit dd2e3d35fd

View File

@@ -575,7 +575,7 @@ pub fn job_do_DC_JOB_MAYBE_SEND_LOCATIONS(context: &Context, _job: &Job) {
.map_err(Into::into) .map_err(Into::into)
}, },
) { ) {
context let msgs = context
.sql .sql
.prepare( .prepare(
"SELECT id \ "SELECT id \
@@ -586,34 +586,42 @@ pub fn job_do_DC_JOB_MAYBE_SEND_LOCATIONS(context: &Context, _job: &Job) {
AND independent=0 \ AND independent=0 \
ORDER BY timestamp;", ORDER BY timestamp;",
|mut stmt_locations, _| { |mut stmt_locations, _| {
for (chat_id, locations_send_begin, locations_last_sent) in rows { let msgs = rows
if !stmt_locations .into_iter()
.exists(params![1, locations_send_begin, locations_last_sent,]) .filter_map(|(chat_id, locations_send_begin, locations_last_sent)| {
.unwrap_or_default() if !stmt_locations
{ .exists(params![1, locations_send_begin, locations_last_sent,])
// if there is no new location, there's nothing to send. .unwrap_or_default()
// however, maybe we want to bypass this test eg. 15 minutes {
continue; // if there is no new location, there's nothing to send.
} // however, maybe we want to bypass this test eg. 15 minutes
// pending locations are attached automatically to every message, None
// so also to this empty text message. } else {
// DC_CMD_LOCATION is only needed to create a nicer subject. // pending locations are attached automatically to every message,
// // so also to this empty text message.
// for optimisation and to avoid flooding the sending queue, // DC_CMD_LOCATION is only needed to create a nicer subject.
// we could sending these messages only if we're really online. //
// the easiest way to determine this, is to check for an empty message queue. // for optimisation and to avoid flooding the sending queue,
// (might not be 100%, however, as positions are sent combined later // we could sending these messages only if we're really online.
// and dc_set_location() is typically called periodically, this is ok) // the easiest way to determine this, is to check for an empty message queue.
let mut msg = dc_msg_new(context, Viewtype::Text); // (might not be 100%, however, as positions are sent combined later
msg.hidden = true; // and dc_set_location() is typically called periodically, this is ok)
msg.param.set_int(Param::Cmd, 9); let mut msg = dc_msg_new(context, Viewtype::Text);
// TODO: handle cleanup on error msg.hidden = true;
chat::send_msg(context, chat_id as u32, &mut msg).unwrap(); msg.param.set_int(Param::Cmd, 9);
} Some((chat_id, msg))
Ok(()) }
})
.collect::<Vec<_>>();
Ok(msgs)
}, },
) )
.unwrap(); // TODO: Better error handling .unwrap_or_default(); // TODO: Better error handling
for (chat_id, mut msg) in msgs.into_iter() {
// TODO: better error handling
chat::send_msg(context, chat_id as u32, &mut msg).unwrap();
}
} }
if 0 != continue_streaming { if 0 != continue_streaming {
schedule_MAYBE_SEND_LOCATIONS(context, 0x1); schedule_MAYBE_SEND_LOCATIONS(context, 0x1);