Clojure를 사용하여 윈도우 배경이미지 저장하기 - 2

ch3224.bin · May 10, 2021

제목이 바뀌었다..

ClojureScript로 파일을 다루는 방법을 못찾아서, 그냥 Clojure를 사용하는 방법으로 급선회 하였다.

Leiningen 설치

Clojure 생태계의 핵심 툴로 보인다.

$ sudo apt install leiningen

프로젝트 생성

간단하게 쓰고자 Lumo를 찾았는데.. 아쉽게 되었다.

$ lein new app bg-steal

프로그램 절차 설명

  1. 로그인 이미지가 있는 디렉토리의 파일을 읽는다
  2. 이미 스틸한 파일은 제외하고 가져온다
  3. 가로로 된 이미지만 가져온다. 배경화면으로 쓰기 위해.
  4. .jpg를 붙여서 배경화면을 모아놓은 디렉토리에 복사한다.

core.clj

-main 함수가 있는 파일이다.

clojure는 처음이라 좀 어색한데, 이후 차차 고치도록 하자.

(ns bg-steal.core
   (:require [clojure.java.io :as io])
   (:gen-class))

(def source-dir "/mnt/c/Users/rockmonkey/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/")
(def dest-dir "/mnt/c/Users/rockmonkey/Pictures/바탕화면/")

(defn in?
     "true if coll contains elm"
     [elm coll]
     (some #(= elm %) coll))

(defn not-in?
     "false if coll contains elm"
     [elm coll]
     (not (in? elm coll)))

(def stolen-files (map #(.getName %)
                    (filter #(.isFile %) (file-seq (io/file dest-dir)))))

(defn is-wide [f]
     (#(> (.getWidth %) (.getHeight %)) (javax.imageio.ImageIO/read f)))

(defn copy-file [dest-path coll]
     (doseq [y coll] (io/copy y (io/file (str dest-path (.getName y) ".jpg")))))

(defn -main [& args]
     (copy-file dest-dir
                (filter #(is-wide %)
                        (filter #(not-in? (str (.getName %) ".jpg") stolen-files)
                                (filter #(.isFile %)
                                        (file-seq (io/file source-dir)))))))

실행은 최상위 디렉토리에서

$ lein run

마치며

나는 nodejs처럼 ClojureScript를 쓸 수 있을 줄 알았다. 몰랐었어 헐ㅠㅠ

프로그램이 좀 무거워졌는데, 다음엔 소스 경로를 properties로 빼내고 crontab에 등록을 시켜보자.

Twitter, Facebook