94 lines
3.1 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
import FirebaseUI
@objc(PostListViewController)
class PostListViewController: UIViewController, UITableViewDelegate {
// [START define_database_reference]
var ref: FIRDatabaseReference!
// [END define_database_reference]
var dataSource: FirebaseTableViewDataSource?
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// [START create_database_reference]
ref = FIRDatabase.database().reference()
// [END create_database_reference]
dataSource = FirebaseTableViewDataSource.init(query: getQuery(),
modelClass: Post.self,
nibNamed: "PostTableViewCell",
cellReuseIdentifier: "post",
view: self.tableView)
dataSource?.populateCellWithBlock(){
let cell = $0 as! PostTableViewCell
let post = $1 as! Post
cell.authorImage.image = UIImage.init(named: "ic_account_circle")
cell.authorLabel.text = post.author
var imageName = "ic_star_border"
if (post.stars?[self.getUid()]) != nil {
imageName = "ic_star"
}
cell.starButton.setImage(UIImage.init(named: imageName), forState: .Normal)
if let starCount = post.starCount {
cell.numStarsLabel.text = "\(starCount)"
}
cell.postTitle.text = post.title
cell.postBody.text = post.body
}
tableView.dataSource = dataSource
tableView.delegate = self
}
override func viewWillAppear(animated: Bool) {
self.tableView.reloadData()
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
performSegueWithIdentifier("detail", sender: indexPath)
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 150
}
func getUid() -> String {
return (FIRAuth.auth()?.currentUser?.uid)!
}
func getQuery() -> FIRDatabaseQuery {
return self.ref
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path: NSIndexPath = sender as! NSIndexPath
let detail: PostDetailTableViewController = segue.destinationViewController as! PostDetailTableViewController
let source = self.dataSource
let snapshot: FIRDataSnapshot = (source?.objectAtIndex(UInt(path.row)))! as! FIRDataSnapshot
detail.postKey = snapshot.key
}
}