nicolium: Add settings for restoring timeline position and compose form in timelines

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2026-03-11 03:13:51 +01:00
parent 769f3c6331
commit f0d610e448
4 changed files with 50 additions and 3 deletions

View File

@@ -584,10 +584,13 @@ const getRestoredPosition = (me: string) => {
const HomeTimelineColumn: React.FC<IBaseTimeline> = (props) => {
const me = useAppSelector((state) => state.me);
const timelineFilters = useSettings().timelines.home;
const {
timelines: { home: timelineFilters },
rememberTimelinePosition,
} = useSettings();
const maxId = useMemo(() => {
if (!me) return undefined;
if (!me || !rememberTimelinePosition) return undefined;
const position = getRestoredPosition(me);
@@ -608,7 +611,7 @@ const HomeTimelineColumn: React.FC<IBaseTimeline> = (props) => {
const handleTopItemChanged = (index: number) => {
const entry = timelineQuery.entries[index];
if (me) savePosition(me, entry, index);
if (me && rememberTimelinePosition) savePosition(me, entry, index);
};
return (

View File

@@ -373,6 +373,46 @@ const Preferences = () => {
</ListItem>
</List>
<List>
<ListItem
label={
<FormattedMessage
id='preferences.fields.remember_timeline_position_label'
defaultMessage='Remeber position of home timeline'
/>
}
hint={
<FormattedMessage
id='preferences.fields.remember_timeline_position_hint'
defaultMessage='When enabled, the app will return to the place you left off in the home timeline last time you visited it.'
/>
}
>
<SettingToggle
settings={settings}
settingPath={['rememberTimelinePosition']}
defaultValue
onChange={onToggleChange}
/>
</ListItem>
<ListItem
label={
<FormattedMessage
id='preferences.fields.compose_in_timelines_label'
defaultMessage='Display post composer in timelines'
/>
}
>
<SettingToggle
settings={settings}
settingPath={['composeInTimelines']}
defaultValue
onChange={onToggleChange}
/>
</ListItem>
</List>
<List>
<ListItem label={<FormattedMessage id='preferences.fields.theme' defaultMessage='Theme' />}>
<ThemeToggle />

View File

@@ -1567,6 +1567,7 @@
"preferences.fields.boost_modal_label": "Show confirmation dialog before reposting",
"preferences.fields.check_emoji_react_supports_hint": "This will expose your IP address to the instances youre interacting with.",
"preferences.fields.check_emoji_react_supports_label": "Check whether remote hosts supports emoji reactions when reacting",
"preferences.fields.compose_in_timelines_label": "Display post composer in timelines",
"preferences.fields.content_type_label": "Default post format",
"preferences.fields.delete_modal_label": "Show confirmation dialog before deleting a post",
"preferences.fields.demetricator_label": "Hide social media counters",
@@ -1588,6 +1589,8 @@
"preferences.fields.preserve_spoilers_label": "Preserve content warning when replying",
"preferences.fields.privacy_label": "Default post privacy",
"preferences.fields.reduce_motion_label": "Reduce motion in animations",
"preferences.fields.remember_timeline_position_hint": "When enabled, the app will return to the place you left off in the home timeline last time you visited it.",
"preferences.fields.remember_timeline_position_label": "Remeber position of home timeline",
"preferences.fields.render_advanced_mfm_label": "Enable advanced MFM",
"preferences.fields.render_animated_mfm_label": "Enable animated MFM",
"preferences.fields.render_mfm_hint": "MFM support is experimental, not all node types are supported.",

View File

@@ -54,6 +54,7 @@ const settingsSchema = v.object({
stripMetadata: v.fallback(v.boolean(), false),
storeSettingsInNotes: v.fallback(v.boolean(), false),
composeInTimelines: v.fallback(v.boolean(), true),
rememberTimelinePosition: v.fallback(v.boolean(), true),
theme: v.optional(
coerceObject({