Technically I didn't write my own cause I just copied pasted it ;) For the purposes of this review, just consider that library code or a reference so everyone knows what it does. :)
Sean Devlin wrote: > At first glance, you should be requiring c.c.string, and don't write > your own blank? fn. That's the only low hanging fruit I see. > > On Apr 21, 1:47 pm, Brent Millare <[email protected]> wrote: > > Hey all, > > > > I wrote a clojure version of the simplest functionality of wget. I > > basically translated the java version into clojure code, but I'm not > > quite happy with the wget-binary function because I use a loop, and I > > feel like someone else has a more idiomatic solution to iterating > > through a java-array. Also, I don't know if my way of handling the no > > filename case is best. Please tell me how to improve my code, > > especially in the interop sections. > > > > (ns dj > > (:import [java.io File FileOutputStream BufferedInputStream > > BufferedReader InputStreamReader]) > > (:import [java.net URL]) > > (:require [clojure.contrib [duck-streams :as duck-streams]])) > > > > (defn blank? > > "True if s is nil, empty, or contains only whitespace." > > [#^String s] > > (every? (fn [#^Character c] (Character/isWhitespace c)) s)) > > > > (defn- extract-url-filename [url] > > (let [filename (.getFile url)] > > (if (blank? filename) > > "index.html" > > (subs filename 1)))) > > > > (defn- wget-binary [con content-length] > > (with-open [stream (BufferedInputStream. (.getInputStream con))] > > (let [data (make-array Byte/TYPE content-length)] > > (loop [offset 0] > > (if (< offset content-length) > > (let [bytesRead (.read stream > > data > > offset > > (- content-length > > offset))] > > (if (= bytesRead -1) > > data > > (recur (+ offset bytesRead)))) > > data))))) > > > > (defn- wget-text [url-obj] > > (with-open [buf (-> url-obj > > (.openStream) > > (InputStreamReader.) > > (BufferedReader.))] > > (apply str (line-seq buf)))) > > > > (defn wget [url-address] > > (let [url (URL. url-address) > > filename (extract-url-filename url) > > con (.openConnection url) > > content-length (.getContentLength con)] > > (if (or (= -1 content-length) > > (.startsWith (.getContentType con) "text/")) > > (duck-streams/spit filename (wget-text url)) > > (with-open [out-file (FileOutputStream. filename)] > > (.write out-file (wget-binary con content-length)))))) > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to [email protected] > > Note that posts from new members are moderated - please be patient with > > your first post. > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group > > athttp://groups.google.com/group/clojure?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
