fix: keep pull request filters session-local
This commit is contained in:
+2
-1
@@ -5346,8 +5346,9 @@ impl Editor {
|
||||
diff.handle(input);
|
||||
if std::mem::take(&mut diff.pull_request_preferences_changed) {
|
||||
let preferences = diff.pull_request_preferences.clone();
|
||||
self.pull_request_preferences_changed |=
|
||||
self.pull_request_preferences.sort != preferences.sort;
|
||||
self.pull_request_preferences = preferences.clone();
|
||||
self.pull_request_preferences_changed = true;
|
||||
for diff in self
|
||||
.diff
|
||||
.iter_mut()
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@ Pull requests: :pull_requests [REMOTE]; GitHub/GitLab/Gitea Open/Closed/Drafts/A
|
||||
🙏 marks a personal review request; 👍 marks your active approval (API account)
|
||||
Ctrl+s sort menu: 1-4 precedence, Backspace clear, Left/Right date direction
|
||||
Ctrl+f filter menu: Space includes/excludes personal review states; Enter applies, Esc cancels
|
||||
Applied choices persist; config.pull_request_sort / config.pull_request_filters override at startup
|
||||
Sorting persists; filters last for this session; config.pull_request_sort / config.pull_request_filters set startup choices
|
||||
Symbols: config.pull_request_review_requested_symbol / config.pull_request_approved_symbol
|
||||
Resolve jj conflicts: :resolve opens the current working-copy conflicts in a dedicated workspace
|
||||
Editable marker-free Draft vs readonly Alternative; :resolve.history shows inputs/base
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::pull_requests::Preferences;
|
||||
use crate::pull_requests::{Preferences, SortSettings};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{
|
||||
ffi::OsStr,
|
||||
@@ -17,6 +17,16 @@ struct StoredPreferences<T> {
|
||||
preferences: T,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
struct StoredSort<T> {
|
||||
#[serde(default)]
|
||||
sort: T,
|
||||
// Previously saved filters are deliberately ignored, including invalid values.
|
||||
#[serde(default, rename = "filters", skip_serializing)]
|
||||
_filters: serde::de::IgnoredAny,
|
||||
}
|
||||
|
||||
pub(crate) fn default_path() -> Result<PathBuf, String> {
|
||||
path_from(
|
||||
std::env::var_os("XDG_STATE_HOME").as_deref(),
|
||||
@@ -46,7 +56,7 @@ fn read_preferences(path: &Path) -> Result<Option<Preferences>, String> {
|
||||
Ok(_) => {}
|
||||
}
|
||||
let bytes = fs::read(path).map_err(|error| error.to_string())?;
|
||||
let stored: StoredPreferences<Preferences> =
|
||||
let stored: StoredPreferences<StoredSort<SortSettings>> =
|
||||
serde_json::from_slice(&bytes).map_err(|error| error.to_string())?;
|
||||
if stored.version != 1 {
|
||||
return Err(format!(
|
||||
@@ -54,8 +64,12 @@ fn read_preferences(path: &Path) -> Result<Option<Preferences>, String> {
|
||||
stored.version
|
||||
));
|
||||
}
|
||||
stored.preferences.validate()?;
|
||||
Ok(Some(stored.preferences))
|
||||
let preferences = Preferences {
|
||||
sort: stored.preferences.sort,
|
||||
..Preferences::default()
|
||||
};
|
||||
preferences.validate()?;
|
||||
Ok(Some(preferences))
|
||||
}
|
||||
|
||||
pub(crate) struct Store {
|
||||
@@ -113,7 +127,10 @@ impl Store {
|
||||
read_preferences(path)?;
|
||||
let bytes = serde_json::to_vec_pretty(&StoredPreferences {
|
||||
version: 1,
|
||||
preferences,
|
||||
preferences: StoredSort {
|
||||
sort: &preferences.sort,
|
||||
_filters: serde::de::IgnoredAny,
|
||||
},
|
||||
})
|
||||
.map_err(|error| error.to_string())?;
|
||||
let parent = path.parent().ok_or("preferences path has no parent")?;
|
||||
|
||||
Reference in New Issue
Block a user