Skip to content

Commit 295d5cc

Browse files
committed
WIP: refreshing tweets
1 parent 98efd03 commit 295d5cc

File tree

5 files changed

+88
-11
lines changed

5 files changed

+88
-11
lines changed

Clojure-Websockets/src/cljs/birdwatch/channels.cljs

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
;;; Channels for handling information flow in the application.
55
(def tweets-chan (chan 1))
6+
(def tweet-missing-chan (chan))
7+
(def missing-tweet-found-chan (chan))
68
(def prev-tweets-chan (chan 10000))
79
(def user-count-chan (chan))
810
(def total-tweets-count-chan (chan))

Clojure-Websockets/src/cljs/birdwatch/communicator.cljs

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
[taoensso.sente :as sente :refer (cb-success?)]
99
[cljs.core.async :as async :refer [<! >! chan put! alts! timeout]]))
1010

11+
(enable-console-print!)
12+
1113
(let [{:keys [chsk ch-recv send-fn state]} (sente/make-channel-socket! "/chsk" {:type :auto})]
1214
(def chsk chsk)
1315
(def ch-chsk ch-recv) ; ChannelSocket's receive channel
@@ -58,6 +60,7 @@
5860
(let [[msg-type msg] payload]
5961
(match [msg-type msg]
6062
[:tweet/new tweet] (put! c/tweets-chan tweet)
63+
[:tweet/missing-tweet tweet] (put! c/missing-tweet-found-chan tweet)
6164
[:tweet/prev-chunk prev-chunk] (do (put! c/prev-chunks-chan prev-chunk) (load-prev))
6265
[:stats/users-count uc] (put! c/user-count-chan uc)
6366
[:stats/total-tweet-count ttc] (put! c/total-tweets-count-chan ttc)))
@@ -68,6 +71,7 @@
6871

6972

7073
(go-loop []
71-
(let [tid (<! c/missing-tweets-chan)]
72-
(chsk-send! [:cmd/missing tid])
74+
(let [tid (<! c/tweet-missing-chan)]
75+
(chsk-send! [:cmd/missing {:id_str tid
76+
:uid (:uid @chsk-state)}])
7377
(recur)))

Clojure-Websockets/src/cljs/birdwatch/tweets.cljs

+9-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99

1010
(enable-console-print!)
1111

12-
#_(defn add-to-tweets-map [app tweets-map tweet]
12+
(defn add-to-tweets-map2 [app tweets-map tweet]
1313
"adds tweet to tweets-map"
1414
(swap! app
1515
assoc-in [tweets-map (keyword (:id_str tweet))]
16-
tweet))
16+
tweet)
17+
;(print ((keyword (:id_str tweet)) (:tweets-map @app)))
18+
)
1719

1820
(defn add-to-tweets-map [app tweets-map tweet]
1921
"adds tweet to tweets-map"
@@ -55,10 +57,14 @@
5557
(add-tweet t state/app)
5658
(recur)))
5759

60+
(go-loop []
61+
(let [mt (<! c/missing-tweet-found-chan)]
62+
(add-to-tweets-map2 state/app :tweets-map mt)
63+
(recur)))
64+
5865
(go-loop []
5966
(let [chunk (<! c/prev-chunks-chan)]
6067
(doseq [t chunk]
61-
;(when (= 0 (mod (:id t) 500)) (<! (timeout 0)))
6268
(put! c/prev-tweets-chan t))
6369
(<! (timeout 50))
6470
(recur)))

Clojure-Websockets/src/cljs/birdwatch/ui.cljs

+66-6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
:by-favorites (util/tweets-by-order :retweets :by-favorites)
3838
:by-rt-since-startup (util/tweets-by-order :retweets :by-rt-since-startup)})
3939

40+
(def find-tweets2 {:by-id (util/tweet-ids-by-order :tweets-map :by-id)
41+
:by-followers (util/tweet-ids-by-order :tweets-map :by-followers)
42+
:by-retweets (util/tweet-ids-by-order :retweets :by-retweets)
43+
:by-favorites (util/tweet-ids-by-order :retweets :by-favorites)
44+
:by-rt-since-startup (util/tweet-ids-by-order :retweets :by-rt-since-startup)})
45+
4046
(defn sort-button-js [app key]
4147
"generates JS for sort button for both updating sort order and showing active button"
4248
#js {:onClick (fn [e] (om/update! app [:sorted] key))
@@ -79,9 +85,57 @@
7985
(dom/a #js {:href (str "https://twitter.com/intent/" intent (:id_str tweet))}
8086
(dom/img #js {:src (str "/images/" icon)})))
8187

88+
#_(defn tweet-view [tid owner]
89+
"rendering single tweet card"
90+
(print tid)
91+
(let [raw-tweet ((first tid) (:tweets-map @state/app))]
92+
(reify
93+
om/IRender
94+
(render [this]
95+
(if (:user raw-tweet)
96+
(let [tweet (util/format-tweet raw-tweet)
97+
user (:user tweet)
98+
screen-name (:screen_name user)
99+
href (str "http://www.twitter.com/" screen-name)
100+
media (:media (:entities tweet))]
101+
(dom/div #js {:className "tweet"}
102+
(dom/span nil (dom/a #js {:href href :target "_blank"}
103+
(dom/img #js {:className "thumbnail" :src (:profile_image_url user)})))
104+
(dom/a #js {:href href :target "_blank"}
105+
(dom/span #js {:className "username" :src (:profile_image_url user)} (:name user)))
106+
(dom/span #js {:className "username_screen"} (str " @" screen-name))
107+
(dom/div #js {:className "pull-right timeInterval"} (util/from-now (:created_at tweet)))
108+
(dom/div #js {:className "tweettext"}
109+
(dom/div #js {:dangerouslySetInnerHTML #js {:__html (:html-text tweet)}})
110+
(dom/div #js {:className "pull-left timeInterval"}
111+
(str (util/number-format (:followers_count user)) " followers"))
112+
(dom/div #js {:className "pull-right timeInterval"}
113+
(str (util/rt-count-since-startup tweet)
114+
(util/rt-count tweet)
115+
(util/fav-count tweet))))
116+
(when (> (count media) 0)
117+
(dom/div #js {:className "tweet-image"}
118+
(dom/a #js {:href (:url (get media 0)) :target "_blank"}
119+
(dom/img #js {:src (str (:media_url (get media 0)) ":small")}))))
120+
(dom/div #js {:className "intent"}
121+
(twitter-intent tweet "tweet?in_reply_to=" "reply.png")
122+
(twitter-intent tweet "retweet?tweet_id=" "retweet.png")
123+
(twitter-intent tweet "favorite?tweet_id=" "favorite.png"))))
124+
(do
125+
(print "hello")
126+
;(print ((keyword (:id_str raw-tweet)) (:tweets-map @state/app)))
127+
;(put! c/tweet-missing-chan tid)
128+
;(dom/div #js {:className "tweet"} "loading... " tid)
129+
130+
))))))
131+
132+
82133

83-
(defn tweet-view [raw-tweet owner]
134+
(defn tweet-view [raw-tweet-entry owner]
84135
"rendering single tweet card"
136+
(print "raw-tweet")
137+
(print raw-tweet-entry)
138+
(let [raw-tweet ((keyword (:id_str raw-tweet-entry)) (:tweets-map @state/app))]
85139
(reify
86140
om/IRender
87141
(render [this]
@@ -115,17 +169,23 @@
115169
(twitter-intent tweet "retweet?tweet_id=" "retweet.png")
116170
(twitter-intent tweet "favorite?tweet_id=" "favorite.png"))))
117171
(do
118-
(put! c/missing-tweets-chan (:id_str raw-tweet))
119-
(dom/div #js {:className "tweet"} "loading..."))))))
172+
(print "hello")
173+
;(print ((keyword (:id_str raw-tweet)) (:tweets-map @state/app)))
174+
(put! c/tweet-missing-chan (:id_str raw-tweet-entry))
175+
(dom/div #js {:className "tweet"} "loading... " (:id_str raw-tweet-entry))))))))
120176

121177
(defn tweets-view [app owner]
122178
"rendering tweet list"
123179
(reify
124180
om/IRender
125181
(render [this]
126-
(apply dom/div nil (om/build-all
127-
tweet-view
128-
(((:sorted app) find-tweets) app (:n app) (- (:page app) 1)))))))
182+
(let [tweets (((:sorted app) find-tweets) app (:n app) (- (:page app) 1))]
183+
(print "load tweets")
184+
(print (count tweets))
185+
(print tweets)
186+
(apply dom/div nil (om/build-all
187+
tweet-view
188+
tweets))))))
129189

130190
(defn pag-items [app page-change-chan]
131191
"function creating pagination items"

Clojure-Websockets/src/cljs/birdwatch/util.cljs

+5
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,8 @@
7373
"find top n tweets by specified order"
7474
(fn [app n skip]
7575
(vec (map (fn [m] ((keyword (first m))(tweets-map app))) (take n (drop (* n skip) (order app)))))))
76+
77+
(defn tweet-ids-by-order [tweets-map order]
78+
"find top n tweets by specified order"
79+
(fn [app n skip]
80+
(take n (drop (* n skip) (order app)))))

0 commit comments

Comments
 (0)