                           :current-track-id nil
                           :current-sound nil
                           :ball-being-dragged? false
-                          :upload-queue []}))
+                          :upload-queue []
+                          :upload-slots default-upload-slots
+                          :download-slots default-download-slots
+                          :num-of-uploads 0
+                          :num-of-downloads 0}))
 
 (enable-console-print!)
 


    (.on blob-stream "end"
      (fn []
        (if-not (empty? (:upload-queue @app-state))
          (let [next-file (first (:upload-queue @app-state))]
            (swap! app-state assoc :upload-queue (pop (:upload-queue @app-state)))
            (if-not (= next-file file)
              (upload-file next-file))))))))

(.change (js/$ "#file-upload")
  (fn [e]
    (let [file (aget (.-files (.-target e)) 0)]
      (swap! app-state assoc :upload-queue (conj (:upload-queue @app-state) file))
      (if (= 1 (count (:upload-queue @app-state)))
        (upload-file file)))))

; end stuff that should probably be cleaned up with react....


(defonce room-id (.getAttribute (. js/document (getElementById "roomid")) "data"))
(defonce socket (js/io))
(defonce current-sound-id "current-song")
(defonce default-upload-slots 1)
(defonce default-download-slots 1)
(defonce app-state (atom {:signed-in? false
                          :messages []
                          :message-received? false
