Skip to content

Commit

Permalink
Merge pull request #103 from 87kangsw/release/2.2.4
Browse files Browse the repository at this point in the history
[Release] 2.2.4
  • Loading branch information
87kangsw committed May 16, 2024
2 parents fe01cd1 + 8cb90ef commit 344ca53
Show file tree
Hide file tree
Showing 17 changed files with 161 additions and 165 deletions.
4 changes: 3 additions & 1 deletion BuildScripts/FirebaseCrashlytics.sh
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
if [ "${CONFIGURATION}" = "Release" ]; then
${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
fi
47 changes: 26 additions & 21 deletions GitTime/Sources/CompositionRoot.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ final class CompositionRoot {
userDefaultService: userDefaultService,
realmService: realmService)

let buddyController = configureBuddyScreen(crawlerService: crawlerService,
realmService: realmService,
userDefaultService: userDefaultService,
followService: followService,
userService: userService,
githubService: gitHubService)
let buddyController = configureBuddyScreen(
crawlerService: crawlerService,
realmService: realmService,
followService: followService,
userService: userService,
githubService: gitHubService,
keychainService: keychainService
)

let settingController = configureSettingScreen(authService: authService,
githubService: gitHubService,
Expand Down Expand Up @@ -126,22 +128,23 @@ final class CompositionRoot {

// MARK: Configure SDKs
static func configureSDKs() {

// Firebase
FirebaseApp.configure()

// Image Cache
let cache = ImageCache.default
cache.clearCache()

#if DEBUG

// SwiftyBeaver
let console = ConsoleDestination()
console.minLevel = .verbose
log.addDestination(console)


#else

// Firebase
FirebaseApp.configure()

#endif

// Image Cache
let cache = ImageCache.default
cache.clearCache()
}

// MARK: Configure Appearance
Expand Down Expand Up @@ -231,10 +234,10 @@ extension CompositionRoot {
static func configureBuddyScreen(
crawlerService: GitTimeCrawlerServiceType,
realmService: RealmServiceType,
userDefaultService: UserDefaultsServiceType,
followService: FollowServiceType,
userService: UserServiceType,
githubService: GitHubServiceType
githubService: GitHubServiceType,
keychainService: KeychainServiceType
) -> BuddyViewController {

var presentFollowScreen: () -> FollowViewController
Expand All @@ -245,10 +248,12 @@ extension CompositionRoot {
return controller
}

let reactor = BuddyViewReactor(crawlerService: crawlerService,
realmService: realmService,
userDefaultService: userDefaultService,
githubService: githubService)
let reactor = BuddyViewReactor(
crawlerService: crawlerService,
realmService: realmService,
githubService: githubService,
keychainService: keychainService
)
let controller = BuddyViewController(reactor: reactor,
presentFollowScreen: presentFollowScreen)
controller.title = "Buddys"
Expand Down
2 changes: 1 addition & 1 deletion GitTime/Sources/Models/Trial/contributions_dark.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"count": 305,
"userName": "Kanz",
"additionalName": "87kangsw",
"profileImageURL": "",
"profileImageURL": "https://avatars.githubusercontent.com/u/6590255",
"contributions": [
{
"date": "2018-11-04",
Expand Down
2 changes: 1 addition & 1 deletion GitTime/Sources/Models/Trial/contributions_light.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"count": 305,
"userName": "Kanz",
"additionalName": "87kangsw",
"profileImageURL": "",
"profileImageURL": "https://avatars.githubusercontent.com/u/6590255",
"contributions": [
{
"date": "2018-11-04",
Expand Down
12 changes: 6 additions & 6 deletions GitTime/Sources/Network/GitTimeProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,31 @@ class GitTimeProvider<Target: TargetType>: MoyaProvider<Target> {
.asObservable()
.do(onNext: { value in
let message = "SUCCESS: \(requestString) (\(value))"
log.debug(message, #file, #function, line: #line)
log.debug("\(message), \(#file), \(#function), line: \(#line)")
}, onError: { [weak self] error in
if let response = (error as? MoyaError)?.response {
if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) {
let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)"
log.warning(message, #file, #function, line: #line)
log.warning("\(message), \(#file), \(#function), line: \(#line)")
if response.statusCode == 403 {
self?.showErrorMessageToast("API rate limit exceeded..\nPlease wait a moment. 🙏")
} else {
self?.showErrorMessageToast(error.localizedDescription)
}
} else if let rawString = String(data: response.data, encoding: .utf8) {
let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)"
log.warning(message, #file, #function, line: #line)
log.warning("\(message), \(#file), \(#function), line: \(#line)")
} else {
let message = "FAILURE: \(requestString) (\(response.statusCode))"
log.warning(message, #file, #function, line: #line)
log.warning("\(message), \(#file), \(#function), line: \(#line)")
}
} else {
let message = "FAILURE: \(requestString)\n\(error)"
log.warning(message, #file, #function, line: #line)
log.warning("\(message), \(#file), \(#function), line: \(#line)")
}
}, onSubscribed: {
let message = "REQUEST: \(requestString)"
log.debug(message, #file, #function, line: #line)
log.debug("\(message), \(#file), \(#function), line: \(#line)")
})
}

Expand Down
5 changes: 5 additions & 0 deletions GitTime/Sources/Services/AuthService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ final class AuthService: AuthServiceType {

let credential = GitHubAuthProvider.credential(withToken: accessToken.accessToken)

#if DEBUG
observer.onNext(accessToken)
observer.onCompleted()
#else
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
log.error(error)
Expand All @@ -111,6 +115,7 @@ final class AuthService: AuthServiceType {
observer.onCompleted()
}
}
#endif

return Disposables.create {

Expand Down
10 changes: 10 additions & 0 deletions GitTime/Sources/Utils/Extensions/Date+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,13 @@ extension Date {
return now.compare(afterHour) == .orderedDescending
}
}

extension Date {
static func todayStringFormatted() -> String {
let now = Date()
let format = "yyyy-MM-dd"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: now)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,11 @@ extension UIAlertController {
} else if let barButtonItem = button as? UIBarButtonItem {
alertController.popoverPresentationController?.barButtonItem = barButtonItem
viewController.present(alertController, animated: animated, completion: nil)
} else if let vc = button as? UIViewController {
alertController.popoverPresentationController?.sourceView = vc.view
alertController.popoverPresentationController?.sourceRect = vc.view.frame
viewController.present(alertController, animated: animated, completion: nil)
}

}
return Disposables.create {
alertController.dismiss(animated: true, completion: nil)
Expand Down
6 changes: 5 additions & 1 deletion GitTime/Sources/Utils/Extensions/UIColor+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ extension UIColor {
hexFormatted = String(hexFormatted.dropFirst())
}

assert(hexFormatted.count == 6, "Invalid hex code used.")
//assert(hexFormatted.count == 6, "Invalid hex code used.")
guard hexFormatted.count == 6 else {
self.init(.clear)
return
}

var rgbValue: UInt64 = 0
Scanner(string: hexFormatted).scanHexInt64(&rgbValue)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import ReactorKit
import RxCocoa
import RxMoya
import RxSwift
import Kanna
import Kingfisher

final class ActivityViewReactor: ReactorKit.Reactor {
Expand Down Expand Up @@ -301,77 +300,10 @@ final class ActivityViewReactor: ReactorKit.Reactor {
return self.activityService.trialActivities()
.delay(.milliseconds(300), scheduler: MainScheduler.asyncInstance)
.map { events -> Mutation in
return .fetchActivityMore(events, nextPage: 1, canLoadMore: false)
return .fetchActivity(events, nextPage: 0, canLoadMore: false)
}
}

private func parseContribution(response: Response) -> ContributionInfo {
var contributionCount: Int = 0
var contributions: [Contribution] = .init()
var userName: String = ""
var additionalName: String = ""
var profileURL: String = ""

if let doc = try? HTML(html: response.data, encoding: .utf8) {
for rect in doc.css("td") {
if var date = rect["data-date"],
let dataLevel = rect["data-level"] {

date = date.replacingOccurrences(of: "\\", with: "")
.replacingOccurrences(of: "/", with: "")
.replacingOccurrences(of: "\"", with: "")

let colorType = ContributionHexColorTypes.allCases.first { $0.rawValue == Int(dataLevel) }
if let hexString = colorType?.hexString {
contributions.append(Contribution(date: date, contribution: Int(dataLevel)!, hexColor: hexString))
}
}
}


for count in doc.css("h2, f4 text-normal mb-2") {
let decimalCharacters = CharacterSet.decimalDigits
let decimalRange = count.text?.rangeOfCharacter(from: decimalCharacters)

if decimalRange != nil {
if var countText = count.text {
countText = countText.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
contributionCount = Int(countText)!
}
}
}

/*
/html/body[@class='logged-in env-production page-responsive page-profile']/div[@class='application-main ']/main[@id='js-pjax-container']/div[@class='container-xl px-3 px-md-4 px-lg-5']/div[@class='gutter-condensed gutter-lg flex-column flex-md-row d-flex']/div[@class='flex-shrink-0 col-12 col-md-3 mb-4 mb-md-0']/div[@class='h-card mt-md-n5']/div[@class='clearfix d-flex d-md-block flex-items-center mb-4 mb-md-0']/div[@class='position-relative d-inline-block col-2 col-md-12 mr-3 mr-md-0 flex-shrink-0']/a/img[@class='avatar avatar-user width-full border color-bg-primary']/@src
*/
for link in doc.css("img") {
if let imgClass = link["class"], imgClass == "avatar avatar-user width-full border color-bg-default" {
profileURL = link["src"] ?? ""
}
}

//
for span in doc.css("span") {
if let itemProp = span["itemprop"], itemProp.isNotEmpty {
if itemProp == "name" {
userName = span.content ?? ""
} else if itemProp == "additionalName" {
additionalName = span.content ?? ""
}
}
}
}

// sort by date
contributions.sort(by: { $0.date < $1.date })

return ContributionInfo(count: contributionCount,
contributions: contributions,
userName: userName,
additionalName: additionalName,
profileImageURL: profileURL)
}

private func downloadProfileImage() -> Observable<Mutation> {
return self.profileImageDownload()
.map { image -> Mutation in
Expand Down
19 changes: 2 additions & 17 deletions GitTime/Sources/ViewControllers/Buddy/BuddyViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,7 @@ final class BuddyViewController: BaseViewController, ReactorKit.View {

// MARK: Views
private let addBuddyButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: nil, action: nil)
private let modeButton = UIButton().then {
$0.setImage(UIImage(systemName: "square.grid.2x2"), for: .normal)
}
lazy var modeButtonItem = UIBarButtonItem(customView: modeButton)

private let editButton = UIBarButtonItem(barButtonSystemItem: .edit, target: nil, action: nil)

private let tableView = UITableView(frame: .zero, style: .insetGrouped).then {
Expand Down Expand Up @@ -104,7 +101,7 @@ final class BuddyViewController: BaseViewController, ReactorKit.View {
super.viewDidLoad()
self.title = "Buddys"
self.navigationItem.leftBarButtonItem = editButton
self.navigationItem.rightBarButtonItems = [addBuddyButtonItem, modeButtonItem]
self.navigationItem.rightBarButtonItems = [addBuddyButtonItem]
addNotifications()
}

Expand Down Expand Up @@ -163,11 +160,6 @@ final class BuddyViewController: BaseViewController, ReactorKit.View {

}).disposed(by: self.disposeBag)

self.modeButton.rx.tap
.map { Reactor.Action.changeViewMode }
.bind(to: reactor.action)
.disposed(by: self.disposeBag)

self.editButton.rx.tap
.subscribe(onNext: { [weak self] _ in
guard let self = self else { return }
Expand Down Expand Up @@ -204,13 +196,6 @@ final class BuddyViewController: BaseViewController, ReactorKit.View {
.bind(to: reactor.action)
.disposed(by: self.disposeBag)

reactor.state.map { $0.viewMode }
.distinctUntilChanged()
.map { $0.systemIconName }
.map { UIImage(systemName: $0) }
.bind(to: self.modeButton.rx.image(for: .normal))
.disposed(by: self.disposeBag)

reactor.state.map { $0.alreadyExistUser }
.filterNil()
.subscribe(onNext: { [weak self] (exist, userName) in
Expand Down
Loading

0 comments on commit 344ca53

Please sign in to comment.