mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-18 22:29:11 +00:00
77 lines
2.5 KiB
Swift
77 lines
2.5 KiB
Swift
import Foundation
|
|
import AppKit
|
|
import SwiftRs
|
|
|
|
@_cdecl("get_file_thumbnail_base64")
|
|
public func getFileThumbnailBase64(path: UnsafePointer<SRString>) -> SRString {
|
|
let path = path.to_string();
|
|
|
|
let image = NSWorkspace.shared.icon(forFile: path)
|
|
let bitmap = NSBitmapImageRep(data: image.tiffRepresentation!)!.representation(using: .png, properties: [:])!
|
|
|
|
return SRString(bitmap.base64EncodedString())
|
|
}
|
|
|
|
class Volume: NSObject {
|
|
internal init(name: String, path: String, total_capacity: Int, available_capacity: Int, is_removable: Bool, is_ejectable: Bool, is_root_filesystem: Bool) {
|
|
self.name = SRString(name)
|
|
self.path = SRString(path)
|
|
self.total_capacity = total_capacity
|
|
self.available_capacity = available_capacity
|
|
self.is_removable = is_removable
|
|
self.is_ejectable = is_ejectable
|
|
self.is_root_filesystem = is_root_filesystem
|
|
}
|
|
|
|
var name: SRString
|
|
var path: SRString
|
|
var total_capacity: Int
|
|
var available_capacity: Int
|
|
var is_removable: Bool
|
|
var is_ejectable: Bool
|
|
var is_root_filesystem: Bool
|
|
}
|
|
|
|
@_cdecl("get_mounts")
|
|
public func getMounts() -> SRObjectArray {
|
|
let keys: [URLResourceKey] = [
|
|
.volumeNameKey,
|
|
.volumeIsRemovableKey,
|
|
.volumeIsEjectableKey,
|
|
.volumeTotalCapacityKey,
|
|
.volumeAvailableCapacityKey,
|
|
.volumeIsRootFileSystemKey,
|
|
]
|
|
let paths = FileManager().mountedVolumeURLs(includingResourceValuesForKeys: keys, options: [])
|
|
|
|
var validMounts: [Volume] = []
|
|
|
|
if let urls = paths {
|
|
for url in urls {
|
|
let components = url.pathComponents
|
|
if components.count == 1 || components.count > 1
|
|
&& components[1] == "Volumes"
|
|
{
|
|
let metadata = try? url.promisedItemResourceValues(forKeys: Set(keys))
|
|
|
|
let volume = Volume(
|
|
name: metadata?.volumeName ?? "",
|
|
path: url.path,
|
|
total_capacity: metadata?.volumeTotalCapacity ?? 0,
|
|
available_capacity: metadata?.volumeAvailableCapacity ?? 0,
|
|
is_removable: metadata?.volumeIsRemovable ?? false,
|
|
is_ejectable: metadata?.volumeIsEjectable ?? false,
|
|
is_root_filesystem: metadata?.volumeIsRootFileSystem ?? false
|
|
)
|
|
|
|
validMounts.append(volume)
|
|
}
|
|
}
|
|
}
|
|
|
|
return toRust(SRObjectArray(validMounts))
|
|
}
|
|
|
|
|
|
|