作者crane.bbs@cpu.tfcis.org (蝴蝶) 看板: itoc
標題Re: [問題]新增推文未讀的功能
時間動力核心 (2010/03/01 Mon 14:50:48)
※ 引述《gaod (請叫我神秘工程師)》之銘言:
> ※ 引述《crane (蝴蝶)》之銘言:
> > 我爬了許多文章,爬到04年的itoc大的新增HDR
> > 也修改了g大說的修正功能,
> > 不過我沒有新增喜好推文那部分。
> > 只依hdr的部份去做修改,修改完了,也編譯過了~
> > 但重開機之後就是不會有這個功能出現= =
> > 或許是因為時間的關係,post.c差異了許多,所以沒改變!
> > 拜託各位大大,如果要新增"推文未讀"的功能該怎麼修改????
> 你參考版上的哪一篇文章?
> 你對你的程式碼做了哪些修改?
主要是跟著04年itoc大的下去做修改,把原本fhdr改成hdr
然後在post.c:addscore()這部分修改成g大提供的
: hdr.h:struct HDR
- char owner[80]; /* 作者 (E-mail address) */
+ char owner[76]; /* 作者 (E-mail address) */
+ time_t scorestamp; /* 最近一次推文時間 */
char nick[49]; /* 暱稱 */
: post.c:addscore()
hdd->xmode |= POST_SCORE;
hdd->score += curraddscore;
+ time(&hdd->scorestamp); /* 記錄推文時間,給未讀判斷 */
: post.c:post_attr()
- attr = !(mode & POST_BOTTOM) && brh_unread(fhdr->chrono) ? 0 : 0x20;
/* 已閱讀為小寫,未閱讀為大寫 */
+ if (cuser.ufo & UFO_READMD) /* 喜好設定: 推文未讀 */
+ attr = !(mode & POST_BOTTOM) && brh_unread(fhdr->chrono) ? 0 : 0x20;
+ else
+ attr = !(mode & POST_BOTTOM) &&
+ brh_unread(BMAX(fhdr->chrono, fhdr->stamp)) ? 0 : 0x20;
: post.c:post_history()
time_t prev, chrono, next;
+ time_t prevS, scorestamp, nextS;
+ int unreadC, unreadS;
...
chrono = hdr->chrono;
+ scorestamp = hdr->scorestamp;
- if (!brh_unread(chrono)) /* 如果已在 brh 中,就無需動作 */
+ unreadC = brh_unread(chrono);
+ unreadS = scorestamp && brh_unread(scorestamp);
+ if (!unreadC && !unreadS) /* 如果已在 brh 中,就無需動作 */
return;
...
if (pos >= top)
{
- prev = hdr[-1].chrono;
+ prevS = hdr[-1].scorestamp;
}
else
{
/* amaki.040302.註解: 在畫面以上,只好讀硬碟 */
if (!rec_get(dir, &buf, sizeof(HDR), pos))
+ {
prev = buf.chrono;
+ prevS = buf.scorestamp;
+ }
else
+ {
prev = chrono;
+ prevS = scorestamp;
+ }
}
...
if (pos < top + XO_TALL && pos < xo->max)
{
next = hdr[1].chrono;
+ nextS = hdr[1].scorestamp;
}
else
{
/* amaki.040302.註解: 在畫面以下,只好讀硬碟 */
if (!rec_get(dir, &buf, sizeof(HDR), pos))
+ {
next = buf.chrono;
+ nextS = buf.scorestamp;
+ }
else
+ {
next = chrono;
+ nextS = scorestamp;
+ }
}
+ /* wretch.030404: 配合接文章的chrono,有可能 prev > chrono與next < chrono */
+ if (prev > chrono || next < chrono)
+ prev = next = chrono;
+ if (prevS > scorestamp || nextS < scorestamp)
+ prevS = nextS = scorestamp;
+ if (unreadC)
brh_add(prev, chrono, next);
+ if (unreadS)
+ brh_add(prevS, scorestamp, nextS);
拜託各位解答了~!!!
--
=[﹎:�摃�◣��:﹎Origin ]|[ ���O���� cpu.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊Author ]|[ 163.24.253.40 ]|[���插�﹊:]=