Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
Sailassist
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
CpjJwWHV
Sailassist
Commits
acaa60ef
Commit
acaa60ef
authored
Dec 26, 2023
by
shigemi miura
Browse files
Options
Browse Files
Download
Plain Diff
Merge fix-task into develop
parents
884ca2d0
a31f3a2d
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
178 additions
and
107 deletions
+178
-107
project.pbxproj
Seilassist/Sailassist.xcodeproj/project.pbxproj
+3
-3
EcaTask.swift
Seilassist/Sailassist/ECA/EcaTask.swift
+124
-58
LoginView.swift
Seilassist/Sailassist/Login/LoginView.swift
+3
-0
MapRepresentable.swift
Seilassist/Sailassist/Map/MapRepresentable.swift
+2
-2
MapTaskView.swift
Seilassist/Sailassist/Map/Task/View/MapTaskView.swift
+1
-17
TaskSwitchingMenuView.swift
...sist/Sailassist/Map/Task/View/TaskSwitchingMenuView.swift
+34
-27
SharingData.swift
Seilassist/Sailassist/SharingData/SharingData.swift
+11
-0
No files found.
Seilassist/Sailassist.xcodeproj/project.pbxproj
View file @
acaa60ef
...
...
@@ -1234,7 +1234,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
0.9.
4
;
MARKETING_VERSION
=
0.9.
5
;
OTHER_SWIFT_FLAGS
=
"-D CANARY -D COCOAPODS"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.jrc.sailassist.canary
;
PRODUCT_NAME
=
"Sail Assist"
;
...
...
@@ -1277,7 +1277,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
0.9.
4
;
MARKETING_VERSION
=
0.9.
5
;
OTHER_SWIFT_FLAGS
=
"-D COCOAPODS"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.jrc.sailassist
;
PRODUCT_NAME
=
"Sail Assist"
;
...
...
@@ -1463,7 +1463,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
0.9.
4
;
MARKETING_VERSION
=
0.9.
5
;
OTHER_SWIFT_FLAGS
=
"-D QC -D COCOAPODS"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.jrc.sailassist.qc
;
PRODUCT_NAME
=
"Sail Assist"
;
...
...
Seilassist/Sailassist/ECA/EcaTask.swift
View file @
acaa60ef
...
...
@@ -46,7 +46,7 @@ class EcaTask {
SharingData
.
location
.
dataTime
=
res
.
dataTime
//2023-11-02T05:25:49.4362123Z
SharingData
.
location
.
setLocation
()
print
(
debug
:
"Location:
\(
res
)
"
)
checkEca
()
}
case
.
failure
(
let
errorCode
):
...
...
@@ -57,36 +57,37 @@ class EcaTask {
func
checkEca
()
{
let
runningEca
=
eca
.
ecaArea
.
first
(
where
:
{(
key
,
value
)
in
value
.
isRunning
==
true
})
if
var
eca
=
runningEca
?
.
value
{
if
let
eca
=
runningEca
?
.
value
{
if
let
location
=
SharingData
.
location
.
location
{
if
let
distance
=
LocationCalculation
.
checkPolyline
(
objPos
:
eca
.
points
,
shipPos
:
location
)
{
//起動時に状態を設定
if
let
distance
=
LocationCalculation
.
checkPolyline
(
objPos
:
eca
.
points
,
shipPos
:
location
){
if
SharingData
.
my
.
ecaStatus
==
nil
{
eca
=
runningEcaStatus
(
eca
:
eca
,
distance
:
distance
)
SharingData
.
my
.
ecaStatus
=
EcaState
.
running
}
if
eca
.
swNotice
>=
Float
(
distance
)
&&
eca
.
status
==
EcaState
.
running
{
notificationEca
(
point
:
SwitchingEca
.
Notice
)
SharingData
.
eca
.
isShowEcaAlert
=
true
SharingData
.
my
.
ecaStatus
=
EcaState
.
noticePass
if
0.0
>=
Float
(
distance
)
&&
SharingData
.
my
.
ecaStatus
!=
EcaState
.
incomplete
{
SharingData
.
my
.
ecaStatus
=
EcaState
.
incomplete
var
newData
=
eca
newData
.
isRunning
=
false
newData
.
status
=
EcaState
.
incomplete
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Incomplete
)
}
if
eca
.
sw
Start
>=
Float
(
distance
)
&&
eca
.
status
==
EcaState
.
noticePass
{
notificationEca
(
point
:
SwitchingEca
.
Start
)
if
eca
.
sw
Finish
>=
Float
(
distance
)
&&
0.0
<
Float
(
distance
)
&&
SharingData
.
my
.
ecaStatus
!=
EcaState
.
finishPass
{
notificationEca
(
point
:
SwitchingEca
.
Finish
)
SharingData
.
eca
.
isShowEcaAlert
=
true
SharingData
.
my
.
ecaStatus
=
EcaState
.
start
Pass
SharingData
.
my
.
ecaStatus
=
EcaState
.
finish
Pass
}
if
eca
.
sw
Finish
>=
Float
(
distance
)
&&
0.0
<
Float
(
distance
)
&&
eca
.
status
==
EcaState
.
startPass
{
notificationEca
(
point
:
SwitchingEca
.
Finish
)
if
eca
.
sw
Start
>=
Float
(
distance
)
&&
eca
.
swFinish
<
Float
(
distance
)
&&
SharingData
.
my
.
ecaStatus
!=
EcaState
.
startPass
{
notificationEca
(
point
:
SwitchingEca
.
Start
)
SharingData
.
eca
.
isShowEcaAlert
=
true
SharingData
.
my
.
ecaStatus
=
EcaState
.
finish
Pass
SharingData
.
my
.
ecaStatus
=
EcaState
.
start
Pass
}
if
0.0
>=
Float
(
distance
)
&&
eca
.
status
==
EcaState
.
finishPass
{
if
eca
.
swNotice
>=
Float
(
distance
)
&&
eca
.
swStart
<
Float
(
distance
)
&&
SharingData
.
my
.
ecaStatus
!=
EcaState
.
noticePass
{
notificationEca
(
point
:
SwitchingEca
.
Notice
)
SharingData
.
eca
.
isShowEcaAlert
=
true
SharingData
.
my
.
ecaStatus
=
EcaState
.
incomplete
SharingData
.
my
.
ecaStatus
=
EcaState
.
noticePass
}
}
}
...
...
@@ -97,54 +98,119 @@ class EcaTask {
}
}
func
runningEcaStatus
(
eca
:
RegisteredEca
,
distance
:
Double
)
->
RegisteredEca
{
var
result
=
false
var
newData
=
eca
if
0.0
>=
Float
(
distance
){
newData
.
status
=
EcaState
.
finishPass
result
=
true
}
if
eca
.
swFinish
>=
Float
(
distance
)
&&
result
==
false
{
newData
.
status
=
EcaState
.
startPass
result
=
true
}
if
eca
.
swStart
>=
Float
(
distance
)
&&
result
==
false
{
newData
.
status
=
EcaState
.
noticePass
result
=
true
}
if
eca
.
swNotice
>=
Float
(
distance
)
&&
result
==
false
{
newData
.
status
=
EcaState
.
running
}
return
newData
}
func
chengeEcaStatus
(
eca
:
RegisteredEca
)
{
if
eca
.
status
==
EcaState
.
running
{
if
let
status
=
SharingData
.
my
.
ecaStatus
{
var
newData
=
eca
newData
.
status
=
EcaState
.
noticePass
newData
.
status
=
status
if
status
==
EcaState
.
noticePass
{
//ECA通知円到達
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Notice
)
}
if
eca
.
status
==
EcaState
.
noticePass
{
var
newData
=
eca
newData
.
status
=
EcaState
.
startPass
if
status
==
EcaState
.
startPass
{
//ECA開始円到達
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Start
)
}
if
eca
.
status
==
EcaState
.
startPass
{
var
newData
=
eca
newData
.
status
=
EcaState
.
finishPass
if
status
==
EcaState
.
finishPass
{
//ECAタスク終了円到達
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Finish
)
}
if
eca
.
status
==
EcaState
.
finishPass
{
var
newData
=
eca
newData
.
status
=
EcaState
.
incomplete
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Incomplete
)
if
status
==
EcaState
.
end
{
//ECAタスク完了(燃料切替実施済み)
SharingData
.
eca
.
editEcaArea
(
key
:
eca
.
name
,
value
:
newData
,
type
:
EcaOperation
.
End
)
}
}
}
// func checkEca() {
// let runningEca = eca.ecaArea.first(where: {(key, value) in value.isRunning == true})
// if var eca = runningEca?.value {
// if let location = SharingData.location.location {
// if let distance = LocationCalculation.checkPolyline(objPos: eca.points, shipPos: location) {
//
// //ECA実行時に状態を取得
// if SharingData.my.ecaStatus == nil {
// eca = runningEcaStatus(eca: eca, distance: distance)
// }
//
// if eca.swNotice >= Float(distance) && eca.status == EcaState.running {
// notificationEca(point: SwitchingEca.Notice)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.noticePass
// }
//
// if eca.swStart >= Float(distance) && eca.status == EcaState.noticePass {
// notificationEca(point: SwitchingEca.Start)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.startPass
// }
//
// if eca.swFinish >= Float(distance) && 0.0 < Float(distance) && eca.status == EcaState.startPass {
// notificationEca(point: SwitchingEca.Finish)
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.finishPass
// }
//
// if 0.0 >= Float(distance) && eca.status == EcaState.incomplete {
// SharingData.eca.isShowEcaAlert = true
// SharingData.my.ecaStatus = EcaState.incomplete
// }
// }
// }
// } else {
// if SharingData.my.ecaStatus != nil {
// SharingData.my.ecaStatus = nil
// }
// }
// }
// func runningEcaStatus(eca: RegisteredEca, distance: Double) -> RegisteredEca {
// var result = false
// var newData = eca
//
// newData.status = EcaState.running
//
// if 0.0 >= Float(distance){
// newData.status = EcaState.incomplete
// result = true
// }
//
// if eca.swFinish >= Float(distance) && result == false{
// newData.status = EcaState.startPass
// result = true
// }
//
// if eca.swStart >= Float(distance) && result == false{
// newData.status = EcaState.noticePass
// result = true
// }
//
// if eca.swNotice >= Float(distance) && result == false{
// newData.status = EcaState.running
// }
//
// return newData
// }
// func chengeEcaStatus(eca: RegisteredEca) {
// if eca.status == EcaState.running {
// var newData = eca
// newData.status = EcaState.noticePass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Notice)
// }
//
// if eca.status == EcaState.noticePass {
// var newData = eca
// newData.status = EcaState.startPass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Start)
// }
//
// if eca.status == EcaState.startPass {
// var newData = eca
// newData.status = EcaState.finishPass
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Finish)
// }
//
// if eca.status == EcaState.finishPass {
// var newData = eca
// newData.status = EcaState.incomplete
// SharingData.eca.editEcaArea(key: eca.name, value: newData, type: EcaOperation.Incomplete)
// }
// }
}
Seilassist/Sailassist/Login/LoginView.swift
View file @
acaa60ef
...
...
@@ -256,6 +256,9 @@ struct LoginView: View {
// let ecaArea = EcaArea()
// ecaArea.start()
let
eca
=
EcaTask
()
eca
.
start
()
timer
=
Timer
.
scheduledTimer
(
withTimeInterval
:
TimerInterval
,
repeats
:
true
)
{
_
in
print
(
debug
:
"called timer"
)
let
eca
=
EcaTask
()
...
...
Seilassist/Sailassist/Map/MapRepresentable.swift
View file @
acaa60ef
...
...
@@ -32,8 +32,8 @@ struct MapRepresentable: UIViewControllerRepresentable{
if
let
focusEcaName
=
ecaData
.
focusEca
,
let
focusEca
=
ecaData
.
ecaArea
[
focusEcaName
]{
mapVC
.
updateCamera
(
location
:
focusEca
.
centerPosition
,
zoomlevel
:
focusEca
.
zoomLevel
)
mapVC
.
updateOneTimeEca
(
eca
:
focusEca
.
points
)
//
5
秒後削除
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
5
.0
)
{
//
10
秒後削除
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
10
.0
)
{
do
{
mapVC
.
updateOneTimeEca
(
eca
:
nil
)
}
catch
{
...
...
Seilassist/Sailassist/Map/Task/View/MapTaskView.swift
View file @
acaa60ef
...
...
@@ -81,33 +81,17 @@ struct MapTaskView: View {
Spacer
()
.
frame
(
height
:
55
)
}
.
onAppear
{
EcaCoordinatesTable
()
.
setEcaData
()
}
.
alert
(
""
,
isPresented
:
$
eca
.
isShowEcaAlert
)
{
if
let
ecaArea
=
eca
.
ecaArea
.
map
({
$0
.
1
})
.
filter
({
$0
.
isRunning
})
.
first
{
if
SharingData
.
my
.
ecaStatus
==
.
finishPass
{
Button
(
"Yes"
){
var
newData
=
ecaArea
newData
.
isRunning
=
false
newData
.
status
=
EcaState
.
end
SharingData
.
eca
.
editEcaArea
(
key
:
ecaArea
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Finish
)
}
Button
(
"No"
){
var
newData
=
ecaArea
newData
.
isRunning
=
false
newData
.
status
=
EcaState
.
incomplete
SharingData
.
eca
.
editEcaArea
(
key
:
ecaArea
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Incomplete
)
}
}
else
{
Button
(
"OK"
){
let
ecaTask
=
EcaTask
()
ecaTask
.
chengeEcaStatus
(
eca
:
ecaArea
)
}
}
}
}
message
:
{
if
let
ecaArea
=
eca
.
ecaArea
.
map
({
$0
.
1
})
.
filter
({
$0
.
isRunning
})
.
first
{
if
let
status
=
SharingData
.
my
.
ecaStatus
{
...
...
@@ -117,7 +101,7 @@ struct MapTaskView: View {
case
.
startPass
:
Text
(
"Arrived at switching start point."
)
case
.
finishPass
:
Text
(
"Have you finished
\(
ecaArea
.
name
)
fuel switching?"
)
Text
(
"Have you finished
\(
ecaArea
.
name
)
fuel switching?
\n
If you finish, you disable it.
"
)
case
.
incomplete
:
Text
(
"Have you finished
\(
ecaArea
.
name
)
fuel switching?
\n
If you finish, you disable it."
)
default
:
...
...
Seilassist/Sailassist/Map/Task/View/TaskSwitchingMenuView.swift
View file @
acaa60ef
...
...
@@ -7,16 +7,18 @@
import
SwiftUI
enum
EcaAlertType
:
String
{
case
ecaDelete
case
ecaRunningStop
}
//
enum EcaAlertType: String {
//
case ecaDelete
//
case ecaRunningStop
//
}
struct
TaskSwitchingMenuView
:
View
{
@ObservedObject
var
taskViewModel
:
TaskViewModel
@ObservedObject
var
ecaData
=
SharingData
.
eca
@State
var
isEcaAlert
:
Bool
=
false
@State
var
ecaAlertType
:
EcaAlertType
=
.
ecaDelete
// @State var isEcaAlert : Bool = false
// @State var ecaAlertType: EcaAlertType = .ecaDelete
@State
var
isDeleteAlert
:
Bool
=
false
@State
var
isRunningStopAlert
:
Bool
=
false
let
deleteEcaArea
=
DeleteEcaArea
()
var
body
:
some
View
{
...
...
@@ -29,10 +31,9 @@ struct TaskSwitchingMenuView: View {
for
runningEca
in
ecaData
.
ecaArea
.
map
({
$0
.
1
})
.
filter
({
$0
.
isRunning
}){
taskViewModel
.
edittingEcaArea
=
runningEca
taskViewModel
.
ecaName
=
runningEca
.
name
isEcaAlert
=
true
ecaAlertType
=
.
ecaRunningStop
isRunningStopAlert
=
true
}
if
is
Eca
Alert
==
false
{
if
is
RunningStop
Alert
==
false
{
var
newData
=
eca
newData
.
isRunning
=
true
newData
.
status
=
EcaState
.
running
...
...
@@ -71,8 +72,7 @@ struct TaskSwitchingMenuView: View {
Button
{
taskViewModel
.
edittingEcaArea
=
eca
taskViewModel
.
ecaName
=
eca
.
name
isEcaAlert
=
true
ecaAlertType
=
.
ecaDelete
isDeleteAlert
=
true
}
label
:
{
Text
(
"Delete ECA Task"
)
}
...
...
@@ -82,13 +82,8 @@ struct TaskSwitchingMenuView: View {
.
foregroundColor
(
eca
.
isRunning
?
ColorSet
.
Splash
.
color
:
ColorSet
.
Slidebar
.
color
)
}
.
disabled
(
eca
.
isRunning
)
.
alert
(
isPresented
:
$
isEcaAlert
)
{
switch
ecaAlertType
{
case
.
ecaDelete
:
return
Alert
(
title
:
Text
(
"Delete"
),
message
:
Text
(
"Do you delete "
+
taskViewModel
.
ecaName
+
"?"
),
primaryButton
:
.
default
(
Text
(
"No"
)),
secondaryButton
:
.
cancel
(
Text
(
"Yes"
),
action
:
{
.
alert
(
"Delete"
,
isPresented
:
$
isDeleteAlert
)
{
Button
(
"Yes"
)
{
if
let
ecaArea
=
taskViewModel
.
edittingEcaArea
{
var
newData
=
ecaArea
newData
.
isEnable
=
false
...
...
@@ -98,21 +93,33 @@ struct TaskSwitchingMenuView: View {
deleteEcaArea
.
start
(
ecaId
:
ecaArea
.
id
)
}
taskViewModel
.
edittingEcaArea
=
nil
}))
case
.
ecaRunningStop
:
return
Alert
(
title
:
Text
(
"Stop"
),
message
:
Text
(
"Do you want to stop "
+
taskViewModel
.
ecaName
+
"?"
),
primaryButton
:
.
default
(
Text
(
"Cancel"
)),
secondaryButton
:
.
cancel
(
Text
(
"Stop"
),
action
:
{
}
Button
(
"No"
){}
}
message
:
{
Text
(
"Do you delete "
+
taskViewModel
.
ecaName
+
"?"
)
}
.
alert
(
"Fuel Switching"
,
isPresented
:
$
isRunningStopAlert
)
{
Button
(
"Yes"
)
{
if
let
ecaArea
=
taskViewModel
.
edittingEcaArea
{
var
newData
=
ecaArea
newData
.
isRunning
=
false
newData
.
status
=
EcaState
.
cancel
ecaData
.
editEcaArea
(
key
:
ecaArea
.
name
,
value
:
newData
,
type
:
EcaOperation
.
Cancel
)
newData
.
status
=
EcaState
.
end
ecaData
.
editEcaArea
(
key
:
ecaArea
.
name
,
value
:
newData
,
type
:
EcaOperation
.
End
)
}
taskViewModel
.
edittingEcaArea
=
nil
}))
}
Button
(
"No"
){}
// Button("Cancel"){¥
// if let ecaArea = taskViewModel.edittingEcaArea {
// var newData = ecaArea
// newData.isRunning = false
// newData.status = EcaState.cancel
// ecaData.editEcaArea(key: ecaArea.name, value: newData, type: EcaOperation.Cancel)
// }
// taskViewModel.edittingEcaArea = nil
// }
}
message
:
{
Text
(
"Do you delete "
+
taskViewModel
.
ecaName
+
"?"
)
}
}
.
frame
(
height
:
60
)
...
...
Seilassist/Sailassist/SharingData/SharingData.swift
View file @
acaa60ef
...
...
@@ -14,6 +14,7 @@ enum EcaOperation {
case
Notice
case
Start
case
Finish
case
End
case
Incomplete
case
Change
case
Cancel
...
...
@@ -186,6 +187,16 @@ class SharingData{
task
.
status
=
setEcaStatus
(
eca
:
value
)
}
setEcaArea
.
start
(
eca
:
task
)
case
EcaOperation
.
End
:
task
.
areaId
=
value
.
id
task
.
taskName
=
value
.
name
task
.
noticeRange
=
value
.
swNotice
task
.
startRange
=
value
.
swStart
task
.
finishRange
=
value
.
swFinish
if
value
.
isEnable
{
task
.
status
=
setEcaStatus
(
eca
:
value
)
}
setEcaArea
.
start
(
eca
:
task
)
case
EcaOperation
.
Incomplete
:
task
.
areaId
=
value
.
id
task
.
taskName
=
value
.
name
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment