Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit f6c8e12

Browse files
committed
Generalize exception handling in the TipeeestreamConnector
Similar to 9c2cf49 but for Tipeeestream. Also eliminates copy&paste errors in the error messages 😉
1 parent 33297e2 commit f6c8e12

File tree

1 file changed

+64
-96
lines changed

1 file changed

+64
-96
lines changed

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/tipeeestream/impl/TipeeestreamEventInputImpl.scala

Lines changed: 64 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -16,127 +16,95 @@ import org.codeoverflow.chatoverflow.requirement.service.tipeeestream.Tipeeestre
1616
import org.codeoverflow.chatoverflow.requirement.service.tipeeestream.TipeeestreamConnector._
1717
import org.json.JSONException
1818

19+
import scala.reflect.ClassTag
20+
1921
@Impl(impl = classOf[TipeeestreamEventInput], connector = classOf[TipeeestreamConnector])
2022
class 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

Comments
 (0)