mirror of
https://github.com/chatmail/core.git
synced 2026-05-22 08:16:32 +03:00
fix: get_contacts logic was broken
This commit is contained in:
@@ -13,6 +13,8 @@ use crate::peerstate::*;
|
|||||||
use crate::types::*;
|
use crate::types::*;
|
||||||
use crate::x::*;
|
use crate::x::*;
|
||||||
|
|
||||||
|
const DC_GCL_VERIFIED_ONLY: u32 = 0x01;
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct dc_contact_t<'a> {
|
pub struct dc_contact_t<'a> {
|
||||||
@@ -523,23 +525,9 @@ pub fn dc_get_contacts(
|
|||||||
let mut add_self = false;
|
let mut add_self = false;
|
||||||
let ret = unsafe { dc_array_new(100) };
|
let ret = unsafe { dc_array_new(100) };
|
||||||
|
|
||||||
if 0 == listflags & 0x1 || query.is_null() {
|
if (listflags & DC_GCL_VERIFIED_ONLY) > 0 || !query.is_null() {
|
||||||
add_self = true;
|
|
||||||
|
|
||||||
context.sql.query_map(
|
|
||||||
"SELECT id FROM contacts WHERE addr!=?1 AND id>?2 AND origin>=?3 AND blocked=0 ORDER BY LOWER(name||addr),id;",
|
|
||||||
params![self_addr, 9, 0x100],
|
|
||||||
|row| row.get::<_, i32>(0),
|
|
||||||
|ids| {
|
|
||||||
for id in ids {
|
|
||||||
unsafe { dc_array_add_id(ret, id? as u32) };
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
).unwrap(); // TODO: better error handling
|
|
||||||
} else {
|
|
||||||
let s3strLikeCmd = format!("%{}%", if !query.is_null() { as_str(query) } else { "" });
|
let s3strLikeCmd = format!("%{}%", if !query.is_null() { as_str(query) } else { "" });
|
||||||
|
eprintln!("query '{}'", &s3strLikeCmd);
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.query_map(
|
.query_map(
|
||||||
@@ -583,6 +571,20 @@ pub fn dc_get_contacts(
|
|||||||
add_self = true;
|
add_self = true;
|
||||||
}
|
}
|
||||||
unsafe { free(self_name2 as *mut _) };
|
unsafe { free(self_name2 as *mut _) };
|
||||||
|
} else {
|
||||||
|
add_self = true;
|
||||||
|
|
||||||
|
context.sql.query_map(
|
||||||
|
"SELECT id FROM contacts WHERE addr!=?1 AND id>?2 AND origin>=?3 AND blocked=0 ORDER BY LOWER(name||addr),id;",
|
||||||
|
params![self_addr, 9, 0x100],
|
||||||
|
|row| row.get::<_, i32>(0),
|
||||||
|
|ids| {
|
||||||
|
for id in ids {
|
||||||
|
unsafe { dc_array_add_id(ret, id? as u32) };
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
).unwrap(); // TODO: better error handling
|
||||||
}
|
}
|
||||||
|
|
||||||
if 0 != listflags & 0x2 && add_self {
|
if 0 != listflags & 0x2 && add_self {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use deltachat::constants::*;
|
|||||||
use deltachat::context::*;
|
use deltachat::context::*;
|
||||||
use deltachat::dc_array::*;
|
use deltachat::dc_array::*;
|
||||||
use deltachat::dc_configure::*;
|
use deltachat::dc_configure::*;
|
||||||
|
use deltachat::dc_contact::*;
|
||||||
use deltachat::dc_imex::*;
|
use deltachat::dc_imex::*;
|
||||||
use deltachat::dc_location::*;
|
use deltachat::dc_location::*;
|
||||||
use deltachat::dc_lot::*;
|
use deltachat::dc_lot::*;
|
||||||
@@ -945,6 +946,31 @@ fn test_stress_tests() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_get_contacts() {
|
||||||
|
unsafe {
|
||||||
|
let context = create_test_context();
|
||||||
|
let contacts = dc_get_contacts(&context.ctx, 0, to_cstring("some2").as_ptr());
|
||||||
|
assert_eq!(dc_array_get_cnt(contacts), 0);
|
||||||
|
dc_array_unref(contacts);
|
||||||
|
|
||||||
|
let id = dc_create_contact(
|
||||||
|
&context.ctx,
|
||||||
|
to_cstring("bob").as_ptr(),
|
||||||
|
to_cstring("bob@mail.de").as_ptr(),
|
||||||
|
);
|
||||||
|
assert_ne!(id, 0);
|
||||||
|
|
||||||
|
let contacts = dc_get_contacts(&context.ctx, 0, to_cstring("bob").as_ptr());
|
||||||
|
assert_eq!(dc_array_get_cnt(contacts), 1);
|
||||||
|
dc_array_unref(contacts);
|
||||||
|
|
||||||
|
let contacts = dc_get_contacts(&context.ctx, 0, to_cstring("alice").as_ptr());
|
||||||
|
assert_eq!(dc_array_get_cnt(contacts), 0);
|
||||||
|
dc_array_unref(contacts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_arr_to_string() {
|
fn test_arr_to_string() {
|
||||||
let arr2: [uint32_t; 4] = [
|
let arr2: [uint32_t; 4] = [
|
||||||
|
|||||||
Reference in New Issue
Block a user