ui_mode: UIMode,
selection: Option<(isize, usize)>,
select_aux: Option<bool>, // distinguishes fave from unfave, etc
+ file_desc: Type,
}
impl<Type: FileType, Source: FileDataSource> File<Type, Source> {
fn new(client: &mut Client, source: Source, desc: ColouredString,
- initial_pos: Option<FilePosition>) ->
+ file_desc: Type, initial_pos: Option<FilePosition>) ->
Result<Self, ClientError>
{
source.init(client)?;
ui_mode: UIMode::Normal,
selection: None,
select_aux: None,
+ file_desc,
};
Ok(ff)
}
pub fn home_timeline(client: &mut Client) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<StatusFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Home), ColouredString::general(
"Home timeline <H>",
- "HHHHHHHHHHHHHHHHHKH"), None)?;
+ "HHHHHHHHHHHHHHHHHKH"), StatusFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn local_timeline(client: &mut Client) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<StatusFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Local), ColouredString::general(
"Local public timeline <L>",
- "HHHHHHHHHHHHHHHHHHHHHHHHHKH"), None)?;
+ "HHHHHHHHHHHHHHHHHHHHHHHHHKH"), StatusFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn public_timeline(client: &mut Client) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<StatusFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Public), ColouredString::general(
"Public timeline <P>",
- "HHHHHHHHHHHHHHHHHHHKH"), None)?;
+ "HHHHHHHHHHHHHHHHHHHKH"), StatusFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn mentions(client: &mut Client) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<NotificationStatusFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Mentions), ColouredString::general(
"Mentions [ESC][R]",
- "HHHHHHHHHHHHKKKHHKH"), None)?;
+ "HHHHHHHHHHHHKKKHHKH"), NotificationStatusFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn ego_log(client: &mut Client) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<EgoNotificationFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Ego), ColouredString::general(
"Ego Log [ESC][L][L][E]",
- "HHHHHHHHHHHKKKHHKHHKHHKH"), None)?;
+ "HHHHHHHHHHHKKKHHKHHKHHKH"), EgoNotificationFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn list_status_favouriters(client: &mut Client, id: &str) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<UserListFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Favouriters(id.to_owned())),
ColouredString::uniform(
- &format!("Users who favourited post {id}"), 'H'), None)?;
+ &format!("Users who favourited post {id}"), 'H'),
+ UserListFeedType{}, None)?;
Ok(Box::new(file))
}
pub fn list_status_boosters(client: &mut Client, id: &str) ->
Result<Box<dyn ActivityState>, ClientError>
{
- let file = File::<UserListFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Boosters(id.to_owned())),
ColouredString::uniform(
- &format!("Users who boosted post {id}"), 'H'), None)?;
+ &format!("Users who boosted post {id}"), 'H'),
+ UserListFeedType{}, None)?;
Ok(Box::new(file))
}
let ac = client.account_by_id(&id)?;
let name = client.fq(&ac.acct);
- let file = File::<UserListFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Followers(id.to_owned())),
ColouredString::uniform(
- &format!("Users who follow {name}"), 'H'), None)?;
+ &format!("Users who follow {name}"), 'H'),
+ UserListFeedType{}, None)?;
Ok(Box::new(file))
}
let ac = client.account_by_id(&id)?;
let name = client.fq(&ac.acct);
- let file = File::<UserListFeedType, _>::new(
+ let file = File::new(
client, FeedSource::new(FeedId::Followees(id.to_owned())),
ColouredString::uniform(
- &format!("Users who {name} follows"), 'H'), None)?;
+ &format!("Users who {name} follows"), 'H'),
+ UserListFeedType{}, None)?;
Ok(Box::new(file))
}
{
let title = ColouredString::uniform(
&format!("Posts mentioning hashtag #{tag}"), 'H');
- let file = File::<StatusFeedType, _>::new(
- client, FeedSource::new(FeedId::Hashtag(tag.to_owned())), title, None)?;
+ let file = File::new(
+ client, FeedSource::new(FeedId::Hashtag(tag.to_owned())), title,
+ StatusFeedType{}, None)?;
Ok(Box::new(file))
}
let title = ColouredString::uniform(
&format!("Information about user {username}"), 'H');
- let file = File::<ExamineUserFileType, _>::new(
- client, StaticSource::singleton(ac.id), title,
+ let file = File::new(
+ client, StaticSource::singleton(ac.id), title, ExamineUserFileType{},
Some(FilePosition::item_top(isize::MIN)))?;
Ok(Box::new(file))
}
let title = ColouredString::uniform(
&format!("Information about post {}", st.id), 'H');
- let file = File::<DetailedStatusFileType, _>::new(
+ let file = File::new(
client, StaticSource::singleton(st.id), title,
+ DetailedStatusFileType{},
Some(FilePosition::item_top(isize::MIN)))?;
Ok(Box::new(file))
}
let index = ids.iter().position(|x| x == start_id)
.map_or(isize::MIN, |u| u as isize);
- let file = File::<StatusFeedType, _>::new(
- client, StaticSource::vector(ids), title,
+ let file = File::new(
+ client, StaticSource::vector(ids), title, StatusFeedType{},
Some(FilePosition::item_top(index as isize)))?;
Ok(Box::new(file))
}