From 8eddb9d26c8fd24bdd710e46c56368098d5f0008 Mon Sep 17 00:00:00 2001 From: Dwayne Harris Date: Sat, 13 Oct 2018 01:37:10 -0700 Subject: [PATCH] Development --- elpha-ios.xcodeproj/project.pbxproj | 8 + elpha-ios/AccountTableViewController.swift | 15 +- .../Globe White.imageset/Contents.json | 12 + .../globe-white.pdf | Bin .../Globe.imageset/Contents.json | 2 +- .../Assets.xcassets/Globe.imageset/globe.pdf | Bin 0 -> 4014 bytes .../Home.imageset/Contents.json | 12 + .../Assets.xcassets/Home.imageset/home.pdf | Bin 0 -> 3935 bytes .../Tag.imageset/Contents.json | 12 + .../Assets.xcassets/Tag.imageset/tag.pdf | Bin 0 -> 3951 bytes .../Users.imageset/Contents.json | 12 + .../Assets.xcassets/Users.imageset/users.pdf | Bin 0 -> 4043 bytes elpha-ios/AttachmentsManager.swift | 307 +++++----------- elpha-ios/AuthenticateViewController.swift | 31 +- elpha-ios/AuthenticationManager.swift | 34 +- elpha-ios/Base.lproj/Main.storyboard | 162 ++++++--- elpha-ios/Configuration.swift | 5 +- elpha-ios/CoreDataManager.swift | 8 +- .../Elpha.xcdatamodel/contents | 23 +- elpha-ios/InstanceViewController.swift | 6 +- elpha-ios/InstancesDataManager.swift | 24 +- elpha-ios/InstancesTableViewController.swift | 134 ++++--- elpha-ios/MainTabBarController.swift | 2 +- elpha-ios/MastodonDataManager.swift | 292 ++++++++------- elpha-ios/StatusView.swift | 94 +++++ elpha-ios/TimelineTableViewController.swift | 334 +++++++----------- elpha-ios/TimelinesNavigationController.swift | 4 +- elpha-ios/TimelinesTableViewCell.swift | 14 + elpha-ios/TimelinesTableViewController.swift | 127 +++++++ 29 files changed, 959 insertions(+), 715 deletions(-) create mode 100644 elpha-ios/Assets.xcassets/Globe White.imageset/Contents.json rename elpha-ios/Assets.xcassets/{Globe.imageset => Globe White.imageset}/globe-white.pdf (100%) create mode 100644 elpha-ios/Assets.xcassets/Globe.imageset/globe.pdf create mode 100644 elpha-ios/Assets.xcassets/Home.imageset/Contents.json create mode 100644 elpha-ios/Assets.xcassets/Home.imageset/home.pdf create mode 100644 elpha-ios/Assets.xcassets/Tag.imageset/Contents.json create mode 100644 elpha-ios/Assets.xcassets/Tag.imageset/tag.pdf create mode 100644 elpha-ios/Assets.xcassets/Users.imageset/Contents.json create mode 100644 elpha-ios/Assets.xcassets/Users.imageset/users.pdf create mode 100644 elpha-ios/TimelinesTableViewCell.swift create mode 100644 elpha-ios/TimelinesTableViewController.swift diff --git a/elpha-ios.xcodeproj/project.pbxproj b/elpha-ios.xcodeproj/project.pbxproj index 0d47920..3e67cdc 100644 --- a/elpha-ios.xcodeproj/project.pbxproj +++ b/elpha-ios.xcodeproj/project.pbxproj @@ -41,6 +41,8 @@ 15960E84213774FC00C38CE9 /* InstancesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15960E83213774FC00C38CE9 /* InstancesTableViewController.swift */; }; 15A79B2E215C63B6007A326E /* AlamofireImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1517EA842159D72200DE80D6 /* AlamofireImage.framework */; }; 15A79B43215EB959007A326E /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A79B42215EB959007A326E /* CoreDataManager.swift */; }; + 15BB72A92171A6BE002F1FA4 /* TimelinesTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15BB72A82171A6BE002F1FA4 /* TimelinesTableViewController.swift */; }; + 15BB72AB2171A8D4002F1FA4 /* TimelinesTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15BB72AA2171A8D4002F1FA4 /* TimelinesTableViewCell.swift */; }; 15C91A02216AB2D600D97DC3 /* NewStatusesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 15C91A01216AB2D600D97DC3 /* NewStatusesView.xib */; }; 15C91A04216AB32500D97DC3 /* NewStatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C91A03216AB32500D97DC3 /* NewStatusesView.swift */; }; 15F9981721629965009E58DA /* TimelineTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F9981621629965009E58DA /* TimelineTableViewController.swift */; }; @@ -310,6 +312,8 @@ 15A79AE7215B3CC5007A326E /* MastodonKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MastodonKit.xcodeproj; path = Frameworks/MastodonKit/MastodonKit.xcodeproj; sourceTree = ""; }; 15A79B08215B438C007A326E /* OAuthSwift.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OAuthSwift.xcodeproj; path = Frameworks/OAuthSwift/OAuthSwift.xcodeproj; sourceTree = ""; }; 15A79B42215EB959007A326E /* CoreDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = ""; }; + 15BB72A82171A6BE002F1FA4 /* TimelinesTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelinesTableViewController.swift; sourceTree = ""; }; + 15BB72AA2171A8D4002F1FA4 /* TimelinesTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelinesTableViewCell.swift; sourceTree = ""; }; 15C91A01216AB2D600D97DC3 /* NewStatusesView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NewStatusesView.xib; sourceTree = ""; }; 15C91A03216AB32500D97DC3 /* NewStatusesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewStatusesView.swift; sourceTree = ""; }; 15F9981621629965009E58DA /* TimelineTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineTableViewController.swift; sourceTree = ""; }; @@ -382,6 +386,7 @@ isa = PBXGroup; children = ( 159048AE214F5015004F4014 /* InstancesTableViewCell.swift */, + 15BB72AA2171A8D4002F1FA4 /* TimelinesTableViewCell.swift */, 159026AD2162CF5600D362DD /* TimelineTableViewCell.swift */, ); name = Views; @@ -477,6 +482,7 @@ 15960E792132387A00C38CE9 /* MainTabBarController.swift */, 15960E5E213145E100C38CE9 /* SecondViewController.swift */, 15960E812136668500C38CE9 /* TimelinesNavigationController.swift */, + 15BB72A82171A6BE002F1FA4 /* TimelinesTableViewController.swift */, 15F9981621629965009E58DA /* TimelineTableViewController.swift */, ); name = "View Controllers"; @@ -803,6 +809,7 @@ 15960E7E21329FED00C38CE9 /* AuthenticateViewController.swift in Sources */, 15960E5B213145E100C38CE9 /* AppDelegate.swift in Sources */, 15131EF2216D8D570092B252 /* StatusView.swift in Sources */, + 15BB72A92171A6BE002F1FA4 /* TimelinesTableViewController.swift in Sources */, 15960E7721322C6F00C38CE9 /* Configuration.swift in Sources */, 15C91A04216AB32500D97DC3 /* NewStatusesView.swift in Sources */, 15131EF6216DBA820092B252 /* AccountNavigationController.swift in Sources */, @@ -811,6 +818,7 @@ 15960E7321322BC700C38CE9 /* KeychainItemAccessibility.swift in Sources */, 159026D02163069600D362DD /* Date+TimeAgo.swift in Sources */, 15A79B43215EB959007A326E /* CoreDataManager.swift in Sources */, + 15BB72AB2171A8D4002F1FA4 /* TimelinesTableViewCell.swift in Sources */, 1574148D2169AD0100C841BD /* AttachmentsManager.swift in Sources */, 15960E822136668500C38CE9 /* TimelinesNavigationController.swift in Sources */, 159026AE2162CF5600D362DD /* TimelineTableViewCell.swift in Sources */, diff --git a/elpha-ios/AccountTableViewController.swift b/elpha-ios/AccountTableViewController.swift index 3d1bc91..44117b1 100644 --- a/elpha-ios/AccountTableViewController.swift +++ b/elpha-ios/AccountTableViewController.swift @@ -11,6 +11,7 @@ import MastodonKit import UIKit class AccountTableViewController: UITableViewController { + @IBOutlet var headerView: UIView! @IBOutlet var headerImageView: UIImageView! @IBOutlet var avatarImageView: UIImageView! @IBOutlet var displayNameLabel: UILabel! @@ -22,7 +23,7 @@ class AccountTableViewController: UITableViewController { public var account: AccountMO? = nil - private func setAccount(_ account: AccountMO) { + private func updateHeader(withAccount account: AccountMO) { let avatarFilter = AspectScaledToFillSizeWithRoundedCornersFilter( size: CGSize(width: 70.0, height: 70.0), radius: 20.0, @@ -63,18 +64,14 @@ class AccountTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() - if let navigationController = navigationController { - navigationController.view.backgroundColor = .clear - } - if self.account == nil { - if let session = AuthenticationManager.shared.selectedSession { + if let session = AuthenticationManager.shared.session { self.account = session.account } } if let account = account { - setAccount(account) + updateHeader(withAccount: account) } } @@ -82,7 +79,7 @@ class AccountTableViewController: UITableViewController { super.viewDidAppear(animated) if let account = self.account { - if let client = AuthenticationManager.shared.mkClientForSelectedSession() { + if let client = AuthenticationManager.shared.mkClient { let request = Accounts.account(id: account.id!) client.run(request) { result in @@ -92,7 +89,7 @@ class AccountTableViewController: UITableViewController { if let account = self.account { DispatchQueue.main.async { - self.setAccount(account) + self.updateHeader(withAccount: account) } } case .failure(let error): diff --git a/elpha-ios/Assets.xcassets/Globe White.imageset/Contents.json b/elpha-ios/Assets.xcassets/Globe White.imageset/Contents.json new file mode 100644 index 0000000..ba85773 --- /dev/null +++ b/elpha-ios/Assets.xcassets/Globe White.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "globe-white.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/elpha-ios/Assets.xcassets/Globe.imageset/globe-white.pdf b/elpha-ios/Assets.xcassets/Globe White.imageset/globe-white.pdf similarity index 100% rename from elpha-ios/Assets.xcassets/Globe.imageset/globe-white.pdf rename to elpha-ios/Assets.xcassets/Globe White.imageset/globe-white.pdf diff --git a/elpha-ios/Assets.xcassets/Globe.imageset/Contents.json b/elpha-ios/Assets.xcassets/Globe.imageset/Contents.json index ba85773..aa4ae54 100644 --- a/elpha-ios/Assets.xcassets/Globe.imageset/Contents.json +++ b/elpha-ios/Assets.xcassets/Globe.imageset/Contents.json @@ -2,7 +2,7 @@ "images" : [ { "idiom" : "universal", - "filename" : "globe-white.pdf" + "filename" : "globe.pdf" } ], "info" : { diff --git a/elpha-ios/Assets.xcassets/Globe.imageset/globe.pdf b/elpha-ios/Assets.xcassets/Globe.imageset/globe.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8a6d84120b42d95e3b66a4cb94435fcdfe0c315 GIT binary patch literal 4014 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 F{~sh@%s&7C literal 0 HcmV?d00001 diff --git a/elpha-ios/Assets.xcassets/Home.imageset/Contents.json b/elpha-ios/Assets.xcassets/Home.imageset/Contents.json new file mode 100644 index 0000000..d675922 --- /dev/null +++ b/elpha-ios/Assets.xcassets/Home.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "home.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/elpha-ios/Assets.xcassets/Home.imageset/home.pdf b/elpha-ios/Assets.xcassets/Home.imageset/home.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d83fa97540303ae46b734600f5cbec52d0e5da91 GIT binary patch literal 3935 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 literal 0 HcmV?d00001 diff --git a/elpha-ios/Assets.xcassets/Tag.imageset/Contents.json b/elpha-ios/Assets.xcassets/Tag.imageset/Contents.json new file mode 100644 index 0000000..26822d6 --- /dev/null +++ b/elpha-ios/Assets.xcassets/Tag.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "tag.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/elpha-ios/Assets.xcassets/Tag.imageset/tag.pdf b/elpha-ios/Assets.xcassets/Tag.imageset/tag.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a7d3c86e8b106c14735aca2ae2be3ab998df0c75 GIT binary patch literal 3951 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 literal 0 HcmV?d00001 diff --git a/elpha-ios/Assets.xcassets/Users.imageset/Contents.json b/elpha-ios/Assets.xcassets/Users.imageset/Contents.json new file mode 100644 index 0000000..eb6f086 --- /dev/null +++ b/elpha-ios/Assets.xcassets/Users.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "users.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/elpha-ios/Assets.xcassets/Users.imageset/users.pdf b/elpha-ios/Assets.xcassets/Users.imageset/users.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fbdd48a7168beb735503b88d6b6093398905dbd1 GIT binary patch literal 4043 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 NSLayoutConstraint { - return NSLayoutConstraint( - item: from, - attribute: NSLayoutConstraint.Attribute.top, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: to, - attribute: NSLayoutConstraint.Attribute.top, - multiplier: 1, - constant: 0 - ) - } - - static func getBottomConstraint(from: UIView, to: UIView) -> NSLayoutConstraint { - return NSLayoutConstraint( - item: from, - attribute: NSLayoutConstraint.Attribute.bottom, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: to, - attribute: NSLayoutConstraint.Attribute.bottom, - multiplier: 1, - constant: 0 - ) - } - - static func getLeadingConstraint(from: UIView, to: UIView) -> NSLayoutConstraint { - return NSLayoutConstraint( - item: from, - attribute: NSLayoutConstraint.Attribute.leading, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: to, - attribute: NSLayoutConstraint.Attribute.leading, - multiplier: 1, - constant: 0 - ) - } - - static func getTrailingConstraint(from: UIView, to: UIView) -> NSLayoutConstraint { - return NSLayoutConstraint( - item: from, - attribute: NSLayoutConstraint.Attribute.trailing, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: to, - attribute: NSLayoutConstraint.Attribute.trailing, - multiplier: 1, - constant: 0 - ) - } - - static func getWidthConstraint(view: UIView, width: CGFloat) -> NSLayoutConstraint { - return NSLayoutConstraint( - item: view, - attribute: NSLayoutConstraint.Attribute.width, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: nil, - attribute: NSLayoutConstraint.Attribute.notAnAttribute, - multiplier: 1, - constant: width - ) - } - - static func getHeightConstraint(view: UIView, height: CGFloat) -> NSLayoutConstraint { - return NSLayoutConstraint( - item: view, - attribute: NSLayoutConstraint.Attribute.height, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: nil, - attribute: NSLayoutConstraint.Attribute.notAnAttribute, - multiplier: 1, - constant: height - ) - } } diff --git a/elpha-ios/AuthenticateViewController.swift b/elpha-ios/AuthenticateViewController.swift index f2fb6c4..d54a1f8 100644 --- a/elpha-ios/AuthenticateViewController.swift +++ b/elpha-ios/AuthenticateViewController.swift @@ -6,6 +6,7 @@ // Copyright © 2018 Elpha. All rights reserved. // +import Alamofire import CoreData import MastodonKit import OAuthSwift @@ -16,18 +17,46 @@ class AuthenticateViewController: UIViewController { @IBOutlet var instanceTextField: UITextField! var oauthswift: OAuthSwift? + let defaultInstanceName = "mastodon.social" override func viewDidLoad() { super.viewDidLoad() signInButton.layer.cornerRadius = 10 signInButton.clipsToBounds = true + + randomInstanceName { instance in + self.instanceTextField.attributedPlaceholder = NSAttributedString(string: instance, attributes: [NSAttributedString.Key.foregroundColor: UIColor.init(red: 0.9, green: 0.9, blue: 0.9, alpha: 1)]) + } } override open var shouldAutorotate: Bool { return false } + func randomInstanceName(completion: @escaping (String) -> Void) { + let requestURL = "\(Config.instancesServiceURL)\(Config.instancesServiceRandomEndpoint)?count=1" + let headers: HTTPHeaders = ["Authorization": "Bearer \(Config.instancesServiceSecret)"] + + Alamofire.request(requestURL, headers: headers).validate().responseJSON { response in + switch response.result { + case .success(let value): + guard let result = value as? [String: Any], + let instances = result["instances"] as? [Any], + let instance = instances.first as? [String: Any], + let name = instance["name"] as? String else { + completion(self.defaultInstanceName) + return + } + + completion(name) + case .failure(let error): + print("\(error)") + completion(self.defaultInstanceName) + } + } + } + func authorize(client: ClientMO) { let oauthswift = OAuth2Swift( consumerKey: client.clientID!, @@ -95,7 +124,7 @@ class AuthenticateViewController: UIViewController { request.predicate = NSPredicate(format: "url == %@", url) do { - let response = try CoreDataManager.shared.getContext().fetch(request) + let response = try CoreDataManager.shared.context.fetch(request) if let client = response.first { self.authorize(client: client) } else { diff --git a/elpha-ios/AuthenticationManager.swift b/elpha-ios/AuthenticationManager.swift index d3a8da0..b27514c 100644 --- a/elpha-ios/AuthenticationManager.swift +++ b/elpha-ios/AuthenticationManager.swift @@ -13,25 +13,25 @@ import UIKit class AuthenticationManager { static let shared = AuthenticationManager() - var sessionCount: Int { + var sessions: [SessionMO] { get { do { let request = NSFetchRequest(entityName: "Session") - return try CoreDataManager.shared.getContext().count(for: request) + return try CoreDataManager.shared.context.fetch(request) } catch { - print("Error counting Sessions \(error)") - return 0 + print("Error fetching Sessions \(error)") + return [] } } } - var selectedSession: SessionMO? { + var session: SessionMO? { get { let request = NSFetchRequest(entityName: "Session") request.predicate = NSPredicate(format: "selected = YES") do { - let results = try CoreDataManager.shared.getContext().fetch(request) + let results = try CoreDataManager.shared.context.fetch(request) return results.first } catch { print("Error fetching Session \(error)") @@ -40,9 +40,9 @@ class AuthenticationManager { } } - var selectedSessionToken: String? { + var token: String? { get { - guard let session = selectedSession, let account = session.account else { + guard let account = session?.account else { return nil } @@ -50,20 +50,22 @@ class AuthenticationManager { } } - func mkClientForSelectedSession() -> Client? { - guard let session = selectedSession, let client = session.client else { - return nil + var mkClient: Client? { + get { + guard let client = session?.client else { + return nil + } + + return Client(baseURL: "https://\(client.url!)", accessToken: token) } - - return Client(baseURL: "https://\(client.url!)", accessToken: selectedSessionToken) } func saveSession(client: ClientMO, account: AccountMO, token: String) -> SessionMO? { - if let selectedSession = selectedSession { - selectedSession.selected = false + if let session = self.session { + session.selected = false } - let session = SessionMO(context: CoreDataManager.shared.getContext()) + let session = SessionMO(context: CoreDataManager.shared.context) session.client = client session.account = account session.order = 0 diff --git a/elpha-ios/Base.lproj/Main.storyboard b/elpha-ios/Base.lproj/Main.storyboard index 547f00a..fd68fea 100644 --- a/elpha-ios/Base.lproj/Main.storyboard +++ b/elpha-ios/Base.lproj/Main.storyboard @@ -23,7 +23,7 @@ - + @@ -31,7 +31,7 @@ - +