mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-02 02:45:29 -04:00
Remove counter, yield everytime
This commit is contained in:
parent
9769e760a0
commit
b56e16e1e1
@ -23,7 +23,6 @@ class Config
|
|||||||
property cache_enabled = false
|
property cache_enabled = false
|
||||||
property cache_size_mbs = 50
|
property cache_size_mbs = 50
|
||||||
property cache_log_enabled = true
|
property cache_log_enabled = true
|
||||||
property forcely_yield_count = 1000
|
|
||||||
property disable_login = false
|
property disable_login = false
|
||||||
property default_username = ""
|
property default_username = ""
|
||||||
property auth_proxy_header_name = ""
|
property auth_proxy_header_name = ""
|
||||||
|
@ -133,9 +133,7 @@ class Library
|
|||||||
|
|
||||||
storage = Storage.new auto_close: false
|
storage = Storage.new auto_close: false
|
||||||
|
|
||||||
count = Config.current.forcely_yield_count
|
|
||||||
examine_context : ExamineContext = {
|
examine_context : ExamineContext = {
|
||||||
file_counter: (YieldCounter.new count),
|
|
||||||
cached_contents_signature: {} of String => String,
|
cached_contents_signature: {} of String => String,
|
||||||
deleted_title_ids: [] of String,
|
deleted_title_ids: [] of String,
|
||||||
deleted_entry_ids: [] of String,
|
deleted_entry_ids: [] of String,
|
||||||
|
@ -73,7 +73,7 @@ class Title
|
|||||||
def examine(context : ExamineContext) : Bool
|
def examine(context : ExamineContext) : Bool
|
||||||
return false unless Dir.exists? @dir # No title, Remove this
|
return false unless Dir.exists? @dir # No title, Remove this
|
||||||
contents_signature = Dir.contents_signature @dir,
|
contents_signature = Dir.contents_signature @dir,
|
||||||
context["cached_contents_signature"], context["file_counter"]
|
context["cached_contents_signature"]
|
||||||
# Not changed. Reuse this
|
# Not changed. Reuse this
|
||||||
return true if @contents_signature == contents_signature
|
return true if @contents_signature == contents_signature
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ class Title
|
|||||||
previous_entries_size = @entries.size
|
previous_entries_size = @entries.size
|
||||||
@entries.select! do |entry|
|
@entries.select! do |entry|
|
||||||
existence = File.exists? entry.zip_path
|
existence = File.exists? entry.zip_path
|
||||||
context["file_counter"].count_and_yield
|
Fiber.yield
|
||||||
context["deleted_entry_ids"] << entry.id unless existence
|
context["deleted_entry_ids"] << entry.id unless existence
|
||||||
existence
|
existence
|
||||||
end
|
end
|
||||||
|
@ -134,21 +134,7 @@ class TitleInfo
|
|||||||
end
|
end
|
||||||
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(
|
alias ExamineContext = NamedTuple(
|
||||||
file_counter: YieldCounter,
|
|
||||||
cached_contents_signature: Hash(String, String),
|
cached_contents_signature: Hash(String, String),
|
||||||
deleted_title_ids: Array(String),
|
deleted_title_ids: Array(String),
|
||||||
deleted_entry_ids: Array(String))
|
deleted_entry_ids: Array(String))
|
||||||
|
@ -54,24 +54,22 @@ class Dir
|
|||||||
# Rescan conditions:
|
# Rescan conditions:
|
||||||
# - When a file added, moved, removed, renamed (including which in nested
|
# - When a file added, moved, removed, renamed (including which in nested
|
||||||
# directories)
|
# directories)
|
||||||
def self.contents_signature(dirname,
|
def self.contents_signature(dirname, cache = {} of String => String) : String
|
||||||
cache = {} of String => String,
|
|
||||||
counter : YieldCounter? = nil) : String
|
|
||||||
return cache[dirname] if cache[dirname]?
|
return cache[dirname] if cache[dirname]?
|
||||||
counter.count_and_yield unless counter.nil?
|
Fiber.yield
|
||||||
signatures = [] of String
|
signatures = [] of String
|
||||||
self.open dirname do |dir|
|
self.open dirname do |dir|
|
||||||
dir.entries.sort.each do |fn|
|
dir.entries.sort.each do |fn|
|
||||||
next if fn.starts_with? "."
|
next if fn.starts_with? "."
|
||||||
path = File.join dirname, fn
|
path = File.join dirname, fn
|
||||||
if File.directory? path
|
if File.directory? path
|
||||||
signatures << Dir.contents_signature path, cache, counter
|
signatures << Dir.contents_signature path, cache
|
||||||
else
|
else
|
||||||
# Only add its signature value to `signatures` when it is a
|
# Only add its signature value to `signatures` when it is a
|
||||||
# supported file
|
# supported file
|
||||||
signatures << fn if is_supported_file fn
|
signatures << fn if is_supported_file fn
|
||||||
end
|
end
|
||||||
counter.count_and_yield unless counter.nil?
|
Fiber.yield
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
hash = Digest::SHA1.hexdigest(signatures.join)
|
hash = Digest::SHA1.hexdigest(signatures.join)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user