diff --git a/exec/newslink.js b/exec/newslink.js index 29f06b814d1b13cd1923124ac8706747ac7a935d..c5464a7b8a19e9f3df84608f9d26586889eb109e 100644 --- a/exec/newslink.js +++ b/exec/newslink.js @@ -263,13 +263,22 @@ var imported=0; var twitlist_fname = system.ctrl_dir + "twitlist.cfg"; var use_twitlist = file_exists(twitlist_fname); +function article_listed(list, article) +{ + var i; + + for(i in list) + if(list[i]==article) + return(list.splice(i,1)); + + return(false); +} + printf("Scanning %lu message bases...\r\n",area.length); for(i in area) { - if(!socket.is_connected) { - print("Disconnected"); + if(!socket.is_connected) break; - } if(js.terminated || file_exists(stop_semaphore)) break; @@ -491,6 +500,18 @@ for(i in area) { ptr++; } + delete article_list; + if(ptr<=last_msg) { + writeln(format("XOVER %u-%u", ptr, last_msg)); + if(parseInt(readln())==224) { + printf("Getting headers for articles %u through %u\r\n", ptr, last_msg); + article_list = new Array(); + while((rsp=readln())!='.' && rsp) + article_list.push(parseInt(rsp)); + printf("%u new articles\r\n", article_list.length); + } + } + for(;socket.is_connected && ptr<=last_msg && !js.terminated @@ -498,11 +519,15 @@ for(i in area) { ;ptr++) { if(this.console!=undefined) console.line_counter = 0; + + if(article_list && !article_listed(article_list,ptr)) + continue; + + printf("Retrieving article: %u\r\n", ptr); writeln(format("ARTICLE %lu",ptr)); rsp = readln(); if(rsp==null || rsp[0]!='2') { - if(debug) - printf("!ARTICLE %lu ERROR: %s\r\n",ptr,rsp); + printf("!ARTICLE %lu ERROR: %s\r\n",ptr,rsp); continue; } body=""; @@ -762,6 +787,7 @@ for(i in area) { printf("!IMPORT %lu ERROR: %s\r\n", ptr, msgbase.last_error); } + ptr--; /* point to last requested article number */ if(ptr > last_msg) ptr = last_msg; import_ptr = ptr; @@ -781,8 +807,12 @@ for(i in area) { // load("binarydecoder.js",sub); } -writeln("quit"); -readln(); +if(!socket.is_connected) + print("!DISCONNECTED BY SERVER"); +else { + writeln("quit"); + readln(); +} delete socket;