| 21 |
#include "io.h" |
#include "io.h" |
| 22 |
#include "screen.h" |
#include "screen.h" |
| 23 |
#include "log.h" |
#include "log.h" |
| 24 |
|
#include "article_view_log.h" |
| 25 |
#include "str_process.h" |
#include "str_process.h" |
| 26 |
#include <time.h> |
#include <time.h> |
| 27 |
#include <sys/param.h> |
#include <sys/param.h> |
| 29 |
#include <string.h> |
#include <string.h> |
| 30 |
|
|
| 31 |
static int section_topic_view_mode = 0; |
static int section_topic_view_mode = 0; |
| 32 |
|
static int section_topic_view_tid = -1; |
| 33 |
|
|
| 34 |
enum select_cmd_t |
enum select_cmd_t |
| 35 |
{ |
{ |
| 50 |
int len; |
int len; |
| 51 |
int i; |
int i; |
| 52 |
char article_flag; |
char article_flag; |
| 53 |
|
int is_viewed; |
| 54 |
time_t tm_now; |
time_t tm_now; |
| 55 |
|
|
| 56 |
time(&tm_now); |
time(&tm_now); |
| 59 |
|
|
| 60 |
for (i = 0; i < article_count; i++) |
for (i = 0; i < article_count; i++) |
| 61 |
{ |
{ |
| 62 |
article_flag = ' '; |
is_viewed = article_view_log_is_viewed(p_articles[i]->aid, &BBS_article_view_log); |
| 63 |
|
if (is_viewed < 0) |
| 64 |
|
{ |
| 65 |
|
log_error("article_view_log_is_viewed(aid=%d) error\n", p_articles[i]->aid); |
| 66 |
|
is_viewed = 0; |
| 67 |
|
} |
| 68 |
|
|
| 69 |
|
article_flag = (is_viewed ? ' ' : 'N'); |
| 70 |
|
|
| 71 |
if (p_articles[i]->excerption) |
if (p_articles[i]->excerption) |
| 72 |
{ |
{ |
| 73 |
article_flag = 'm'; |
article_flag = (is_viewed ? 'm' : 'M'); |
| 74 |
} |
} |
| 75 |
else if (p_articles[i]->lock) |
else if (p_articles[i]->lock && is_viewed) |
| 76 |
{ |
{ |
| 77 |
article_flag = 'x'; |
article_flag = 'x'; |
| 78 |
} |
} |
| 98 |
} |
} |
| 99 |
|
|
| 100 |
moveto(4 + i, 1); |
moveto(4 + i, 1); |
| 101 |
prints(" %7d %c %s%*s %s %s", |
prints(" %s%7d\033[m %c %s%*s %s %s%s\033[m", |
| 102 |
|
(p_articles[i]->aid == section_topic_view_tid ? "\033[1;33m" : (p_articles[i]->tid == section_topic_view_tid ? "\033[1;36m" : "")), |
| 103 |
p_articles[i]->aid, |
p_articles[i]->aid, |
| 104 |
article_flag, |
article_flag, |
| 105 |
(display_nickname ? p_articles[i]->nickname : p_articles[i]->username), |
(display_nickname ? p_articles[i]->nickname : p_articles[i]->username), |
| 107 |
: BBS_username_max_len - (int)strnlen(p_articles[i]->username, sizeof(p_articles[i]->username))), |
: BBS_username_max_len - (int)strnlen(p_articles[i]->username, sizeof(p_articles[i]->username))), |
| 108 |
"", |
"", |
| 109 |
str_time, |
str_time, |
| 110 |
|
(p_articles[i]->aid == section_topic_view_tid ? "\033[1;33m" : (p_articles[i]->tid == section_topic_view_tid ? "\033[1;36m" : "")), |
| 111 |
title_f); |
title_f); |
| 112 |
} |
} |
| 113 |
|
|
| 268 |
if (section_topic_view_mode) |
if (section_topic_view_mode) |
| 269 |
{ |
{ |
| 270 |
snprintf(p_ctx->msg, sizeof(p_ctx->msg), |
snprintf(p_ctx->msg, sizeof(p_ctx->msg), |
| 271 |
"| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] │ " |
"| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] | " |
| 272 |
"同主题阅读[\033[32m↑\033[33m/\033[32m↓\033[33m] │ " |
"同主题阅读[\033[32m↑\033[33m/\033[32m↓\033[33m] | " |
| 273 |
"帮助[\033[32mh\033[33m] |"); |
"模式[\033[32mp\033[33m] | 帮助[\033[32mh\033[33m] |"); |
| 274 |
} |
} |
| 275 |
else |
else |
| 276 |
{ |
{ |
| 277 |
snprintf(p_ctx->msg, sizeof(p_ctx->msg), |
snprintf(p_ctx->msg, sizeof(p_ctx->msg), |
| 278 |
"| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] │ " |
"| 返回[\033[32m←\033[33m,\033[32mESC\033[33m] | " |
| 279 |
"移动[\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] | " |
| 280 |
"帮助[\033[32mh\033[33m] |"); |
"模式[\033[32mp\033[33m] | 帮助[\033[32mh\033[33m] |"); |
| 281 |
} |
} |
| 282 |
*p_key = 0; |
*p_key = 0; |
| 283 |
break; |
break; |
| 284 |
case KEY_UP: |
case KEY_UP: |
| 285 |
|
case KEY_PGUP: |
| 286 |
|
case KEY_HOME: |
| 287 |
if (p_ctx->reach_begin) |
if (p_ctx->reach_begin) |
| 288 |
{ |
{ |
| 289 |
if (section_topic_view_mode) |
if (section_topic_view_mode) |
| 290 |
{ |
{ |
| 291 |
*p_key = KEY_PGUP; |
*p_key = KEY_PGUP; |
| 292 |
} |
} |
| 293 |
|
else |
| 294 |
|
{ |
| 295 |
|
*p_key = KEY_UP; |
| 296 |
|
} |
| 297 |
return 1; |
return 1; |
| 298 |
} |
} |
| 299 |
break; |
break; |
| 300 |
case KEY_DOWN: |
case KEY_DOWN: |
| 301 |
|
case KEY_PGDN: |
| 302 |
|
case KEY_END: |
| 303 |
if (p_ctx->reach_end) |
if (p_ctx->reach_end) |
| 304 |
{ |
{ |
| 305 |
if (section_topic_view_mode) |
if (section_topic_view_mode) |
| 306 |
{ |
{ |
| 307 |
*p_key = KEY_PGDN; |
*p_key = KEY_PGDN; |
| 308 |
} |
} |
| 309 |
|
else |
| 310 |
|
{ |
| 311 |
|
*p_key = KEY_DOWN; |
| 312 |
|
} |
| 313 |
return 1; |
return 1; |
| 314 |
} |
} |
| 315 |
break; |
break; |
| 435 |
break; |
break; |
| 436 |
} |
} |
| 437 |
|
|
| 438 |
|
// Update article_view_log |
| 439 |
|
if (article_view_log_set_viewed(p_articles[selected_index]->aid, &BBS_article_view_log) < 0) |
| 440 |
|
{ |
| 441 |
|
log_error("article_view_log_set_viewed(aid=%d) error\n", p_articles[selected_index]->aid); |
| 442 |
|
} |
| 443 |
|
|
| 444 |
switch (ret) |
switch (ret) |
| 445 |
{ |
{ |
| 446 |
case KEY_UP: |
case KEY_UP: |
| 528 |
break; |
break; |
| 529 |
} |
} |
| 530 |
} while (loop); |
} while (loop); |
| 531 |
|
|
| 532 |
|
// Update current topic |
| 533 |
|
section_topic_view_tid = (p_articles[selected_index]->tid == 0 ? p_articles[selected_index]->aid : p_articles[selected_index]->tid); |
| 534 |
case REFRESH_SCREEN: |
case REFRESH_SCREEN: |
| 535 |
if (section_list_draw_screen(sname, stitle, master_list, display_nickname) < 0) |
if (section_list_draw_screen(sname, stitle, master_list, display_nickname) < 0) |
| 536 |
{ |
{ |