Fix Battle cards not detected as horizontal during ingest
Real Battle cards are layout "transform" (they flip into a creature), not "battle" as previously assumed — no shipped card actually uses that layout, so the horizontal flag never got set for them. Detect Battle orientation from the front face's type line instead.
This commit is contained in:
@@ -546,7 +546,19 @@ fn load_oracle_cards(conn: &Connection, reader: impl Read, cancel: &CancelToken)
|
||||
// Battles and Planes/Phenomena store their card image portrait-shaped
|
||||
// with the content itself rotated — viewers must rotate it 90° to
|
||||
// read it right-side up (verified against real Scryfall images).
|
||||
let horizontal = matches!(c.layout.as_str(), "battle" | "planar");
|
||||
// Battles are *not* `layout: "battle"` in Scryfall's data — every
|
||||
// released Battle (the "Invasion of ..." Sieges) transforms into a
|
||||
// creature, so it's `layout: "transform"` with the Battle type only
|
||||
// on the front face. Detect it from the front face's type instead
|
||||
// of the layout.
|
||||
let front_type_line = type_line.split(" // ").next().unwrap_or("");
|
||||
let is_battle = front_type_line
|
||||
.split('—')
|
||||
.next()
|
||||
.unwrap_or("")
|
||||
.split_whitespace()
|
||||
.any(|w| w == "Battle");
|
||||
let horizontal = is_battle || c.layout == "planar";
|
||||
|
||||
let changed = ins_card.execute(params![
|
||||
oracle_id,
|
||||
@@ -1020,8 +1032,13 @@ mod tests {
|
||||
#[test]
|
||||
fn captures_horizontal_flag_for_battle_and_planar_layouts_only() {
|
||||
let oracle = r#"[
|
||||
{"oracle_id":"oid-battle","name":"Invasion of Zendikar","layout":"battle","cmc":4.0,
|
||||
"type_line":"Battle — Siege","color_identity":["G"],"keywords":[]},
|
||||
{"oracle_id":"oid-battle","name":"Invasion of Zendikar // Awakened Skyclave",
|
||||
"layout":"transform","cmc":4.0,
|
||||
"card_faces":[
|
||||
{"type_line":"Battle — Siege"},
|
||||
{"type_line":"Creature — Elemental"}
|
||||
],
|
||||
"color_identity":["G"],"keywords":[]},
|
||||
{"oracle_id":"oid-plane","name":"Academy at Tolaria West","layout":"planar","cmc":0.0,
|
||||
"type_line":"Plane — Dominaria","color_identity":[],"keywords":[]},
|
||||
{"oracle_id":"oid-scheme","name":"A Display of My Dark Power","layout":"scheme","cmc":0.0,
|
||||
@@ -1045,9 +1062,12 @@ mod tests {
|
||||
!= 0
|
||||
};
|
||||
|
||||
// Real Battle cards are `layout: "transform"` (they flip into a
|
||||
// creature once defeated) — only the front face carries the Battle
|
||||
// type, so detection has to key off that, not the layout string.
|
||||
assert!(horizontal("oid-battle"));
|
||||
assert!(horizontal("oid-plane"));
|
||||
// Schemes are oversized but not rotated — only battle/planar layouts are.
|
||||
// Schemes are oversized but not rotated — only Battle/planar cards are.
|
||||
assert!(!horizontal("oid-scheme"));
|
||||
assert!(!horizontal("oid-normal"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user