Skip to content

Commit c6f5466

Browse files
committedJan 1, 2025·
inline unsafe date usage
1 parent 8d0af86 commit c6f5466

File tree

9 files changed

+33
-31
lines changed

9 files changed

+33
-31
lines changed
 

‎src/Client/Im/Chat.purs

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import Effect.Class (liftEffect)
3636
import Effect.Now as EN
3737
import Effect.Uncurried (EffectFn1)
3838
import Effect.Uncurried as EU
39+
import Effect.Unsafe as EUN
3940
import Flame as F
4041
import Node.URL as NU
4142
import Shared.DateTime (DateTimeWrapper(..))
@@ -252,7 +253,8 @@ makeTurn user@{ id } contact@{ chatStarter, chatAge, history } =
252253

253254
getDate = DN.unwrap <<< _.date
254255

255-
accountAge { joined: DateTimeWrapper dt } = DN.unwrap (DT.diff SDT.unsafeNow dt Days)
256+
unsafeNow = EUN.unsafePerformEffect EN.nowDateTime
257+
accountAge { joined: DateTimeWrapper dt } = DN.unwrap (DT.diff unsafeNow dt Days)
256258

257259
applyMarkup Markup ImModel MoreMessages
258260
applyMarkup markup model@{ chatting } =

‎src/Client/Im/Main.purs

+7-7
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ update st model =
170170
SpecialRequest NextSuggestionCIS.nextSuggestion model
171171
SpecialRequest (BlockUser id) → CIS.blockUser webSocket id model
172172
DisplayMoreSuggestions suggestions → CIS.displayMoreSuggestions suggestions model
173-
ToggleSuggestionsFromOnline -> CIS.toggleSuggestionsFromOnline model
173+
ToggleSuggestionsFromOnline CIS.toggleSuggestionsFromOnline model
174174
--user menu
175175
ToggleInitialScreen toggle → CIU.toggleInitialScreen toggle model
176176
Logout after → CIU.logout after model
@@ -209,16 +209,16 @@ toggleContextMenu ∷ ShowContextMenu → ImModel → NoMessages
209209
toggleContextMenu toggle model = F.noMessages model { toggleContextMenu = toggle }
210210

211211
displayAvailability AvailabilityStatus ImModel NoMessages
212-
displayAvailability avl model@{ contacts, suggestions } = F.noMessages $ model
213-
{ contacts = map updateContact contacts
214-
, suggestions = map updateUser suggestions
212+
displayAvailability avl model = F.noMessages $ model
213+
{ contacts = map updateContact model.contacts
214+
, suggestions = map updateUser model.suggestions
215215
}
216216
where
217-
availability = DH.fromArray $ map (\{ id, status } Tuple id status) avl
218-
updateContact contact@{ user: { id } } = case DH.lookup id availability of
217+
availability = DH.fromArray $ map (\t Tuple t.id t.status) avl
218+
updateContact contact = case DH.lookup contact.user.id availability of
219219
Just status → contact { user { availability = status } }
220220
Nothing → contact
221-
updateUser user@{ id } = case DH.lookup id availability of
221+
updateUser user = case DH.lookup user.id availability of
222222
Just status → user { availability = status }
223223
Nothing → user
224224

‎src/Client/Im/WebSocket/Events.purs

+1-4
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ handleOpen webSocketStateRef _ = do
9696
ET.clearTimeout id
9797
FS.send imId <<< SpecialRequest <<< CheckMissedEvents <<< Just $ DateTimeWrapper state.lastPongDate
9898
newPrivilegesId ← ET.setInterval privilegeDelay (pollPrivileges state.webSocket)
99-
pingAction true
10099
newPingId ← ET.setInterval pingDelay ping
101100
ER.modify_ (_ { pingId = Just newPingId, privilegesId = Just newPrivilegesId, reconnectId = Nothing }) webSocketStateRef
102101
FS.send imId $ ToggleConnected true
@@ -110,9 +109,7 @@ handleOpen webSocketStateRef _ = do
110109
pingDelay = 1000 * 30
111110
ping = do
112111
isFocused ← CCD.documentHasFocus
113-
pingAction isFocused
114-
115-
pingAction = FS.send imId <<< SendPing
112+
FS.send imId $ SendPing isFocused
116113

117114
-- | Handle an incoming (json encoded) message from the server
118115
handleMessage Ref WebSocketState Event Effect Unit

‎src/Server/Im/Database.purs

+4-5
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ import Data.Time.Duration (Days(..), Minutes(..))
1717
import Data.Tuple (Tuple(..))
1818
import Data.Tuple.Nested ((/\))
1919
import Droplet.Driver (Pool)
20-
import Effect.Class (liftEffect)
21-
import Effect.Console as EC
20+
import Debug
2221
import Server.Database as SD
2322
import Server.Database.Blocks (_blocked, _blocker, blocks)
2423
import Server.Database.Countries (countries)
@@ -84,14 +83,14 @@ presentUser loggedUserId = SD.single $ select userPresentationFields # from user
8483
suggest Int Int SuggestionsFrom ServerEffect (Array FlatUser)
8584
suggest loggedUserId skip =
8685
case _ of
87-
OnlineOnly -> SD.query $ suggestOnlineQuery loggedUserId skip onlineFilter
86+
OnlineOnly SD.query $ suggestOnlineQuery loggedUserId skip onlineFilter
8887
ThisWeekSD.query $ suggestMainQuery loggedUserId skip thisWeekFilter
8988
LastTwoWeeksSD.query $ suggestMainQuery loggedUserId skip lastTwoWeeksFilter
9089
LastMonthSD.query $ suggestMainQuery loggedUserId skip lastMonthFilter
9190
AllSD.query $ suggestAllQuery loggedUserId skip baseFilter
9291

9392
where
94-
onlineFilter = baseFilter .&&. (l ... _date) .>=. (ST.unsafeAdjustFromNow $ Minutes (-1.0))
93+
onlineFilter = baseFilter .&&. (l ... _date) .>=. (spy "min" (ST.unsafeAdjustFromNow $ Minutes (-1.0)))
9594
thisWeekFilter = baseFilter .&&. (l ... _date) .>=. (ST.unsafeAdjustFromNow $ Days (-7.0))
9695
lastTwoWeeksFilter = baseFilter .&&. (l ... _date) .>=. (ST.unsafeAdjustFromNow $ Days (-14.0))
9796
lastMonthFilter = baseFilter .&&. (l ... _date) .>=. (ST.unsafeAdjustFromNow $ Days (-30.0))
@@ -104,7 +103,7 @@ suggest loggedUserId skip =
104103
-- top level to avoid monomorphic filter
105104
suggestBaseQuery loggedUserId filter =
106105
select (userFields /\ _bin)
107-
# from (leftJoin (leftJoin (join usersSource (suggestions # as s) # on (u ... _id .=. _suggested)) histories # on (_sender .=. u ... _id .&&. _recipient .=. (loggedUserId Int) .||. _sender .=. loggedUserId .&&. _recipient .=. u ... _id)) (last_seen # as l) # on (u ... _id .=. _who))
106+
# from (join (leftJoin (join usersSource (suggestions # as s) # on (u ... _id .=. _suggested)) histories # on (_sender .=. u ... _id .&&. _recipient .=. (loggedUserId Int) .||. _sender .=. loggedUserId .&&. _recipient .=. u ... _id)) (last_seen # as l) # on (u ... _id .=. _who))
108107
# wher filter
109108

110109
suggestMainQuery loggedUserId skip filter =

‎src/Server/Template.purs

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ externalDefaultParameters =
4343
, javascript: []
4444
, bundled: false
4545

46-
,css:
46+
, css:
4747
[ HE.link [ HA.rel "stylesheet", HA.type' "text/css", HA.href $ SP.bundlePath External Css ]
4848
]
49-
, content :
49+
, content:
5050
[ HE.div (HA.class' "header")
5151
[ HE.a [ HA.href $ routes.landing {}, HA.class' "logo" ] $
5252
HE.img
@@ -56,7 +56,7 @@ externalDefaultParameters =
5656
]
5757
]
5858
]
59-
, footer : [ externalFooter ]
59+
, footer: [ externalFooter ]
6060
}
6161

6262
template a. Parameters a Effect (Html a)

‎src/Server/WebSocket/Events.purs

+3-3
Original file line numberDiff line numberDiff line change
@@ -376,15 +376,15 @@ withConnections userAvailability handler =
376376
persistLastSeen WebSocketReaderLite Effect Unit
377377
persistLastSeen context = do
378378
allUsersAvailability ← ER.read context.allUsersAvailabilityRef
379-
now <- liftEffect EN.nowDateTime
379+
now liftEffect EN.nowDateTime
380380
when (not $ DH.isEmpty allUsersAvailability) do
381381
let run = R.runBaseAff' <<< RE.catch (const (pure unit)) <<< RR.runReader context <<< SID.upsertLastSeen <<< SJS.writeJSON <<< DA.catMaybes $ DH.toArrayBy (lastSeens now) allUsersAvailability
382382
EA.launchAff_ $ EA.catchError run logError
383383
where
384384
lastSeens now id avl = case avl.availability of
385-
OnlineJust { who: id, date: DT now }
385+
OnlineJust { who: id, date: DT now }
386386
LastSeen (DateTimeWrapper date) → Just { who: id, date: DT date }
387-
_ -> Nothing
387+
_ Nothing
388388

389389
logError = liftEffect <<< EC.logShow
390390

‎src/Shared/DateTime.purs

+3-3
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,6 @@ unformatIsoDate value = do
130130
integered ← DI.fromString raw
131131
DE.toEnum integered
132132

133-
unsafeNow DateTime
134-
unsafeNow = EU.unsafePerformEffect EN.nowDateTime
135-
136133
--same day
137134
-- hh:mm
138135
--yesterday
@@ -167,6 +164,7 @@ agoWithTime dateTime =
167164
daysDiff DateTime Int
168165
daysDiff dt = daysInYear now - daysInYear dateTime
169166
where
167+
unsafeNow = EU.unsafePerformEffect EN.nowDateTime
170168
localTime = SU.fromJust <<< DT.adjust offset
171169
daysInYear dtp = DI.floor $ DN.unwrap (DT.diff dtp firstDay Days)
172170
firstDay = DateTime (DD.canonicalDate (DD.year $ DT.date now) (SU.toEnum 1) (SU.toEnum 1)) zeroTime
@@ -176,6 +174,8 @@ daysDiff dt = daysInYear now - daysInYear dateTime
176174

177175
unsafeAdjustFromNow d. Duration d d DateTime
178176
unsafeAdjustFromNow duration = SU.fromJust $ DT.adjust duration unsafeNow
177+
where
178+
unsafeNow = EU.unsafePerformEffect EN.nowDateTime
179179

180180
localDateTimeWith (Number String) DateTime String
181181
localDateTimeWith formatter = formatter <<< DN.unwrap <<< DDI.unInstant <<< DDI.fromDateTime

‎src/Shared/Im/Types.purs

+4-4
Original file line numberDiff line numberDiff line change
@@ -432,13 +432,13 @@ instance Bounded ReportReason where
432432
instance BoundedEnum SuggestionsFrom where
433433
cardinality = Cardinality 1
434434
fromEnum = case _ of
435-
OnlineOnly -> 0
435+
OnlineOnly 0
436436
ThisWeek1
437437
LastTwoWeeks2
438438
LastMonth3
439439
All4
440440
toEnum = case _ of
441-
0 -> Just OnlineOnly
441+
0 Just OnlineOnly
442442
1Just ThisWeek
443443
2Just LastTwoWeeks
444444
3Just LastMonth
@@ -481,13 +481,13 @@ instance BoundedEnum ReportReason where
481481

482482
instance Enum SuggestionsFrom where
483483
succ = case _ of
484-
OnlineOnly -> Just ThisWeek
484+
OnlineOnly Just ThisWeek
485485
ThisWeekJust LastTwoWeeks
486486
LastTwoWeeksJust LastMonth
487487
LastMonthJust All
488488
AllNothing
489489
pred = case _ of
490-
OnlineOnly -> Nothing
490+
OnlineOnly Nothing
491491
ThisWeekJust OnlineOnly
492492
LastTwoWeeksJust ThisWeek
493493
LastMonthJust LastTwoWeeks

‎src/Shared/User.purs

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import Data.Time.Duration (Days(..))
2424
import Data.Time.Duration as DTD
2525
import Droplet.Language (class FromValue, class ToValue)
2626
import Droplet.Language as DL
27+
import Effect.Now as EN
28+
import Effect.Unsafe as EU
2729
import Foreign as F
2830
import Payload.Client.EncodeBody (class EncodeBody)
2931
import Payload.ContentType (class HasContentType, json)
@@ -280,4 +282,6 @@ temporaryAccountDuration ∷ Days
280282
temporaryAccountDuration = Days 3.5
281283

282284
temporaryUserExpiration DateTimeWrapper Days
283-
temporaryUserExpiration (DateTimeWrapper dt) = DDT.diff dt (SU.fromJust $ DDT.adjust (DTD.negateDuration temporaryAccountDuration) SDT.unsafeNow)
285+
temporaryUserExpiration (DateTimeWrapper dt) = DDT.diff dt (SU.fromJust $ DDT.adjust (DTD.negateDuration temporaryAccountDuration) unsafeNow)
286+
where
287+
unsafeNow = EU.unsafePerformEffect EN.nowDateTime

0 commit comments

Comments
 (0)
Please sign in to comment.