Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
1
1weather
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitriy Stepanets
1weather
Commits
ce5041f8
Commit
ce5041f8
authored
Sep 01, 2021
by
Demid Merzlyakov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
IOS-238: the layer on the radar widget matches the layer in the app.
parent
943172e3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
6 deletions
+64
-6
OneWeatherWidget/Data/WeatherProvider.swift
+2
-1
OneWeatherWidget/UI/SnapshotLoader.swift
+62
-5
No files found.
OneWeatherWidget/Data/WeatherProvider.swift
View file @
ce5041f8
...
@@ -47,7 +47,8 @@ class WeatherProvider: TimelineProvider {
...
@@ -47,7 +47,8 @@ class WeatherProvider: TimelineProvider {
let
coordinates
=
fetchedLocation
.
coordinates
let
coordinates
=
fetchedLocation
.
coordinates
{
{
if
self
.
needsRadar
{
if
self
.
needsRadar
{
SnapshotLoader
.
load
(
at
:
coordinates
,
SnapshotLoader
.
load
(
for
:
fetchedLocation
,
at
:
coordinates
,
size
:
.
init
(
width
:
340
,
height
:
280
)
size
:
.
init
(
width
:
340
,
height
:
280
)
)
{
mapImage
in
)
{
mapImage
in
let
nextRefresh
=
Calendar
.
current
.
date
(
byAdding
:
.
minute
,
value
:
30
,
to
:
Date
())
!
let
nextRefresh
=
Calendar
.
current
.
date
(
byAdding
:
.
minute
,
value
:
30
,
to
:
Date
())
!
...
...
OneWeatherWidget/UI/SnapshotLoader.swift
View file @
ce5041f8
...
@@ -9,18 +9,19 @@ import SwiftUI
...
@@ -9,18 +9,19 @@ import SwiftUI
import
MapKit
import
MapKit
import
Swarm
import
Swarm
import
OneWeatherCore
private
let
WDT_APP_ID
=
"e3b73414"
private
let
WDT_APP_ID
=
"e3b73414"
private
let
WDT_APP_KEY
=
"25e8d6b72de3bcd528f7769b073cc335"
private
let
WDT_APP_KEY
=
"25e8d6b72de3bcd528f7769b073cc335"
@available(iOS 14, *)
@available(iOS 14, *)
class
SnapshotLoader
:
ObservableObject
{
class
SnapshotLoader
:
ObservableObject
{
private
static
let
swarmOverlay
=
SwarmManager
.
sharedManager
.
overlayForGroup
(
.
none
,
baseLayer
:
.
radar
)
static
func
load
(
for
location
:
Location
,
at
coordinates
:
CLLocationCoordinate2D
,
size
:
CGSize
,
completion
:
@escaping
(
_
snapshot
:
UIImage
?)
->
Void
)
{
static
func
load
(
at
coordinates
:
CLLocationCoordinate2D
,
size
:
CGSize
,
completion
:
@escaping
(
_
snapshot
:
UIImage
?)
->
Void
)
{
SwarmManager
.
sharedManager
.
authentication
=
SkywiseAuthentication
(
SwarmManager
.
sharedManager
.
authentication
=
SkywiseAuthentication
(
app_id
:
WDT_APP_ID
,
app_id
:
WDT_APP_ID
,
app_key
:
WDT_APP_KEY
app_key
:
WDT_APP_KEY
)
)
rebuildLayers
(
for
:
location
)
let
region
=
MKCoordinateRegion
(
center
:
coordinates
,
let
region
=
MKCoordinateRegion
(
center
:
coordinates
,
latitudinalMeters
:
30000
,
latitudinalMeters
:
30000
,
...
@@ -43,6 +44,62 @@ class SnapshotLoader: ObservableObject {
...
@@ -43,6 +44,62 @@ class SnapshotLoader: ObservableObject {
}
}
}
}
private
static
var
weatherLayers
=
[
RadarLayer
]()
private
static
var
severeLayers
=
[
RadarLayer
]()
//Private
private
static
func
rebuildLayers
(
for
location
:
Location
)
{
let
pinnedLayerIds
=
Settings
.
shared
.
pinnedLayerIds
//Fill weather layers
if
location
.
supportsRadar
==
true
{
weatherLayers
=
WeatherLayerType
.
allCases
.
map
{
RadarLayer
(
pinned
:
pinnedLayerIds
.
contains
(
$0
.
id
),
layer
:
$0
)
}
severeLayers
=
SevereLayerType
.
allCases
.
map
{
RadarLayer
(
pinned
:
pinnedLayerIds
.
contains
(
$0
.
id
),
layer
:
$0
)
}
}
else
{
weatherLayers
=
[
RadarLayer
(
pinned
:
pinnedLayerIds
.
contains
(
WeatherLayerType
.
clouds
.
id
),
layer
:
WeatherLayerType
.
clouds
),
RadarLayer
(
pinned
:
pinnedLayerIds
.
contains
(
WeatherLayerType
.
uvIndex
.
id
),
layer
:
WeatherLayerType
.
uvIndex
)]
severeLayers
=
[
RadarLayer
(
pinned
:
pinnedLayerIds
.
contains
(
SevereLayerType
.
hurricaneTropicalTracks
.
id
),
layer
:
SevereLayerType
.
hurricaneTropicalTracks
)]
}
}
public
static
var
selectedLayer
:
RadarLayer
?
{
let
selectedLayerId
=
Settings
.
shared
.
selectedLayerId
if
let
weatherSelectedLayer
=
(
weatherLayers
.
first
{
$0
.
layer
.
id
==
selectedLayerId
})
{
return
weatherSelectedLayer
}
if
let
severeSelectedLayer
=
(
severeLayers
.
first
{
$0
.
layer
.
id
==
selectedLayerId
})
{
return
severeSelectedLayer
}
return
weatherLayers
.
first
}
private
static
func
getOverlay
()
->
SwarmOverlay
?
{
guard
let
selectedLayer
=
self
.
selectedLayer
else
{
return
nil
}
var
rawOverlay
:
SwarmOverlay
?
if
let
weatherLayer
=
selectedLayer
.
layer
as?
WeatherLayerType
{
rawOverlay
=
SwarmManager
.
sharedManager
.
overlayForBaseLayer
(
weatherLayer
.
swarmLayer
)
// This is needed to use enhanced styles for international radar
if
weatherLayer
.
swarmLayer
==
.
satellite
{
rawOverlay
?
.
style
=
"enhanced"
}
}
if
let
severeLayer
=
selectedLayer
.
layer
as?
SevereLayerType
{
rawOverlay
=
SwarmManager
.
sharedManager
.
overlayForGroup
(
severeLayer
.
swarmLayer
,
baseLayer
:
.
radar
)
}
return
rawOverlay
}
private
static
func
addTile
(
to
snapshot
:
MKMapSnapshotter
.
Snapshot
,
private
static
func
addTile
(
to
snapshot
:
MKMapSnapshotter
.
Snapshot
,
region
:
MKCoordinateRegion
,
region
:
MKCoordinateRegion
,
scale
:
CGFloat
,
scale
:
CGFloat
,
...
@@ -58,8 +115,8 @@ class SnapshotLoader: ObservableObject {
...
@@ -58,8 +115,8 @@ class SnapshotLoader: ObservableObject {
let
b
=
MKMapPoint
(
bottomRight
)
let
b
=
MKMapPoint
(
bottomRight
)
let
rect
=
MKMapRect
(
origin
:
MKMapPoint
(
x
:
min
(
a
.
x
,
b
.
x
),
y
:
min
(
a
.
y
,
b
.
y
)),
let
rect
=
MKMapRect
(
origin
:
MKMapPoint
(
x
:
min
(
a
.
x
,
b
.
x
),
y
:
min
(
a
.
y
,
b
.
y
)),
size
:
MKMapSize
(
width
:
abs
(
a
.
x
-
b
.
x
),
height
:
abs
(
a
.
y
-
b
.
y
)))
size
:
MKMapSize
(
width
:
abs
(
a
.
x
-
b
.
x
),
height
:
abs
(
a
.
y
-
b
.
y
)))
let
overlay
:
SwarmOverlay
=
getOverlay
()
??
SwarmManager
.
sharedManager
.
overlayForGroup
(
.
none
,
baseLayer
:
.
radar
)
let
renderer
=
SwarmTileOverlayRenderer
(
overlay
:
SnapshotLoader
.
swarmO
verlay
)
let
renderer
=
SwarmTileOverlayRenderer
(
overlay
:
o
verlay
)
let
zoomLevel
=
Int
(
SnapshotLoader
.
zoomLevel
(
for
:
region
)
.
rounded
(
.
down
))
let
zoomLevel
=
Int
(
SnapshotLoader
.
zoomLevel
(
for
:
region
)
.
rounded
(
.
down
))
renderer
.
getTilesImage
(
rect
,
zoomLevel
:
zoomLevel
,
scale
:
scale
)
{
image
in
renderer
.
getTilesImage
(
rect
,
zoomLevel
:
zoomLevel
,
scale
:
scale
)
{
image
in
guard
let
tilesImage
=
image
else
{
guard
let
tilesImage
=
image
else
{
...
...
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