Skip to content

Instantly share code, notes, and snippets.

@johnbintz
Created November 25, 2015 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnbintz/7fc4970a2f5af8aa0c08 to your computer and use it in GitHub Desktop.
Save johnbintz/7fc4970a2f5af8aa0c08 to your computer and use it in GitHub Desktop.
Go back to the early 2000s and make a DVD of videos!
#_(defdeps [[org.clojure/clojure "1.7.0"]
[org.clojure/data.xml "0.0.8"]])
(ns create-xml
(:require [clojure.string :as str])
(:use [clojure.data.xml]))
(def directory (clojure.java.io/file "."))
(defn get-extension [file]
(last (str/split (.getAbsolutePath file) #"\.")))
(defn get-number-from-entire-string [string]
(let [matcher (re-matcher #"^[0-9]+$" string)
result (re-find matcher)]
(if result
(Integer/parseInt result)
false)))
(defn get-episode-number [filename]
(->> (str/split filename #" ")
(map get-number-from-entire-string)
(filter #(not (false? %)))
first))
(defn get-episode-number-for-file [file]
(get-episode-number (.getAbsolutePath file)))
(defn is-mpg? [file]
(= (get-extension file) "mpg"))
(defn read-videos []
(->> directory
file-seq
(filter is-mpg?)
(sort #(- (get-episode-number-for-file %1)
(get-episode-number-for-file %2)))))
(defn create-vob [file]
[:vob {:file (.toString file)}])
(defn create-vob-structure []
[:dvdauthor {:dest "dvd"}
[:vmgm]
[:titleset
[:titles
[:pgc
(map create-vob (read-videos))
[:post "jump chapter 1;"]
]]]])
(defn create-xml []
(emit-str (sexp-as-element (create-vob-structure))))
(defn write-xml []
(spit "dvdauthor.xml" (create-xml)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment