diff --git a/app/controllers/Main.scala b/app/controllers/Main.scala
index 841c9b0eca..e32ec03ecd 100644
--- a/app/controllers/Main.scala
+++ b/app/controllers/Main.scala
@@ -72,7 +72,7 @@ object Main extends LilaController {
def mobile = Open { implicit ctx =>
OptionOk(Prismic oneShotBookmark "mobile-apk") {
- case (doc, resolver) => html.site.mobile(doc, resolver)
+ case (doc, resolver) => html.mobile.home(doc, resolver)
}
}
}
diff --git a/app/views/lobby/home.scala.html b/app/views/lobby/home.scala.html
index d11a3de5ea..338eee94b4 100644
--- a/app/views/lobby/home.scala.html
+++ b/app/views/lobby/home.scala.html
@@ -32,6 +32,13 @@
@trans.nbConnectedPlayers("?")
@trans.nbGamesInPlay(s"${nbRounds}")
+@if(lila.common.HTTPRequest.isAndroid(ctx.req)) {
+@mobile.googlePlayButton()
+} else {
+@if(lila.common.HTTPRequest.isIOS(ctx.req)) {
+@mobile.appleStoreButton()
+}
+}
}
@moreJs = {
diff --git a/app/views/mobile/appleStoreButton.scala.html b/app/views/mobile/appleStoreButton.scala.html
new file mode 100644
index 0000000000..648a1a7759
--- /dev/null
+++ b/app/views/mobile/appleStoreButton.scala.html
@@ -0,0 +1,6 @@
+
+
+
diff --git a/app/views/mobile/googlePlayButton.scala.html b/app/views/mobile/googlePlayButton.scala.html
new file mode 100644
index 0000000000..ea46874978
--- /dev/null
+++ b/app/views/mobile/googlePlayButton.scala.html
@@ -0,0 +1,6 @@
+
+
+
diff --git a/app/views/site/mobile.scala.html b/app/views/mobile/home.scala.html
similarity index 77%
rename from app/views/site/mobile.scala.html
rename to app/views/mobile/home.scala.html
index 06c8876aad..c18362f8a1 100644
--- a/app/views/site/mobile.scala.html
+++ b/app/views/mobile/home.scala.html
@@ -10,18 +10,8 @@ moreCss = cssTag("mobile.css")) {
Play chess everywhere
-
-
-
-
-
-
+ @googlePlayButton()
+ @appleStoreButton()
@Html(~apkDoc.getHtml("doc.content", resolver))
diff --git a/modules/common/src/main/HTTPRequest.scala b/modules/common/src/main/HTTPRequest.scala
index 5972562716..d642ed5b25 100644
--- a/modules/common/src/main/HTTPRequest.scala
+++ b/modules/common/src/main/HTTPRequest.scala
@@ -21,18 +21,24 @@ object HTTPRequest {
def userAgent(req: RequestHeader): Option[String] = req.headers get HeaderNames.USER_AGENT
+ val isAndroid = UaMatcher("""(?i).*android.+mobile.*""".r)
+ val isIOS = UaMatcher("""(?i).*(iphone|ipad|ipod).*""".r)
+
def referer(req: RequestHeader): Option[String] = req.headers get HeaderNames.REFERER
def sid(req: RequestHeader): Option[String] = req.session get "sid"
- private val isBotPattern = {
- """(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub\.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum\.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|purebot|lingueebot|yandex\.com/bots|""" +
+ val isBot = UaMatcher {
+ ("""(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub\.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum\.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|purebot|lingueebot|yandex\.com/bots|""" +
"""voyager|cyberpatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|ezooms|dotbot|mail\.ru|discobot|zombie\.js|heritrix|findthatfile|europarchive\.org|nerdbynature\.bot|sistrixcrawler|ahrefsbot|aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|yeti|retrevopageanalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|duckduckbot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnamgnamspider|web-archive-net\.com\.bot|backlinkcrawler|""" +
- """coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler\.com|siteexplorer\.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e\.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot|facebookexternalhit).*"""
- }.r.pattern
+ """coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler\.com|siteexplorer\.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e\.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot|facebookexternalhit).*""").r
+ }
- def isBot(req: RequestHeader): Boolean = userAgent(req) ?? { ua =>
- isBotPattern.matcher(ua).matches
+ private def UaMatcher(regex: scala.util.matching.Regex): RequestHeader => Boolean = {
+ val pattern = regex.pattern
+ req => {
+ userAgent(req) ?? { ua => pattern.matcher(ua).matches }
+ }
}
def isHuman(req: RequestHeader) = !isBot(req)