Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/isamert/orgmdb.el

An Emacs/org-mode watchlist manager and OMDb API client
https://github.com/isamert/orgmdb.el

emacs movies org-mode

Last synced: 3 days ago
JSON representation

An Emacs/org-mode watchlist manager and OMDb API client

Awesome Lists containing this project

README

        

#+TITLE: orgmdb.el

[[https://melpa.org/#/orgmdb][file:https://melpa.org/packages/orgmdb-badge.svg]]

Tools for managing your watchlist in org-mode and some functions for interacting with [[http://www.omdbapi.com/][OMDb API]].

* Installation
orgmdb is available through [[https://melpa.org/#/orgmdb][MELPA]]. If you have it set up already, just do ~M-x package-install orgmdb~ and you are good to go. Otherwise please see [[https://melpa.org/#/getting-started][MELPA getting started]] page to learn how you can install packages through MELPA or see the following installation options.

Another way to install =orgmdb.el= would be using either [[https://github.com/radian-software/straight.el][straight]] or [[https://github.com/quelpa/quelpa-use-package][quelpa]] package managers:

#+begin_src elisp
;; Using straight:
(use-package orgmdb
:straight (:host github :repo "isamert/orgmdb.el"))

;; Using quelpa:
(use-package orgmdb
:quelpa (orgmdb :fetcher github :repo "isamert/orgmdb.el"))
#+end_src

Yet another option is just downloading =orgmdb.el= file and putting into your =load-path=, afterwards you can simply do the following in your =init.el=:

#+begin_src elisp
(require 'orgmdb)
#+end_src

* Demo
** Displaying detailed movie information
[[file:https://user-images.githubusercontent.com/8031017/154753759-5ddaca00-3245-433f-9c3a-13c1c48f5c01.gif]]

** Filling movie metadata
[[file:https://user-images.githubusercontent.com/8031017/154753756-5108bb8d-4dd0-457c-95df-9bae7a7ad17c.gif]]

** Opening a local video
[[file:https://user-images.githubusercontent.com/8031017/154756033-318e5482-67e5-4ae4-a40e-c29375faed58.gif]]

* Configuration
You need get yourself an API key to be able to use this package, see [[https://omdbapi.com/][OMDb website]]. After getting yourself an API key, you can start using by doing:

#+begin_src elisp
(setq orgmdb-omdb-apikey "YOUR-API-KEY")
#+end_src

* Interactive usage
~orgmdb.el~ offers several actions that you can call upon a movie/show/episode objects. These actions can be accessed by calling ~orgmdb-act~ function. A movie/show object is simply an org header with a tag, like the following:

#+begin_src org
,* Crouching Tiger, Hidden Dragon (2000) :movie:
,* Succession (2018-) :series:
#+end_src

You can put your cursor on one of the headers and call ~orgmdb-act~. From the menu, you can select ~Fill movie properties~ to pull movie metadata under the ~:PROPERTIES:~ drawer of the selected header. From now on, you can use other actions defined under the ~orgmdb-act~ menu.

An episode object is a special one, because it can be either a header containing an episode marker object (meaning something like ~S02E05~) with an ~:episode:~ tag:

#+begin_src org
,* Succession (2018-) :series:
,** S01E08 - Prague :episode:
#+end_src

or it can be simply an episode marker object:

#+begin_src org
,* Succession (2018-) :series:
- ...
- I watched S01E08 yesterday and it was cool.
- ^^^^^^ here is our episode marker object
#+end_src

In both cases, if your cursor is on the episode object, ~orgmdb-act~ will understand the context and show the actions accordingly.

Here are the actions and their simple explanations:
- ~Fill properties~ :: Fill the metadata of the current object. See `orgmdb-fill-property-list` variable to control which properties gets filled in.
- ~Show detailed info~ :: Open a nicely formatted org buffer and display a detailed info of the current object with a small poster of it.
- ~Select an episode...~ :: Select an episode of the currently focused show and act on it.
- ~Open local video~ :: Find the local video file containing the current movie/show/episode. It searches video files under ~orgmdb-video-dir~ and looks for files with ~orgmdb-video-file-extensions~ extensions. ~orgmdb-player-function~ is used for opening the video file.

** Defining new actions
You can define new actions for movie/show/episode objects using ~orgmdb-defaction~ function. See the following example:

#+begin_src emacs-lisp
(orgmdb-defaction
:name 'show-info
;; ^ Define a unique name for this action
:definition "Show title of the currently selected object"
;; ^ User-facing definition of the action
:on '(movie show episode)
;; ^ On what objects this action should appear?
:act (cl-function
(lambda (type &key title imdb-id episode &allow-other-keys)
(message "The title is %s, imdb-id is %s" title imdb-id))))
#+end_src

* Library usage
#+begin_src elisp
(let ((movie (orgmdb :title "in the mood for love")))
(format "Movie name: %s, Year: %s, Plot: %s"
(orgmdb-title movie)
(orgmdb-year movie)
(orgmdb-plot movie)))
#+end_src

#+begin_src elisp
(orgmdb :title "thinking of ending things" :year 2020)

;; This returns something like this:
((Title . "I'm Thinking of Ending Things")
(Year . "2020")
(Rated . "R")
(Released . "04 Sep 2020")
(Runtime . "134 min")
(Genre . "Drama, Thriller")
(Director . "Charlie Kaufman")
(Writer . "Charlie Kaufman (written for the screen by), Iain Reid (based on the book by)")
(Actors . "Jesse Plemons, Jessie Buckley, Toni Collette, David Thewlis") (Plot . "Full of misgivings, a young woman travels with her new boyfriend to his parents' secluded farm. Upon arriving, she comes to question everything she thought she knew about him, and herself.")
(Language . "English, Spanish")
(Country . "USA") ...)
#+end_src