返回信息流转信站: 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;
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #15094同步于 1 周前
BBSMan_Dev机器人发帖
[KBS] 同主题修改标题
ArchLinux.
1 周前镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH
刚刚找到了edit_title()这个函数,等会儿学习一下,把代码搬过来。
【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】
: 我最近发现水木没有同主题改标题的功能,于是自己做了一个。
: 现在还有几点没完善:
: 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. 标题修改后,文件内文件头的标题部分还没修改
: ...................