diff --git a/Yep/Services/SocialWorkService.swift b/Yep/Services/SocialWorkService.swift
index dbbf9281..a57f8e31 100644
--- a/Yep/Services/SocialWorkService.swift
+++ b/Yep/Services/SocialWorkService.swift
@@ -9,6 +9,7 @@
import Foundation
private let githubBaseURL = NSURL(string: "https://api.github.com")!
+private let dribbbleBaseURL = NSURL(string: "https://api.dribbble.com")!
private let instagramBaseURL = NSURL(string: "https://api.instagram.com")!
private func githubResource(token token: String, path: String, method: Method, requestParameters: JSONDictionary, parse: JSONDictionary -> A?) -> Resource {
@@ -30,6 +31,25 @@ private func githubResource(token token: String, path: String, method: Method
return Resource(path: path, method: method, requestBody: jsonBody, headers: headers, parse: jsonParse)
}
+private func dribbbleResource(token token: String, path: String, method: Method, requestParameters: JSONDictionary, parse: JSONDictionary -> A?) -> Resource {
+
+ let jsonParse: NSData -> A? = { data in
+ if let json = decodeJSON(data) {
+ return parse(json)
+ }
+ return nil
+ }
+
+ let jsonBody = encodeJSON(requestParameters)
+ var headers = [
+ "Content-Type": "application/json",
+ ]
+
+ headers["Authorization"] = "Bearer \(token)"
+
+ return Resource(path: path, method: method, requestBody: jsonBody, headers: headers, parse: jsonParse)
+}
+
private func instagramResource(token token: String, path: String, method: Method, requestParameters: JSONDictionary, parse: JSONDictionary -> A?) -> Resource {
let jsonParse: NSData -> A? = { data in
@@ -47,6 +67,8 @@ private func instagramResource(token token: String, path: String, method: Met
return Resource(path: path, method: method, requestBody: jsonBody, headers: headers, parse: jsonParse)
}
+// MARK: Github Repo
+
struct GithubRepo {
let ID: Int
let name: String
@@ -104,6 +126,79 @@ func githubReposWithToken(token: String, failureHandler: ((Reason, String?) -> V
}
}
+// MARK: Dribbble Shot
+
+struct DribbbleShot {
+ let ID: Int
+ let title: String
+ let description: String
+ let htmlURLString: String
+
+ struct Images {
+ let hidpi: String?
+ let normal: String
+ let teaser: String
+ }
+ let images: Images
+
+ let likesCount: Int
+ let commentsCount: Int
+}
+
+func dribbbleShotsWithToken(token: String, failureHandler: ((Reason, String?) -> Void)?, completion: [DribbbleShot] -> Void) {
+
+ let requestParameters = [
+ "timeframe": "month",
+ "sort": "recent",
+ ]
+
+ let parse: JSONDictionary -> [DribbbleShot]? = { data in
+
+ println("dribbbleShotsWithToken data: \(data)")
+
+ guard let shotsData = data["data"] as? [JSONDictionary] else {
+ return nil
+ }
+
+ var shots = [DribbbleShot]()
+
+ for shotInfo in shotsData {
+ if let
+ ID = shotInfo["id"] as? Int,
+ title = shotInfo["title"] as? String,
+ description = shotInfo["description"] as? String,
+ htmlURLString = shotInfo["html_url"] as? String,
+ imagesInfo = shotInfo["images"] as? JSONDictionary,
+ likesCount = shotInfo["likes_count"] as? Int,
+ commentsCount = shotInfo["comments_count"] as? Int {
+ if let
+ normal = imagesInfo["normal"] as? String,
+ teaser = imagesInfo["teaser"] as? String {
+ let hidpi = imagesInfo["hidpi"] as? String
+
+ let images = DribbbleShot.Images(hidpi: hidpi, normal: normal, teaser: teaser)
+
+ let shot = DribbbleShot(ID: ID, title: title, description: description, htmlURLString: htmlURLString, images: images, likesCount: likesCount, commentsCount: commentsCount)
+
+ shots.append(shot)
+ }
+ }
+ }
+
+ return shots
+ }
+
+ let resource = dribbbleResource(token: token, path: "/v1/shots", method: .GET, requestParameters: requestParameters, parse: parse)
+
+ if let failureHandler = failureHandler {
+ apiRequest({_ in}, baseURL: dribbbleBaseURL, resource: resource, failure: failureHandler, completion: completion)
+ } else {
+ apiRequest({_ in}, baseURL: dribbbleBaseURL, resource: resource, failure: defaultFailureHandler, completion: completion)
+ }
+}
+
+// MARK: Instagram Media
+
struct InstagramMedia {
let ID: String
let linkURLString: String
diff --git a/Yep/ViewControllers/Conversations/ConversationsViewController.swift b/Yep/ViewControllers/Conversations/ConversationsViewController.swift
index b9503bca..6f332276 100644
--- a/Yep/ViewControllers/Conversations/ConversationsViewController.swift
+++ b/Yep/ViewControllers/Conversations/ConversationsViewController.swift
@@ -149,6 +149,13 @@ class ConversationsViewController: UIViewController {
})
}
+ if let dribbbleToken = tokensOfSocialAccounts.dribbbleToken {
+
+ dribbbleShotsWithToken(dribbbleToken, failureHandler: nil, completion: { dribbbleShots in
+ println("dribbbleShots count: \(dribbbleShots.count)")
+ })
+ }
+
if let instagramToken = tokensOfSocialAccounts.instagramToken {
instagramMediasWithToken(instagramToken, failureHandler: nil, completion: { instagramMedias in