mirror of
https://github.com/chatmail/core.git
synced 2026-05-06 16:36:59 +03:00
exclude muted chats from notified-list
This commit is contained in:
@@ -1039,8 +1039,12 @@ int dc_get_msg_cnt (dc_context_t* context, uint32_t ch
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of _fresh_ messages in a chat. Typically used to implement
|
* Get the number of _fresh_ messages in a chat.
|
||||||
* a badge with a number in the chatlist.
|
* Typically used to implement a badge with a number in the chatlist.
|
||||||
|
*
|
||||||
|
* If the specified chat is muted,
|
||||||
|
* the UI should show the badge counter "less obtrusive",
|
||||||
|
* eg. using "gray" instead of "red" color.
|
||||||
*
|
*
|
||||||
* @memberof dc_context_t
|
* @memberof dc_context_t
|
||||||
* @param context The context object as returned from dc_context_new().
|
* @param context The context object as returned from dc_context_new().
|
||||||
@@ -1067,11 +1071,20 @@ int dc_get_fresh_msg_cnt (dc_context_t* context, uint32_t ch
|
|||||||
*/
|
*/
|
||||||
int dc_estimate_deletion_cnt (dc_context_t* context, int from_server, int64_t seconds);
|
int dc_estimate_deletion_cnt (dc_context_t* context, int from_server, int64_t seconds);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the message IDs of all _fresh_ messages of any chat.
|
* Returns the message IDs of all _fresh_ messages of any chat.
|
||||||
* Typically used for implementing notification summaries.
|
* Typically used for implementing notification summaries
|
||||||
|
* or badge counters eg. on the app-icon.
|
||||||
* The list is already sorted and starts with the most recent fresh message.
|
* The list is already sorted and starts with the most recent fresh message.
|
||||||
*
|
*
|
||||||
|
* Messages belonging to muted chats are not returned,
|
||||||
|
* as they should not be notified
|
||||||
|
* and also a badge counters should not include messages of muted chats.
|
||||||
|
*
|
||||||
|
* To get the number of fresh messages for a single chat, muted or not,
|
||||||
|
* use dc_get_fresh_msg_cnt().
|
||||||
|
*
|
||||||
* @memberof dc_context_t
|
* @memberof dc_context_t
|
||||||
* @param context The context object as returned from dc_context_new().
|
* @param context The context object as returned from dc_context_new().
|
||||||
* @return Array of message IDs, must be dc_array_unref()'d when no longer used.
|
* @return Array of message IDs, must be dc_array_unref()'d when no longer used.
|
||||||
@@ -1426,13 +1439,21 @@ int dc_set_chat_profile_image (dc_context_t* context, uint32_t ch
|
|||||||
/**
|
/**
|
||||||
* Set mute duration of a chat.
|
* Set mute duration of a chat.
|
||||||
*
|
*
|
||||||
* The UI can then call dc_chat_is_muted() when receiving a new message to decide whether it should trigger an notification.
|
* The UI can then call dc_chat_is_muted() when receiving a new message
|
||||||
|
* to decide whether it should trigger an notification.
|
||||||
|
*
|
||||||
|
* Muted chats should not sound or vibrate
|
||||||
|
* and should not show a visual notification in the system area.
|
||||||
|
* Moreover, muted chats should be excluded from global badge counter
|
||||||
|
* (dc_get_fresh_msgs() skips muted chats therefore)
|
||||||
|
* and the in-app, per-chat badge counter should use a less obtrusive color.
|
||||||
*
|
*
|
||||||
* Sends out #DC_EVENT_CHAT_MODIFIED.
|
* Sends out #DC_EVENT_CHAT_MODIFIED.
|
||||||
*
|
*
|
||||||
* @memberof dc_context_t
|
* @memberof dc_context_t
|
||||||
* @param chat_id The chat ID to set the mute duration.
|
* @param chat_id The chat ID to set the mute duration.
|
||||||
* @param duration The duration (0 for no mute, -1 for forever mute, everything else is is the relative mute duration from now in seconds)
|
* @param duration The duration (0 for no mute, -1 for forever mute,
|
||||||
|
* everything else is is the relative mute duration from now in seconds)
|
||||||
* @param context The context object.
|
* @param context The context object.
|
||||||
* @return 1=success, 0=error
|
* @return 1=success, 0=error
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ use crate::chat::{get_chat_cnt, ChatId};
|
|||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::DC_VERSION_STR;
|
use crate::constants::DC_VERSION_STR;
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::dc_tools::duration_to_str;
|
use crate::dc_tools::{duration_to_str, time};
|
||||||
use crate::events::{Event, EventEmitter, EventType, Events};
|
use crate::events::{Event, EventEmitter, EventType, Events};
|
||||||
use crate::key::{DcKey, SignedPublicKey};
|
use crate::key::{DcKey, SignedPublicKey};
|
||||||
use crate::login_param::LoginParam;
|
use crate::login_param::LoginParam;
|
||||||
use crate::message::{self, MsgId};
|
use crate::message::{self, MessageState, MsgId};
|
||||||
use crate::scheduler::Scheduler;
|
use crate::scheduler::Scheduler;
|
||||||
use crate::securejoin::Bob;
|
use crate::securejoin::Bob;
|
||||||
use crate::sql::Sql;
|
use crate::sql::Sql;
|
||||||
@@ -425,8 +425,13 @@ impl Context {
|
|||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a list of fresh, unmuted messages in any chat but deaddrop.
|
||||||
|
///
|
||||||
|
/// The list starts with the most recent message
|
||||||
|
/// and is typically used to show notifications.
|
||||||
|
/// Moreover, the number of returned messages
|
||||||
|
/// can be used for a badge counter on the app icon.
|
||||||
pub async fn get_fresh_msgs(&self) -> Vec<MsgId> {
|
pub async fn get_fresh_msgs(&self) -> Vec<MsgId> {
|
||||||
let show_deaddrop: i32 = 0;
|
|
||||||
self.sql
|
self.sql
|
||||||
.query_map(
|
.query_map(
|
||||||
concat!(
|
concat!(
|
||||||
@@ -438,12 +443,13 @@ impl Context {
|
|||||||
" ON m.chat_id=c.id",
|
" ON m.chat_id=c.id",
|
||||||
" WHERE m.state=?",
|
" WHERE m.state=?",
|
||||||
" AND m.hidden=0",
|
" AND m.hidden=0",
|
||||||
" AND m.chat_id>?",
|
" AND m.chat_id>9",
|
||||||
" AND ct.blocked=0",
|
" AND ct.blocked=0",
|
||||||
" AND (c.blocked=0 OR c.blocked=?)",
|
" AND c.blocked=0",
|
||||||
|
" AND NOT(c.muted_until=-1 OR (c.muted_until>0 AND c.muted_until<?))",
|
||||||
" ORDER BY m.timestamp DESC,m.id DESC;"
|
" ORDER BY m.timestamp DESC,m.id DESC;"
|
||||||
),
|
),
|
||||||
paramsv![10, 9, if 0 != show_deaddrop { 2 } else { 0 }],
|
paramsv![MessageState::InFresh, time()],
|
||||||
|row| row.get::<_, MsgId>(0),
|
|row| row.get::<_, MsgId>(0),
|
||||||
|rows| {
|
|rows| {
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
|
|||||||
Reference in New Issue
Block a user