mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-03 11:25:29 -04:00
Refactor get_recently_added_entries
method
This commit is contained in:
parent
8da4475a74
commit
717d44e029
@ -533,38 +533,39 @@ class Library
|
|||||||
}[0..11]
|
}[0..11]
|
||||||
end
|
end
|
||||||
|
|
||||||
alias RA = NamedTuple(
|
|
||||||
entry: Entry,
|
|
||||||
percentage: Float64,
|
|
||||||
grouped_count: Int32)
|
|
||||||
|
|
||||||
def get_recently_added_entries(username)
|
def get_recently_added_entries(username)
|
||||||
entries = [] of Entry
|
# Get all entries added within the last three months
|
||||||
titles.each do |t|
|
entries = titles.map { |t| t.entries }
|
||||||
t.entries.each { |e| entries << e }
|
.flatten
|
||||||
end
|
.select { |e| e.date_added > 3.months.ago }
|
||||||
entries.sort! { |a, b| b.date_added <=> a.date_added }
|
|
||||||
entries.select! { |e| e.date_added > 3.months.ago }
|
|
||||||
|
|
||||||
# Group Entries if neighbour is same Title
|
# Group entries in a Hash by title ID
|
||||||
recently_added = [] of RA
|
grouped_entries = {} of String => Array(Entry)
|
||||||
entries.each do |e|
|
entries.each do |e|
|
||||||
last = recently_added.last?
|
if grouped_entries.has_key? e.title_id
|
||||||
if last && e.title_id == last[:entry].title_id
|
grouped_entries[e.title_id].push e
|
||||||
# A NamedTuple is immutable, so we have to cast it to a Hash first
|
|
||||||
last_hash = last.to_h
|
|
||||||
count = last_hash[:grouped_count].as(Int32)
|
|
||||||
last_hash[:grouped_count] = count + 1
|
|
||||||
recently_added[recently_added.size - 1] = RA.from last_hash
|
|
||||||
else
|
else
|
||||||
recently_added << {
|
grouped_entries[e.title_id] = [e]
|
||||||
entry: e,
|
|
||||||
percentage: e.book.load_percentage(username, e.title),
|
|
||||||
grouped_count: 1,
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Cast the Hash to an Array of Tuples and sort it by date_added
|
||||||
|
grouped_ary = grouped_entries.to_a.sort do |a, b|
|
||||||
|
date_added_a = a[1].map { |e| e.date_added }.max
|
||||||
|
date_added_b = b[1].map { |e| e.date_added }.max
|
||||||
|
date_added_b <=> date_added_a
|
||||||
|
end
|
||||||
|
|
||||||
|
recently_added = grouped_ary.map do |_, ary|
|
||||||
|
# Get the most recently added entry in the group
|
||||||
|
entry = ary.sort { |a, b| a.date_added <=> b.date_added }.last
|
||||||
|
{
|
||||||
|
entry: entry,
|
||||||
|
percentage: entry.book.load_percentage(username, entry.title),
|
||||||
|
grouped_count: ary.size,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
recently_added[0..11]
|
recently_added[0..11]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user