Skip to content

Commit

Permalink
Prevent the user from accidentally saving the file without an extension
Browse files Browse the repository at this point in the history
Fixes #67
  • Loading branch information
sindresorhus committed Mar 27, 2019
1 parent 4602f9b commit c853443
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Gifski/MainWindowController.swift
Expand Up @@ -150,8 +150,9 @@ final class MainWindowController: NSWindowController {

let panel = NSSavePanel()
panel.canCreateDirectories = true
panel.allowedFileTypes = [FileType.gif.identifier]
panel.directoryURL = inputUrl.directoryURL
panel.nameFieldStringValue = inputUrl.changingFileExtension(to: "gif").filename
panel.nameFieldStringValue = inputUrl.filenameWithoutExtension
panel.prompt = "Convert"
panel.message = "Choose where to save the GIF"

Expand Down
74 changes: 74 additions & 0 deletions Gifski/util.swift
Expand Up @@ -1401,3 +1401,77 @@ extension NSError {
)
}
}

enum FileType {
case png
case jpeg
case heic
case tiff
case gif

static func from(fileExtension: String) -> FileType {
switch fileExtension {
case "png":
return .png
case "jpg", "jpeg":
return .jpeg
case "heic":
return .heic
case "tif", "tiff":
return .tiff
case "gif":
return .gif
default:
fatalError("Unsupported file type")
}
}

static func from(url: URL) -> FileType {
return from(fileExtension: url.pathExtension)
}

var name: String {
switch self {
case .png:
return "PNG"
case .jpeg:
return "JPEG"
case .heic:
return "HEIC"
case .tiff:
return "TIFF"
case .gif:
return "GIF"
}
}

var identifier: String {
switch self {
case .png:
return "public.png"
case .jpeg:
return "public.jpeg"
case .heic:
return "public.heic"
case .tiff:
return "public.tiff"
case .gif:
return "com.compuserve.gif"
}
}

var fileExtension: String {
switch self {
case .png:
return "png"
case .jpeg:
return "jpg"
case .heic:
return "heic"
case .tiff:
return "tiff"
case .gif:
return "gif"
}
}
}

0 comments on commit c853443

Please sign in to comment.