Skip to content

Commit a1a7dac

Browse files
committed
fallback mode
1 parent d39ee27 commit a1a7dac

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

src/main/resources/reference.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ webm-tv {
77

88
sosach {
99
host = "2ch.hk"
10+
fallback-host = "m2-ch.ru"
1011
boards = [
1112
b
1213
]

src/main/scala/com/karasiq/webmtv/app/Main.scala

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,26 @@ object Main extends App {
2525

2626
val config = ConfigFactory.load().getConfig("webm-tv")
2727
val boardApi = new BoardApi {
28-
val jsonApi = new Json2chBoardApi(config.getString("sosach.host"))
29-
val htmlApi = new M2chBoardApi() // Fallback
28+
private val primary = new Json2chBoardApi(config.getString("sosach.host"))
29+
private val fallback = config.getString("sosach.fallback-host") match {
30+
case ""
31+
None
32+
33+
case "m2-ch.ru"
34+
Some(new M2chBoardApi())
35+
36+
case other
37+
Some(new Json2chBoardApi(other))
38+
}
3039

3140
def board(name: String) = {
32-
jsonApi.board(name).recoverWithRetries(1, { case _ htmlApi.board(name) })
41+
primary.board(name)
42+
.recoverWithRetries(1, { case _ fallback.getOrElse(primary).board(name) })
3343
}
3444

3545
def thread(board: String, id: Long) = {
36-
jsonApi.thread(board, id).recoverWithRetries(1, { case _ htmlApi.thread(board, id) })
46+
primary.thread(board, id)
47+
.recoverWithRetries(1, { case _ fallback.getOrElse(primary).thread(board, id) })
3748
}
3849
}
3950
val store = WebmFileStore

src/main/scala/com/karasiq/webmtv/sosach/Json2chBoardApi.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class Json2chBoardApi(host: String = "2ch.hk")(implicit as: ActorSystem, am: Act
4242
private def retrieveJson[T: Reader](url: String) = {
4343
Source
4444
.fromFuture(http.singleRequest(HttpRequest(uri = url, headers = List(Accept(MediaRange(MediaTypes.`application/json`))))))
45+
.log("2ch-json-api")
46+
.filter(_.status.isSuccess())
4547
.flatMapConcat(_.entity.dataBytes)
4648
.fold(ByteString.empty)(_ ++ _)
4749
.map(bs read[T](bs.utf8String))

src/main/scala/com/karasiq/webmtv/sosach/M2chBoardApi.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class M2chBoardApi(implicit as: ActorSystem, am: ActorMaterializer) extends Boar
1919
private def htmlPage(url: String): Source[Document, NotUsed] = {
2020
Source
2121
.fromFuture(http.singleRequest(HttpRequest(uri = url)))
22+
.log("m2ch-html-api")
23+
.filter(_.status.isSuccess())
2224
.flatMapConcat(_.entity.dataBytes)
2325
.fold(ByteString.empty)(_ ++ _)
2426
.map(bs Jsoup.parse(bs.utf8String, url))

0 commit comments

Comments
 (0)