From 5f62ace3be7ef640af79a34a8723cbd3be3215b1 Mon Sep 17 00:00:00 2001 From: "Alexander \"Ace\" Olofsson" Date: Fri, 12 Jul 2024 07:53:47 +0200 Subject: [PATCH] Simplify chapter retrieval for new stories --- lib/fic_tracker/models/story.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/fic_tracker/models/story.rb b/lib/fic_tracker/models/story.rb index 2bbda60..7dcdc91 100644 --- a/lib/fic_tracker/models/story.rb +++ b/lib/fic_tracker/models/story.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require 'digest' require_relative 'light/tag' module FicTracker::Models @@ -80,7 +81,7 @@ module FicTracker::Models end to_keep << aut unless id end - to_remove.delete aut.id if id + to_remove.delete aut.id end if id @@ -107,6 +108,7 @@ module FicTracker::Models latest_chapter_at = self.published_at || Time.at(0) to_add = [] + to_keep = [] to_remove = self.chapters.map(&:id) entries.each do |entry| @@ -117,8 +119,9 @@ module FicTracker::Models chapter.set(**entry) else chapter = FicTracker::Models::Chapter.new(**entry) - to_add << chapter + to_add << chapter if id end + to_keep << chapter unless id to_remove.delete chapter.id end @@ -135,11 +138,13 @@ module FicTracker::Models update(updated_at: latest_chapter_at) if latest_chapter_at > Time.at(0) && (updated_at.nil? || latest_chapter_at >= updated_at) else - @chapters = (@chapters || []) + to_add - to_remove + @chapters = to_keep end end def ensure_fully_loaded + return backend.load_full_story(self) unless id + refresh_content refresh_metadata @@ -179,7 +184,7 @@ module FicTracker::Models end def etag - chapters.select { |c| c.etag }.compact.last&.etag + Digest::SHA1.hexdigest(chapters.map(&:etag).join('|')) end def cache_key