mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00

- Rewrote the trainer view using SwiftUI, to be native instead of a web view. - Added a Feed class and other data enhancements to support this.
150 lines
3.7 KiB
Swift
150 lines
3.7 KiB
Swift
//
|
|
// StorySettings.swift
|
|
// NewsBlur
|
|
//
|
|
// Created by David Sinclair on 2024-04-04.
|
|
// Copyright © 2024 NewsBlur. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class StorySettings {
|
|
let defaults = UserDefaults.standard
|
|
|
|
enum Content: String, RawRepresentable {
|
|
case title
|
|
case short
|
|
case medium
|
|
case long
|
|
|
|
static let titleLimit = 6
|
|
|
|
static let contentLimit = 10
|
|
|
|
var limit: Int {
|
|
switch self {
|
|
case .title:
|
|
return 6
|
|
case .short:
|
|
return 2
|
|
case .medium:
|
|
return 4
|
|
case .long:
|
|
return 6
|
|
}
|
|
}
|
|
}
|
|
|
|
var content: Content {
|
|
if let string = defaults.string(forKey: "story_list_preview_text_size"), let value = Content(rawValue: string) {
|
|
return value
|
|
} else {
|
|
return .short
|
|
}
|
|
}
|
|
|
|
enum Preview: String, RawRepresentable {
|
|
case none
|
|
case smallLeft = "small_left"
|
|
case largeLeft = "large_left"
|
|
case largeRight = "large_right"
|
|
case smallRight = "small_right"
|
|
|
|
var isLeft: Bool {
|
|
return [.smallLeft, .largeLeft].contains(self)
|
|
}
|
|
|
|
var isSmall: Bool {
|
|
return [.smallLeft, .smallRight].contains(self)
|
|
}
|
|
}
|
|
|
|
var preview: Preview {
|
|
if let string = defaults.string(forKey: "story_list_preview_images_size"), let value = Preview(rawValue: string) {
|
|
return value
|
|
} else {
|
|
return .smallRight
|
|
}
|
|
}
|
|
|
|
enum FontSize: String, RawRepresentable {
|
|
case xs
|
|
case small
|
|
case medium
|
|
case large
|
|
case xl
|
|
|
|
var offset: CGFloat {
|
|
switch self {
|
|
case .xs:
|
|
return -2
|
|
case .small:
|
|
return -1
|
|
case .medium:
|
|
return 0
|
|
case .large:
|
|
return 1
|
|
case .xl:
|
|
return 2
|
|
}
|
|
}
|
|
}
|
|
|
|
var fontSize: FontSize {
|
|
if let string = defaults.string(forKey: "feed_list_font_size"), let value = FontSize(rawValue: string) {
|
|
return value
|
|
} else {
|
|
return .medium
|
|
}
|
|
}
|
|
|
|
enum Spacing: String, RawRepresentable {
|
|
case compact
|
|
case comfortable
|
|
}
|
|
|
|
var spacing: Spacing {
|
|
if let string = defaults.string(forKey: "feed_list_spacing"), let value = Spacing(rawValue: string) {
|
|
return value
|
|
} else {
|
|
return .comfortable
|
|
}
|
|
}
|
|
|
|
var gridColumns: Int {
|
|
guard let pref = UserDefaults.standard.string(forKey: "grid_columns"), let columns = Int(pref) else {
|
|
if NewsBlurAppDelegate.shared.isCompactWidth {
|
|
return 1
|
|
} else if NewsBlurAppDelegate.shared.isPortrait || NewsBlurAppDelegate.shared.isPhone {
|
|
return 2
|
|
} else {
|
|
return 4
|
|
}
|
|
}
|
|
|
|
if NewsBlurAppDelegate.shared.isPortrait, columns > 3 {
|
|
return 3
|
|
}
|
|
|
|
return columns
|
|
}
|
|
|
|
var gridHeight: CGFloat {
|
|
guard let pref = UserDefaults.standard.string(forKey: "grid_height") else {
|
|
return 400
|
|
}
|
|
|
|
switch pref {
|
|
case "xs":
|
|
return 250
|
|
case "short":
|
|
return 300
|
|
case "tall":
|
|
return 500
|
|
case "xl":
|
|
return 600
|
|
default:
|
|
return 400
|
|
}
|
|
}
|
|
}
|