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 <brent.mill...@gmail.com> 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 clojure@googlegroups.com
> > Note that posts from new members are moderated - please be patient with 
> > your first post.
> > To unsubscribe from this group, send email to
> > clojure+unsubscr...@googlegroups.com
> > 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 clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> 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 clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to