Merge branch 'feature/preserve-scanned-titles' of https://github.com/Leeingnyo/Mango into feature/preserve-scanned-titles

This commit is contained in:
Alex Ling 2021-09-18 02:04:02 +00:00
commit ec25109fa5
5 changed files with 6 additions and 25 deletions

View File

@ -23,7 +23,6 @@ class Config
property cache_enabled = false
property cache_size_mbs = 50
property cache_log_enabled = true
property forcely_yield_count = 1000
property disable_login = false
property default_username = ""
property auth_proxy_header_name = ""

View File

@ -133,9 +133,7 @@ class Library
storage = Storage.new auto_close: false
count = Config.current.forcely_yield_count
examine_context : ExamineContext = {
file_counter: (YieldCounter.new count),
cached_contents_signature: {} of String => String,
deleted_title_ids: [] of String,
deleted_entry_ids: [] of String,

View File

@ -82,7 +82,7 @@ class Title
def examine(context : ExamineContext) : Bool
return false unless Dir.exists? @dir # No title, Remove this
contents_signature = Dir.contents_signature @dir,
context["cached_contents_signature"], context["file_counter"]
context["cached_contents_signature"]
return true if @contents_signature == contents_signature
@contents_signature = contents_signature
@ -119,7 +119,7 @@ class Title
previous_entries_size = @entries.size
@entries.select! do |entry|
existence = File.exists? entry.zip_path
context["file_counter"].count_and_yield
Fiber.yield
context["deleted_entry_ids"] << entry.id unless existence
existence
end

View File

@ -134,21 +134,7 @@ class TitleInfo
end
end
class YieldCounter
@file_count : UInt32
def initialize(@threshold : Int32)
@file_count = 0
end
def count_and_yield
@file_count += 1
Fiber.yield if @threshold > 0 && @file_count % @threshold == 0
end
end
alias ExamineContext = NamedTuple(
file_counter: YieldCounter,
cached_contents_signature: Hash(String, String),
deleted_title_ids: Array(String),
deleted_entry_ids: Array(String))

View File

@ -54,24 +54,22 @@ class Dir
# Rescan conditions:
# - When a file added, moved, removed, renamed (including which in nested
# directories)
def self.contents_signature(dirname,
cache = {} of String => String,
counter : YieldCounter? = nil) : String
def self.contents_signature(dirname, cache = {} of String => String) : String
return cache[dirname] if cache[dirname]?
counter.count_and_yield unless counter.nil?
Fiber.yield
signatures = [] of String
self.open dirname do |dir|
dir.entries.sort.each do |fn|
next if fn.starts_with? "."
path = File.join dirname, fn
if File.directory? path
signatures << Dir.contents_signature path, cache, counter
signatures << Dir.contents_signature path, cache
else
# Only add its signature value to `signatures` when it is a
# supported file
signatures << fn if is_supported_file fn
end
counter.count_and_yield unless counter.nil?
Fiber.yield
end
end
hash = Digest::SHA1.hexdigest(signatures.join)