@@ -16,127 +16,95 @@ import org.codeoverflow.chatoverflow.requirement.service.tipeeestream.Tipeeestre
1616import org .codeoverflow .chatoverflow .requirement .service .tipeeestream .TipeeestreamConnector ._
1717import org .json .JSONException
1818
19+ import scala .reflect .ClassTag
20+
1921@ Impl (impl = classOf [TipeeestreamEventInput ], connector = classOf [TipeeestreamConnector ])
2022class TipeeestreamEventInputImpl extends EventInputImpl [TipeeestreamEvent , TipeeestreamConnector ] with TipeeestreamEventInput with WithLogger {
2123 private val DATE_FORMATTER = new DateTimeFormatterBuilder ()
2224 .parseCaseInsensitive().append(DateTimeFormatter .ISO_LOCAL_DATE_TIME ).appendOffset(" +HHMM" , " Z" ).toFormatter
2325
2426 override def start (): Boolean = {
25- sourceConnector.get.registerEventHandler(onFollow _ )
26- sourceConnector.get.registerEventHandler(onSubscription _ )
27- sourceConnector.get.registerEventHandler(onDonation _ )
28- sourceConnector.get.registerEventHandler(onCheer _ )
29- sourceConnector.get.registerEventHandler(onRaid _ )
27+ sourceConnector.get.registerEventHandler(handleExceptions( onFollow) )
28+ sourceConnector.get.registerEventHandler(handleExceptions( onSubscription) )
29+ sourceConnector.get.registerEventHandler(handleExceptions( onDonation) )
30+ sourceConnector.get.registerEventHandler(handleExceptions( onCheer) )
31+ sourceConnector.get.registerEventHandler(handleExceptions( onRaid) )
3032 true
3133 }
3234
33- private def onDonation ( eventJson : DonationEventJSON ): Unit = {
35+ private def handleExceptions [ T : ClassTag ]( handler : T => Unit ): T => Unit = event => {
3436 try {
35- val event = eventJson.json
36- val parameter = event.getJSONObject(" parameters" )
37- val user = new User (parameter.getString(" username" ))
38- val message = parameter.optString(" formattedMessage" )
39- val amount = parameter.getDouble(" amount" ).toFloat
40- val currency = if (parameter.has(" currency" )) Currency .getInstance(parameter.getString(" currency" ))
41- else Currency .getInstance(Locale .getDefault)
42- val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
43- val donation = new TipeeestreamDonation (user, amount, currency, time, message)
44- call(new TipeeestreamDonationEvent (donation))
37+ handler(event)
4538 } catch {
46- case e : JSONException =>
47- logger warn " Error while parsing donation json:"
48- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
49- case e : IllegalArgumentException =>
50- logger warn " Error while parsing donation json:"
39+ case e@ (_ : JSONException | _ : IllegalArgumentException ) =>
40+ val jsonClass = implicitly[ClassTag [T ]].runtimeClass
41+ logger warn s " Error while parsing follow json of type ${jsonClass.getSimpleName}: "
5142 logger warn s " ${e.getClass.getName} - ${e.getMessage}"
5243 }
5344 }
5445
46+ private def onDonation (eventJson : DonationEventJSON ): Unit = {
47+ val event = eventJson.json
48+ val parameter = event.getJSONObject(" parameters" )
49+ val user = new User (parameter.getString(" username" ))
50+ val message = parameter.optString(" formattedMessage" )
51+ val amount = parameter.getDouble(" amount" ).toFloat
52+ val currency = if (parameter.has(" currency" )) Currency .getInstance(parameter.getString(" currency" ))
53+ else Currency .getInstance(Locale .getDefault)
54+ val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
55+ val donation = new TipeeestreamDonation (user, amount, currency, time, message)
56+ call(new TipeeestreamDonationEvent (donation))
57+ }
58+
5559 private def onSubscription (eventJson : SubscriptionEventJSON ): Unit = {
56- try {
57- val event = eventJson.json
58- val parameter = event.getJSONObject(" parameters" )
59- val user = new User (parameter.getString(" username" ))
60- val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
61- val resub = parameter.optInt(" resub" , 0 )
62- val provider = TipeeestreamProvider .parse(event.optString(" origin" ))
63- val gifted = parameter.has(" gifter" )
64- val donor = if (gifted) new User (parameter.getString(" gifter" )) else null
65- val tier = SubscriptionTier .parse({
66- if (parameter.optInt(" twitch_prime" ) == 1 )
67- 0
68- else
69- parameter.optInt(" plan" , 1000 ) / 1000
70- })
71- val sub = new TipeeestreamSubscription (user, time, resub, tier, gifted, donor, provider)
72- call(new TipeeestreamSubscriptionEvent (sub))
73- } catch {
74- case e : JSONException =>
75- logger warn " Error while parsing subscription json:"
76- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
77- case e : IllegalArgumentException =>
78- logger warn " Error while parsing subscription json:"
79- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
80- }
60+ val event = eventJson.json
61+ val parameter = event.getJSONObject(" parameters" )
62+ val user = new User (parameter.getString(" username" ))
63+ val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
64+ val resub = parameter.optInt(" resub" , 0 )
65+ val provider = TipeeestreamProvider .parse(event.optString(" origin" ))
66+ val gifted = parameter.has(" gifter" )
67+ val donor = if (gifted) new User (parameter.getString(" gifter" )) else null
68+ val tier = SubscriptionTier .parse({
69+ if (parameter.optInt(" twitch_prime" ) == 1 )
70+ 0
71+ else
72+ parameter.optInt(" plan" , 1000 ) / 1000
73+ })
74+ val sub = new TipeeestreamSubscription (user, time, resub, tier, gifted, donor, provider)
75+ call(new TipeeestreamSubscriptionEvent (sub))
8176 }
8277
8378 private def onFollow (eventJson : FollowEventJSON ): Unit = {
84- try {
85- val event = eventJson.json
86- val parameter = event.getJSONObject(" parameters" )
87- val user = new User (parameter.getString(" username" ))
88- val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
89- val provider = TipeeestreamProvider .parse(event.optString(" origin" ))
90- val follow = new TipeeestreamFollow (user, time, provider)
91- call(new TipeeestreamFollowEvent (follow))
92- } catch {
93- case e : JSONException =>
94- logger warn " Error while parsing follow json:"
95- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
96- case e : IllegalArgumentException =>
97- logger warn " Error while parsing follow json:"
98- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
99- }
79+ val event = eventJson.json
80+ val parameter = event.getJSONObject(" parameters" )
81+ val user = new User (parameter.getString(" username" ))
82+ val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
83+ val provider = TipeeestreamProvider .parse(event.optString(" origin" ))
84+ val follow = new TipeeestreamFollow (user, time, provider)
85+ call(new TipeeestreamFollowEvent (follow))
10086 }
10187
10288 private def onCheer (eventJson : CheerEventJSON ): Unit = {
103- try {
104- val event = eventJson.json
105- val parameter = event.getJSONObject(" parameters" )
106- val user = new User (parameter.getString(" username" ))
107- val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
108- val amount = event.getInt(" formattedAmount" )
109- val message = parameter.getString(" formattedMessage" )
110- val cheer = new TipeeestreamCheer (user, amount, message, time)
111- call(new TipeeestreamCheerEvent (cheer))
112- } catch {
113- case e : JSONException =>
114- logger warn " Error while parsing cheer json:"
115- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
116- case e : IllegalArgumentException =>
117- logger warn " Error while parsing cheer json:"
118- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
119- }
89+ val event = eventJson.json
90+ val parameter = event.getJSONObject(" parameters" )
91+ val user = new User (parameter.getString(" username" ))
92+ val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
93+ val amount = event.getInt(" formattedAmount" )
94+ val message = parameter.getString(" formattedMessage" )
95+ val cheer = new TipeeestreamCheer (user, amount, message, time)
96+ call(new TipeeestreamCheerEvent (cheer))
12097 }
12198
12299 private def onRaid (eventJson : RaidEventJSON ): Unit = {
123- try {
124- val event = eventJson.json
125- val parameter = event.getJSONObject(" parameters" )
126- val user = new User (parameter.getString(" username" ))
127- val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
128- val message = parameter.getString(" formattedMessage" )
129- val viewers = event.getInt(" formattedAmount" )
130- val raid = new TipeeestreamRaid (user, message, viewers, time)
131- call(new TipeeestreamRaidEvent (raid))
132- } catch {
133- case e : JSONException =>
134- logger warn " Error while parsing raid json:"
135- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
136- case e : IllegalArgumentException =>
137- logger warn " Error while parsing raid json:"
138- logger warn s " ${e.getClass.getName} - ${e.getMessage}"
139- }
100+ val event = eventJson.json
101+ val parameter = event.getJSONObject(" parameters" )
102+ val user = new User (parameter.getString(" username" ))
103+ val time = OffsetDateTime .parse(event.getString(" created_at" ), DATE_FORMATTER )
104+ val message = parameter.getString(" formattedMessage" )
105+ val viewers = event.getInt(" formattedAmount" )
106+ val raid = new TipeeestreamRaid (user, message, viewers, time)
107+ call(new TipeeestreamRaidEvent (raid))
140108 }
141109
142110
0 commit comments