aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Models/FileInfo.swift
blob: e3081c40b71d913abc8d53ed40b4c694302e58cc (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import SwiftUI
import UniformTypeIdentifiers

@Observable class FileInfo: Identifiable, Hashable {
  let id: UUID
  
  let path: [String]
  let name: String
  
  let type: String
  let creator: String
  let fileSize: UInt
  
  let isFolder: Bool
  let isUnavailable: Bool
  
  var isDropboxFolder: Bool {
    guard self.isFolder else {
      return false
    }

    if self.name.range(of: "upload", options: [.caseInsensitive]) != nil {
      return true
    }

    if self.name.range(of: "dropbox", options: [.caseInsensitive]) != nil {
      return true
    }

    if self.name.range(of: "drop box", options: [.caseInsensitive]) != nil {
      return true
    }

    return false
  }
  
  var isAdminDropboxFolder: Bool {
    self.isDropboxFolder && (self.name.range(of: "admin", options: [.caseInsensitive]) != nil)
  }
  
  var isAppBundle: Bool {
    guard self.isFolder else {
      return false
    }
    return self.name.lowercased().hasSuffix(".app")
  }
  
  var expanded: Bool = false
  var children: [FileInfo]? = nil
  
  var isPreviewable: Bool {
    let fileExtension = (self.name as NSString).pathExtension.lowercased()
    if let fileType = UTType(filenameExtension: fileExtension) {
      if fileType.canBePreviewedByQuickLook {
        return true
      }
      
      print("FILE TYPE?", fileType, fileExtension, fileType.isSubtype(of: .pdf), fileType.isSupertype(of: .pdf))
      if fileType.isSubtype(of: .image) {
        return true
      }
      else if fileType.isSubtype(of: .pdf) || fileExtension == "pdf" {
        return true
      }
      else if fileType.isSubtype(of: .audio) {
        return true
      }
      else if fileType.isSubtype(of: .video) {
        return true
      }
      else if fileType.isSubtype(of: .text) {
        return true
      }
    }
    return false
  }
  
  var isImage: Bool {
    let fileExtension = (self.name as NSString).pathExtension
    if let fileType = UTType(filenameExtension: fileExtension) {
      if fileType.isSubtype(of: .image) {
        return true
      }
    }
    return false
  }
  
  init(hotlineFile: HotlineFile) {
    self.id = UUID()
    self.path = hotlineFile.path
    self.name = hotlineFile.name
    self.type = hotlineFile.type
    self.creator = hotlineFile.creator
    self.fileSize = UInt(hotlineFile.fileSize)
    self.isFolder = hotlineFile.isFolder
    self.isUnavailable = (!self.isFolder && (self.fileSize == 0))
    
    print(self.name, self.type, self.creator, self.isUnavailable)
    if self.isFolder {
      self.children = []
    }
  }
  
  static func == (lhs: FileInfo, rhs: FileInfo) -> Bool {
    return lhs.id == rhs.id
  }
  
  func hash(into hasher: inout Hasher) {
    hasher.combine(self.id)
  }
}