mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 03:47:23 +01:00
Implement some Clippy suggestions
This commit is contained in:
parent
66af523d5a
commit
8d9690dad6
22 changed files with 57 additions and 69 deletions
|
|
@ -72,8 +72,7 @@ mod imp {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.recordings
|
.recordings
|
||||||
.iter()
|
.iter()
|
||||||
.map(|r| obj.player().recording_to_playlist(r))
|
.flat_map(|r| obj.player().recording_to_playlist(r))
|
||||||
.flatten()
|
|
||||||
.collect::<Vec<PlaylistItem>>();
|
.collect::<Vec<PlaylistItem>>();
|
||||||
|
|
||||||
if let Err(err) = obj.player().append(playlist) {
|
if let Err(err) = obj.player().append(playlist) {
|
||||||
|
|
@ -165,8 +164,7 @@ impl AlbumPage {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.recordings
|
.recordings
|
||||||
.iter()
|
.iter()
|
||||||
.map(|r| self.player().recording_to_playlist(r))
|
.flat_map(|r| self.player().recording_to_playlist(r))
|
||||||
.flatten()
|
|
||||||
.collect::<Vec<PlaylistItem>>();
|
.collect::<Vec<PlaylistItem>>();
|
||||||
|
|
||||||
self.player().append_and_play(playlist);
|
self.player().append_and_play(playlist);
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ impl AlbumTile {
|
||||||
pub fn new(album: &Album) -> Self {
|
pub fn new(album: &Album) -> Self {
|
||||||
let obj: Self = glib::Object::new();
|
let obj: Self = glib::Object::new();
|
||||||
|
|
||||||
obj.imp().title_label.set_label(&album.name.get());
|
obj.imp().title_label.set_label(album.name.get());
|
||||||
obj.imp().album.set(album.clone()).unwrap();
|
obj.imp().album.set(album.clone()).unwrap();
|
||||||
|
|
||||||
obj
|
obj
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ mod imp {
|
||||||
self.parent_constructed();
|
self.parent_constructed();
|
||||||
|
|
||||||
let set_design_action = gio::ActionEntry::builder("set-design")
|
let set_design_action = gio::ActionEntry::builder("set-design")
|
||||||
.parameter_type(Some(&glib::VariantTy::STRING))
|
.parameter_type(Some(glib::VariantTy::STRING))
|
||||||
.state(glib::Variant::from("program-1"))
|
.state(glib::Variant::from("program-1"))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ impl RecordingEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_work(&self, work: Work) {
|
fn set_work(&self, work: Work) {
|
||||||
self.imp().work_row.set_title(&work.name.get());
|
self.imp().work_row.set_title(work.name.get());
|
||||||
self.imp().work_row.set_subtitle(
|
self.imp().work_row.set_subtitle(
|
||||||
&work
|
&work
|
||||||
.composers_string()
|
.composers_string()
|
||||||
|
|
|
||||||
|
|
@ -245,8 +245,7 @@ impl TracksEditor {
|
||||||
.track_rows
|
.track_rows
|
||||||
.borrow()
|
.borrow()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|t| t.track_data().parts.clone())
|
.flat_map(|t| t.track_data().parts.clone())
|
||||||
.flatten()
|
|
||||||
.collect::<Vec<Work>>()
|
.collect::<Vec<Work>>()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -390,17 +390,15 @@ impl WorkEditor {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.emit_by_name::<()>("created", &[&part]);
|
self.emit_by_name::<()>("created", &[&part]);
|
||||||
|
} else if let Some(work_id) = self.imp().work_id.get() {
|
||||||
|
library
|
||||||
|
.update_work(work_id, name, parts, composers, instruments, enable_updates)
|
||||||
|
.unwrap();
|
||||||
} else {
|
} else {
|
||||||
if let Some(work_id) = self.imp().work_id.get() {
|
let work = library
|
||||||
library
|
.create_work(name, parts, composers, instruments, enable_updates)
|
||||||
.update_work(work_id, name, parts, composers, instruments, enable_updates)
|
.unwrap();
|
||||||
.unwrap();
|
self.emit_by_name::<()>("created", &[&work]);
|
||||||
} else {
|
|
||||||
let work = library
|
|
||||||
.create_work(name, parts, composers, instruments, enable_updates)
|
|
||||||
.unwrap();
|
|
||||||
self.emit_by_name::<()>("created", &[&work]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.imp().navigation.get().unwrap().pop();
|
self.imp().navigation.get().unwrap().pop();
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ impl WorkEditorPartRow {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_part(&self, part: Work) {
|
fn set_part(&self, part: Work) {
|
||||||
self.set_title(&part.name.get());
|
self.set_title(part.name.get());
|
||||||
|
|
||||||
if !part.parts.is_empty() {
|
if !part.parts.is_empty() {
|
||||||
self.set_subtitle(
|
self.set_subtitle(
|
||||||
|
|
|
||||||
|
|
@ -92,8 +92,8 @@ impl EmptyPage {
|
||||||
#[template_callback]
|
#[template_callback]
|
||||||
async fn download_library(&self) {
|
async fn download_library(&self) {
|
||||||
let dialog = adw::AlertDialog::builder()
|
let dialog = adw::AlertDialog::builder()
|
||||||
.heading(&gettext("Disclaimer"))
|
.heading(gettext("Disclaimer"))
|
||||||
.body(&gettext("You are about to download a library of audio files. These are from recordings that are in the public domain under EU law and are hosted on a server within the EU. Please ensure that you comply with the copyright laws of you country."))
|
.body(gettext("You are about to download a library of audio files. These are from recordings that are in the public domain under EU law and are hosted on a server within the EU. Please ensure that you comply with the copyright laws of you country."))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
dialog.add_response("continue", &gettext("Continue"));
|
dialog.add_response("continue", &gettext("Continue"));
|
||||||
|
|
|
||||||
|
|
@ -209,7 +209,7 @@ impl Library {
|
||||||
) -> Result<Work> {
|
) -> Result<Work> {
|
||||||
let connection = &mut *self.imp().connection.get().unwrap().lock().unwrap();
|
let connection = &mut *self.imp().connection.get().unwrap().lock().unwrap();
|
||||||
|
|
||||||
let work = self.create_work_priv(
|
let work = Self::create_work_priv(
|
||||||
connection,
|
connection,
|
||||||
name,
|
name,
|
||||||
parts,
|
parts,
|
||||||
|
|
@ -226,7 +226,6 @@ impl Library {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_work_priv(
|
fn create_work_priv(
|
||||||
&self,
|
|
||||||
connection: &mut SqliteConnection,
|
connection: &mut SqliteConnection,
|
||||||
name: TranslatedString,
|
name: TranslatedString,
|
||||||
parts: Vec<Work>,
|
parts: Vec<Work>,
|
||||||
|
|
@ -242,7 +241,7 @@ impl Library {
|
||||||
let work_data = tables::Work {
|
let work_data = tables::Work {
|
||||||
work_id: work_id.clone(),
|
work_id: work_id.clone(),
|
||||||
parent_work_id: parent_work_id.map(|w| w.to_string()),
|
parent_work_id: parent_work_id.map(|w| w.to_string()),
|
||||||
sequence_number: sequence_number,
|
sequence_number,
|
||||||
name,
|
name,
|
||||||
created_at: now,
|
created_at: now,
|
||||||
edited_at: now,
|
edited_at: now,
|
||||||
|
|
@ -256,7 +255,7 @@ impl Library {
|
||||||
.execute(connection)?;
|
.execute(connection)?;
|
||||||
|
|
||||||
for (index, part) in parts.into_iter().enumerate() {
|
for (index, part) in parts.into_iter().enumerate() {
|
||||||
self.create_work_priv(
|
Self::create_work_priv(
|
||||||
connection,
|
connection,
|
||||||
part.name,
|
part.name,
|
||||||
part.parts,
|
part.parts,
|
||||||
|
|
@ -309,7 +308,7 @@ impl Library {
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let connection = &mut *self.imp().connection.get().unwrap().lock().unwrap();
|
let connection = &mut *self.imp().connection.get().unwrap().lock().unwrap();
|
||||||
|
|
||||||
self.update_work_priv(
|
Self::update_work_priv(
|
||||||
connection,
|
connection,
|
||||||
work_id,
|
work_id,
|
||||||
name,
|
name,
|
||||||
|
|
@ -327,7 +326,6 @@ impl Library {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_work_priv(
|
fn update_work_priv(
|
||||||
&self,
|
|
||||||
connection: &mut SqliteConnection,
|
connection: &mut SqliteConnection,
|
||||||
work_id: &str,
|
work_id: &str,
|
||||||
name: TranslatedString,
|
name: TranslatedString,
|
||||||
|
|
@ -367,7 +365,7 @@ impl Library {
|
||||||
.optional()?
|
.optional()?
|
||||||
.is_some()
|
.is_some()
|
||||||
{
|
{
|
||||||
self.update_work_priv(
|
Self::update_work_priv(
|
||||||
connection,
|
connection,
|
||||||
&part.work_id,
|
&part.work_id,
|
||||||
part.name,
|
part.name,
|
||||||
|
|
@ -381,7 +379,7 @@ impl Library {
|
||||||
} else {
|
} else {
|
||||||
// Note: The previously used ID is discarded. This should be OK, because
|
// Note: The previously used ID is discarded. This should be OK, because
|
||||||
// at this point, the part ID should not have been used anywhere.
|
// at this point, the part ID should not have been used anywhere.
|
||||||
self.create_work_priv(
|
Self::create_work_priv(
|
||||||
connection,
|
connection,
|
||||||
part.name,
|
part.name,
|
||||||
part.parts,
|
part.parts,
|
||||||
|
|
|
||||||
|
|
@ -229,22 +229,18 @@ fn import_metadata_from_url_priv(
|
||||||
formatx!(gettext("Downloading {}"), &url).unwrap(),
|
formatx!(gettext("Downloading {}"), &url).unwrap(),
|
||||||
));
|
));
|
||||||
|
|
||||||
match runtime.block_on(download_tmp_file(&url, &sender)) {
|
match runtime.block_on(download_tmp_file(&url, sender)) {
|
||||||
Ok(db_file) => {
|
Ok(db_file) => {
|
||||||
let _ = sender.send_blocking(ProcessMsg::Message(
|
let _ = sender.send_blocking(ProcessMsg::Message(
|
||||||
formatx!(gettext("Importing downloaded library"), &url).unwrap(),
|
formatx!(gettext("Importing downloaded library"), &url).unwrap(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let _ = sender.send_blocking(ProcessMsg::Result(
|
let _ = sender.send_blocking(ProcessMsg::Result(
|
||||||
import_metadata_from_file(db_file.path(), this_connection, true).and_then(
|
import_metadata_from_file(db_file.path(), this_connection, true).map(|tracks| {
|
||||||
|tracks| {
|
if !tracks.is_empty() {
|
||||||
if !tracks.is_empty() {
|
log::warn!("The metadata file at {url} contains tracks.");
|
||||||
log::warn!("The metadata file at {url} contains tracks.");
|
}
|
||||||
}
|
}),
|
||||||
|
|
||||||
Ok(())
|
|
||||||
},
|
|
||||||
),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|
@ -269,7 +265,7 @@ fn import_library_from_url_priv(
|
||||||
formatx!(gettext("Downloading {}"), &url).unwrap(),
|
formatx!(gettext("Downloading {}"), &url).unwrap(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let archive_file = runtime.block_on(download_tmp_file(&url, &sender));
|
let archive_file = runtime.block_on(download_tmp_file(&url, sender));
|
||||||
|
|
||||||
match archive_file {
|
match archive_file {
|
||||||
Ok(archive_file) => {
|
Ok(archive_file) => {
|
||||||
|
|
@ -281,7 +277,7 @@ fn import_library_from_url_priv(
|
||||||
archive_file.path(),
|
archive_file.path(),
|
||||||
library_folder,
|
library_folder,
|
||||||
this_connection,
|
this_connection,
|
||||||
&sender,
|
sender,
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|
|
||||||
|
|
@ -414,7 +414,6 @@ impl Library {
|
||||||
works,
|
works,
|
||||||
recordings,
|
recordings,
|
||||||
albums,
|
albums,
|
||||||
..Default::default()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LibraryQuery {
|
LibraryQuery {
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ fn main() -> glib::ExitCode {
|
||||||
gettextrs::textdomain(config::PKGNAME).unwrap();
|
gettextrs::textdomain(config::PKGNAME).unwrap();
|
||||||
|
|
||||||
gio::resources_register(
|
gio::resources_register(
|
||||||
&gio::Resource::load(&format!(
|
&gio::Resource::load(format!(
|
||||||
"{}/{}/{}.gresource",
|
"{}/{}/{}.gresource",
|
||||||
config::DATADIR,
|
config::DATADIR,
|
||||||
config::PKGNAME,
|
config::PKGNAME,
|
||||||
|
|
|
||||||
|
|
@ -221,14 +221,14 @@ impl Player {
|
||||||
items.push(PlaylistItem::new(
|
items.push(PlaylistItem::new(
|
||||||
true,
|
true,
|
||||||
recording.work.composers_string(),
|
recording.work.composers_string(),
|
||||||
&recording.work.name.get(),
|
recording.work.name.get(),
|
||||||
Some(&performances),
|
Some(&performances),
|
||||||
None,
|
None,
|
||||||
&self.library_path_to_file_path(&tracks[0].path),
|
self.library_path_to_file_path(&tracks[0].path),
|
||||||
&tracks[0].track_id,
|
&tracks[0].track_id,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
let mut tracks = tracks.into_iter();
|
let mut tracks = tracks.iter();
|
||||||
let first_track = tracks.next().unwrap();
|
let first_track = tracks.next().unwrap();
|
||||||
|
|
||||||
let track_title = |track: &Track, number: usize| -> String {
|
let track_title = |track: &Track, number: usize| -> String {
|
||||||
|
|
@ -249,10 +249,10 @@ impl Player {
|
||||||
items.push(PlaylistItem::new(
|
items.push(PlaylistItem::new(
|
||||||
true,
|
true,
|
||||||
recording.work.composers_string(),
|
recording.work.composers_string(),
|
||||||
&recording.work.name.get(),
|
recording.work.name.get(),
|
||||||
Some(&performances),
|
Some(&performances),
|
||||||
Some(&track_title(&first_track, 1)),
|
Some(&track_title(first_track, 1)),
|
||||||
&self.library_path_to_file_path(&first_track.path),
|
self.library_path_to_file_path(&first_track.path),
|
||||||
&first_track.track_id,
|
&first_track.track_id,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
@ -260,11 +260,11 @@ impl Player {
|
||||||
items.push(PlaylistItem::new(
|
items.push(PlaylistItem::new(
|
||||||
false,
|
false,
|
||||||
recording.work.composers_string(),
|
recording.work.composers_string(),
|
||||||
&recording.work.name.get(),
|
recording.work.name.get(),
|
||||||
Some(&performances),
|
Some(&performances),
|
||||||
// track number = track index + 1 (first track) + 1 (zero based)
|
// track number = track index + 1 (first track) + 1 (zero based)
|
||||||
Some(&track_title(&track, index + 2)),
|
Some(&track_title(track, index + 2)),
|
||||||
&self.library_path_to_file_path(&track.path),
|
self.library_path_to_file_path(&track.path),
|
||||||
&track.track_id,
|
&track.track_id,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ impl Program {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_query(query: LibraryQuery) -> Self {
|
pub fn from_query(query: LibraryQuery) -> Self {
|
||||||
let settings = gio::Settings::new(&config::APP_ID);
|
let settings = gio::Settings::new(config::APP_ID);
|
||||||
|
|
||||||
glib::Object::builder()
|
glib::Object::builder()
|
||||||
.property(
|
.property(
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ mod imp {
|
||||||
self.set_program_from_settings(&settings);
|
self.set_program_from_settings(&settings);
|
||||||
|
|
||||||
let obj = self.obj().to_owned();
|
let obj = self.obj().to_owned();
|
||||||
settings.connect_changed(Some(&self.key.get().unwrap()), move |settings, _| {
|
settings.connect_changed(Some(self.key.get().unwrap()), move |settings, _| {
|
||||||
obj.imp().set_program_from_settings(settings);
|
obj.imp().set_program_from_settings(settings);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ mod imp {
|
||||||
.push(&RecordingEditor::new(
|
.push(&RecordingEditor::new(
|
||||||
obj.imp().navigation.get().unwrap(),
|
obj.imp().navigation.get().unwrap(),
|
||||||
obj.imp().library.get().unwrap(),
|
obj.imp().library.get().unwrap(),
|
||||||
Some(&obj.imp().recording.get().unwrap()),
|
Some(obj.imp().recording.get().unwrap()),
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -90,8 +90,8 @@ mod imp {
|
||||||
let delete_action = gio::ActionEntry::builder("delete")
|
let delete_action = gio::ActionEntry::builder("delete")
|
||||||
.activate(move |_, _, _| {
|
.activate(move |_, _, _| {
|
||||||
let dialog = adw::AlertDialog::builder()
|
let dialog = adw::AlertDialog::builder()
|
||||||
.heading(&gettext("Delete recording?"))
|
.heading(gettext("Delete recording?"))
|
||||||
.body(&gettext("The recording will be removed from your music library and the corresponding audio files will be deleted. This action cannot be undone."))
|
.body(gettext("The recording will be removed from your music library and the corresponding audio files will be deleted. This action cannot be undone."))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
dialog.add_response("delete", &gettext("Delete"));
|
dialog.add_response("delete", &gettext("Delete"));
|
||||||
|
|
@ -142,7 +142,7 @@ impl RecordingTile {
|
||||||
let obj: Self = glib::Object::new();
|
let obj: Self = glib::Object::new();
|
||||||
let imp = obj.imp();
|
let imp = obj.imp();
|
||||||
|
|
||||||
imp.work_label.set_label(&recording.work.name.get());
|
imp.work_label.set_label(recording.work.name.get());
|
||||||
imp.composer_label.set_label(
|
imp.composer_label.set_label(
|
||||||
&recording
|
&recording
|
||||||
.work
|
.work
|
||||||
|
|
|
||||||
|
|
@ -391,7 +391,7 @@ impl SearchPage {
|
||||||
imp.header_box.set_visible(!query.is_empty());
|
imp.header_box.set_visible(!query.is_empty());
|
||||||
|
|
||||||
let highlight = if let Some(work) = &query.work {
|
let highlight = if let Some(work) = &query.work {
|
||||||
imp.title_label.set_text(&work.name.get());
|
imp.title_label.set_text(work.name.get());
|
||||||
if let Some(composers) = work.composers_string() {
|
if let Some(composers) = work.composers_string() {
|
||||||
imp.subtitle_label.set_text(&composers);
|
imp.subtitle_label.set_text(&composers);
|
||||||
imp.subtitle_label.set_visible(true);
|
imp.subtitle_label.set_visible(true);
|
||||||
|
|
@ -400,15 +400,15 @@ impl SearchPage {
|
||||||
}
|
}
|
||||||
Some(Tag::Work(work.to_owned()))
|
Some(Tag::Work(work.to_owned()))
|
||||||
} else if let Some(person) = &query.composer {
|
} else if let Some(person) = &query.composer {
|
||||||
imp.title_label.set_text(&person.name.get());
|
imp.title_label.set_text(person.name.get());
|
||||||
imp.subtitle_label.set_visible(false);
|
imp.subtitle_label.set_visible(false);
|
||||||
Some(Tag::Composer(person.to_owned()))
|
Some(Tag::Composer(person.to_owned()))
|
||||||
} else if let Some(person) = &query.performer {
|
} else if let Some(person) = &query.performer {
|
||||||
imp.title_label.set_text(&person.name.get());
|
imp.title_label.set_text(person.name.get());
|
||||||
imp.subtitle_label.set_visible(false);
|
imp.subtitle_label.set_visible(false);
|
||||||
Some(Tag::Performer(person.to_owned()))
|
Some(Tag::Performer(person.to_owned()))
|
||||||
} else if let Some(ensemble) = &query.ensemble {
|
} else if let Some(ensemble) = &query.ensemble {
|
||||||
imp.title_label.set_text(&ensemble.name.get());
|
imp.title_label.set_text(ensemble.name.get());
|
||||||
imp.subtitle_label.set_visible(false);
|
imp.subtitle_label.set_visible(false);
|
||||||
Some(Tag::Ensemble(ensemble.to_owned()))
|
Some(Tag::Ensemble(ensemble.to_owned()))
|
||||||
} else if let Some(instrument) = &query.instrument {
|
} else if let Some(instrument) = &query.instrument {
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,7 @@ impl RecordingSelectorPopover {
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
|
|
||||||
row.set_tooltip_text(Some(&work.name.get()));
|
row.set_tooltip_text(Some(work.name.get()));
|
||||||
|
|
||||||
let work = work.clone();
|
let work = work.clone();
|
||||||
let obj = self.clone();
|
let obj = self.clone();
|
||||||
|
|
|
||||||
|
|
@ -256,7 +256,7 @@ impl WorkSelectorPopover {
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
|
|
||||||
row.set_tooltip_text(Some(&work.name.get()));
|
row.set_tooltip_text(Some(work.name.get()));
|
||||||
|
|
||||||
let work = work.clone();
|
let work = work.clone();
|
||||||
let obj = self.clone();
|
let obj = self.clone();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn error_toast(msgid: &str, err: anyhow::Error, toast_overlay: &adw::ToastOv
|
||||||
log::error!("{msgid}: {err:?}");
|
log::error!("{msgid}: {err:?}");
|
||||||
|
|
||||||
let toast = adw::Toast::builder()
|
let toast = adw::Toast::builder()
|
||||||
.title(&gettext(msgid))
|
.title(gettext(msgid))
|
||||||
.button_label("Details")
|
.button_label("Details")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ glib::wrapper! {
|
||||||
impl ErrorDialog {
|
impl ErrorDialog {
|
||||||
pub fn present(err: &anyhow::Error, parent: &impl IsA<gtk::Widget>) {
|
pub fn present(err: &anyhow::Error, parent: &impl IsA<gtk::Widget>) {
|
||||||
let obj: Self = glib::Object::builder()
|
let obj: Self = glib::Object::builder()
|
||||||
.property("error-text", &format!("{err:?}"))
|
.property("error-text", format!("{err:?}"))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
obj.present(Some(parent));
|
obj.present(Some(parent));
|
||||||
|
|
|
||||||
|
|
@ -202,8 +202,8 @@ mod imp {
|
||||||
fn close_request(&self) -> glib::signal::Propagation {
|
fn close_request(&self) -> glib::signal::Propagation {
|
||||||
if self.process_manager.any_ongoing() {
|
if self.process_manager.any_ongoing() {
|
||||||
let dialog = adw::AlertDialog::builder()
|
let dialog = adw::AlertDialog::builder()
|
||||||
.heading(&gettext("Close window?"))
|
.heading(gettext("Close window?"))
|
||||||
.body(&gettext(
|
.body(gettext(
|
||||||
"There are ongoing processes that will be canceled.",
|
"There are ongoing processes that will be canceled.",
|
||||||
))
|
))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue