Duly noted, thanks Jonathan.
(defn- extract-url-filename [url]
(let [filename (.getFile url)]
(if (or (blank? filename)
(= filename "/"))
"index.html"
(subs filename 1))))
On Apr 24, 1:48 am, JonathanMeeks <[email protected]> wrote:
> It's not answering your idiomatic clojure question, but extract-url-
> filename will have problems because of this:
>
> user> (.getFile (URL. "http://www.foo.com/"))
> "/"
>
> On Apr 21, 1:08 pm, Brent Millare <[email protected]> wrote:
>
>
>
> > 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
> > 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
> 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