Add the game result to the list of visible games #65
|
@ -1,14 +1,15 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sgf::go::Game;
|
use sgf::go::{Game, GameResult, Win};
|
||||||
use typeshare::typeshare;
|
use typeshare::typeshare;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
#[typeshare]
|
#[typeshare]
|
||||||
pub struct GamePreviewElement {
|
pub struct GamePreviewElement {
|
||||||
pub date: Vec<String>,
|
pub date: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub black_player: String,
|
pub black_player: String,
|
||||||
pub white_player: String,
|
pub white_player: String,
|
||||||
|
pub result: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GamePreviewElement {
|
impl GamePreviewElement {
|
||||||
|
@ -37,16 +38,32 @@ impl GamePreviewElement {
|
||||||
None => format!("{} vs. {}", black_player, white_player),
|
None => format!("{} vs. {}", black_player, white_player),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let format_win = |win: &Win| match win {
|
||||||
|
Win::Resignation => "Resignation".to_owned(),
|
||||||
|
Win::Time => "Timeout".to_owned(),
|
||||||
|
Win::Forfeit => "Forfeit".to_owned(),
|
||||||
|
Win::Score(score) => format!("{:.1}", score),
|
||||||
|
};
|
||||||
|
|
||||||
|
let result = match game.info.result {
|
||||||
|
Some(GameResult::Annulled) => "Annulled".to_owned(),
|
||||||
|
Some(GameResult::Draw) => "Draw".to_owned(),
|
||||||
|
Some(GameResult::Black(ref win)) => format!("Black by {}", format_win(win)),
|
||||||
|
Some(GameResult::White(ref win)) => format!("White by {}", format_win(win)),
|
||||||
|
None => "".to_owned(),
|
||||||
|
};
|
||||||
|
|
||||||
GamePreviewElement {
|
GamePreviewElement {
|
||||||
date: game
|
date: game
|
||||||
.info
|
.info
|
||||||
.date
|
.date
|
||||||
.iter()
|
.first()
|
||||||
.map(|dt| dt.to_string())
|
.map(|dt| dt.to_string())
|
||||||
.collect::<Vec<String>>(),
|
.unwrap_or("".to_owned()),
|
||||||
name,
|
name,
|
||||||
black_player,
|
black_player,
|
||||||
white_player,
|
white_player,
|
||||||
|
result,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,11 @@ use kifu_core::ui::GamePreviewElement;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct GamePreviewPrivate {
|
pub struct GamePreviewPrivate {
|
||||||
|
date: gtk::Label,
|
||||||
title: gtk::Label,
|
title: gtk::Label,
|
||||||
black_player: gtk::Label,
|
black_player: gtk::Label,
|
||||||
white_player: gtk::Label,
|
white_player: gtk::Label,
|
||||||
date: gtk::Label,
|
result: gtk::Label,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[glib::object_subclass]
|
#[glib::object_subclass]
|
||||||
|
@ -36,6 +37,7 @@ impl GamePreview {
|
||||||
s.append(&s.imp().title);
|
s.append(&s.imp().title);
|
||||||
s.append(&s.imp().black_player);
|
s.append(&s.imp().black_player);
|
||||||
s.append(&s.imp().white_player);
|
s.append(&s.imp().white_player);
|
||||||
|
s.append(&s.imp().result);
|
||||||
|
|
||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
@ -44,8 +46,7 @@ impl GamePreview {
|
||||||
self.imp().black_player.set_text(&element.black_player);
|
self.imp().black_player.set_text(&element.black_player);
|
||||||
self.imp().white_player.set_text(&element.white_player);
|
self.imp().white_player.set_text(&element.white_player);
|
||||||
self.imp().title.set_text(&element.name);
|
self.imp().title.set_text(&element.name);
|
||||||
if let Some(date) = element.date.first() {
|
self.imp().date.set_text(&element.date);
|
||||||
self.imp().date.set_text(&date);
|
self.imp().result.set_text(&element.result);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue