aboutsummaryrefslogtreecommitdiff
path: root/iosApp/iosApp/Shared
diff options
context:
space:
mode:
Diffstat (limited to 'iosApp/iosApp/Shared')
-rw-r--r--iosApp/iosApp/Shared/ShareViewController.swift26
-rw-r--r--iosApp/iosApp/Shared/Utils.swift52
-rw-r--r--iosApp/iosApp/Shared/XlsxFile.swift60
3 files changed, 138 insertions, 0 deletions
diff --git a/iosApp/iosApp/Shared/ShareViewController.swift b/iosApp/iosApp/Shared/ShareViewController.swift
new file mode 100644
index 0000000..ed26ab8
--- /dev/null
+++ b/iosApp/iosApp/Shared/ShareViewController.swift
@@ -0,0 +1,26 @@
+//
+// ShareViewController.swift
+// iosApp
+//
+// Created by Iván on 31/03/22.
+// Copyright © 2022 orgName. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+import UIKit
+
+struct ShareView: UIViewControllerRepresentable {
+
+ @Binding var activityItems: [Any]
+ var excludedActivityTypes: [UIActivity.ActivityType]? = nil
+
+ func makeUIViewController(context: UIViewControllerRepresentableContext<ShareView>) -> UIActivityViewController {
+ let controller = UIActivityViewController(activityItems: activityItems,
+ applicationActivities: nil)
+ controller.excludedActivityTypes = excludedActivityTypes
+ return controller
+ }
+
+ func updateUIViewController(_ uiViewController: UIActivityViewController, context: UIViewControllerRepresentableContext<ShareView>) {}
+}
diff --git a/iosApp/iosApp/Shared/Utils.swift b/iosApp/iosApp/Shared/Utils.swift
index 61a8f90..4e04d1b 100644
--- a/iosApp/iosApp/Shared/Utils.swift
+++ b/iosApp/iosApp/Shared/Utils.swift
@@ -20,6 +20,25 @@ import CryptoKit
import WhirlyGlobe
import shared
+// Source: https://stackoverflow.com/a/55092044
+extension Data {
+ func dataToFile(fileName: String) -> NSURL? {
+ let fileManager = FileManager.default
+ let data = self
+ let filePath = Utils.getReportTmpDirectory().appendingPathComponent(fileName)
+ do {
+ if(fileManager.fileExists(atPath: filePath)) {
+ try fileManager.removeItem(atPath: filePath)
+ }
+ fileManager.createFile(atPath: filePath, contents: data, attributes: nil)
+ return NSURL(fileURLWithPath: filePath)
+ } catch {
+ print("Error writing the file: \(error.localizedDescription)")
+ }
+ return nil
+ }
+}
+
class Utils {
static func MD5(string: String) -> String {
let digest = Insecure.MD5.hash(data: string.data(using: .utf8) ?? Data())
@@ -45,4 +64,37 @@ class Utils {
.replacingOccurrences(of: "{x}", with: "\(latitude)")
.replacingOccurrences(of: "{y}", with: "\(longitude)"))
}
+
+ static func createReportTmpDirectory() {
+ let fileManager = FileManager.default
+ let tmpDir = getReportTmpDirectory() as String
+ do {
+ if (!fileManager.fileExists(atPath: tmpDir)) {
+ try fileManager.createDirectory(atPath: tmpDir,
+ withIntermediateDirectories: false,
+ attributes: nil)
+ }
+ } catch {
+ print("Could not create temp folder: \(error)")
+ }
+ }
+
+ static func getReportTmpDirectory() -> NSString {
+ let tmpDir = NSTemporaryDirectory()
+ return (tmpDir as NSString).appendingPathComponent("reports") as NSString
+ }
+
+ // Source: https://stackoverflow.com/a/33937110
+ static func clearReportTmpDirectory() {
+ let fileManager = FileManager.default
+ let reportTmpDir = getReportTmpDirectory()
+ do {
+ let filePaths = try fileManager.contentsOfDirectory(atPath: reportTmpDir as String)
+ for filePath in filePaths {
+ try fileManager.removeItem(atPath: reportTmpDir.appendingPathComponent(filePath))
+ }
+ } catch {
+ print("Could not clear temp folder: \(error)")
+ }
+ }
}
diff --git a/iosApp/iosApp/Shared/XlsxFile.swift b/iosApp/iosApp/Shared/XlsxFile.swift
new file mode 100644
index 0000000..8015422
--- /dev/null
+++ b/iosApp/iosApp/Shared/XlsxFile.swift
@@ -0,0 +1,60 @@
+/**
+ * TrackerMap
+ * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+import shared
+import Foundation
+import UniformTypeIdentifiers
+import SwiftUI
+
+// Source: https://www.hackingwithswift.com/quick-start/swiftui/how-to-export-files-using-fileexporter
+
+extension UTType {
+ static var doc: Self { .init(filenameExtension: "doc")! }
+ static var docx: Self { .init(filenameExtension: "docx")! }
+
+ static var xls: Self { .init(filenameExtension: "xls")! }
+ static var xlsx: Self { .init(filenameExtension: "xlsx")! }
+
+ static var ppt: Self { .init(filenameExtension: "ppt")! }
+ static var pptx: Self { .init(filenameExtension: "pptx")! }
+}
+
+struct XlsxFile: FileDocument {
+ static var readableContentTypes = [UTType.xlsx]
+
+ var data: Data
+
+ init() {
+ data = Data()
+ }
+
+ init(bytes: KotlinByteArray) {
+ data = bytes.toData()
+ }
+
+ init(configuration: ReadConfiguration) throws {
+ if let data = configuration.file.regularFileContents {
+ self.data = data
+ return
+ }
+ self.data = Data()
+ }
+
+ func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
+ return FileWrapper(regularFileWithContents: data)
+ }
+}