回文章列表
作者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 ]|[  Ocpu.tfcis.org  ]|[�搟說:]=
=[:摃�╱�:Author ]|[      163.24.253.40       ]|[�:]=
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻