chiark / gitweb /
Rethink utility status of some activities.
authorSimon Tatham <anakin@pobox.com>
Sun, 21 Jan 2024 13:26:52 +0000 (13:26 +0000)
committerSimon Tatham <anakin@pobox.com>
Sun, 21 Jan 2024 13:31:22 +0000 (13:31 +0000)
ComposeToplevel and ComposeReply are very similar in this environment,
so I think it's wrong that one should be a utility activity and the
other not. The current status mimics real Monochrome, with
ComposeToplevel and ComposeReply corresponding to adding to a file and
sending a message to a user respectively; but in real Mono, those two
activities are much more different from each other than they are here,
so I don't think the same rule should apply.

Conversely, I'm promoting ThreadFile to a _non_-utility activity, on
the basis that all activities involving viewing a file of actual toots
ought to have the same status, or else it's confusing. In particular,
it's annoying to try to examine a user seen in someone's thread, and
then find you can't easily come back to the place you were at in the
thread itself.

src/activity_stack.rs
src/file.rs
src/menu.rs
src/tui.rs

index 552ed9ed1cb4ef14296a645daac61f4f26dae877..04785282e425d4a27f8814d31ba454f493e5b589 100644 (file)
@@ -9,8 +9,7 @@ pub enum NonUtilityActivity {
     LocalTimelineFile,
     HashtagTimeline(String),
     UserPosts(String, Boosts, Replies),
-    ComposeToplevel,
-    PostComposeMenu,
+    ThreadFile(String, bool),
     LoginMenu,
 }
 
@@ -28,9 +27,10 @@ pub enum UtilityActivity {
     InfoStatus(String),
     ListStatusFavouriters(String),
     ListStatusBoosters(String),
+    ComposeToplevel,
+    PostComposeMenu,
     ComposeReply(String),
     PostReplyMenu(String),
-    ThreadFile(String, bool),
     UserOptions(String),
     InstanceRules,
 }
@@ -83,8 +83,8 @@ impl Activity {
         // gets reinitialised, because that's the simplest way to jump
         // you down to the new message.
         match self {
-            Activity::NonUtil(NonUtilityActivity::ComposeToplevel)
-            | Activity::NonUtil(NonUtilityActivity::PostComposeMenu)
+            Activity::Util(UtilityActivity::ComposeToplevel)
+            | Activity::Util(UtilityActivity::PostComposeMenu)
             | Activity::Util(UtilityActivity::ComposeReply(..))
             | Activity::Util(UtilityActivity::PostReplyMenu(..)) => false,
             _ => true,
index f294fd7acf6f3c94dde62b7a26f69f8f677fc246..b30eb1428a9bc6d6c923f3129d50d3b37cf87bd9 100644 (file)
@@ -1043,7 +1043,7 @@ impl<Type: FileType, Source: FileDataSource> File<Type, Source> {
                     UtilityActivity::ComposeReply(id).into(),
                 ),
                 SelectionPurpose::Thread => LogicalAction::Goto(
-                    UtilityActivity::ThreadFile(id, alt).into(),
+                    NonUtilityActivity::ThreadFile(id, alt).into(),
                 ),
                 SelectionPurpose::Vote => {
                     match client.vote_in_poll(
index 6cffae6cc2f25a887a3aa39b00891f85578a3d77..ceb24535520a5b8fa043485cb9c2b1ffda7c7999 100644 (file)
@@ -247,7 +247,7 @@ pub fn main_menu(client: &Client) -> Box<dyn ActivityState> {
     menu.add_action(
         Pr('C'),
         "Compose a post",
-        LogicalAction::Goto(NonUtilityActivity::ComposeToplevel.into()),
+        LogicalAction::Goto(UtilityActivity::ComposeToplevel.into()),
     );
     menu.add_blank_line();
 
index 39e75c7c4abaf37d13748f8a910ce70637be9c29..f302a3fd12b651d18b2407437328048c25f93d25 100644 (file)
@@ -778,9 +778,9 @@ impl TuiLogicalState {
                 LogicalAction::Error(_) => break PhysicalAction::Beep, // FIXME: Error Log
                 LogicalAction::PostComposed(post) => {
                     let newact = match self.activity_stack.top() {
-                        Activity::NonUtil(
-                            NonUtilityActivity::ComposeToplevel,
-                        ) => NonUtilityActivity::PostComposeMenu.into(),
+                        Activity::Util(UtilityActivity::ComposeToplevel) => {
+                            UtilityActivity::PostComposeMenu.into()
+                        }
                         Activity::Util(UtilityActivity::ComposeReply(id)) => {
                             UtilityActivity::PostReplyMenu(id).into()
                         }
@@ -792,9 +792,9 @@ impl TuiLogicalState {
                 }
                 LogicalAction::PostReEdit(post) => {
                     let newact = match self.activity_stack.top() {
-                        Activity::NonUtil(
-                            NonUtilityActivity::PostComposeMenu,
-                        ) => NonUtilityActivity::ComposeToplevel.into(),
+                        Activity::Util(UtilityActivity::PostComposeMenu) => {
+                            UtilityActivity::ComposeToplevel.into()
+                        }
                         Activity::Util(UtilityActivity::PostReplyMenu(id)) => {
                             UtilityActivity::ComposeReply(id).into()
                         }
@@ -1004,7 +1004,7 @@ impl TuiLogicalState {
             Activity::Util(UtilityActivity::InfoStatus(ref id)) => {
                 view_single_post(self.unfolded_posts.clone(), client, id)
             }
-            Activity::NonUtil(NonUtilityActivity::ComposeToplevel) => (|| {
+            Activity::Util(UtilityActivity::ComposeToplevel) => (|| {
                 let post = match post {
                     Some(post) => post,
                     None => Post::new(client)?,
@@ -1012,9 +1012,9 @@ impl TuiLogicalState {
                 compose_post(client, post)
             })(
             ),
-            Activity::NonUtil(NonUtilityActivity::PostComposeMenu) => Ok(
-                post_menu(post.expect("how did we get here without a Post?")),
-            ),
+            Activity::Util(UtilityActivity::PostComposeMenu) => Ok(post_menu(
+                post.expect("how did we get here without a Post?"),
+            )),
             Activity::Util(UtilityActivity::ComposeReply(ref id)) => {
                 let post = match post {
                     Some(post) => Ok(post),
@@ -1028,9 +1028,10 @@ impl TuiLogicalState {
             Activity::Util(UtilityActivity::PostReplyMenu(_)) => Ok(
                 post_menu(post.expect("how did we get here without a Post?")),
             ),
-            Activity::Util(UtilityActivity::ThreadFile(ref id, full)) => {
-                view_thread(self.unfolded_posts.clone(), client, id, full)
-            }
+            Activity::NonUtil(NonUtilityActivity::ThreadFile(
+                ref id,
+                full,
+            )) => view_thread(self.unfolded_posts.clone(), client, id, full),
             Activity::Util(UtilityActivity::ListStatusFavouriters(ref id)) => {
                 list_status_favouriters(client, id)
             }