diff --git a/FitHub/FitHub/Discovery/DiscoveryViewController.swift b/FitHub/FitHub/Discovery/DiscoveryViewController.swift
index ff52447..00a0551 100644
--- a/FitHub/FitHub/Discovery/DiscoveryViewController.swift
+++ b/FitHub/FitHub/Discovery/DiscoveryViewController.swift
@@ -10,14 +10,19 @@ import UIKit
class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate {
+ var items = [RepositoryModel]()
+ @IBOutlet weak var tableView: UITableView!
var searchController: UISearchController!
var searchResultController: SearchViewController!
override func viewDidLoad() {
super.viewDidLoad()
+ self.tableView.fit_registerCell(cell: RepositoriesTableViewCell.self)
+
searchResultController = SearchViewController.loadStoryboard()
+ searchResultController.nav = self.navigationController
searchController = UISearchController(searchResultsController: searchResultController)
searchController.searchResultsUpdater = searchResultController
@@ -27,9 +32,22 @@ class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, U
searchController.searchBar.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
navigationItem.searchController = searchController
- navigationItem.hidesSearchBarWhenScrolling = true
+ navigationItem.hidesSearchBarWhenScrolling = false
definesPresentationContext = true
+
+ self.requestData()
+ }
+
+ fileprivate func requestData() {
+ NetworkManager.getTrendingRepository(success: { (items) in
+
+ self.items = items
+ self.tableView.reloadData()
+
+ }) { (_) in
+
+ }
}
override func didReceiveMemoryWarning() {
@@ -56,12 +74,12 @@ class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, U
extension DiscoveryViewController {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return 5
+ return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
- cell.textLabel?.text = "de"
+ let cell = tableView.fit_dequeueReusableCell(indexPath: indexPath) as RepositoriesTableViewCell
+ cell.model = items[indexPath.row]
return cell
}
@@ -72,20 +90,12 @@ extension DiscoveryViewController {
extension DiscoveryViewController {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
- }
-
-}
-
-
-// MARK: - UISearchBarDelegate
-
-extension DiscoveryViewController {
- func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
- searchBar.resignFirstResponder()
-
-
-
+ let vc = RepositoryViewController.loadStoryboard()
+ vc.userName = self.items[indexPath.row].owner!.login!
+ vc.repositoryName = self.items[indexPath.row].name!
+ self.navigationController?.pushViewController(vc, animated: true)
}
}
diff --git a/FitHub/FitHub/Discovery/SearchViewController.swift b/FitHub/FitHub/Discovery/SearchViewController.swift
index b1bad65..7d073b0 100644
--- a/FitHub/FitHub/Discovery/SearchViewController.swift
+++ b/FitHub/FitHub/Discovery/SearchViewController.swift
@@ -19,6 +19,8 @@ enum SearchType: String {
class SearchViewController: UITableViewController, UISearchBarDelegate, StoryboardLoadable {
+ var nav: UINavigationController?
+
var text: String = ""
var type: SearchType!
@@ -35,6 +37,13 @@ class SearchViewController: UITableViewController, UISearchBarDelegate, Storyboa
tableView.fit_registerCell(cell: UserTableViewCell.self)
tableView.fit_registerCell(cell: RepositoriesTableViewCell.self)
}
+
+ override func viewWillDisappear(_ animated: Bool) {
+ super.viewWillDisappear(animated)
+
+ self.users.removeAll()
+ self.repos.removeAll()
+ }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
@@ -84,8 +93,8 @@ extension SearchViewController {
extension SearchViewController {
func searchRepos(name: String) {
- NetworkManager.searchUser(name: name, success: { (items) in
- self.users = items
+ NetworkManager.searchRepos(name: name, success: { (items) in
+ self.repos = items
self.tableView.reloadData()
}) { (_) in
@@ -147,13 +156,17 @@ extension SearchViewController {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") as! SearchSectionHeaderView
header.type = type
header.reposBlock = {
- self.searchRepos(name: self.text)
+ self.repos.removeAll()
self.type = .repositories
+ self.tableView.reloadData()
+ self.searchRepos(name: self.text)
}
header.usersBlock = {
- self.searchUsers(name: self.text)
+ self.users.removeAll()
self.type = .users
+ self.tableView.reloadData()
+ self.searchUsers(name: self.text)
}
return header
}
@@ -172,4 +185,30 @@ extension SearchViewController {
return 0
}
}
+
+ override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
+ switch type {
+ case .repositories:
+ let vc = RepositoryViewController.loadStoryboard()
+ vc.userName = self.repos[indexPath.row].owner!.login!
+ vc.repositoryName = self.repos[indexPath.row].name!
+ self.nav?.pushViewController(vc, animated: true)
+ case .users:
+
+ let model = self.users[indexPath.row]
+ if model.type == "User" {
+ let vc = UserDetailViewController.loadStoryboard()
+ vc.name = model.login!
+ self.nav?.pushViewController(vc, animated: true)
+ } else {
+ let vc = OrgViewController.loadStoryboard()
+ vc.name = model.login!
+ self.nav?.pushViewController(vc, animated: true)
+ }
+
+ default:
+ break
+ }
+ }
}
diff --git a/FitHub/FitHub/Info.plist b/FitHub/FitHub/Info.plist
index e272756..e07b47d 100644
--- a/FitHub/FitHub/Info.plist
+++ b/FitHub/FitHub/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0
+ 1.0.1
CFBundleURLTypes
diff --git a/FitHub/FitHub/Main/Base.lproj/Main.storyboard b/FitHub/FitHub/Main/Base.lproj/Main.storyboard
index 1a2d033..e51e259 100644
--- a/FitHub/FitHub/Main/Base.lproj/Main.storyboard
+++ b/FitHub/FitHub/Main/Base.lproj/Main.storyboard
@@ -263,16 +263,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/FitHub/FitHub/Org/OrgsViewController.swift b/FitHub/FitHub/Org/OrgsViewController.swift
index 0565723..fbabcda 100644
--- a/FitHub/FitHub/Org/OrgsViewController.swift
+++ b/FitHub/FitHub/Org/OrgsViewController.swift
@@ -9,7 +9,7 @@
import UIKit
import FitRefresh
-class OrgsViewController: BaseViewController {
+class OrgsViewController: BaseViewController, StoryboardLoadable {
var url: String = ""
diff --git a/FitHub/FitHub/Repository/RepositoriesTableViewCell.xib b/FitHub/FitHub/Repository/RepositoriesTableViewCell.xib
index 409fd22..84e6ef4 100644
--- a/FitHub/FitHub/Repository/RepositoriesTableViewCell.xib
+++ b/FitHub/FitHub/Repository/RepositoriesTableViewCell.xib
@@ -98,7 +98,7 @@
-
+
diff --git a/FitHub/FitHub/Tool/NetworkManager.swift b/FitHub/FitHub/Tool/NetworkManager.swift
index 53e2b2d..9fd059b 100644
--- a/FitHub/FitHub/Tool/NetworkManager.swift
+++ b/FitHub/FitHub/Tool/NetworkManager.swift
@@ -17,6 +17,9 @@ protocol NetworkManagerProtocol {
static func loadOrgs(withUrl urlStr: String, page: Int, success: @escaping (_ items: [OrgModel]) -> (), failure: @escaping (Error) -> ())
static func searchUser(name: String, success: @escaping (_ items: [UserModel]) -> (), failure: @escaping (Error) -> ())
+ static func searchRepos(name: String, success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ())
+
+ static func getTrendingRepository(success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ())
/// <#Description#>
///
@@ -151,6 +154,59 @@ class NetworkManager: NetworkManagerProtocol {
}
}
+ static func searchRepos(name: String, success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ()) {
+
+ let url = "https://api.github.com/search/repositories?q=\(name)"
+ let header = self.getHeader()
+ Alamofire.request(url, method: .get, headers:header).responseJSON { (response) in
+ switch response.result {
+ case .success(let value):
+ let json = JSON(value)
+
+ let total_count = json["total_count"].int
+
+ if let items = json["items"].arrayObject {
+
+ var models = [RepositoryModel]()
+ for dict in items {
+ models.append(RepositoryModel(dict: dict as! [String : AnyObject]))
+ }
+ success(models)
+ }
+ break
+ case .failure(let error):
+ failure(error)
+ break
+ }
+ }
+ }
+
+ static func getTrendingRepository(success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ()) {
+
+ let url = "https://raw.githubusercontent.com/cywd/cywd.github.io/master/json/treding.json"
+ let header = self.getHeader()
+ Alamofire.request(url, method: .get, headers:header).responseJSON { (response) in
+ switch response.result {
+ case .success(let value):
+ let json = JSON(value)
+
+ if let items = json.arrayObject {
+
+ var models = [RepositoryModel]()
+ for dict in items {
+ models.append(RepositoryModel(dict: dict as! [String : AnyObject]))
+ }
+ success(models)
+ }
+ break
+ case .failure(let error):
+ failure(error)
+ break
+ }
+ }
+
+ }
+
static func loadCommonUsers(withUrl urlStr: String, page: Int, success: @escaping (_ items: [UserModel]) -> (), failure: @escaping (Error) -> ()) {
let url = "\(urlStr)?page=\(page)"