for (i = 0; i < IMAP->num_msgs; ++i) {
if (IMAP->flags[i] & IMAP_SELECTED) {
- CtdlSetSeen(IMAP->msgids[i],
+ CtdlSetSeen(&IMAP->msgids[i], 1,
((IMAP->flags[i] & IMAP_SEEN) ? 1 : 0),
ctdlsetseen_seen,
NULL, &qrbuf
);
- CtdlSetSeen(IMAP->msgids[i],
+ CtdlSetSeen(&IMAP->msgids[i], 1,
((IMAP->flags[i] & IMAP_ANSWERED) ? 1 : 0),
ctdlsetseen_answered,
NULL, &qrbuf
extract_token(this_flag, flags, i, ' ', sizeof this_flag);
if (this_flag[0] == '\\') strcpy(this_flag, &this_flag[1]);
if (!strcasecmp(this_flag, "Seen")) {
- CtdlSetSeen(new_msgnum, 1, ctdlsetseen_seen,
+ CtdlSetSeen(&new_msgnum, 1, 1, ctdlsetseen_seen,
NULL, NULL);
}
if (!strcasecmp(this_flag, "Answered")) {
- CtdlSetSeen(new_msgnum, 1, ctdlsetseen_answered,
+ CtdlSetSeen(&new_msgnum, 1, 1, ctdlsetseen_answered,
NULL, NULL);
}
}
/*
* Manipulate the "seen msgs" string (or other message set strings)
*/
-void CtdlSetSeen(long target_msgnum, int target_setting, int which_set,
+void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
+ int target_setting, int which_set,
struct ctdluser *which_user, struct ctdlroom *which_room) {
struct cdbdata *cdbfr;
- int i, j;
+ int i, j, k;
int is_seen = 0;
int was_seen = 0;
long lo = (-1L);
char setstr[SIZ], lostr[SIZ], histr[SIZ];
size_t tmp;
- lprintf(CTDL_DEBUG, "CtdlSetSeen(%ld, %d, %d)\n",
- target_msgnum, target_setting, which_set);
+ lprintf(CTDL_DEBUG, "CtdlSetSeen(%d msgs starting with %ld, %d, %d)\n",
+ num_target_msgnums, target_msgnums[0],
+ target_setting, which_set);
/* Learn about the user and room in question */
CtdlGetRelationship(&vbuf,
hi = (-1L);
for (i=0; i<num_msgs; ++i) {
- is_seen = 0;
- if (msglist[i] == target_msgnum) {
- is_seen = target_setting;
- }
- else {
- is_seen = is_set[i];
+ is_seen = is_set[i]; /* Default to existing setting */
+
+ for (k=0; k<num_target_msgnums; ++k) {
+ if (msglist[i] == target_msgnums[k]) {
+ is_seen = target_setting;
+ }
}
if (is_seen) {
msgid = extract_long(cmdbuf, 0);
extract_token(desired_section, cmdbuf, 1, '|', sizeof desired_section);
- safestrncpy(CC->download_desired_section, desired_section, sizeof CC->download_desired_section);
+ safestrncpy(CC->download_desired_section, desired_section,
+ sizeof CC->download_desired_section);
CtdlOutputMsg(msgid, MT_DOWNLOAD, 0, 1, 1);
}
long highest_msg = 0L;
struct CtdlMessage *msg = NULL;
- /*lprintf(CTDL_DEBUG, "CtdlSaveMsgPointerInRoom(roomname=%s, msgid=%ld, do_repl_check=%d)\n",
+ /*lprintf(CTDL_DEBUG,
+ "CtdlSaveMsgPointerInRoom(room=%s, msgid=%ld, repl=%d)\n",
roomname, msgid, do_repl_check);*/
strcpy(hold_rm, CC->room.QRname);
((roomname != NULL) ? roomname : CC->room.QRname) )
!= 0) {
lprintf(CTDL_ERR, "No such room <%s>\n", roomname);
- if ( (msg != NULL) && (msg != supplied_msg) ) CtdlFreeMessage(msg);
+ if ( (msg != NULL) && (msg != supplied_msg) ) {
+ CtdlFreeMessage(msg);
+ }
return(ERROR + ROOM_NOT_FOUND);
}
((roomname != NULL) ? roomname : CC->room.QRname) )
!= 0) {
lprintf(CTDL_ERR, "No such room <%s>\n", roomname);
- if ( (msg != NULL) && (msg != supplied_msg) ) CtdlFreeMessage(msg);
+ if ( (msg != NULL) && (msg != supplied_msg) ) {
+ CtdlFreeMessage(msg);
+ }
return(ERROR + ROOM_NOT_FOUND);
}
num_msgs = 0;
} else {
msglist = malloc(cdbfr->len);
- if (msglist == NULL)
+ if (msglist == NULL) {
lprintf(CTDL_ALERT, "ERROR malloc msglist!\n");
+ }
num_msgs = cdbfr->len / sizeof(long);
memcpy(msglist, cdbfr->ptr, cdbfr->len);
cdb_free(cdbfr);
if (msglist[i] == msgid) {
lputroom(&CC->room); /* unlock the room */
getroom(&CC->room, hold_rm);
- if ( (msg != NULL) && (msg != supplied_msg) ) CtdlFreeMessage(msg);
+ if ( (msg != NULL) && (msg != supplied_msg) ) {
+ CtdlFreeMessage(msg);
+ }
free(msglist);
return(ERROR + ALREADY_EXISTS);
}
/* If the message has an Exclusive ID, index that... */
if (msg != NULL) {
if (msg->cm_fields['E'] != NULL) {
- index_message_by_euid(msg->cm_fields['E'], &CC->room, msgid);
+ index_message_by_euid(msg->cm_fields['E'],
+ &CC->room, msgid);
}
}
AdjRefCount(msgid, +1);
/* Return success. */
- if ( (msg != NULL) && (msg != supplied_msg) ) CtdlFreeMessage(msg);
+ if ( (msg != NULL) && (msg != supplied_msg) ) {
+ CtdlFreeMessage(msg);
+ }
return (0);
}