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

Diff of /lbbs/src/section_list_loader.c

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

Revision 1.40 by sysadm, Tue Sep 30 05:07:46 2025 UTC Revision 1.44 by sysadm, Sat Oct 4 03:21:59 2025 UTC
# Line 15  Line 15 
15   ***************************************************************************/   ***************************************************************************/
16    
17  #include "article_cache.h"  #include "article_cache.h"
18    #include "article_view_log.h"
19  #include "bbs.h"  #include "bbs.h"
20  #include "database.h"  #include "database.h"
21  #include "ip_mask.h"  #include "ip_mask.h"
# Line 945  int locate_article_in_section(SECTION_LI Line 946  int locate_article_in_section(SECTION_LI
946          }          }
947          else if (direction == 1)          else if (direction == 1)
948          {          {
949                  for (p_article = p_article_cur, p_article_last = p_article_cur;                  for (p_article_last = p_article_cur, p_article = p_article_cur->p_topic_next;
950                           step > 0 && p_article->p_topic_next->aid > p_article_cur->aid;                           step > 0 && p_article->aid > p_article_cur->aid;
951                           p_article = p_article->p_topic_next)                           p_article = p_article->p_topic_next)
952                  {                  {
953                          if (p_article->visible)                          if (p_article->visible)
# Line 955  int locate_article_in_section(SECTION_LI Line 956  int locate_article_in_section(SECTION_LI
956                                  p_article_last = p_article;                                  p_article_last = p_article;
957                          }                          }
958                  }                  }
959                  if (!p_article->visible)                  p_article = p_article_last;
                 {  
                         p_article = p_article_last;  
                 }  
960    
961                  aid = (p_article->aid > p_article_cur->aid && p_article->visible ? p_article->aid : 0);                  aid = (p_article->aid > p_article_cur->aid && p_article->visible ? p_article->aid : 0);
962          }          }
963          else if (direction == -1)          else if (direction == -1)
964          {          {
965                  for (p_article = p_article_cur, p_article_last = p_article_cur;                  for (p_article_last = p_article_cur, p_article = p_article_cur->p_topic_prior;
966                           step > 0 && p_article->p_topic_prior->aid < p_article_cur->aid;                           step > 0 && p_article->aid < p_article_cur->aid;
967                           p_article = p_article->p_topic_prior)                           p_article = p_article->p_topic_prior)
968                  {                  {
969                          if (p_article->visible)                          if (p_article->visible)
# Line 974  int locate_article_in_section(SECTION_LI Line 972  int locate_article_in_section(SECTION_LI
972                                  p_article_last = p_article;                                  p_article_last = p_article;
973                          }                          }
974                  }                  }
975                  if (!p_article->visible)                  p_article = p_article_last;
                 {  
                         p_article = p_article_last;  
                 }  
976    
977                  aid = (p_article->aid < p_article_cur->aid && p_article->visible ? p_article->aid : 0);                  aid = (p_article->aid < p_article_cur->aid && p_article->visible ? p_article->aid : 0);
978          }          }
# Line 1028  int locate_article_in_section(SECTION_LI Line 1023  int locate_article_in_section(SECTION_LI
1023          return (ret < 0 ? ret : (p_article == NULL ? 0 : 1));          return (ret < 0 ? ret : (p_article == NULL ? 0 : 1));
1024  }  }
1025    
1026    int scan_unread_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, const ARTICLE **pp_article_unread)
1027    {
1028            ARTICLE *p_article;
1029            int ret = 0;
1030    
1031            if (p_section == NULL || p_article_cur == NULL || pp_article_unread == NULL)
1032            {
1033                    log_error("NULL pointer error\n");
1034                    return -1;
1035            }
1036    
1037            if (p_article_cur->sid != p_section->sid)
1038            {
1039                    log_error("Inconsistent SID\n");
1040                    return -1;
1041            }
1042    
1043            // acquire lock of section
1044            if ((ret = section_list_rd_lock(p_section)) < 0)
1045            {
1046                    log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid);
1047                    return -2;
1048            }
1049    
1050            *pp_article_unread = NULL;
1051    
1052            for (p_article = p_article_cur->p_next; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_next)
1053            {
1054                    if (p_article->visible && !article_view_log_is_viewed(p_article->aid, &BBS_article_view_log))
1055                    {
1056                            *pp_article_unread = p_article;
1057                            break;
1058                    }
1059            }
1060    
1061            // release lock of section
1062            if (section_list_rd_unlock(p_section) < 0)
1063            {
1064                    log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid);
1065                    return -2;
1066            }
1067    
1068            return (p_article != NULL && p_article != p_article_cur ? 1 : 0);
1069    }
1070    
1071  int get_section_ex_menu_set(SECTION_LIST *p_section, MENU_SET *p_ex_menu_set)  int get_section_ex_menu_set(SECTION_LIST *p_section, MENU_SET *p_ex_menu_set)
1072  {  {
1073          int ret = 0;          int ret = 0;


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

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