同主题阅读的一个bug
虽然说这是一个expected bug,不过要是能在不牺牲性能的情况下解决,
不是更好?
[症状]
在版面按p,开始同主题阅读某一主题的帖子。然后连续按p,就会依次
阅读该主题下的所有帖子。
但是如果在p的过程中,这个主题下面跟了新的帖子,那么p到后来就会
跑到别的帖子里去。通常是跑到置底或者版面开头去。当然在某些特殊
情况下(正好分页)也能正确阅读。
[原因]
简略地说,是因为read_arg里每次缓存一页版面的文章(20篇),
而同主题p每次查询下一篇同主题文章偏移量(pos)是和.DIR
文件同步的。也就是说p出来的文章pos可能大于缓存最后一页的
最大文章序号,这样就p到置底或者版面开头去了(loop)。
[解决方法]
看 src/newread.c 的 read_key() 函数:
...
} else if (arg->readmode == READ_THREAD) { /* 处理同主题阅读 */
int findthread = apply_thread(conf,
currfh,
fileheader_thread_read,
false,
true,
(void *) SR_NEXT);
if (findthread != 0) {
list_select_add_key(conf, 'r'); //SEL change的下一条指令是read
ret = SHOW_SELCHANGE;
}
} else {
...
把上面的
list_select_add_key(conf, 'r'); //SEL change的下一条指令是read
ret = SHOW_SELCHANGE;
改成
if (conf->new_pos > arg->filecount) {
list_select_add_key(conf, 'r');
list_select_add_key(conf, KEY_SELCHANGE);
ret = SHOW_DIRCHANGE;
} else {
list_select_add_key(conf, 'r');
ret = SHOW_SELCHANGE;
}
这个解决方法简直就是一个补丁 -,- 而且并不完美(比如并不解决版面删文的
同步问题)。虽然这个补丁并不优美,但是我试了一下确实解决了上面提到的问题。
各位看看这里面有没有我没注意到的副作用呀。。。//bow~~~
--
FROM 59.66.199.*