Skip to content
Snippets Groups Projects
Commit d1f89436 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Don't map new-scan config to IMAP subscriptions

The sets of message bases you want to get over different protocols
may be different.

While we're here, fix an error with single-parameter FETCH parsing
which prevented Sylpheed from being able to read messages.
parent 2294bf8f
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ var readonly=true; ...@@ -28,7 +28,7 @@ var readonly=true;
var orig_ptrs={}; var orig_ptrs={};
var msg_ptrs={}; var msg_ptrs={};
var curr_status={exists:0,recent:0,unseen:0,uidnext:0,uidvalidity:0}; var curr_status={exists:0,recent:0,unseen:0,uidnext:0,uidvalidity:0};
var saved_config={'__config_epoch__':0, mail:{scan_ptr:0}}; var saved_config={'__config_epoch__':0, mail:{scan_ptr:0, subscribed:true}};
var scan_ptr; var scan_ptr;
var cfgfile; var cfgfile;
var applied_epoch = -1; var applied_epoch = -1;
...@@ -293,7 +293,7 @@ function send_fetch_response(msgnum, fmat, uid) ...@@ -293,7 +293,7 @@ function send_fetch_response(msgnum, fmat, uid)
} }
else { else {
if(saved_config[index.code] == undefined) if(saved_config[index.code] == undefined)
saved_config[index.code] = {}; saved_config[index.code] = {subscribed:false};
if(saved_config[index.code].Seen == undefined) if(saved_config[index.code].Seen == undefined)
saved_config[index.code].Seen = {}; saved_config[index.code].Seen = {};
if(saved_config[index.code].Seen[msgnum] != 1) { if(saved_config[index.code].Seen[msgnum] != 1) {
...@@ -575,7 +575,7 @@ function parse_data_items(obj) ...@@ -575,7 +575,7 @@ function parse_data_items(obj)
obj=["FLAGS","INTERNALDATE","RFC822.SIZE","ENVELOPE","BODY"]; obj=["FLAGS","INTERNALDATE","RFC822.SIZE","ENVELOPE","BODY"];
break; break;
default: default:
obj=[]; obj=[obj];
} }
} }
return(obj); return(obj);
...@@ -1192,7 +1192,7 @@ function sublist(group, match, subscribed) ...@@ -1192,7 +1192,7 @@ function sublist(group, match, subscribed)
for(sub in msg_area.grp_list[grp].sub_list) { for(sub in msg_area.grp_list[grp].sub_list) {
if(re.test(msg_area.grp_list[grp].description+sepchar+msg_area.grp_list[grp].sub_list[sub].description)) { if(re.test(msg_area.grp_list[grp].description+sepchar+msg_area.grp_list[grp].sub_list[sub].description)) {
if((!subscribed) || (msg_area.grp_list[grp].sub_list[sub].scan_cfg&SCAN_CFG_NEW && (!(msg_area.grp_list[grp].sub_list[sub].scan_cfg&SCAN_CFG_YONLY)))) { if((!subscribed) || (saved_config.hasOwnProperty(msg_area.grp_list[grp].sub_list[sub].code) && saved_config[msg_area.grp_list[grp].sub_list[sub].code].hasOwnProperty('subscribed') && saved_config[msg_area.grp_list[grp].sub_list[sub].code].subscribed)) {
base=new MsgBase(msg_area.grp_list[grp].sub_list[sub].code); base=new MsgBase(msg_area.grp_list[grp].sub_list[sub].code);
if(base == undefined || sub=="NONE!!!" || (!base.open())) if(base == undefined || sub=="NONE!!!" || (!base.open()))
continue; continue;
...@@ -1355,6 +1355,8 @@ function apply_seen(index) ...@@ -1355,6 +1355,8 @@ function apply_seen(index)
if (index.code == 'mail') if (index.code == 'mail')
return; return;
if (index === undefined)
return;
if (applied_epoch == saved_config.__config_epoch__) if (applied_epoch == saved_config.__config_epoch__)
return; return;
for(i in index.idx) { for(i in index.idx) {
...@@ -1381,11 +1383,11 @@ function open_cfg(usr) ...@@ -1381,11 +1383,11 @@ function open_cfg(usr)
if (ch != '{') { if (ch != '{') {
// INI file, convert... // INI file, convert...
read_old_cfg(); read_old_cfg();
save_cfg(); save_cfg(false);
} }
} }
else { else {
save_cfg(); save_cfg(false);
} }
unlock_cfg(); unlock_cfg();
return true; return true;
...@@ -1488,15 +1490,17 @@ function save_cfg(lck) ...@@ -1488,15 +1490,17 @@ function save_cfg(lck)
if (saved_config[sub].Seen !== undefined) { if (saved_config[sub].Seen !== undefined) {
scpy = JSON.parse(JSON.stringify(saved_config[sub].Seen)); scpy = JSON.parse(JSON.stringify(saved_config[sub].Seen));
} }
new_cfg[sub] = {};
if(scpy !== undefined) { if(scpy !== undefined) {
var bin = binify(scpy); var bin = binify(scpy);
if (bin !== undefined || scpy !== undefined) {
new_cfg[sub] = {};
}
if (bin !== undefined) if (bin !== undefined)
new_cfg[sub].bseen = bin; new_cfg[sub].bseen = bin;
new_cfg[sub].seen = scpy; new_cfg[sub].seen = scpy;
} }
if (saved_config[sub].subscribed === undefined || saved_config[sub].subscribed === false)
new_cfg[sub].subscribed = false;
else
new_cfg[sub].subscribed = true;
} }
} }
if (lck) if (lck)
...@@ -1654,8 +1658,12 @@ var authenticated_command_handlers = { ...@@ -1654,8 +1658,12 @@ var authenticated_command_handlers = {
var sub=getsub(args[1]); var sub=getsub(args[1]);
if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) { if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) {
lock_cfg();
read_cfg(sub, false);
saved_config[sub].subscribed = true;
save_cfg(false);
unlock_cfg();
tagged(tag, "OK", "Subscribed..."); tagged(tag, "OK", "Subscribed...");
msg_area.sub[sub].scan_cfg|=SCAN_CFG_NEW;
} }
else else
tagged(tag, "NO", "Can't subscribe to that sub (what is it?)"); tagged(tag, "NO", "Can't subscribe to that sub (what is it?)");
...@@ -1668,9 +1676,12 @@ var authenticated_command_handlers = { ...@@ -1668,9 +1676,12 @@ var authenticated_command_handlers = {
var sub=getsub(args[1]); var sub=getsub(args[1]);
if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) { if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) {
lock_cfg();
read_cfg(sub, false);
saved_config[sub].subscribed = false;
save_cfg(false);
unlock_cfg();
tagged(tag, "OK", "Unsubscribed..."); tagged(tag, "OK", "Unsubscribed...");
// This may leave the to you only bit set... yay.
msg_area.sub[sub].scan_cfg&=~SCAN_CFG_NEW;
} }
else else
tagged(tag, "NO", "Can't unsubscribe that sub (what is it?)"); tagged(tag, "NO", "Can't unsubscribe that sub (what is it?)");
...@@ -1792,7 +1803,6 @@ function do_store(seq, uid, item, data) ...@@ -1792,7 +1803,6 @@ function do_store(seq, uid, item, data)
lock_cfg(); lock_cfg();
read_cfg(index.code, false); read_cfg(index.code, false);
apply_seen(index);
for(i in seq) { for(i in seq) {
idx=index.idx[seq[i]]; idx=index.idx[seq[i]];
hdr=base.get_msg_header(seq[i], /* expand_fields: */false); hdr=base.get_msg_header(seq[i], /* expand_fields: */false);
...@@ -1838,15 +1848,18 @@ function do_store(seq, uid, item, data) ...@@ -1838,15 +1848,18 @@ function do_store(seq, uid, item, data)
lock_cfg(); lock_cfg();
read_cfg(base.cfg.code, false); read_cfg(base.cfg.code, false);
if(saved_config[base.cfg.code] == undefined) { if(saved_config[base.cfg.code] == undefined) {
saved_config[base.cfg.code] = {}; saved_config[base.cfg.code] = {subscribed:false};
} }
if(saved_config[base.cfg.code].Seen == undefined) { if(saved_config[base.cfg.code].Seen == undefined) {
saved_config[base.cfg.code].Seen = {}; saved_config[base.cfg.code].Seen = {};
saved_config[base.cfg.code].Seen[header.number]=0; saved_config[base.cfg.code].Seen[header.number]=0;
} }
saved_config[base.cfg.code].Seen[seq[i]] ^= 1; saved_config[base.cfg.code].Seen[seq[i]] ^= 1;
if (saved_config[base.cfg.code].Seen[seq[i]])
index.idx[seq[i]].attr |= MSG_READ;
else
index.idx[seq[i]].attr &= ~MSG_READ;
save_cfg(false); save_cfg(false);
apply_seen(index);
unlock_cfg(); unlock_cfg();
} }
if(changed) if(changed)
...@@ -2213,7 +2226,6 @@ var selected_command_handlers = { ...@@ -2213,7 +2226,6 @@ var selected_command_handlers = {
lock_cfg(); lock_cfg();
read_cfg(get_base_code(base), false); read_cfg(get_base_code(base), false);
apply_seen(index);
for(i in seq) { for(i in seq) {
send_fetch_response(seq[i], data_items, false); send_fetch_response(seq[i], data_items, false);
if (!client.socket.is_connected) if (!client.socket.is_connected)
...@@ -2269,7 +2281,6 @@ var selected_command_handlers = { ...@@ -2269,7 +2281,6 @@ var selected_command_handlers = {
data_items=parse_data_items(args[3]); data_items=parse_data_items(args[3]);
lock_cfg(); lock_cfg();
read_cfg(get_base_code(base), false); read_cfg(get_base_code(base), false);
apply_seen(index);
for(i in seq) { for(i in seq) {
send_fetch_response(seq[i], data_items, true); send_fetch_response(seq[i], data_items, true);
if (!client.socket.is_connected) if (!client.socket.is_connected)
...@@ -2330,7 +2341,7 @@ function read_old_cfg() ...@@ -2330,7 +2341,7 @@ function read_old_cfg()
if(secs[sec].search(/\.seen$/)!=-1) { if(secs[sec].search(/\.seen$/)!=-1) {
this_sec = secs[sec].replace(/(?:\.seen)+$/,''); this_sec = secs[sec].replace(/(?:\.seen)+$/,'');
if(saved_config[this_sec]==undefined) if(saved_config[this_sec]==undefined)
saved_config[this_sec]={}; saved_config[this_sec]={subscribed:false};
saved_config[this_sec].Seen=cfgfile.iniGetObject(secs[sec]); saved_config[this_sec].Seen=cfgfile.iniGetObject(secs[sec]);
if(saved_config[this_sec].Seen==null) if(saved_config[this_sec].Seen==null)
saved_config[this_sec].Seen={}; saved_config[this_sec].Seen={};
...@@ -2339,7 +2350,7 @@ function read_old_cfg() ...@@ -2339,7 +2350,7 @@ function read_old_cfg()
got_bseen.push(secs[sec]); got_bseen.push(secs[sec]);
this_sec = secs[sec].replace(/(?:\.bseen)+$/,''); this_sec = secs[sec].replace(/(?:\.bseen)+$/,'');
if(saved_config[this_sec]==undefined) if(saved_config[this_sec]==undefined)
saved_config[this_sec]={}; saved_config[this_sec]={subscribed:false};
if(saved_config[this_sec].Seen==undefined) if(saved_config[this_sec].Seen==undefined)
saved_config[this_sec].Seen={}; saved_config[this_sec].Seen={};
} }
...@@ -2389,7 +2400,7 @@ function read_cfg(sub, lck) ...@@ -2389,7 +2400,7 @@ function read_cfg(sub, lck)
if (lck) if (lck)
lock_cfg(); lock_cfg();
if(saved_config[sub]==undefined) if(saved_config[sub]==undefined)
saved_config[sub]={}; saved_config[sub]={subscribed:false};
cfgfile.rewind(); cfgfile.rewind();
newfile = JSON.parse(cfgfile.read()); newfile = JSON.parse(cfgfile.read());
...@@ -2403,6 +2414,10 @@ function read_cfg(sub, lck) ...@@ -2403,6 +2414,10 @@ function read_cfg(sub, lck)
saved_config[newsub].Seen = newfile[newsub].seen; saved_config[newsub].Seen = newfile[newsub].seen;
else else
saved_config[newsub].Seen = newfile[newsub].seen = {}; saved_config[newsub].Seen = newfile[newsub].seen = {};
if (newfile[newsub].hasOwnProperty('subscribed'))
saved_config[newsub].subscribed = newfile[newsub].subscribed;
else
saved_config[newsub].subscribed = false;
if (newfile[newsub].hasOwnProperty('bseen')) { if (newfile[newsub].hasOwnProperty('bseen')) {
for (i in newfile[newsub].bseen) { for (i in newfile[newsub].bseen) {
basemsg = parseInt(i, 10); basemsg = parseInt(i, 10);
...@@ -2432,6 +2447,7 @@ function read_cfg(sub, lck) ...@@ -2432,6 +2447,7 @@ function read_cfg(sub, lck)
if(saved_config[sub].Seen==undefined) if(saved_config[sub].Seen==undefined)
saved_config[sub].Seen={}; saved_config[sub].Seen={};
} }
apply_seen(index);
} }
js.on_exit("exit_func()"); js.on_exit("exit_func()");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment