Files
mini_projects/scryfall_deser/README.md

6.2 KiB

Quick Magic Finder

A quick way to search up Magic the Gathering (TM) cards for Linux (maybe MacOS? Don't have one, so haven't tried).

Currently, no images are displayed - so don't go into this expecting that.

The Components

This repo has 2 main parts to it:

  • The magic_finder rust code, which does the "heavy lifting" of updating a database, searching through it for cards, and finding close names (kind of)
  • The supporting scripts which use rofi

magic_finder can be used without the rofi parts if you wanted a command for loading showing basic mtg card info from the CLI.

The rofi part is so that I can quickly and easily get the card info I want. Basically just adds a very simple and easy GUI to the magic_finder part. I've written 2 wrapper scripts to enable this.

Requirements

Magic Finder

magic_finder is written in rust. Check the Cargo.toml file for more specific requirements. I was compiling with rustc version 1.88, but I would not at all be surprised if it worked on rust from year(s) ago.

rofi

The rofi scripts require a version over (I think) 1.7.6. The scripts require the ability to set the command setting on the filebrowser option in rofi. From what I can tell, this was introduced in 1.7.6.

Very annoyingly, the Ubuntu repos do not have this version. They have an earlier version. So, to use this, you'll need to get a more recent version yourself. I compiled and installed myself. See the end of this README for how I did that.

Usage

TODO

Installation, First Usage, and Updating

Installation

I am sorry in advance, this is a bit of a pain becuase of my lack of knowledge on how to properly "package" scripts alongside a rust binary.

TODO - don't forget that I need to install sqlite3-lib/dev/something - or maybe I add the feature flag "bundled"

TODO - don't forget about adding the shortcut to the overall wrapper script

Before you use this

Update

Basically the same as the "Before you use this" secion. Go to the Scryfall Bulk Download page and get the Oracle Cards download.

Then run the update_with_rofi.sh script, locate the downloaded file, and it should Just Work (TM). If not, try updating this repo. If it still doesn't work, log a ticket. It's probably going to something with Scryfall updating their schema that I haven't accounted for. Alternatively, run COMMAND --update <path to file> where <path to file> is the full path to where you downloaded the file.

NOTE: Updating will delete the previous db - that shouldn't be a problem though, because you shouldn't use that unless you really know what you're doing.

Why this exists

I like watch Magic the Gathering (TM) videos, expecially while coding, working, writing, whatever. Often, I don't know what card they're talking about. They'll often say the card name (sometimes a nickname - this tool doesn't help with that), and show it on the screen briefly (or in a tiny/obscured view), and I'll miss what it actually does. When this happens, I need to open a tab on my browser, go to Scryfall, type in the name, (sometimes) click the specific card, and the view it. This takes 2-3 page loads, changing my active window and just a bit of a pain.

This tool, especially using rofi enables me to hit Ctrl+M, type in the card name, navigate to the card (if needed) with my keyboard, and display the card. No browser, no HTTP, lower context switch, displayed right there, and goes away when I press anything else.

The idea is it's just easier and quicker than my normal process.

How I Installed rofi

If you're smarter than me, just follow the official docs: https://github.com/davatorium/rofi/blob/next/INSTALL.md and don't bother reading this.

I am entirely unfamiliar with meson and ninja (I'm more a Makefile kinda guy - haven't done any C properly in >10 years), so here's what I did. This is for Ubutntu - you will need to do something different for download the dependencies (you can see them in the INSTALL.md file referenced above).

Of note below, I'm installing this into my $HOME/bin directory. Change that part if you want to install somewhere else. Make sure to install it somewhere in your $PATH though!

Clone the repo and move into it

git clone --recursive https://github.com/davatorium/rofi
cd rofi

Install the deps

sudo apt build-dep rofi
sudo apt install meson
sudo apt install libxcb-keysyms1-dev libxcb-keysyms1 # I suspect only one of these is needed - not sure which

Setup and build (not sure why I put the prefix in here... you'll see below I still copy+pasted the bin)

meson setup build --prefix $HOME/bin -Dwayland=disabled -Dxcb=enabled
ninja -C build -v

Fingers crossed that all compiled and stuff... then copy the bin

cp build/rofi ~/bin

FIXME, TODO & Features That Could be Good

  • Remove the non-card cards. Examples I've come across are: ** Planes: Black Lotus Lounge ** Art Cards: https://scryfall.com/card/altr/15/%C3%A9owyn-fearless-knight-%C3%A9owyn-fearless-knight?utm_source=api
  • Allow exiting the script early (i.e. I hit CTRL+g just exits everything)
  • Misspelled cards, if only 1 hit that makes sense, could just work
  • Display the actual card image (probably won't do this)
  • Some kind of auto-magic direct link between the return codes set out in main.rs and the rofi scripts. Currently I need to manually make sure they're the same between the rust code and the sh code. I'm guessing would involve cargo build scripts (or just a find+replace?)
  • Add some classic nicknames (might be difficult to find them all). examples include: ** Bob - Dark Confidant ** AK - Accumulated Knowledge ** find more here: https://mtg.wiki/page/List_of_Magic_slang/Card_nicknames

Thanks

This project really is just 95% based on Scryfall. They're amazing. I don't know how or why they exist, but I think they're basically the best Magic the Gathering (TM) resource online.

Of course rofi for providing the quick, simple, low-weight, and well documented tool. Particularly the quickness and low-weight which made it really possible. The alternative was opening terminal windows, or using TKinter or something... surely not worth it.

Thanks to all the amazing rust packages I use.