BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #15094同步于 1 周前
BBSMan_Dev机器人发帖

[KBS] 同主题修改标题

ArchLinux.
1 周前镜像同步2 回复
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH 我最近发现水木没有同主题改标题的功能,于是自己做了一个。 现在还有几点没完善: 1. 标题修改后,文件内文件头的标题部分还没修改 2. 还没写记录日志的部分 3. 主题中有个re文被改标题之后,同主题改标题操作对这个文章也会处理 --- src/bbs.c (revision 11803) +++ src/bbs.c (working copy) @@ -6349,7 +6349,8 @@ BM_TMP, BM_MARKDEL, BM_NOREPLY, - BM_TOTAL + BM_TOTAL, + BM_RENAME }; const char *SR_BMitems[] = { @@ -6360,9 +6361,10 @@ "放入暂存档", "设定拟删标记", "设定不可回复", - "制作合集" + "制作合集", + "修改标题" }; -const int item_num = 8; +const int item_num = sizeof(SR_BMitems)/sizeof(SR_BMitems[0]); struct BMFunc_arg { bool delpostnum; /*是否减文章数*/ @@ -6510,6 +6512,13 @@ getCurrentUser()->userid); fh->accessed[0]|=FILE_IMPORTED; break; + case BM_RENAME: + if (fh->id == fh->reid){ + strcpy(fh->title, func_arg->announce_path); + }else{ + sprintf(fh->title, "Re: %s", func_arg->announce_path); + } + break; } #ifdef BOARD_SECURITY_LOG if (func_arg->fn!=NULL) { @@ -6665,6 +6674,15 @@ return DONOTHING; } func_arg.announce_path=annpath; + } else if (BMch == BM_RENAME){ + gdataret = getdata(t_lines-2, 0, "修改后的标题: ", buf, ARTICLE_TITLE_LEN-4, DOECHO, NULL, true); + if (gdataret == -1){ + saveline(t_lines-2, 1, NULL); + saveline(t_lines-3, 1, linebuffer); + return DONOTHING; + } + func_arg.announce_path = (char*)malloc(sizeof(buf)); + strcpy(func_arg.announce_path, buf); } func_arg.action=BMch;
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
ArchLinux.机器人#1 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH 刚刚找到了edit_title()这个函数,等会儿学习一下,把代码搬过来。 【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】 : 我最近发现水木没有同主题改标题的功能,于是自己做了一个。 : 现在还有几点没完善: : 1. 标题修改后,文件内文件头的标题部分还没修改 : ...................
ArchLinux.机器人#2 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH 使用了add_edit_mark之后,第一个问题解决了。 后面我是用malloc分配空间,依然有内存泄漏。我发现之前BM_IMPORT是 把一个局部变量数组的地址赋值给func_arg.announce_path,感觉很有问题, 我还要再看看。 --- src/bbs.c (revision 11803) +++ src/bbs.c (working copy) @@ -6349,7 +6349,8 @@ BM_TMP, BM_MARKDEL, BM_NOREPLY, - BM_TOTAL + BM_TOTAL, + BM_RENAME }; const char *SR_BMitems[] = { @@ -6360,9 +6361,10 @@ "放入暂存档", "设定拟删标记", "设定不可回复", - "制作合集" + "制作合集", + "修改标题" }; -const int item_num = 8; +const int item_num = sizeof(SR_BMitems)/sizeof(SR_BMitems[0]); struct BMFunc_arg { bool delpostnum; /*是否减文章数*/ @@ -6381,6 +6383,8 @@ struct read_arg* arg=(struct read_arg*)conf->arg; struct BMFunc_arg* func_arg=(struct BMFunc_arg*)extraarg; int res, ret=APPLY_CONTINUE; + char tmp[PATH_MAX], genbuf[PATH_MAX], *t; + #ifdef BOARD_SECURITY_LOG struct fileheader xfh; int failed=0; @@ -6510,6 +6514,21 @@ getCurrentUser()->userid); fh->accessed[0]|=FILE_IMPORTED; break; + case BM_RENAME: + // use the code of edit_title() + strcpy(tmp, arg->direct); // directory name + if ((t = strrchr(tmp, '/')) != NULL) + *t = '\0'; + sprintf(genbuf, "%s/%s", tmp, fh->filename); + + if (fh->id == fh->reid){ + add_edit_mark(genbuf, 2, func_arg->announce_path+4, getSession()); + strcpy(fh->title, func_arg->announce_path+4); + }else{ + add_edit_mark(genbuf, 2, func_arg->announce_path, getSession()); + strcpy(fh->title, func_arg->announce_path); + } + break; } #ifdef BOARD_SECURITY_LOG if (func_arg->fn!=NULL) { @@ -6665,6 +6684,28 @@ return DONOTHING; } func_arg.announce_path=annpath; + } else if (BMch == BM_RENAME){ + strcpy(buf, fh->title); + gdataret = getdata(t_lines-2, 0, "新文章标题: ", buf, ARTICLE_TITLE_LEN-4, DOECHO, NULL, false); + + if (gdataret == -1){ + saveline(t_lines-2, 1, NULL); + saveline(t_lines-3, 1, linebuffer); + return DONOTHING; + } + + if (buf[0] == '\0' || strcmp(buf, fh->title)==0){ + return DONOTHING; + } + + process_control_chars(buf,NULL); + // a dirty hack: use func_arg.announce_path to store the title + func_arg.announce_path = (char*)malloc(sizeof(buf)); + // use a little trick + // let title be "Re: "+<Subject Title> + // split it when processing a single article + strcpy(func_arg.announce_path, "Re: "); + strnzhcpy(func_arg.announce_path+4, buf, ARTICLE_TITLE_LEN-4); } func_arg.action=BMch; 【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】 : 我最近发现水木没有同主题改标题的功能,于是自己做了一个。 : 现在还有几点没完善: : 1. 标题修改后,文件内文件头的标题部分还没修改 : ...................