/[LeafOK_CVS]/lbbs/src/section_list_display.c
ViewVC logotype

Diff of /lbbs/src/section_list_display.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.37 by sysadm, Tue Jun 24 10:01:24 2025 UTC Revision 1.41 by sysadm, Tue Sep 30 04:56:16 2025 UTC
# Line 15  Line 15 
15   ***************************************************************************/   ***************************************************************************/
16    
17  #include "article_cache.h"  #include "article_cache.h"
18    #include "article_op.h"
19  #include "article_post.h"  #include "article_post.h"
20  #include "article_view_log.h"  #include "article_view_log.h"
21  #include "article_del.h"  #include "article_del.h"
# Line 38  static int section_topic_view_tid = -1; Line 39  static int section_topic_view_tid = -1;
39  enum select_cmd_t  enum select_cmd_t
40  {  {
41          EXIT_SECTION = 0,          EXIT_SECTION = 0,
42          VIEW_ARTICLE = 1,          VIEW_ARTICLE,
43          CHANGE_PAGE = 2,          CHANGE_PAGE,
44          SHOW_HELP = 3,          SHOW_HELP,
45          CHANGE_NAME_DISPLAY = 4,          CHANGE_NAME_DISPLAY,
46          POST_ARTICLE = 5,          POST_ARTICLE,
47          EDIT_ARTICLE = 6,          EDIT_ARTICLE,
48          DELETE_ARTICLE = 7,          DELETE_ARTICLE,
49          FIRST_TOPIC_ARTICLE = 8,          QUERY_ARTICLE,
50          LAST_TOPIC_ARTICLE = 9,          FIRST_TOPIC_ARTICLE,
51          VIEW_EX_DIR = 10,          LAST_TOPIC_ARTICLE,
52            VIEW_EX_DIR,
53  };  };
54    
55  static int section_list_draw_items(int page_id, ARTICLE *p_articles[], int article_count, int display_nickname, int ontop_start_offset)  static int section_list_draw_items(int page_id, ARTICLE *p_articles[], int article_count, int display_nickname, int ontop_start_offset)
# Line 106  static int section_list_draw_items(int p Line 108  static int section_list_draw_items(int p
108                          strftime(str_time, sizeof(str_time), "%m/%Y", &tm_sub);                          strftime(str_time, sizeof(str_time), "%m/%Y", &tm_sub);
109                  }                  }
110    
111                  strncpy(title_f, (p_articles[i]->tid == 0 ? " " : ""), sizeof(title_f) - 1);                  strncpy(title_f, (p_articles[i]->tid == 0 ? "● " : ""), sizeof(title_f) - 1);
112                  title_f[sizeof(title_f) - 1] = '\0';                  title_f[sizeof(title_f) - 1] = '\0';
113                  strncat(title_f, (p_articles[i]->transship ? "[ת]" : ""), sizeof(title_f) - 1 - strnlen(title_f, sizeof(title_f)));                  strncat(title_f, (p_articles[i]->transship ? "[转载]" : ""), sizeof(title_f) - 1 - strnlen(title_f, sizeof(title_f)));
114                  strncat(title_f, p_articles[i]->title, sizeof(title_f) - 1 - strnlen(title_f, sizeof(title_f)));                  strncat(title_f, p_articles[i]->title, sizeof(title_f) - 1 - strnlen(title_f, sizeof(title_f)));
115                  len = split_line(title_f, 47 - (display_nickname ? 8 : 0), &eol, &title_f_len, 1);                  len = split_line(title_f, 47 - (display_nickname ? 8 : 0), &eol, &title_f_len, 1);
116                  if (title_f[len] != '\0')                  if (title_f[len] != '\0')
# Line 119  static int section_list_draw_items(int p Line 121  static int section_list_draw_items(int p
121                  moveto(4 + i, 1);                  moveto(4 + i, 1);
122                  if (i >= ontop_start_offset)                  if (i >= ontop_start_offset)
123                  {                  {
124                          prints("   \033[1;33m[ʾ]\033[m %c %s%*s %s %s%s\033[m",                          prints("   \033[1;33m[提示]\033[m %c %s%*s %s %s%s\033[m",
125                                     article_flag,                                     article_flag,
126                                     (display_nickname ? p_articles[i]->nickname : p_articles[i]->username),                                     (display_nickname ? p_articles[i]->nickname : p_articles[i]->username),
127                                     (display_nickname ? BBS_nickname_max_len - (int)strnlen(p_articles[i]->nickname, sizeof(p_articles[i]->nickname))                                     (display_nickname ? BBS_nickname_max_len - (int)strnlen(p_articles[i]->nickname, sizeof(p_articles[i]->nickname))
# Line 162  static int section_list_draw_items(int p Line 164  static int section_list_draw_items(int p
164    
165  static int section_list_draw_screen(const char *sname, const char *stitle, const char *master_list, int display_nickname)  static int section_list_draw_screen(const char *sname, const char *stitle, const char *master_list, int display_nickname)
166  {  {
167          char str_section_master[LINE_BUFFER_LEN] = "";          char str_section_master[LINE_BUFFER_LEN] = "诚征版主中";
168          char str_section_name[LINE_BUFFER_LEN];          char str_section_name[LINE_BUFFER_LEN];
169    
170          if (master_list[0] != '\0')          if (master_list[0] != '\0')
171          {          {
172                  snprintf(str_section_master, sizeof(str_section_master), "%s", master_list);                  snprintf(str_section_master, sizeof(str_section_master), "版主:%s", master_list);
173          }          }
174          snprintf(str_section_name, sizeof(str_section_name), " [%s]", sname);          snprintf(str_section_name, sizeof(str_section_name), "讨论区 [%s]", sname);
175    
176          clearscr();          clearscr();
177          show_top(str_section_master, stitle, str_section_name);          show_top(str_section_master, stitle, str_section_name);
178          moveto(2, 0);          moveto(2, 0);
179          prints("[\033[1;32m\033[0;37m,\033[1;32mESC\033[0;37m] ѡ[\033[1;32m\033[0;37m,\033[1;32m\033[0;37m] "          prints("返回[\033[1;32m←\033[0;37m,\033[1;32mESC\033[0;37m] 选择[\033[1;32m↑\033[0;37m,\033[1;32m↓\033[0;37m] "
180                     "Ķ[\033[1;32m\033[0;37m,\033[1;32mENTER\033[0;37m] [\033[1;32mCtrl-P\033[0;37m] "                     "阅读[\033[1;32m→\033[0;37m,\033[1;32mENTER\033[0;37m] 发表[\033[1;32mCtrl-P\033[0;37m] "
181                     "%s[\033[1;32mn\033[0;37m] [\033[1;32mx\033[0;37m] [\033[1;32mh\033[0;37m]\033[m",                     "%s[\033[1;32mn\033[0;37m] 精华区[\033[1;32mx\033[0;37m] 帮助[\033[1;32mh\033[0;37m]\033[m",
182                     (display_nickname ? "û" : "dz"));                     (display_nickname ? "用户名" : "昵称"));
183          moveto(3, 0);          moveto(3, 0);
184          if (display_nickname)          if (display_nickname)
185          {          {
186                  prints("\033[44;37m  \033[1;37m     dz              ±                               \033[m");                  prints("\033[44;37m  \033[1;37m 编  号   发布者昵称           日  期  文章标题                               \033[m");
187          }          }
188          else          else
189          {          {
190                  prints("\033[44;37m  \033[1;37m            ±                                       \033[m");                  prints("\033[44;37m  \033[1;37m 编  号   发 布 者     日  期  文章标题                                       \033[m");
191          }          }
192    
193          return 0;          return 0;
# Line 238  static enum select_cmd_t section_list_se Line 240  static enum select_cmd_t section_list_se
240                  case Ctrl('P'):                  case Ctrl('P'):
241                          return POST_ARTICLE;                          return POST_ARTICLE;
242                  case 'E':                  case 'E':
243                          return EDIT_ARTICLE;                          if (item_count > 0)
244                            {
245                                    return EDIT_ARTICLE;
246                            }
247                            break;
248                  case 'd':                  case 'd':
249                          return DELETE_ARTICLE;                          if (item_count > 0)
250                            {
251                                    return DELETE_ARTICLE;
252                            }
253                            break;
254                    case Ctrl('Q'):
255                            if (item_count > 0)
256                            {
257                                    return QUERY_ARTICLE;
258                            }
259                            break;
260                  case KEY_HOME:                  case KEY_HOME:
261                          *p_page_id = 0;                          *p_page_id = 0;
262                  case 'P':                  case 'P':
# Line 293  static enum select_cmd_t section_list_se Line 309  static enum select_cmd_t section_list_se
309                          }                          }
310                          break;                          break;
311                  case '=':                  case '=':
312                          return FIRST_TOPIC_ARTICLE;                          if (item_count > 0)
313                            {
314                                    return FIRST_TOPIC_ARTICLE;
315                            }
316                            break;
317                  case '\\':                  case '\\':
318                          return LAST_TOPIC_ARTICLE;                          if (item_count > 0)
319                            {
320                                    return LAST_TOPIC_ARTICLE;
321                            }
322                            break;
323                  case 'h':                  case 'h':
324                          return SHOW_HELP;                          return SHOW_HELP;
325                  case 'x':                  case 'x':
# Line 346  static int display_article_key_handler(i Line 370  static int display_article_key_handler(i
370                  if (section_topic_view_mode)                  if (section_topic_view_mode)
371                  {                  {
372                          snprintf(p_ctx->msg, sizeof(p_ctx->msg),                          snprintf(p_ctx->msg, sizeof(p_ctx->msg),
373                                           "| [\033[32m\033[33m,\033[32mESC\033[33m] "                                           "| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] "
374                                           "ͬĶ[\033[32m\033[33m/\033[32m\033[33m] "                                           "同主题阅读[\033[32m↑\033[33m/\033[32m↓\033[33m] "
375                                           "л[\033[32mp\033[33m] ظ[\033[32mr\033[33m] [\033[32mh\033[33m] |");                                           "切换[\033[32mp\033[33m] 回复[\033[32mr\033[33m] 帮助[\033[32mh\033[33m] |");
376                  }                  }
377                  else                  else
378                  {                  {
379                          snprintf(p_ctx->msg, sizeof(p_ctx->msg),                          snprintf(p_ctx->msg, sizeof(p_ctx->msg),
380                                           "| [\033[32m\033[33m,\033[32mESC\033[33m] "                                           "| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] "
381                                           "ƶ[\033[32m\033[33m/\033[32m\033[33m/\033[32mPgUp\033[33m/\033[32mPgDn\033[33m] "                                           "移动[\033[32m↑\033[33m/\033[32m↓\033[33m/\033[32mPgUp\033[33m/\033[32mPgDn\033[33m] "
382                                           "л[\033[32mp\033[33m] ظ[\033[32mr\033[33m] [\033[32mh\033[33m] |");                                           "切换[\033[32mp\033[33m] 回复[\033[32mr\033[33m] 帮助[\033[32mh\033[33m] |");
383                  }                  }
384                  *p_key = 0;                  *p_key = 0;
385                  break;                  break;
# Line 495  int section_list_display(const char *sna Line 519  int section_list_display(const char *sna
519                  }                  }
520    
521                  snprintf(page_info_str, sizeof(page_info_str),                  snprintf(page_info_str, sizeof(page_info_str),
522                                   "\033[33m[\033[36m%d\033[33m/\033[36m%d\033[33mҳ]",                                   "\033[33m[第\033[36m%d\033[33m/\033[36m%d\033[33m页]",
523                                   page_id + 1, MAX(page_count, 1));                                   page_id + 1, MAX(page_count, 1));
524    
525                  show_bottom(page_info_str);                  show_bottom(page_info_str);
# Line 774  int section_list_display(const char *sna Line 798  int section_list_display(const char *sna
798                                  return -2;                                  return -2;
799                          }                          }
800                          break;                          break;
801                    case QUERY_ARTICLE:
802                            if ((ret = display_article_meta(p_articles[selected_index]->aid)) < 0)
803                            {
804                                    log_error("display_article_meta(aid=%d) error\n", p_articles[selected_index]->aid);
805                            }
806                            if (section_list_draw_screen(sname, stitle, master_list, display_nickname) < 0)
807                            {
808                                    log_error("section_list_draw_screen() error\n");
809                                    return -2;
810                            }
811                            break;
812                  case FIRST_TOPIC_ARTICLE:                  case FIRST_TOPIC_ARTICLE:
813                  case LAST_TOPIC_ARTICLE:                  case LAST_TOPIC_ARTICLE:
814                          page_id_cur = page_id;                          page_id_cur = page_id;
# Line 826  int section_list_display(const char *sna Line 861  int section_list_display(const char *sna
861    
862  int section_list_ex_dir_display(SECTION_LIST *p_section)  int section_list_ex_dir_display(SECTION_LIST *p_section)
863  {  {
         char str_section_name[LINE_BUFFER_LEN];  
864          MENU_SET ex_menu_set;          MENU_SET ex_menu_set;
865          int ch = 0;          int ch = 0;
866    
# Line 836  int section_list_ex_dir_display(SECTION_ Line 870  int section_list_ex_dir_display(SECTION_
870                  return -1;                  return -1;
871          }          }
872    
873            if (p_section->ex_menu_tm == 0) // N/A
874            {
875                    moveto(2, 1);
876                    clrtoeol();
877                    prints("该版块精华区未开放");
878                    press_any_key();
879                    return 0;
880            }
881    
882          if (get_section_ex_menu_set(p_section, &ex_menu_set) < 0)          if (get_section_ex_menu_set(p_section, &ex_menu_set) < 0)
883          {          {
884                  log_error("get_section_ex_menu_set(sid=%d) error\n", p_section->sid);                  log_error("get_section_ex_menu_set(sid=%d) error\n", p_section->sid);
# Line 843  int section_list_ex_dir_display(SECTION_ Line 886  int section_list_ex_dir_display(SECTION_
886          }          }
887          if (get_menu_shm_readonly(&ex_menu_set) < 0)          if (get_menu_shm_readonly(&ex_menu_set) < 0)
888          {          {
889                  log_error("set_menu_shm_readonly(sid=%d) error\n", p_section->sid);                  log_error("get_menu_shm_readonly(sid=%d) error\n", p_section->sid);
890                  return -3;                  return -3;
891          }          }
892    
         snprintf(str_section_name, sizeof(str_section_name), "[%s | ]", p_section->sname);  
   
893          clearscr();          clearscr();
894          show_bottom(str_section_name);          show_bottom("");
895    
896          if (display_menu(&ex_menu_set) == 0)          if (display_menu(&ex_menu_set) == 0)
897          {          {
# Line 878  int section_list_ex_dir_display(SECTION_ Line 919  int section_list_ex_dir_display(SECTION_
919                                          break;                                          break;
920                                  case REDRAW:                                  case REDRAW:
921                                          clearscr();                                          clearscr();
922                                          show_bottom(str_section_name);                                          show_bottom("");
923                                          display_menu(&ex_menu_set);                                          display_menu(&ex_menu_set);
924                                          break;                                          break;
925                                  case NOREDRAW:                                  case NOREDRAW:


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1