This repository was archived by the owner on Sep 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 387
/
Copy pathRepositoryOverviewViewController.swift
128 lines (109 loc) · 4.26 KB
/
RepositoryOverviewViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//
// RepositoryOverviewViewController.swift
// Freetime
//
// Created by Ryan Nystrom on 9/20/17.
// Copyright © 2017 Ryan Nystrom. All rights reserved.
//
import UIKit
import IGListKit
import GitHubAPI
import Squawk
import XLPagerTabStrip
final class RepositoryOverviewViewController: BaseListViewController<String>,
BaseListViewControllerDataSource,
BaseListViewControllerEmptyDataSource,
RepositoryBranchUpdatable,
IndicatorInfoProvider {
private let repo: RepositoryDetails
private let client: RepositoryClient
private var readme: RepositoryReadmeModel?
private var branch: String
private let headerModel: RepositoryOverviewHeaderModel
init(client: GithubClient, repo: RepositoryDetails, branch: String, headerModel: RepositoryOverviewHeaderModel) {
self.repo = repo
self.branch = branch
self.client = RepositoryClient(githubClient: client, owner: repo.owner, name: repo.name)
self.headerModel = headerModel
super.init(
emptyErrorMessage: NSLocalizedString("Cannot load README.", comment: "")
)
self.dataSource = self
title = Constants.Strings.overview
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
feed.collectionView.contentInset = UIEdgeInsets(
top: Styles.Sizes.columnSpacing,
left: 0,
bottom: Styles.Sizes.columnSpacing,
right: 0
)
feed.collectionView.backgroundColor = .white
makeBackBarItemEmpty()
}
// MARK: Overrides
override func fetch(page: String?) {
let repo = self.repo
let width = view.safeContentWidth(with: feed.collectionView)
let contentSizeCategory = UIContentSizeCategory.preferred
let branch = self.branch
let headerModel = self.headerModel
client.githubClient.client
.send(V3RepositoryReadmeRequest(owner: repo.owner, repo: repo.name, branch: branch)) { [weak self] result in
switch result {
case .success(let response):
DispatchQueue.global().async {
let header = RepositoryOverviewHeaderViewModels(
model: headerModel,
width: width,
contentSizeCategory: contentSizeCategory
)
let models = MarkdownModels(
response.data.content,
owner: repo.owner,
repo: repo.name,
width: width,
viewerCanUpdate: false,
contentSizeCategory: contentSizeCategory,
isRoot: false,
branch: branch
)
let model = RepositoryReadmeModel(models: header + models)
DispatchQueue.main.async { [weak self] in
self?.readme = model
self?.update(animated: trueUnlessReduceMotionEnabled)
}
}
case .failure(let error):
Squawk.show(error: error)
self?.error(animated: trueUnlessReduceMotionEnabled)
}
}
}
// MARK: BaseListViewControllerDataSource
func models(adapter: ListSwiftAdapter) -> [ListSwiftPair] {
guard let readme = self.readme else { return [] }
return [ListSwiftPair.pair(readme) { RepositoryReadmeSectionController() }]
}
// MARK: BaseListViewControllerEmptyDataSource
func emptyModel(for adapter: ListSwiftAdapter) -> ListSwiftPair {
let layoutInsets = view.safeAreaInsets
return ListSwiftPair.pair("empty") {
RepositoryEmptyResultsSectionController2(layoutInsets: layoutInsets, type: .readme)
}
}
// MARK: RepositoryBranchUpdatable
func updateBranch(to newBranch: String) {
guard self.branch != newBranch else { return }
self.branch = newBranch
fetch(page: nil)
}
// MARK: IndicatorInfoProvider
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return IndicatorInfo(title: title)
}
}