chiark / gitweb /
Make new_activity_state a method of TuiLogicalState.
authorSimon Tatham <anakin@pobox.com>
Thu, 4 Jan 2024 12:21:18 +0000 (12:21 +0000)
committerSimon Tatham <anakin@pobox.com>
Thu, 4 Jan 2024 12:21:18 +0000 (12:21 +0000)
I got away without it having to be for a long time, but now it's going
to need to fetch file positions.

src/tui.rs

index 626f2b29131ae3f7a6b013e1a10f7bf055fbaac7..fa78235580ce92483e68e2dccf8c2e77982224d8 100644 (file)
@@ -424,73 +424,6 @@ struct TuiLogicalState {
     last_area: Option<Rect>,
 }
 
-fn new_activity_state(activity: Activity, client: &mut Client,
-                      post: Option<Post>) -> Box<dyn ActivityState>
-{
-    let result = match activity {
-        Activity::NonUtil(NonUtilityActivity::MainMenu) =>
-            Ok(main_menu()),
-        Activity::Util(UtilityActivity::UtilsMenu) =>
-            Ok(utils_menu(client)),
-        Activity::Util(UtilityActivity::ExitMenu) =>
-            Ok(exit_menu()),
-        Activity::Util(UtilityActivity::LogsMenu1) =>
-            Ok(logs_menu_1()),
-        Activity::Util(UtilityActivity::LogsMenu2) =>
-            Ok(logs_menu_2()),
-        Activity::NonUtil(NonUtilityActivity::HomeTimelineFile) =>
-            home_timeline(client),
-        Activity::NonUtil(NonUtilityActivity::PublicTimelineFile) =>
-            public_timeline(client),
-        Activity::NonUtil(NonUtilityActivity::LocalTimelineFile) =>
-            local_timeline(client),
-        Activity::NonUtil(NonUtilityActivity::HashtagTimeline(ref id)) =>
-            hashtag_timeline(client, id),
-        Activity::Util(UtilityActivity::ReadMentions) =>
-            mentions(client),
-        Activity::Util(UtilityActivity::EgoLog) =>
-            ego_log(client),
-        Activity::Overlay(OverlayActivity::GetUserToExamine) =>
-            Ok(get_user_to_examine()),
-        Activity::Overlay(OverlayActivity::GetPostIdToRead) =>
-            Ok(get_post_id_to_read()),
-        Activity::Overlay(OverlayActivity::GetHashtagToRead) =>
-            Ok(get_hashtag_to_read()),
-        Activity::Util(UtilityActivity::ExamineUser(ref name)) =>
-            examine_user(client, name),
-        Activity::Util(UtilityActivity::InfoStatus(ref id)) =>
-            view_single_post(client, id),
-        Activity::NonUtil(NonUtilityActivity::ComposeToplevel) =>
-            compose_post(client, post.unwrap_or_else(|| Post::new())),
-        Activity::NonUtil(NonUtilityActivity::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),
-                None => Post::reply_to(id, client),
-            };
-            match post {
-                Ok(post) => compose_post(client, post),
-                Err(e) => Err(e),
-            }
-        }
-        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(client, id, full),
-        Activity::Util(UtilityActivity::ListStatusFavouriters(ref id)) =>
-            list_status_favouriters(client, id),
-        Activity::Util(UtilityActivity::ListStatusBoosters(ref id)) =>
-            list_status_boosters(client, id),
-        Activity::Util(UtilityActivity::ListUserFollowers(ref id)) =>
-            list_user_followers(client, id),
-        Activity::Util(UtilityActivity::ListUserFollowees(ref id)) =>
-            list_user_followees(client, id),
-    };
-
-    result.expect("FIXME: need to implement the Error Log here")
-}
-
 impl TuiLogicalState {
     fn new() -> Self {
         let activity_stack = ActivityStack::new();
@@ -653,10 +586,11 @@ impl TuiLogicalState {
     }
 
     fn changed_activity(&mut self, client: &mut Client, post: Option<Post>) {
-        self.activity_state = new_activity_state(
+        self.activity_state = self.new_activity_state(
             self.activity_stack.top(), client, post);
         self.overlay_activity_state = match self.activity_stack.overlay() {
-            Some(activity) => Some(new_activity_state(activity, client, None)),
+            Some(activity) =>
+                Some(self.new_activity_state(activity, client, None)),
             None => None,
         };
         if let Some(area) = self.last_area {
@@ -672,4 +606,73 @@ impl TuiLogicalState {
         self.activity_stack.pop_overlay();
         self.overlay_activity_state = None;
     }
+
+fn new_activity_state(&self, activity: Activity, client: &mut Client,
+                      post: Option<Post>) -> Box<dyn ActivityState>
+    {
+        let result = match activity {
+            Activity::NonUtil(NonUtilityActivity::MainMenu) =>
+                Ok(main_menu()),
+            Activity::Util(UtilityActivity::UtilsMenu) =>
+                Ok(utils_menu(client)),
+            Activity::Util(UtilityActivity::ExitMenu) =>
+                Ok(exit_menu()),
+            Activity::Util(UtilityActivity::LogsMenu1) =>
+                Ok(logs_menu_1()),
+            Activity::Util(UtilityActivity::LogsMenu2) =>
+                Ok(logs_menu_2()),
+            Activity::NonUtil(NonUtilityActivity::HomeTimelineFile) =>
+                home_timeline(client),
+            Activity::NonUtil(NonUtilityActivity::PublicTimelineFile) =>
+                public_timeline(client),
+            Activity::NonUtil(NonUtilityActivity::LocalTimelineFile) =>
+                local_timeline(client),
+            Activity::NonUtil(NonUtilityActivity::HashtagTimeline(ref id)) =>
+                hashtag_timeline(client, id),
+            Activity::Util(UtilityActivity::ReadMentions) =>
+                mentions(client),
+            Activity::Util(UtilityActivity::EgoLog) =>
+                ego_log(client),
+            Activity::Overlay(OverlayActivity::GetUserToExamine) =>
+                Ok(get_user_to_examine()),
+            Activity::Overlay(OverlayActivity::GetPostIdToRead) =>
+                Ok(get_post_id_to_read()),
+            Activity::Overlay(OverlayActivity::GetHashtagToRead) =>
+                Ok(get_hashtag_to_read()),
+            Activity::Util(UtilityActivity::ExamineUser(ref name)) =>
+                examine_user(client, name),
+            Activity::Util(UtilityActivity::InfoStatus(ref id)) =>
+                view_single_post(client, id),
+            Activity::NonUtil(NonUtilityActivity::ComposeToplevel) =>
+                compose_post(client, post.unwrap_or_else(|| Post::new())),
+            Activity::NonUtil(NonUtilityActivity::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),
+                    None => Post::reply_to(id, client),
+                };
+                match post {
+                    Ok(post) => compose_post(client, post),
+                    Err(e) => Err(e),
+                }
+            }
+            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(client, id, full),
+            Activity::Util(UtilityActivity::ListStatusFavouriters(ref id)) =>
+                list_status_favouriters(client, id),
+            Activity::Util(UtilityActivity::ListStatusBoosters(ref id)) =>
+                list_status_boosters(client, id),
+            Activity::Util(UtilityActivity::ListUserFollowers(ref id)) =>
+                list_user_followers(client, id),
+            Activity::Util(UtilityActivity::ListUserFollowees(ref id)) =>
+                list_user_followees(client, id),
+        };
+
+        result.expect("FIXME: need to implement the Error Log here")
+    }
 }