It doesn't work! JSON parsing error.
Ok(st)
}
- pub fn fetch_feed(&mut self, id: FeedId, ext: FeedExtend) ->
+ pub fn fetch_feed(&mut self, id: &FeedId, ext: FeedExtend) ->
Result<(), ClientError>
{
if ext == FeedExtend::Initial {
- if self.feeds.contains_key(&id) {
+ if self.feeds.contains_key(id) {
// No need to fetch the initial contents - we already have some
return Ok(());
}
} else {
- assert!(self.feeds.contains_key(&id),
+ assert!(self.feeds.contains_key(id),
"Shouldn't be extending a feed we've never fetched")
}
FeedId::Hashtag(ref tag) => {
Req::get(&format!("timelines/tag/{}", &tag))
},
- FeedId::User(ref id, boosts, replies) => {
+ FeedId::User(id, boosts, replies) => {
Req::get(&format!("accounts/{}/statuses", id))
- .param("exclude_reblogs", boosts == Boosts::Hide)
- .param("exclude_replies", replies == Replies::Hide)
+ .param("exclude_reblogs", *boosts == Boosts::Hide)
+ .param("exclude_replies", *replies == Replies::Hide)
},
};
let ids = sts.iter().rev().map(|st| st.id.clone()).collect();
match ext {
FeedExtend::Initial => {
- self.feeds.insert(id, Feed {
+ self.feeds.insert(id.clone(), Feed {
ids: ids,
origin: 0,
});
},
FeedExtend::Future => {
- let feed = self.feeds.get_mut(&id).unwrap();
+ let feed = self.feeds.get_mut(id).unwrap();
for id in ids.iter() {
feed.ids.push_back(id.to_string());
}
},
FeedExtend::Past => {
- let feed = self.feeds.get_mut(&id).unwrap();
+ let feed = self.feeds.get_mut(id).unwrap();
for id in ids.iter().rev() {
feed.ids.push_front(id.to_string());
feed.origin += 1;
--- /dev/null
+use super::client::{Client, ClientError, FeedId, FeedExtend};
+use super::coloured_string::ColouredString;
+use super::tui::{
+ ActivityState, CursorPosition, LogicalAction,
+ OurKey,
+};
+
+struct FeedFile {
+ id: FeedId,
+}
+
+impl FeedFile {
+ fn new(id: FeedId, client: &mut Client) -> Result<Self, ClientError> {
+ client.fetch_feed(&id, FeedExtend::Initial)?;
+
+ Ok(FeedFile {
+ id: id,
+ })
+ }
+}
+
+impl ActivityState for FeedFile {
+ fn draw(&self, _w: usize, _h: usize)
+ -> (Vec<ColouredString>, CursorPosition) {
+ (Vec::new(), CursorPosition::None) // FIXME
+ }
+
+ fn handle_keypress(&mut self, _key: OurKey) -> LogicalAction {
+ LogicalAction::Nothing // FIXME
+ }
+}
+
+pub fn home_timeline(client: &mut Client) ->
+ Result<Box<dyn ActivityState>, ClientError>
+{
+ let file = FeedFile::new(FeedId::Home, client)?;
+ Ok(Box::new(file))
+}
pub mod activity_stack;
pub mod tui;
pub mod menu;
+pub mod file;
let mut menu = Menu::new(
ColouredString::uniform("Mastodonochrome Main Menu", 'H'), true);
- menu.add_action(Pr('H'), "Home timeline", LogicalAction::NYI);
+ menu.add_action(Pr('H'), "Home timeline", LogicalAction::Goto(
+ NonUtilityActivity::HomeTimelineFile.into()));
menu.add_blank_line();
menu.add_action(Pr('P'), "Public timeline (all servers)",
LogicalAction::NYI);
use super::client::Client;
use super::coloured_string::{ColouredString, ColouredStringSlice};
use super::menu::*;
+use super::file::*;
use super::auth::AuthError;
fn ratatui_style_from_colour(colour: char) -> Style {
activity_state: Box<dyn ActivityState>,
}
-fn new_activity_state(activity: Activity, _client: &mut Client) ->
+fn new_activity_state(activity: Activity, client: &mut Client) ->
Box<dyn ActivityState>
{
- match activity {
- Activity::NonUtil(NonUtilityActivity::MainMenu) => main_menu(),
- Activity::Util(UtilityActivity::UtilsMenu) => utils_menu(),
- Activity::Util(UtilityActivity::ExitMenu) => exit_menu(),
- Activity::Util(UtilityActivity::LogsMenu1) => logs_menu_1(),
- Activity::Util(UtilityActivity::LogsMenu2) => logs_menu_2(),
+ let result = match activity {
+ Activity::NonUtil(NonUtilityActivity::MainMenu) =>
+ Ok(main_menu()),
+ Activity::Util(UtilityActivity::UtilsMenu) =>
+ Ok(utils_menu()),
+ 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),
_ => panic!("FIXME"),
- }
+ };
+
+ result.expect("FIXME: need to implement the Error Log here")
}
impl TuiLogicalState {