summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-03-07 16:57:34 +0800
committervictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-03-07 16:57:34 +0800
commitb2297bedf2c63a6bd15695e37d555588a7efe15a (patch)
treecdfef1fe39c7765a03f619160f2c7ccf4f1e9a74
parentd509c57b362be90ad2c4cb9dca3ecf160bfca64a (diff)
downloadpttbbs-victor.symblic.tar
pttbbs-victor.symblic.tar.gz
pttbbs-victor.symblic.tar.bz2
pttbbs-victor.symblic.tar.lz
pttbbs-victor.symblic.tar.xz
pttbbs-victor.symblic.tar.zst
pttbbs-victor.symblic.zip
prepare to mergevictor.symblic
git-svn-id: http://opensvn.csie.org/pttbbs/branches/victor.symblic@1580 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/fav.h1
-rw-r--r--include/proto.h1
-rw-r--r--mbbsd/board.c119
-rw-r--r--mbbsd/fav.c60
4 files changed, 97 insertions, 84 deletions
diff --git a/include/fav.h b/include/fav.h
index 2e824471..ed09762f 100644
--- a/include/fav.h
+++ b/include/fav.h
@@ -21,6 +21,7 @@
#define FAV3 ".fav3"
#define FAV4 ".fav4"
+#define FAVNB ".favnb"
typedef struct {
char type;
diff --git a/include/proto.h b/include/proto.h
index 74de00da..3922cc86 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -253,6 +253,7 @@ void fav_cleanup(void);
void fav_clean_invisible(void);
char current_fav_at_root(void);
fav_t *get_fav_folder(fav_type_t *ft);
+void subscribe_newfav(void);
/* friend */
void friend_edit(int type);
diff --git a/mbbsd/board.c b/mbbsd/board.c
index e9a7f265..9a14b82a 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -264,11 +264,11 @@ brc_unread(const char *fname, int bnum, const int *blist)
/* personal board state
* 癸狾 attr (BRD_* in ../include/pttstruct.h),
* 硂ㄇ琌τ钵 flag */
-#define NBRD_FAV 1
-#define NBRD_BOARD 2
-#define NBRD_LINE 4
-#define NBRD_FOLDER 8
-#define NBRD_TAG 16
+#define NBRD_FAV 1
+#define NBRD_BOARD 2
+#define NBRD_LINE 4
+#define NBRD_FOLDER 8
+#define NBRD_TAG 16
#define NBRD_UNREAD 32
#define NBRD_SYMBOLIC 64
@@ -276,8 +276,6 @@ brc_unread(const char *fname, int bnum, const int *blist)
#define GROUPOP() (currmode & MODE_GROUPOP)
-#define FAVNB ".favnb"
-
#define B_TOTAL(bptr) (SHM->total[(bptr)->bid - 1])
#define B_LASTPOSTTIME(bptr) (SHM->lastposttime[(bptr)->bid - 1])
#define B_BH(bptr) (&bcache[(bptr)->bid - 1])
@@ -296,60 +294,6 @@ inline int getbid(boardheader_t *fh)
return (fh - bcache);
}
-#define BRD_OLD 0
-#define BRD_NEW 1
-#define BRD_END 2
-
-void updatenewfav(int mode)
-{
- /* mode: 0: don't write to fav 1: write to fav */
- int i, fd;
- char fname[80], *brd;
-
- if(!(cuser.uflag2 & FAVNEW_FLAG))
- return;
-
- setuserfile(fname, FAVNB);
-
- if( (fd = open(fname, O_RDWR, 0600)) != -1 ){
-
- brd = (char *)malloc((numboards + 1) * sizeof(char));
- memset(brd, 0, (numboards + 1) * sizeof(char));
- read(fd, brd, (numboards + 1) * sizeof(char));
-
- for(i = 0; i < numboards + 1 && brd[i] != BRD_END; i++){
- if(brd[i] == BRD_NEW){
- if(bcache[i].brdname[0] && HasPerm(&bcache[i])){ // check the permission if the board exsits
- if(mode)
- fav_add_board(i + 1);
- brd[i] = BRD_OLD;
- }
- }
- else{
- if(!bcache[i].brdname[0])
- brd[i] = BRD_NEW;
- }
- }
- if( i < numboards) // the board number may change
- for(i-- ; i < numboards; i++){
- if(bcache[i].brdname[0] && HasPerm(&bcache[i])){
- if(mode)
- fav_add_board(i + 1);
- brd[i] = BRD_OLD;
- }
- else
- brd[i] = BRD_NEW;
- }
-
- brd[i] = BRD_END;
-
- lseek(fd, 0, SEEK_SET);
- write(fd, brd, (numboards + 1 ) * sizeof(char));
- free(brd);
- close(fd);
- }
-}
-
void imovefav(int old)
{
char buf[5];
@@ -1130,16 +1074,22 @@ choose_board(int newflag)
brdnum = -1;
break;
case Ctrl('D'):
- fav_remove_all_tagged_item();
- brdnum = -1;
+ if (HAS_PERM(PERM_LOGINOK)) {
+ fav_remove_all_tagged_item();
+ brdnum = -1;
+ }
break;
case Ctrl('A'):
- fav_add_all_tagged_item();
- brdnum = -1;
+ if (HAS_PERM(PERM_LOGINOK)) {
+ fav_add_all_tagged_item();
+ brdnum = -1;
+ }
break;
case Ctrl('T'):
- fav_remove_all_tag();
- brdnum = -1;
+ if (HAS_PERM(PERM_LOGINOK)) {
+ fav_remove_all_tag();
+ brdnum = -1;
+ }
break;
case Ctrl('P'):
if (class_bid != 0 &&
@@ -1169,7 +1119,7 @@ choose_board(int newflag)
brdnum = -1;
head = 9999;
}
- else if (HAS_PERM(PERM_BASIC) && yank_flag == 0) {
+ else if (HAS_PERM(PERM_LOGINOK) && yank_flag == 0) {
if (fav_add_line() == NULL) {
vmsg("穝糤ア毖だ筳絬/羆程稲 计秖笷程");
break;
@@ -1188,7 +1138,7 @@ choose_board(int newflag)
}
break;
case 'm':
- if (HAS_PERM(PERM_BASIC)) {
+ if (HAS_PERM(PERM_LOGINOK)) {
ptr = &nbrd[num];
if (yank_flag == 0) {
if (ptr->myattr & NBRD_FAV) {
@@ -1215,7 +1165,7 @@ choose_board(int newflag)
}
break;
case 'M':
- if (HAS_PERM(PERM_BASIC)){
+ if (HAS_PERM(PERM_LOGINOK)){
if (class_bid == 0 && yank_flag == 0){
imovefav(num);
brdnum = -1;
@@ -1224,7 +1174,7 @@ choose_board(int newflag)
}
break;
case 'g':
- if (HAS_PERM(PERM_BASIC) && yank_flag == 0) {
+ if (HAS_PERM(PERM_LOGINOK) && yank_flag == 0) {
fav_type_t *ft;
if (fav_stack_full()){
vmsg("ヘ魁笷程糷计!!");
@@ -1243,7 +1193,7 @@ choose_board(int newflag)
}
break;
case 'T':
- if (HAS_PERM(PERM_BASIC) && nbrd[num].myattr & NBRD_FOLDER) {
+ if (HAS_PERM(PERM_LOGINOK) && nbrd[num].myattr & NBRD_FOLDER) {
fav_type_t *ft = getfolder(nbrd[num].bid);
strlcpy(buf, get_item_title(ft), sizeof(buf));
getdata_buf(b_lines - 1, 0, "叫块狾:", buf, 65, DOECHO);
@@ -1252,7 +1202,7 @@ choose_board(int newflag)
}
break;
case 'K':
- if (HAS_PERM(PERM_BASIC)) {
+ if (HAS_PERM(PERM_LOGINOK)) {
char c, fname[80];
if (!current_fav_at_root()) {
vmsg("叫и程稲程糷磅︽セ\");
@@ -1290,26 +1240,27 @@ choose_board(int newflag)
}
break;
case 'z':
- if (HAS_PERM(PERM_BASIC))
+ if (HAS_PERM(PERM_LOGINOK))
vmsg("糑糑 硂\竒砆и程稲奔翅!");
break;
+
case 'Z':
- if (HAS_PERM(PERM_BASIC)) {
- sprintf(buf, "絋﹚璶 %s璹綷\ 穝狾? [N/y] ", cuser.uflag2 & FAVNEW_FLAG ? "" : "");
- if (getans(buf) != 'y')
+ if (HAS_PERM(PERM_LOGINOK)) {
+ char genbuf[256];
+ sprintf(genbuf, "絋﹚璶 %s璹綷\ 穝狾? [N/y] ", cuser.uflag2 & FAVNEW_FLAG ? "" : "");
+ if (getans(genbuf) != 'y')
break;
cuser.uflag2 ^= FAVNEW_FLAG;
- if(cuser.uflag2 & FAVNEW_FLAG){
- setuserfile(buf, FAVNB);
- if( (tmp = open(buf, O_RDONLY, 0600)) != -1 ){
- close(tmp);
- updatenewfav(0);
- }
+ if (cuser.uflag2 & FAVNEW_FLAG) {
+ subscribe_newfav();
+ vmsg("ち传璹綷\穝狾家Α");
}
- vmsg((cuser.uflag2 & FAVNEW_FLAG) ? "ち传璹綷\穝狾家Α" : "ち传タ盽家Α");
+ else
+ vmsg("璹綷\穝狾");
}
break;
+
case 'v':
case 'V':
ptr = &nbrd[num];
diff --git a/mbbsd/fav.c b/mbbsd/fav.c
index 59579f60..33d4c192 100644
--- a/mbbsd/fav.c
+++ b/mbbsd/fav.c
@@ -854,6 +854,66 @@ void fav_set_folder_title(fav_type_t *ft, char *title)
strlcpy(cast_folder(ft)->title, title, sizeof(cast_folder(ft)->title));
}
+#define BRD_OLD 0
+#define BRD_NEW 1
+#define BRD_END 2
+void updatenewfav(int mode)
+{
+ /* mode: 0: don't write to fav 1: write to fav */
+ int i, fd;
+ char fname[80], *brd;
+
+ if(!(cuser.uflag2 & FAVNEW_FLAG))
+ return;
+
+ setuserfile(fname, FAVNB);
+
+ if( (fd = open(fname, O_RDWR | O_CREAT, 0600)) != -1 ){
+
+ brd = (char *)malloc((numboards + 1) * sizeof(char));
+ memset(brd, 0, (numboards + 1) * sizeof(char));
+ read(fd, brd, (numboards + 1) * sizeof(char));
+
+ for(i = 0; i < numboards + 1 && brd[i] != BRD_END; i++){
+ if(brd[i] == BRD_NEW){
+ if(bcache[i].brdname[0] && Ben_Perm(&bcache[i])){ // check the permission if the board exsits
+ if(mode)
+ fav_add_board(i + 1);
+ brd[i] = BRD_OLD;
+ }
+ }
+ else{
+ if(!bcache[i].brdname[0])
+ brd[i] = BRD_NEW;
+ }
+ }
+ if( i < numboards) // the board number may change
+ for(i-- ; i < numboards; i++){
+ if(bcache[i].brdname[0] && Ben_Perm(&bcache[i])){
+ if(mode)
+ fav_add_board(i + 1);
+ brd[i] = BRD_OLD;
+ }
+ else
+ brd[i] = BRD_NEW;
+ }
+
+ brd[i] = BRD_END;
+
+ lseek(fd, 0, SEEK_SET);
+ write(fd, brd, (numboards + 1 ) * sizeof(char));
+ free(brd);
+ close(fd);
+ }
+}
+
+void subscribe_newfav(void)
+{
+ updatenewfav(0);
+}
+
+/** backward compatible **/
+
/* old struct */
#define BRD_UNREAD 1
#define BRD_FAV 2