/[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.11 by sysadm, Thu May 29 09:44:01 2025 UTC Revision 1.15 by sysadm, Sat May 31 10:23:23 2025 UTC
# Line 288  int append_articles_from_db(int32_t star Line 288  int append_articles_from_db(int32_t star
288    
289                  article_count++;                  article_count++;
290    
291                  if (article_cache_generate(VAR_ARTICLE_CACHE_DIR, &article, row[i++]) < 0)                  if (article_cache_generate(VAR_ARTICLE_CACHE_DIR, &article, p_section, row[i++], 0) < 0)
292                  {                  {
293                          log_error("article_cache_generate(aid=%d, cid=%d) error\n", article.aid, article.cid);                          log_error("article_cache_generate(aid=%d, cid=%d) error\n", article.aid, article.cid);
294                          ret = -4;                          ret = -4;
# Line 478  int apply_article_op_log_from_db(int op_ Line 478  int apply_article_op_log_from_db(int op_
478                                  ret = -3;                                  ret = -3;
479                                  break;                                  break;
480                          }                          }
481                          if ((rs2 = mysql_store_result(db)) == NULL)                          if ((rs2 = mysql_use_result(db)) == NULL)
482                          {                          {
483                                  log_error("Get article data failed\n");                                  log_error("Get article data failed\n");
484                                  ret = -3;                                  ret = -3;
# Line 488  int apply_article_op_log_from_db(int op_ Line 488  int apply_article_op_log_from_db(int op_
488                          {                          {
489                                  p_article->cid = atoi(row2[0]);                                  p_article->cid = atoi(row2[0]);
490    
491                                  if (article_cache_generate(VAR_ARTICLE_CACHE_DIR, p_article, row2[1]) < 0)                                  if (article_cache_generate(VAR_ARTICLE_CACHE_DIR, p_article, p_section, row2[1], 0) < 0)
492                                  {                                  {
493                                          log_error("article_cache_generate(aid=%d, cid=%d) error\n", p_article->aid, p_article->cid);                                          log_error("article_cache_generate(aid=%d, cid=%d) error\n", p_article->aid, p_article->cid);
494                                          ret = -4;                                          ret = -4;
# Line 819  int query_section_articles(SECTION_LIST Line 819  int query_section_articles(SECTION_LIST
819    
820          return ret;          return ret;
821  }  }
822    
823    int locate_article_in_section(SECTION_LIST *p_section, const ARTICLE *p_article_cur, int direction,
824                                                              int *p_page_id, int *p_visible_offset, int *p_article_count)
825    {
826            const ARTICLE *p_article = NULL;
827            ARTICLE *p_tmp;
828            int32_t aid = 0;
829            int page_id;
830            int offset;
831            int ret = 0;
832            int i;
833    
834            if (p_section == NULL || p_article_cur == NULL || p_page_id == NULL || p_visible_offset == NULL || p_article_count == NULL)
835            {
836                    log_error("locate_article_in_section() NULL pointer error\n");
837                    return -1;
838            }
839    
840            // acquire lock of section
841            if ((ret = section_list_rd_lock(p_section)) < 0)
842            {
843                    log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid);
844                    return -2;
845            }
846    
847            if (direction == 0)
848            {
849                    aid = p_article_cur->aid;
850            }
851            else if (direction == 1)
852            {
853                    p_article = p_article_cur;
854                    do
855                    {
856                            p_article = p_article->p_topic_next;
857                    } while (p_article != p_article_cur && p_article->visible == 0);
858    
859                    aid = (p_article->aid > p_article_cur->aid ? p_article->aid : 0);
860            }
861            else if (direction == -1)
862            {
863                    p_article = p_article_cur;
864                    do
865                    {
866                            p_article = p_article->p_topic_prior;
867                    } while (p_article != p_article_cur && p_article->visible == 0);
868    
869                    aid = (p_article->aid < p_article_cur->aid ? p_article->aid : 0);
870            }
871    
872            p_article = NULL;
873    
874            if (aid > 0)
875            {
876                    p_article = section_list_find_article_with_offset(p_section, aid, &page_id, &offset, &p_tmp);
877                    if (p_article != NULL)
878                    {
879                            *p_article_count = (page_id == p_section->page_count - 1 ? p_section->last_page_visible_article_count : BBS_article_limit_per_page);
880    
881                            p_article = p_section->p_page_first_article[page_id];
882                            for (i = 0; i < *p_article_count;)
883                            {
884                                    if (p_article->visible)
885                                    {
886                                            if (p_article->aid == aid)
887                                            {
888                                                    *p_page_id = page_id;
889                                                    *p_visible_offset = i;
890                                                    break;
891                                            }
892                                            i++;
893                                            if (i >= *p_article_count)
894                                            {
895                                                    log_error("Visible article (aid=%d) not found in page %d\n", aid, page_id);
896                                                    p_article = NULL;
897                                            }
898                                    }
899                                    p_article = p_article->p_next;
900                            }
901                    }
902            }
903    
904            // release lock of section
905            if (section_list_rd_unlock(p_section) < 0)
906            {
907                    log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid);
908                    ret = -2;
909            }
910    
911            return (ret < 0 ? ret : (p_article == NULL ? 0 : 1));
912    }


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

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