From d0ed247305d4176495e7a71c259de08052c568f2 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 29 Dec 2016 02:46:59 -0600 Subject: [PATCH] Adds ability to share games --- .../GameCollectionViewController.swift | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index a48f721..0cb5c3a 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -251,6 +251,10 @@ private extension GameCollectionViewController self.rename(game) }) + let shareAction = Action(title: NSLocalizedString("Share", comment: ""), style: .default, action: { [unowned self] action in + self.share(game) + }) + let saveStatesAction = Action(title: NSLocalizedString("Save States", comment: ""), style: .default, action: { [unowned self] action in self.viewSaveStates(for: game) }) @@ -259,7 +263,7 @@ private extension GameCollectionViewController self.delete(game) }) - return [cancelAction, renameAction, saveStatesAction, deleteAction] + return [cancelAction, renameAction, shareAction, saveStatesAction, deleteAction] } func delete(_ game: Game) @@ -323,6 +327,38 @@ private extension GameCollectionViewController self._renameAction = nil } + func share(_ game: Game) + { + let temporaryDirectory = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + let symbolicURL = temporaryDirectory.appendingPathComponent(game.name + "." + game.fileURL.pathExtension) + + do + { + try FileManager.default.createDirectory(at: temporaryDirectory, withIntermediateDirectories: true, attributes: nil) + + // Create a symbolic link so we can control the file name used when sharing. + // Otherwise, if we just passed in game.fileURL to UIActivityViewController, the file name would be the game's SHA1 hash. + try FileManager.default.createSymbolicLink(at: symbolicURL, withDestinationURL: game.fileURL) + } + catch + { + print(error) + } + + let activityViewController = UIActivityViewController(activityItems: [symbolicURL], applicationActivities: nil) + activityViewController.completionWithItemsHandler = { (activityType, finished, returnedItems, error) in + do + { + try FileManager.default.removeItem(at: temporaryDirectory) + } + catch + { + print(error) + } + } + self.present(activityViewController, animated: true, completion: nil) + } + @objc func textFieldTextDidChange(_ textField: UITextField) { let text = textField.text ?? ""