mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 19:57:41 +00:00
163 lines
5.6 KiB
Swift
163 lines
5.6 KiB
Swift
//
|
|
// Copyright (c) 2015 Google Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
import UIKit
|
|
import Firebase
|
|
|
|
@objc(PostDetailTableViewController)
|
|
class PostDetailTableViewController: UITableViewController {
|
|
|
|
let kSectionSend = 2
|
|
let kSectionComments = 1
|
|
let kSectionPost = 0
|
|
|
|
var postKey = ""
|
|
var comments: Array<FIRDataSnapshot> = []
|
|
var commentField: UITextField? = nil
|
|
let post: Post = Post()
|
|
lazy var ref: FIRDatabaseReference = FIRDatabase.database().reference()
|
|
var postRef: FIRDatabaseReference!
|
|
var commentsRef : FIRDatabaseReference!
|
|
var refHandle: FIRDatabaseHandle?
|
|
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
postRef = ref.child("posts").child(postKey)
|
|
commentsRef = ref.child("post-comments").child(postKey)
|
|
let nib = UINib(nibName: "PostTableViewCell", bundle: nil)
|
|
tableView.registerNib(nib, forCellReuseIdentifier: "post")
|
|
}
|
|
|
|
override func viewWillAppear(animated: Bool) {
|
|
comments.removeAll()
|
|
// [START child_event_listener]
|
|
// Listen for new comments in the Firebase database
|
|
commentsRef.observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
|
|
self.comments.append(snapshot)
|
|
self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.comments.count-1, inSection: 1)], withRowAnimation: UITableViewRowAnimation.Automatic)
|
|
})
|
|
// Listen for deleted comments in the Firebase database
|
|
commentsRef.observeEventType(.ChildRemoved, withBlock: { (snapshot) -> Void in
|
|
let index = self.indexOfMessage(snapshot)
|
|
self.comments.removeAtIndex(index)
|
|
self.tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: index, inSection: 1)], withRowAnimation: UITableViewRowAnimation.Automatic)
|
|
})
|
|
// [END child_event_listener]
|
|
|
|
// [START post_value_event_listener]
|
|
refHandle = postRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
|
|
let postDict = snapshot.value as! [String : AnyObject]
|
|
// [START_EXCLUDE]
|
|
self.post.setValuesForKeysWithDictionary(postDict)
|
|
self.tableView.reloadData()
|
|
self.navigationItem.title = self.post.title
|
|
// [END_EXCLUDE]
|
|
})
|
|
// [END post_value_event_listener]
|
|
}
|
|
|
|
func indexOfMessage(snapshot: FIRDataSnapshot) -> Int {
|
|
var index = 0
|
|
for comment in self.comments {
|
|
if (snapshot.key == comment.key) {
|
|
return index
|
|
}
|
|
index += 1
|
|
}
|
|
return -1
|
|
}
|
|
|
|
override func viewWillDisappear(animated: Bool) {
|
|
if let refHandle = refHandle {
|
|
postRef.removeObserverWithHandle(refHandle)
|
|
}
|
|
commentsRef.removeAllObservers()
|
|
}
|
|
|
|
// UITableViewDataSource protocol methods
|
|
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
|
|
return 3
|
|
}
|
|
|
|
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
switch section {
|
|
case kSectionPost, kSectionSend:
|
|
return 1
|
|
case kSectionComments:
|
|
return comments.count
|
|
default:
|
|
return 0
|
|
}
|
|
}
|
|
|
|
@IBAction func didTapSend(sender: AnyObject) {
|
|
let uid = FIRAuth.auth()?.currentUser?.uid
|
|
FIRDatabase.database().reference().child("users").child(uid!).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
|
|
if let uid = uid, commentField = self.commentField, user = snapshot.value as? [String : AnyObject] {
|
|
let comment = [
|
|
"uid": uid,
|
|
"author": user["username"] as! String,
|
|
"text": commentField.text!
|
|
]
|
|
self.commentsRef.childByAutoId().setValue(comment)
|
|
commentField.text = ""
|
|
}
|
|
})
|
|
}
|
|
override func tableView(tableView: UITableView,
|
|
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
|
let cell: UITableViewCell
|
|
|
|
switch indexPath.section {
|
|
case kSectionPost:
|
|
cell = tableView.dequeueReusableCellWithIdentifier("post")!
|
|
if let uid = FIRAuth.auth()?.currentUser?.uid {
|
|
let postcell = cell as! PostTableViewCell
|
|
let imageName = post.stars == nil || post.stars![uid] == nil ? "ic_star_border" : "ic_star"
|
|
postcell.authorLabel.text = post.author
|
|
postcell.postTitle.text = post.title
|
|
postcell.postBody.text = post.body
|
|
postcell.starButton.setImage(UIImage(named: imageName), forState: .Normal)
|
|
if let starCount = post.starCount {
|
|
postcell.numStarsLabel.text = "\(starCount)"
|
|
}
|
|
postcell.postKey = postKey;
|
|
}
|
|
case kSectionComments:
|
|
cell = tableView.dequeueReusableCellWithIdentifier("comment")!
|
|
let commentDict = comments[indexPath.row].value as! [String : AnyObject]
|
|
if let text = cell.textLabel, detail = cell.detailTextLabel,
|
|
author = commentDict["author"], commentText = commentDict["text"] {
|
|
detail.text = String(author)
|
|
text.text = String(commentText)
|
|
}
|
|
default: // kSectionSend
|
|
cell = tableView.dequeueReusableCellWithIdentifier("send")!
|
|
commentField = cell.viewWithTag(7) as! UITextField?
|
|
break
|
|
}
|
|
return cell
|
|
}
|
|
|
|
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
|
|
if indexPath.section == kSectionPost {
|
|
return 160
|
|
}
|
|
return 56
|
|
}
|
|
}
|