Skip to content

Commit

Permalink
Playlist with multiple items (temp commit)
Browse files Browse the repository at this point in the history
  • Loading branch information
joshuamegnauth54 committed Feb 11, 2025
1 parent a626f3f commit 0d71ce0
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 7 deletions.
18 changes: 15 additions & 3 deletions src/argparse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ use url::Url;

#[derive(Debug, Default)]
pub struct Arguments {
/// URLs to play with associated metadata
pub urls: Vec<Url>,
/// Files or directory URLs to play
pub urls: Option<Vec<Url>>,
/// Single URL only
pub url_opt: Option<Url>,
}

impl Arguments {
Expand All @@ -31,7 +33,17 @@ impl Arguments {
warn!("Unused argument: {arg:?}");
}

Ok(Arguments { urls })
if urls.len() > 1 {
Ok(Arguments {
urls: Some(urls),
..Default::default()
})
} else {
Ok(Arguments {
url_opt: urls.into_iter().next(),
..Default::default()
})
}
}
}

Expand Down
11 changes: 7 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,15 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
settings = settings.theme(config.app_theme.theme());
settings = settings.size_limits(Limits::NONE.min_width(360.0).min_height(180.0));

let args = argparse::Arguments::from_args().unwrap_or_default();
let url_opt = args.urls.into_iter().next();
let argparse::Arguments { urls, url_opt } = argparse::Arguments::from_args().unwrap_or_default();

let flags = Flags {
config_handler,
config,
config_state_handler,
config_state,
url_opt,
urls
};
cosmic::app::run::<App>(settings, flags)?;

Expand Down Expand Up @@ -168,6 +168,7 @@ pub struct Flags {
config_state_handler: Option<cosmic_config::Config>,
config_state: ConfigState,
url_opt: Option<url::Url>,
urls: Option<Vec<url::Url>>,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
Expand Down Expand Up @@ -793,13 +794,15 @@ impl Application for App {
.icon(widget::icon::from_name("folder-open-symbolic").size(16))
.text(fl!("open-folder"));

// TODO: This is kind of ugly and may be handled better in Arguments
let maybe_path = app
.flags
.url_opt
.as_ref()
.and_then(|url| url.to_file_path().ok());
let command = match maybe_path {
Some(path) if path.is_dir() => command::message::app(Message::FolderLoad(path)),
let command = match (app.flags.urls.take(), maybe_path) {
(Some(urls), _) => command::message::app(Message::MixedLoad(urls)),
(None, Some(path)) if path.is_dir() => command::message::app(Message::FolderLoad(path)),
_ => app.load(),
};
(app, command)
Expand Down

0 comments on commit 0d71ce0

Please sign in to comment.