| 14 |
* * |
* * |
| 15 |
***************************************************************************/ |
***************************************************************************/ |
| 16 |
|
|
|
#define _POSIX_C_SOURCE 200809L |
|
|
|
|
| 17 |
#include "section_list_loader.h" |
#include "section_list_loader.h" |
| 18 |
#include "article_cache.h" |
#include "article_cache.h" |
| 19 |
#include "bbs.h" |
#include "bbs.h" |
| 682 |
} |
} |
| 683 |
else |
else |
| 684 |
{ |
{ |
| 685 |
log_error("Reload section config successfully\n"); |
log_common("Reload section config successfully\n"); |
| 686 |
} |
} |
| 687 |
} |
} |
| 688 |
|
|
| 845 |
return ret; |
return ret; |
| 846 |
} |
} |
| 847 |
|
|
| 848 |
int locate_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, int direction, |
int locate_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, int direction, int step, |
| 849 |
int *p_page_id, int *p_visible_offset, int *p_article_count) |
int *p_page_id, int *p_visible_offset, int *p_article_count) |
| 850 |
{ |
{ |
| 851 |
const ARTICLE *p_article = NULL; |
const ARTICLE *p_article = NULL; |
| 852 |
ARTICLE *p_tmp; |
ARTICLE *p_tmp; |
| 853 |
int32_t aid = 0; |
int32_t aid = 0; |
| 854 |
int page_id; |
int page_id = 0; |
| 855 |
int offset; |
int offset = 0; |
| 856 |
int ret = 0; |
int ret = 0; |
| 857 |
int i; |
int i; |
| 858 |
|
|
| 875 |
} |
} |
| 876 |
else if (direction == 1) |
else if (direction == 1) |
| 877 |
{ |
{ |
| 878 |
p_article = p_article_cur; |
for (p_article = p_article_cur; step > 0 && p_article->p_topic_next->aid > p_article_cur->aid; p_article = p_article->p_topic_next) |
|
do |
|
| 879 |
{ |
{ |
| 880 |
p_article = p_article->p_topic_next; |
if (p_article->visible) |
| 881 |
} while (p_article != p_article_cur && p_article->visible == 0); |
{ |
| 882 |
|
step--; |
| 883 |
|
} |
| 884 |
|
} |
| 885 |
|
|
| 886 |
aid = (p_article->aid > p_article_cur->aid ? p_article->aid : 0); |
aid = (p_article->aid > p_article_cur->aid && p_article->visible ? p_article->aid : 0); |
| 887 |
} |
} |
| 888 |
else if (direction == -1) |
else if (direction == -1) |
| 889 |
{ |
{ |
| 890 |
p_article = p_article_cur; |
for (p_article = p_article_cur; step > 0 && p_article->p_topic_prior->aid < p_article_cur->aid; p_article = p_article->p_topic_prior) |
|
do |
|
| 891 |
{ |
{ |
| 892 |
p_article = p_article->p_topic_prior; |
if (p_article->visible) |
| 893 |
} while (p_article != p_article_cur && p_article->visible == 0); |
{ |
| 894 |
|
step--; |
| 895 |
|
} |
| 896 |
|
} |
| 897 |
|
|
| 898 |
aid = (p_article->aid < p_article_cur->aid ? p_article->aid : 0); |
aid = (p_article->aid < p_article_cur->aid && p_article->visible ? p_article->aid : 0); |
| 899 |
} |
} |
| 900 |
|
|
| 901 |
p_article = NULL; |
p_article = NULL; |
| 908 |
*p_article_count = (page_id == p_section->page_count - 1 ? p_section->last_page_visible_article_count : BBS_article_limit_per_page); |
*p_article_count = (page_id == p_section->page_count - 1 ? p_section->last_page_visible_article_count : BBS_article_limit_per_page); |
| 909 |
|
|
| 910 |
p_article = p_section->p_page_first_article[page_id]; |
p_article = p_section->p_page_first_article[page_id]; |
| 911 |
for (i = 0; i < *p_article_count;) |
for (i = 0; i < *p_article_count && p_article != NULL;) |
| 912 |
{ |
{ |
| 913 |
if (p_article->visible) |
if (p_article->visible) |
| 914 |
{ |
{ |
| 923 |
{ |
{ |
| 924 |
log_error("Visible article (aid=%d) not found in page %d\n", aid, page_id); |
log_error("Visible article (aid=%d) not found in page %d\n", aid, page_id); |
| 925 |
p_article = NULL; |
p_article = NULL; |
| 926 |
|
break; |
| 927 |
} |
} |
| 928 |
} |
} |
| 929 |
p_article = p_article->p_next; |
p_article = p_article->p_next; |