aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Library/BookmarkDocument.swift
blob: 43f251c1678b7b87795ce3b3cb8c1473d7d4d707 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import Foundation
import SwiftUI
import UniformTypeIdentifiers

struct BookmarkDocument: FileDocument {
  static var readableContentTypes: [UTType] { [.data, UTType(filenameExtension: "hlbm")!] }
  static var writableContentTypes: [UTType] { [.data, UTType(filenameExtension: "hlbm")!] }

  var bookmark: Bookmark

  init(bookmark: Bookmark) {
    self.bookmark = bookmark
  }

  init(configuration: ReadConfiguration) throws {
    guard configuration.file.isRegularFile,
      let data = configuration.file.regularFileContents,
      let fileName = configuration.file.preferredFilename,
      let bookmark = Bookmark(fileData: data, name: (fileName as NSString).deletingPathExtension)
    else {
      throw CocoaError(.fileReadCorruptFile)
    }
    self.bookmark = bookmark
  }

  func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
    let wrapper = FileWrapper(regularFileWithContents: self.bookmark.bookmarkFileData()!)
    wrapper.fileAttributes[FileAttributeKey.hfsCreatorCode.rawValue] = "HTLC".fourCharCode()
    wrapper.fileAttributes[FileAttributeKey.hfsTypeCode.rawValue] = "HTbm".fourCharCode()
    return wrapper
  }
}