Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10433099
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
View Options
diff --git a/Shared/PostList/PostListModel.swift b/Shared/PostList/PostListModel.swift
index e6464e4..80fb1b5 100644
--- a/Shared/PostList/PostListModel.swift
+++ b/Shared/PostList/PostListModel.swift
@@ -1,21 +1,62 @@
import SwiftUI
import CoreData
class PostListModel: ObservableObject {
func remove(_ post: WFAPost) {
LocalStorageManager.persistentContainer.viewContext.delete(post)
LocalStorageManager().saveContext()
}
func purgePublishedPosts() {
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "WFAPost")
fetchRequest.predicate = NSPredicate(format: "status != %i", 0)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try LocalStorageManager.persistentContainer.viewContext.executeAndMergeChanges(using: deleteRequest)
} catch {
print("Error: Failed to purge cached posts.")
}
}
+
+ func getBodyPreview(of post: WFAPost) -> String {
+ var elidedPostBody: String = ""
+
+ // Strip any markdown from the post body.
+ let strippedPostBody = stripMarkdown(from: post.body)
+
+ // Get the first 80 characters.
+ let firstEightyChars = String(strippedPostBody.prefix(80))
+
+ // Extract lede from post.
+ elidedPostBody = extractLede(from: firstEightyChars)
+
+ return elidedPostBody
+ }
+}
+
+private extension PostListModel {
+
+ func stripMarkdown(from string: String) -> String {
+ return string
+ }
+
+ func extractLede(from string: String) -> String {
+ let terminatingCharacters = CharacterSet(charactersIn: ".。?").union(.newlines)
+
+ var lede: String
+
+ let sentences = string.components(separatedBy: terminatingCharacters)
+ let firstSentence = sentences.filter { !$0.isEmpty }[0]
+
+ if firstSentence == string {
+ let endOfStringIndex = string.lastIndex(of: " ")
+ lede = String(string[..<(endOfStringIndex ?? string.index(string.endIndex, offsetBy: -2))]) + "…"
+ } else {
+ lede = firstSentence
+ }
+
+ return lede
+ }
}
+
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Jan 20, 1:08 AM (21 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3136555
Attached To
rWFSUI WriteFreely SwiftUI
Event Timeline
Log In to Comment