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();
}
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 {
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")
+ }
}