Commit 13ed1e3f authored by sugita mamoru's avatar sugita mamoru

マニュアル取得処理作成

parent e03cae43
......@@ -110,7 +110,6 @@
D5CB6F9B2B021C4F00EC2010 /* LocationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CB6F9A2B021C4F00EC2010 /* LocationViewModel.swift */; };
D5CB6F9F2B0220A700EC2010 /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CB6F9E2B0220A700EC2010 /* ErrorView.swift */; };
D5CB6FA12B023F7F00EC2010 /* EcaTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5CB6FA02B023F7F00EC2010 /* EcaTask.swift */; };
D5D9AA832B2C24030011EB13 /* ResManualUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D9AA822B2C24030011EB13 /* ResManualUrl.swift */; };
D5E008742B2ADD3F00C4070A /* MenuManualECDISView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E008732B2ADD3F00C4070A /* MenuManualECDISView.swift */; };
D5E008762B2ADD5900C4070A /* MenuManualRADARView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E008752B2ADD5900C4070A /* MenuManualRADARView.swift */; };
D5E008782B2B022200C4070A /* MenuAboutAppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E008772B2B022200C4070A /* MenuAboutAppView.swift */; };
......@@ -264,7 +263,6 @@
D5CB6F9A2B021C4F00EC2010 /* LocationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LocationViewModel.swift; path = Sailassist/LocationViewModel.swift; sourceTree = SOURCE_ROOT; };
D5CB6F9E2B0220A700EC2010 /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ErrorView.swift; path = Sailassist/ErrorView.swift; sourceTree = SOURCE_ROOT; };
D5CB6FA02B023F7F00EC2010 /* EcaTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EcaTask.swift; path = Sailassist/ECA/EcaTask.swift; sourceTree = SOURCE_ROOT; };
D5D9AA822B2C24030011EB13 /* ResManualUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ResManualUrl.swift; path = Sailassist/Json/ResManualUrl.swift; sourceTree = SOURCE_ROOT; };
D5E008732B2ADD3F00C4070A /* MenuManualECDISView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MenuManualECDISView.swift; path = Sailassist/Menu/View/MenuManualECDISView.swift; sourceTree = SOURCE_ROOT; };
D5E008752B2ADD5900C4070A /* MenuManualRADARView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MenuManualRADARView.swift; path = Sailassist/Menu/View/MenuManualRADARView.swift; sourceTree = SOURCE_ROOT; };
D5E008772B2B022200C4070A /* MenuAboutAppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MenuAboutAppView.swift; path = Sailassist/Menu/View/MenuAboutAppView.swift; sourceTree = SOURCE_ROOT; };
......@@ -715,7 +713,6 @@
D592D5282B0F198100B91A1C /* ReqChatModeMessage.swift */,
D59908C52B19EA70000E13DD /* ResPushHistory.swift */,
025F99732B2C125900C9A18A /* ResGetManualUrl.swift */,
D5D9AA822B2C24030011EB13 /* ResManualUrl.swift */,
);
path = Json;
sourceTree = "<group>";
......@@ -942,7 +939,6 @@
025F99742B2C125900C9A18A /* ResGetManualUrl.swift in Sources */,
D58E1F542B142A510092D8FE /* SessionEcaArea.swift in Sources */,
025C28002B034A1900BADC49 /* PDFViewer.swift in Sources */,
D5D9AA832B2C24030011EB13 /* ResManualUrl.swift in Sources */,
02C3E6092AFDF30000AF7837 /* ChatMemberView.swift in Sources */,
020B98412AD8C3810029DE4C /* LoginView.swift in Sources */,
D5AE351D2AEBA6FC00059889 /* SessionLogin.swift in Sources */,
......
......@@ -10,4 +10,9 @@ import Foundation
struct ResGetManualUrl: Codable{
var name: String
var path: String
var identifer: String? {
get{
URL(string: path)?.lastPathComponent.removingPercentEncoding?.components(separatedBy: "(Ed").first
}
}
}
......@@ -74,6 +74,39 @@ enum MenuPath: String, Hashable{
"Sign Out"
}
}
var fileIdntifer: String?{
switch self {
case .ManualECDISBasic:
"JAN-7201_9201(E)7ZPNA4449M"
case .ManualECDISFunction:
"JAN-7201_9201(E)7ZPNA4450K"
case .ManualVDR:
"JCY-1900(E)7ZPNA4384H"
case .ManualAIS:
"JHS-183(E)7ZPJD0553E"
case .ManualInternationalVHF:
"JHS-800S(E)7ZPJD0714B"
case .ManualRADARBasic:
"JMR-7200_9200(E)7ZPNA4446K"
case .ManualRADARFunction:
"JMR-7200_9200(E)7ZPNA4447H"
case .ManualInmalsatC:
"JUE-87(E)7ZPSC0444A"
default:
nil
}
}
var fileSavePath: URL?{
guard let docPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last else { return nil }
switch self {
case .ManualECDISBasic, .ManualECDISFunction, .ManualVDR, .ManualAIS, .ManualInternationalVHF, .ManualRADARBasic, .ManualRADARFunction, .ManualInmalsatC:
return docPath.appendingPathComponent("\(self.rawValue).pdf")
default:
return nil
}
}
}
struct MenuView: View {
......@@ -155,7 +188,7 @@ struct MenuView: View {
VStack(spacing: 0) {
MenuTitleView(path: $path, title: goto.title)
if let url = Preferences.ECDISBasicUrl{
if let url = goto.fileSavePath{
PDFViewer(url: url)
}else{
Spacer()
......
......@@ -15,34 +15,18 @@ struct MenuManualECDISView: View {
VStack{
MenuTitleView(path: $path, title: MenuPath.ManualECDIS.title)
Button{
if Preferences.ECDISBasicUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualECDISBasic.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualECDISBasic, downloadUrl: manual.path,version: Preferences.ECDISBasicManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualECDISBasic)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.ECDISBasicUrl = url
path.append(.ManualECDISBasic)
}else{
isAlert = true
}
Preferences.ECDISBasicManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualECDISBasic)
}
Button{
if Preferences.ECDISFunctionUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualECDISFunction.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualECDISFunction, downloadUrl: manual.path,version: Preferences.ECDISFunctionManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualECDISFunction)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.ECDISFunctionUrl = url
path.append(.ManualECDISFunction)
}else{
isAlert = true
}
Preferences.ECDISFunctionManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualECDISFunction)
}
Spacer()
......
......@@ -15,34 +15,19 @@ struct MenuManualRADARView: View {
VStack{
MenuTitleView(path: $path, title: MenuPath.ManualRADAR.title)
Button{
if Preferences.RADARBasicUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualRADARBasic.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualRADARBasic, downloadUrl: manual.path,version: Preferences.RADARBasicManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualRADARBasic)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.ECDISBasicUrl = url
path.append(.ManualRADARBasic)
}else{
isAlert = true
}
Preferences.RADARBasicManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualRADARBasic)
}
Button{
if Preferences.RADARFunctionUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualRADARFunction.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualRADARFunction, downloadUrl: manual.path,version: Preferences.RADARFunctionManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualRADARFunction)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.RADARFunctionUrl = url
path.append(.ManualRADARFunction)
}else{
isAlert = true
}
Preferences.RADARFunctionManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualRADARFunction)
}
Spacer()
......
......@@ -27,64 +27,32 @@ struct MenuManualView: View {
MenuContentView(content: .ManualRADAR)
}
Button{
if Preferences.AISUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualAIS.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualAIS, downloadUrl: manual.path,version: Preferences.AISManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualAIS)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.AISUrl = url
path.append(.ManualAIS)
}else{
isAlert = true
}
Preferences.AISManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualAIS)
}
Button{
if Preferences.InmalsatCUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualInmalsatC.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualInmalsatC, downloadUrl: manual.path,version: Preferences.InmalsatCManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualInmalsatC)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.InmalsatCUrl = url
path.append(.ManualInmalsatC)
}else{
isAlert = true
}
Preferences.InmalsatCManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualInmalsatC)
}
Button{
if Preferences.InternationalVHFUrl != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualInternationalVHF.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualInternationalVHF, downloadUrl: manual.path,version: Preferences.InternationalVHFManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualInternationalVHF)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.InternationalVHFUrl = url
path.append(.ManualInternationalVHF)
}else{
isAlert = true
}
Preferences.InternationalVHFManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualInternationalVHF)
}
Button{
if Preferences.VDRURL != nil{
if let manual = SharingData.my.manualUrls.filter({$0.identifer == MenuPath.ManualVDR.fileIdntifer}).first{
ManualDownloadButton(manualType: .ManualVDR, downloadUrl: manual.path,version: Preferences.VDRManualVer, newVersion: manual.name, isAlert: $isAlert){
path.append(.ManualVDR)
}else{
if let url = PDFDownloadManager.main.downloadFile(urlString: "https://samsdbg.jmarinesafety.jp/gps_editor/gps_help.pdf", fileName: "ECDIS.pdf"){
Preferences.VDRURL = url
path.append(.ManualVDR)
}else{
isAlert = true
}
Preferences.VDRManualVer = manual.name
}
}label: {
MenuContentView(content: .ManualVDR)
}
Spacer()
......@@ -103,6 +71,35 @@ struct MenuManualView: View {
}
}
struct ManualDownloadButton: View {
var manualType: MenuPath
var downloadUrl: String
var version: String?
var newVersion: String
@Binding var isAlert: Bool
var complition: () -> Void
var body: some View {
Button{
if let version = version, version == newVersion{
complition()
}else{
Task {
if await PDFDownloadManager.main.downloadFile(urlString: downloadUrl, manualType.fileSavePath!){
complition()
}else{
isAlert = true
}
}
}
}label: {
MenuContentView(content: manualType)
}
}
}
#Preview {
MenuManualView(path: .constant([.Manual]))
}
......@@ -57,14 +57,14 @@ class Preferences{
@AppStorage(wrappedValue:0, PreferencesKey.TypeInt.LocationType.rawValue) static var LocationType: Int
// func getPreferences(key)
@AppStorage(PreferencesKey.TypeURL.ECDISBasic.rawValue) static var ECDISBasicUrl: URL?
@AppStorage(PreferencesKey.TypeURL.ECDISFunction.rawValue) static var ECDISFunctionUrl: URL?
@AppStorage(PreferencesKey.TypeURL.RADARBasic.rawValue) static var RADARBasicUrl: URL?
@AppStorage(PreferencesKey.TypeURL.RADARFunction.rawValue) static var RADARFunctionUrl: URL?
@AppStorage(PreferencesKey.TypeURL.AIS.rawValue) static var AISUrl: URL?
@AppStorage(PreferencesKey.TypeURL.InmalsatC.rawValue) static var InmalsatCUrl: URL?
@AppStorage(PreferencesKey.TypeURL.InternationalVHF.rawValue) static var InternationalVHFUrl: URL?
@AppStorage(PreferencesKey.TypeURL.VDR.rawValue) static var VDRURL: URL?
@AppStorage(PreferencesKey.TypeString.ECDISBasic.rawValue) static var ECDISBasicManualVer: String?
@AppStorage(PreferencesKey.TypeString.ECDISFunction.rawValue) static var ECDISFunctionManualVer: String?
@AppStorage(PreferencesKey.TypeString.RADARBasic.rawValue) static var RADARBasicManualVer: String?
@AppStorage(PreferencesKey.TypeString.RADARFunction.rawValue) static var RADARFunctionManualVer: String?
@AppStorage(PreferencesKey.TypeString.AIS.rawValue) static var AISManualVer: String?
@AppStorage(PreferencesKey.TypeString.InmalsatC.rawValue) static var InmalsatCManualVer: String?
@AppStorage(PreferencesKey.TypeString.InternationalVHF.rawValue) static var InternationalVHFManualVer: String?
@AppStorage(PreferencesKey.TypeString.VDR.rawValue) static var VDRManualVer: String?
}
......
......@@ -15,6 +15,16 @@ class PreferencesKey{
case Id
case Password
case UserName
//Manual類Version
case ECDISBasic
case ECDISFunction
case RADARBasic
case RADARFunction
case AIS
case InmalsatC
case InternationalVHF
case VDR
}
///Int型
......@@ -27,15 +37,5 @@ class PreferencesKey{
case PrivacyPolicyAgreeDate
}
enum TypeURL: String{
case ECDISBasic
case ECDISFunction
case RADARBasic
case RADARFunction
case AIS
case InmalsatC
case InternationalVHF
case VDR
}
}
......@@ -64,9 +64,9 @@ struct SailassistApp: App {
case .success(let resultData):
print(debug: String(data: resultData, encoding: .utf8))
let serverSession = ServerSession()
let resjson = serverSession.fromJSON(resultData: resultData, resltType: [ResManualUrl].self)
let resjson = serverSession.fromJSON(resultData: resultData, resltType: [ResGetManualUrl].self)
if let res = resjson {
print(debug: res)
SharingData.my.manualUrls = res
}
case .failure(let errorCode):
print(debug: errorCode)
......
......@@ -10,16 +10,15 @@ import Foundation
class PDFDownloadManager{
static let main = PDFDownloadManager()
func downloadFile(urlString: String, fileName: String) -> URL?{
guard let url = URL(string: urlString) else { return nil }
guard let resDocPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last else { return nil }
var filePath: URL? = resDocPath.appendingPathComponent(fileName)
///URLからファイルをダウンロードする
func downloadFile(urlString: String,_ savePath: URL) async -> Bool{
guard let url = URL(string: urlString) else { return false}
do {
let pdfData = try Data.init(contentsOf: url)
try pdfData.write(to: filePath!, options: .atomic)
let pdfData = try await URLSession.shared.data(from: url).0
try pdfData.write(to: savePath, options: .atomic)
}catch{
filePath = nil
return false
}
return filePath
return true
}
}
......@@ -11,7 +11,7 @@ typealias SessionResponse = Result<Data, APIError>
class ServerSession{
// JSON 文字列に変換
/// JSON 文字列に変換
func toJSON<T>(_ reqparam : T) -> Data! where T : Encodable {
let Jencoder = JSONEncoder()
var postdata : Data!
......@@ -23,7 +23,7 @@ class ServerSession{
return postdata
}
// JSON 文字列から変換
/// JSON 文字列から変換
func fromJSON<T>(resultData: Data, resltType : T.Type ) -> T! where T : Decodable {
do{
let decoder = JSONDecoder()
......@@ -36,8 +36,7 @@ class ServerSession{
}
}
func postJson(_ req_url : URL, _ postdata : Data, completion: @escaping ((Result<Data, APIError>)) -> Void){
func postJson(_ req_url : URL, _ postdata : Data, completion: @escaping (SessionResponse) -> Void){
var req = URLRequest(url: req_url)
req.httpMethod = "POST"
req.addValue("application/json", forHTTPHeaderField: "Content-Type")
......@@ -80,7 +79,7 @@ class ServerSession{
}).resume()
}
func getJson(_ req_url : URL, completion: @escaping ((Result<Data, APIError>)) -> Void){
func getJson(_ req_url : URL, completion: @escaping (SessionResponse) -> Void){
var req = URLRequest(url: req_url)
req.addValue("application/json", forHTTPHeaderField: "Content-Type")
......@@ -117,7 +116,7 @@ class ServerSession{
}).resume()
}
func deleteJson(_ req_url : URL, completion: @escaping ((Result<Data, APIError>)) -> Void){
func deleteJson(_ req_url : URL, completion: @escaping (SessionResponse) -> Void){
var req = URLRequest(url: req_url)
req.httpMethod = "DELETE"
......
......@@ -7,10 +7,7 @@
import Foundation
class SessionGetManualUrl{
private let serverSession = ServerSession()
class SessionGetManualUrl: ServerSession{
/**
* マニュアル類のURL取得
*/
......@@ -21,6 +18,6 @@ class SessionGetManualUrl{
guard let req_url = URL(string : url_string) else {
return
}
serverSession.getJson(req_url, completion: completion)
getJson(req_url, completion: completion)
}
}
......@@ -54,14 +54,7 @@ class SharingData{
heading = 0.0
}
@Published var ECDISBasicUrl: URL?
@Published var ECDISFunctionUrl: URL?
@Published var RADARBasicUrl: URL?
@Published var RADARFunctionUrl: URL?
@Published var AISUrl: URL?
@Published var InmalsatCUrl: URL?
@Published var InternationalVHFUrl: URL?
@Published var VDRURL: URL?
var manualUrls: [ResGetManualUrl] = []
}
static var map = Map()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment