Fix race condition in generating next/previous page references when using transparent mode. (#1456)
This commit is contained in:
parent
f8c6ea2b00
commit
22c29fe936
|
@ -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")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue