Fix race condition in generating next/previous page references when using transparent mode. (#1456)

This commit is contained in:
Eric Scouten 2021-05-17 13:05:22 -07:00 committed by GitHub
parent f8c6ea2b00
commit 22c29fe936
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -313,32 +313,42 @@ impl Library {
} }
for (key, (sorted, cannot_be_sorted, sort_by)) in updates { for (key, (sorted, cannot_be_sorted, sort_by)) in updates {
// Find sibling between sorted pages first let section_is_transparent = if let Some(section) = self.sections.get(key) {
let with_siblings = find_siblings(&sorted); section.meta.transparent
} else {
false
};
for (k2, val1, val2) in with_siblings { if !section_is_transparent {
if let Some(page) = self.pages.get_mut(k2) { // Find sibling between sorted pages first
match sort_by { let with_siblings = find_siblings(&sorted);
SortBy::Date => {
page.earlier = val2; for (k2, val1, val2) in with_siblings {
page.later = val1; if let Some(page) = self.pages.get_mut(k2) {
match sort_by {
SortBy::Date => {
page.earlier = val2;
page.later = val1;
}
SortBy::UpdateDate => {
page.earlier_updated = val2;
page.later_updated = val1;
}
SortBy::Title => {
page.title_prev = val1;
page.title_next = val2;
}
SortBy::Weight => {
page.lighter = val1;
page.heavier = val2;
}
SortBy::None => {
unreachable!("Impossible to find siblings in SortBy::None")
}
} }
SortBy::UpdateDate => { } else {
page.earlier_updated = val2; unreachable!("Sorting got an unknown page")
page.later_updated = val1;
}
SortBy::Title => {
page.title_prev = val1;
page.title_next = val2;
}
SortBy::Weight => {
page.lighter = val1;
page.heavier = val2;
}
SortBy::None => unreachable!("Impossible to find siblings in SortBy::None"),
} }
} else {
unreachable!("Sorting got an unknown page")
} }
} }