Browse Source

Start home timeline

swiftui-preferences
Shadowfacts 1 year ago
parent
commit
24d30d36b7
Signed by: Shadowfacts <me@shadowfacts.net> GPG Key ID: 94A5AB95422746E5

+ 3
- 0
.gitmodules View File

@@ -1,3 +1,6 @@
1 1
 [submodule "MastodonKit"]
2 2
 	path = MastodonKit
3 3
 	url = git://github.com/MastodonKit/MastodonKit.git
4
+[submodule "SwiftSoup"]
5
+	path = SwiftSoup
6
+	url = git://github.com/scinfu/SwiftSoup.git

+ 1
- 0
SwiftSoup

@@ -0,0 +1 @@
1
+Subproject commit f445c9067d28346e828e615e2b43cb07b20bca35

+ 18
- 0
Tusker.xcodeproj/project.pbxproj View File

@@ -7,6 +7,9 @@
7 7
 	objects = {
8 8
 
9 9
 /* Begin PBXBuildFile section */
10
+		D6BED16F212663DA00F02DA0 /* SwiftSoup.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; };
11
+		D6BED170212663DA00F02DA0 /* SwiftSoup.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
12
+		D6BED174212667E900F02DA0 /* StatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6BED173212667E900F02DA0 /* StatusTableViewCell.swift */; };
10 13
 		D6D4DDD0212518A000E1C4BB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D4DDCF212518A000E1C4BB /* AppDelegate.swift */; };
11 14
 		D6D4DDD2212518A000E1C4BB /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D4DDD1212518A000E1C4BB /* ViewController.swift */; };
12 15
 		D6D4DDD5212518A000E1C4BB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6D4DDD3212518A000E1C4BB /* Main.storyboard */; };
@@ -46,6 +49,7 @@
46 49
 			dstSubfolderSpec = 10;
47 50
 			files = (
48 51
 				D6F953E8212519A400CF0F2B /* MastodonKit.framework in Embed Frameworks */,
52
+				D6BED170212663DA00F02DA0 /* SwiftSoup.framework in Embed Frameworks */,
49 53
 			);
50 54
 			name = "Embed Frameworks";
51 55
 			runOnlyForDeploymentPostprocessing = 0;
@@ -53,6 +57,8 @@
53 57
 /* End PBXCopyFilesBuildPhase section */
54 58
 
55 59
 /* Begin PBXFileReference section */
60
+		D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSoup.framework; sourceTree = BUILT_PRODUCTS_DIR; };
61
+		D6BED173212667E900F02DA0 /* StatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusTableViewCell.swift; sourceTree = "<group>"; };
56 62
 		D6D4DDCC212518A000E1C4BB /* Tusker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tusker.app; sourceTree = BUILT_PRODUCTS_DIR; };
57 63
 		D6D4DDCF212518A000E1C4BB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
58 64
 		D6D4DDD1212518A000E1C4BB /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
@@ -78,6 +84,7 @@
78 84
 			buildActionMask = 2147483647;
79 85
 			files = (
80 86
 				D6F953E7212519A400CF0F2B /* MastodonKit.framework in Frameworks */,
87
+				D6BED16F212663DA00F02DA0 /* SwiftSoup.framework in Frameworks */,
81 88
 			);
82 89
 			runOnlyForDeploymentPostprocessing = 0;
83 90
 		};
@@ -98,9 +105,18 @@
98 105
 /* End PBXFrameworksBuildPhase section */
99 106
 
100 107
 /* Begin PBXGroup section */
108
+		D6BED1722126661300F02DA0 /* Views */ = {
109
+			isa = PBXGroup;
110
+			children = (
111
+				D6BED173212667E900F02DA0 /* StatusTableViewCell.swift */,
112
+			);
113
+			path = Views;
114
+			sourceTree = "<group>";
115
+		};
101 116
 		D6D4DDC3212518A000E1C4BB = {
102 117
 			isa = PBXGroup;
103 118
 			children = (
119
+				D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */,
104 120
 				D6F953E6212519A400CF0F2B /* MastodonKit.framework */,
105 121
 				D6D4DDCE212518A000E1C4BB /* Tusker */,
106 122
 				D6D4DDE3212518A200E1C4BB /* TuskerTests */,
@@ -125,6 +141,7 @@
125 141
 				D6D4DDCF212518A000E1C4BB /* AppDelegate.swift */,
126 142
 				D6F953F121251A2F00CF0F2B /* Controllers */,
127 143
 				D6F953E9212519B800CF0F2B /* View Controllers */,
144
+				D6BED1722126661300F02DA0 /* Views */,
128 145
 				D6F953EA212519BE00CF0F2B /* Storyboards */,
129 146
 				D6D4DDD6212518A200E1C4BB /* Assets.xcassets */,
130 147
 				D6D4DDD8212518A200E1C4BB /* LaunchScreen.storyboard */,
@@ -311,6 +328,7 @@
311 328
 			buildActionMask = 2147483647;
312 329
 			files = (
313 330
 				D6F953F021251A2900CF0F2B /* MastodonController.swift in Sources */,
331
+				D6BED174212667E900F02DA0 /* StatusTableViewCell.swift in Sources */,
314 332
 				D6D4DDD2212518A000E1C4BB /* ViewController.swift in Sources */,
315 333
 				D6F953EC212519E700CF0F2B /* StatusesTableViewController.swift in Sources */,
316 334
 				D6D4DDD0212518A000E1C4BB /* AppDelegate.swift in Sources */,

+ 3
- 0
Tusker.xcworkspace/contents.xcworkspacedata View File

@@ -7,4 +7,7 @@
7 7
    <FileRef
8 8
       location = "group:MastodonKit/MastodonKit.xcodeproj">
9 9
    </FileRef>
10
+   <FileRef
11
+      location = "group:SwiftSoup/SwiftSoup.xcodeproj">
12
+   </FileRef>
10 13
 </Workspace>

+ 5
- 0
Tusker/Controllers/MastodonController.swift View File

@@ -35,6 +35,11 @@ class MastodonController {
35 35
             
36 36
             login()
37 37
         }
38
+        
39
+        client.run(Accounts.currentUser()) { result in
40
+            guard case let .success(account, _) = result else { fatalError() }
41
+            print(account.acct)
42
+        }
38 43
     }
39 44
     
40 45
     private func register(completion: @escaping () -> Void) {

+ 25
- 14
Tusker/Storyboards/Base.lproj/Main.storyboard View File

@@ -1,28 +1,39 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.13.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="lT6-W8-WVA">
2
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.13.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="hVq-Vu-bEj">
3 3
     <device id="retina4_7" orientation="portrait">
4 4
         <adaptation id="fullscreen"/>
5 5
     </device>
6 6
     <dependencies>
7 7
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.9"/>
8
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
9 8
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
10 9
     </dependencies>
11 10
     <scenes>
12
-        <!--View Controller-->
13
-        <scene sceneID="Zb4-Yf-eZC">
11
+        <!--Statuses-->
12
+        <scene sceneID="OOu-1s-V6q">
14 13
             <objects>
15
-                <viewController id="lT6-W8-WVA" customClass="ViewController" customModule="Tusker" customModuleProvider="target" sceneMemberID="viewController">
16
-                    <view key="view" contentMode="scaleToFill" id="bp8-bv-zit">
17
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
18
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
19
-                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
20
-                        <viewLayoutGuide key="safeArea" id="yNt-Ic-ase"/>
21
-                    </view>
22
-                </viewController>
23
-                <placeholder placeholderIdentifier="IBFirstResponder" id="xjF-Uf-9dh" userLabel="First Responder" sceneMemberID="firstResponder"/>
14
+                <viewControllerPlaceholder storyboardName="Statuses" id="7WZ-zC-GaE" sceneMemberID="viewController">
15
+                    <tabBarItem key="tabBarItem" title="Item" id="qa8-hW-VHL"/>
16
+                </viewControllerPlaceholder>
17
+                <placeholder placeholderIdentifier="IBFirstResponder" id="O8i-mP-ani" userLabel="First Responder" sceneMemberID="firstResponder"/>
24 18
             </objects>
25
-            <point key="canvasLocation" x="-210" y="32"/>
19
+            <point key="canvasLocation" x="385" y="-206"/>
20
+        </scene>
21
+        <!--Tab Bar Controller-->
22
+        <scene sceneID="ELt-Cr-gbC">
23
+            <objects>
24
+                <tabBarController automaticallyAdjustsScrollViewInsets="NO" id="hVq-Vu-bEj" sceneMemberID="viewController">
25
+                    <toolbarItems/>
26
+                    <tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="cjv-gb-Kie">
27
+                        <autoresizingMask key="autoresizingMask"/>
28
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
29
+                    </tabBar>
30
+                    <connections>
31
+                        <segue destination="7WZ-zC-GaE" kind="relationship" relationship="viewControllers" id="q0Z-gP-JDT"/>
32
+                    </connections>
33
+                </tabBarController>
34
+                <placeholder placeholderIdentifier="IBFirstResponder" id="1cN-fA-SM9" userLabel="First Responder" sceneMemberID="firstResponder"/>
35
+            </objects>
36
+            <point key="canvasLocation" x="-210.40000000000001" y="31.934032983508249"/>
26 37
         </scene>
27 38
     </scenes>
28 39
 </document>

+ 62
- 5
Tusker/Storyboards/Statuses.storyboard View File

@@ -1,5 +1,5 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.13.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="6nb-nb-cMm">
2
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.13.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="CK3-h7-JHA">
3 3
     <device id="retina4_7" orientation="portrait">
4 4
         <adaptation id="fullscreen"/>
5 5
     </device>
@@ -17,13 +17,48 @@
17 17
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
18 18
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
19 19
                         <prototypes>
20
-                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="n0V-Nu-zEt">
21
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
20
+                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="statusCell" rowHeight="72" id="n0V-Nu-zEt" customClass="StatusTableViewCell" customModule="Tusker" customModuleProvider="target">
21
+                                <rect key="frame" x="0.0" y="28" width="375" height="72"/>
22 22
                                 <autoresizingMask key="autoresizingMask"/>
23 23
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="n0V-Nu-zEt" id="JcO-MN-o4M">
24
-                                    <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
24
+                                    <rect key="frame" x="0.0" y="0.0" width="375" height="71.5"/>
25 25
                                     <autoresizingMask key="autoresizingMask"/>
26
+                                    <subviews>
27
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Display name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZFA-wR-9b4">
28
+                                            <rect key="frame" x="16" y="11" width="103" height="21"/>
29
+                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
30
+                                            <nil key="textColor"/>
31
+                                            <nil key="highlightedColor"/>
32
+                                        </label>
33
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="@Username" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ffn-MC-jPW">
34
+                                            <rect key="frame" x="127" y="11" width="94" height="21"/>
35
+                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
36
+                                            <color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
37
+                                            <nil key="highlightedColor"/>
38
+                                        </label>
39
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Content" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xX6-Gq-MFH">
40
+                                            <rect key="frame" x="16" y="40" width="343" height="21"/>
41
+                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
42
+                                            <nil key="textColor"/>
43
+                                            <nil key="highlightedColor"/>
44
+                                        </label>
45
+                                    </subviews>
46
+                                    <constraints>
47
+                                        <constraint firstItem="xX6-Gq-MFH" firstAttribute="trailing" secondItem="JcO-MN-o4M" secondAttribute="trailingMargin" id="3uJ-2V-odU"/>
48
+                                        <constraint firstItem="Ffn-MC-jPW" firstAttribute="leading" secondItem="ZFA-wR-9b4" secondAttribute="trailing" constant="8" id="Az0-iw-JrZ"/>
49
+                                        <constraint firstItem="Ffn-MC-jPW" firstAttribute="top" secondItem="JcO-MN-o4M" secondAttribute="topMargin" id="I7N-O4-Q6U"/>
50
+                                        <constraint firstItem="ZFA-wR-9b4" firstAttribute="leading" secondItem="JcO-MN-o4M" secondAttribute="leadingMargin" id="OGD-sl-OQI"/>
51
+                                        <constraint firstItem="xX6-Gq-MFH" firstAttribute="bottom" secondItem="JcO-MN-o4M" secondAttribute="bottomMargin" id="Td8-7G-sJ7"/>
52
+                                        <constraint firstItem="ZFA-wR-9b4" firstAttribute="top" secondItem="JcO-MN-o4M" secondAttribute="topMargin" id="a0F-RV-jI0"/>
53
+                                        <constraint firstItem="xX6-Gq-MFH" firstAttribute="leading" secondItem="JcO-MN-o4M" secondAttribute="leadingMargin" id="oSD-4i-vYB"/>
54
+                                        <constraint firstItem="xX6-Gq-MFH" firstAttribute="top" secondItem="ZFA-wR-9b4" secondAttribute="bottom" constant="8" id="ufm-zI-r2q"/>
55
+                                    </constraints>
26 56
                                 </tableViewCellContentView>
57
+                                <connections>
58
+                                    <outlet property="contentLabel" destination="xX6-Gq-MFH" id="d7X-0B-daj"/>
59
+                                    <outlet property="displayNameLabel" destination="ZFA-wR-9b4" id="4Bg-aE-tVd"/>
60
+                                    <outlet property="usernameLabel" destination="Ffn-MC-jPW" id="dfo-KY-c7S"/>
61
+                                </connections>
27 62
                             </tableViewCell>
28 63
                         </prototypes>
29 64
                         <connections>
@@ -31,10 +66,32 @@
31 66
                             <outlet property="delegate" destination="6nb-nb-cMm" id="Dio-U3-a5Z"/>
32 67
                         </connections>
33 68
                     </tableView>
69
+                    <navigationItem key="navigationItem" id="SQS-FM-ReS"/>
70
+                    <simulatedTabBarMetrics key="simulatedBottomBarMetrics"/>
34 71
                 </tableViewController>
35 72
                 <placeholder placeholderIdentifier="IBFirstResponder" id="5GO-2u-UCr" userLabel="First Responder" sceneMemberID="firstResponder"/>
36 73
             </objects>
37
-            <point key="canvasLocation" x="-138" y="-90"/>
74
+            <point key="canvasLocation" x="800.79999999999995" y="-90.404797601199405"/>
75
+        </scene>
76
+        <!--Navigation Controller-->
77
+        <scene sceneID="yNQ-ej-ymp">
78
+            <objects>
79
+                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="CK3-h7-JHA" sceneMemberID="viewController">
80
+                    <tabBarItem key="tabBarItem" systemItem="mostRecent" id="dzR-Qn-Pf3"/>
81
+                    <toolbarItems/>
82
+                    <simulatedTabBarMetrics key="simulatedBottomBarMetrics"/>
83
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="kM6-kS-XRr">
84
+                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
85
+                        <autoresizingMask key="autoresizingMask"/>
86
+                    </navigationBar>
87
+                    <nil name="viewControllers"/>
88
+                    <connections>
89
+                        <segue destination="6nb-nb-cMm" kind="relationship" relationship="rootViewController" id="Ga2-04-Wda"/>
90
+                    </connections>
91
+                </navigationController>
92
+                <placeholder placeholderIdentifier="IBFirstResponder" id="2IM-IS-Cf8" userLabel="First Responder" sceneMemberID="firstResponder"/>
93
+            </objects>
94
+            <point key="canvasLocation" x="-138.40000000000001" y="-90.404797601199405"/>
38 95
         </scene>
39 96
     </scenes>
40 97
 </document>

+ 31
- 8
Tusker/View Controllers/StatusesTableViewController.swift View File

@@ -7,12 +7,32 @@
7 7
 //
8 8
 
9 9
 import UIKit
10
+import MastodonKit
11
+import SwiftSoup
10 12
 
11 13
 class StatusesTableViewController: UITableViewController {
12 14
 
15
+    var statuses: [Status] = [] {
16
+        didSet {
17
+            DispatchQueue.main.async {
18
+                self.tableView.reloadData()
19
+            }
20
+        }
21
+    }
22
+    
23
+    override func viewWillAppear(_ animated: Bool) {
24
+        MastodonController.shared.client.run(Timelines.home()) { result in
25
+            guard case let .success(statuses, _) = result else { fatalError() }
26
+            self.statuses = statuses
27
+        }
28
+    }
29
+    
13 30
     override func viewDidLoad() {
14 31
         super.viewDidLoad()
15 32
 
33
+        tableView.rowHeight = UITableView.automaticDimension
34
+        tableView.estimatedRowHeight = 140
35
+        
16 36
         // Uncomment the following line to preserve selection between presentations
17 37
         // self.clearsSelectionOnViewWillAppear = false
18 38
 
@@ -23,24 +43,27 @@ class StatusesTableViewController: UITableViewController {
23 43
     // MARK: - Table view data source
24 44
 
25 45
     override func numberOfSections(in tableView: UITableView) -> Int {
26
-        // #warning Incomplete implementation, return the number of sections
27
-        return 0
46
+        return 1
28 47
     }
29 48
 
30 49
     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
31 50
         // #warning Incomplete implementation, return the number of rows
32
-        return 0
51
+        return statuses.count
33 52
     }
34 53
 
35
-    /*
54
+    
36 55
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
37
-        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
38
-
39
-        // Configure the cell...
56
+        guard let cell = tableView.dequeueReusableCell(withIdentifier: "statusCell", for: indexPath) as? StatusTableViewCell else {
57
+            fatalError()
58
+        }
59
+        
60
+        let status = statuses[indexPath.row]
61
+        
62
+        cell.updateUI(for: status)
40 63
 
41 64
         return cell
42 65
     }
43
-    */
66
+ 
44 67
 
45 68
     /*
46 69
     // Override to support conditional editing of the table view.

+ 29
- 0
Tusker/Views/StatusTableViewCell.swift View File

@@ -0,0 +1,29 @@
1
+//
2
+//  StatusTableViewCell.swift
3
+//  Tusker
4
+//
5
+//  Created by Shadowfacts on 8/16/18.
6
+//  Copyright © 2018 Shadowfacts. All rights reserved.
7
+//
8
+
9
+import UIKit
10
+import MastodonKit
11
+import SwiftSoup
12
+
13
+class StatusTableViewCell: UITableViewCell {
14
+
15
+    @IBOutlet weak var displayNameLabel: UILabel!
16
+    @IBOutlet weak var usernameLabel: UILabel!
17
+    @IBOutlet weak var contentLabel: UILabel!
18
+    
19
+    func updateUI(for status: Status) {
20
+        displayNameLabel.text = status.account.displayName
21
+        usernameLabel.text = "@\(status.account.acct)"
22
+        
23
+        let doc = try! SwiftSoup.parse(status.content)
24
+        let text = (try! doc.body()?.text())!
25
+        
26
+        contentLabel.text = text
27
+    }
28
+
29
+}

Loading…
Cancel
Save