aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-10-25 12:41:05 -0400
committerGitHub <noreply@github.com>2017-10-25 12:41:05 -0400
commite04487f5b1a4c6a5999db8d9746a07919ae9a333 (patch)
tree4a60e9369dbb957c0f47f6052510433bc9d37e01
parent2d6b790643078b9b5ff2869c74dc941212087864 (diff)
downloadfrost-e04487f5b1a4c6a5999db8d9746a07919ae9a333.tar.gz
frost-e04487f5b1a4c6a5999db8d9746a07919ae9a333.tar.bz2
frost-e04487f5b1a4c6a5999db8d9746a07919ae9a333.zip
Update search logic (#444)
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt7
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt8
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/facebook/FbUrlFormatter.kt3
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/parsers/MessageParser.kt5
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/parsers/SearchParser.kt13
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt4
-rw-r--r--app/src/test/kotlin/com/pitchedapps/frost/parsers/MessageParserTest.kt4
7 files changed, 24 insertions, 20 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
index b6232272..a346e809 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
@@ -56,8 +56,8 @@ import com.pitchedapps.frost.fragments.WebFragment
import com.pitchedapps.frost.parsers.SearchParser
import com.pitchedapps.frost.utils.*
import com.pitchedapps.frost.utils.iab.FrostBilling
-import com.pitchedapps.frost.utils.iab.IabMain
import com.pitchedapps.frost.utils.iab.IS_FROST_PRO
+import com.pitchedapps.frost.utils.iab.IabMain
import com.pitchedapps.frost.views.BadgedIcon
import com.pitchedapps.frost.views.FrostVideoViewer
import com.pitchedapps.frost.views.FrostViewPager
@@ -355,13 +355,14 @@ class MainActivity : BaseActivity(),
doAsync {
val data = SearchParser.query(query) ?: return@doAsync
val items = data.map { SearchItem(it.href, it.title, it.description) }.toMutableList()
- items.add(SearchItem("${FbItem.SEARCH.url}?q=$query", string(R.string.show_all_results), iicon = null))
+ if (items.isNotEmpty())
+ items.add(SearchItem("${FbItem._SEARCH.url}?q=$query", string(R.string.show_all_results), iicon = null))
searchViewCache.put(query, items)
uiThread { searchView?.results = items }
}
}
textDebounceInterval = 300
- searchCallback = { query, _ -> launchWebOverlay("${FbItem.SEARCH.url}/?q=$query"); true }
+ searchCallback = { query, _ -> launchWebOverlay("${FbItem._SEARCH.url}/?q=$query"); true }
closeListener = { _ -> searchViewCache.clear() }
foregroundColor = Prefs.textColor
backgroundColor = Prefs.bgColor.withMinAlpha(200)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
index a4736091..2f478d44 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbItem.kt
@@ -29,11 +29,17 @@ enum class FbItem(@StringRes val titleId: Int, val icon: IIcon, relativeUrl: Str
PHOTOS(R.string.photos, GoogleMaterial.Icon.gmd_photo, "me/photos"),
PROFILE(R.string.profile, CommunityMaterial.Icon.cmd_account, "me"),
SAVED(R.string.saved, GoogleMaterial.Icon.gmd_bookmark, "saved"),
- SEARCH(R.string.search_menu_title, GoogleMaterial.Icon.gmd_search, "search"),
+ _SEARCH(R.string.search_menu_title, GoogleMaterial.Icon.gmd_search, "search/top"),
SETTINGS(R.string.settings, GoogleMaterial.Icon.gmd_settings, "settings"),
;
val url = "$FB_URL_BASE$relativeUrl"
}
+inline val fbSearch
+ get() = fbSearch()
+
+fun fbSearch(query: String = "a") = "${FB_SEARCH}$query"
+
+private const val FB_SEARCH = "${FB_URL_BASE}search/top/?q="
fun defaultTabs(): List<FbItem> = listOf(FbItem.FEED, FbItem.MESSAGES, FbItem.NOTIFICATIONS, FbItem.MENU)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbUrlFormatter.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbUrlFormatter.kt
index 3298ff15..4db75fff 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbUrlFormatter.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbUrlFormatter.kt
@@ -12,9 +12,6 @@ import java.nio.charset.StandardCharsets
inline val String.formattedFbUrl: String
get() = FbUrlFormatter(this).toString()
-inline val String.formattedFbUrlCss: String
- get() = FbUrlFormatter(this).toString()
-
class FbUrlFormatter(url: String) {
private val queries = mutableMapOf<String, String>()
private val cleaned: String
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/parsers/MessageParser.kt b/app/src/main/kotlin/com/pitchedapps/frost/parsers/MessageParser.kt
index 7e6ef4bb..9430407d 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/parsers/MessageParser.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/parsers/MessageParser.kt
@@ -1,7 +1,6 @@
package com.pitchedapps.frost.parsers
import com.pitchedapps.frost.facebook.formattedFbUrl
-import com.pitchedapps.frost.facebook.formattedFbUrlCss
import com.pitchedapps.frost.utils.L
import org.apache.commons.text.StringEscapeUtils
import org.jsoup.Jsoup
@@ -65,10 +64,10 @@ private class MessageParserImpl : FrostParserBase<Triple<List<FrostThread>, Fros
L.v("url", a.attr("href"))
return FrostThread(
id = id.toInt(),
- img = pUrl.formattedFbUrlCss,
+ img = pUrl.formattedFbUrl,
title = a.text(),
time = epoch,
- url = a.attr("href").formattedFbUrlCss,
+ url = a.attr("href").formattedFbUrl,
unread = !element.hasClass("acw"),
content = content
)
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/parsers/SearchParser.kt b/app/src/main/kotlin/com/pitchedapps/frost/parsers/SearchParser.kt
index 37c09299..908bb153 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/parsers/SearchParser.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/parsers/SearchParser.kt
@@ -2,7 +2,7 @@ package com.pitchedapps.frost.parsers
import ca.allanwang.kau.utils.withMaxLength
import com.pitchedapps.frost.facebook.FbItem
-import com.pitchedapps.frost.facebook.formattedFbUrlCss
+import com.pitchedapps.frost.facebook.formattedFbUrl
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.utils.frostJsoup
import org.jsoup.Jsoup
@@ -14,7 +14,7 @@ import org.jsoup.nodes.Element
*/
object SearchParser : FrostParser<List<FrostSearch>> by SearchParserImpl() {
fun query(input: String): List<FrostSearch>? {
- val url = "${FbItem.SEARCH.url}?q=$input"
+ val url = "${FbItem._SEARCH.url}?q=${if (input.isNotBlank()) input else "a"}"
L.i(null, "Search Query $url")
return parse(frostJsoup(url))
}
@@ -51,10 +51,10 @@ private class SearchParserImpl : FrostParserBase<List<FrostSearch>>() {
*
* Removed [data-store*=result_id]
*/
- return container.select("a.touchable.primary[href]").filter(Element::hasText).mapNotNull {
- FrostSearch(it.attr("href").formattedFbUrlCss,
- it.select(".title").first()?.text() ?: "",
- it.select(".subtitle").first()?.ownText())
+ return container.select("a.touchable[href]").filter(Element::hasText).map {
+ FrostSearch(it.attr("href").formattedFbUrl,
+ it.select("._uoi").first()?.text() ?: "",
+ it.select("._1tcc").first()?.text())
}.filter { it.title.isNotBlank() }
}
@@ -62,6 +62,7 @@ private class SearchParserImpl : FrostParserBase<List<FrostSearch>>() {
override fun textToDoc(text: String): Document? = Jsoup.parse(text)
override fun debugImpl(data: List<FrostSearch>, result: MutableList<String>) {
+ result.add("Has size ${data.size}")
result.addAll(data.map(FrostSearch::toString))
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
index a4f4388f..7001275d 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Debug.kt
@@ -48,8 +48,8 @@ fun SettingsActivity.getDebugPrefs(): KPrefAdapterBuilder.() -> Unit = {
private enum class Debugger(val data: FbItem, val injector: InjectorContract?, vararg query: String) {
MENU(FbItem.MENU, JsAssets.MENU_DEBUG, "#viewport"), //todo modify menu js for debugging
- NOTIFICATIONS(FbItem.NOTIFICATIONS, null, "#notifications_list"),
- SEARCH(FbItem.SEARCH, JsActions.FETCH_BODY);
+ NOTIFICATIONS(FbItem.NOTIFICATIONS, null, "#notifications_list");
+// SEARCH(FbItem.SEARCH, JsActions.FETCH_BODY);
val query = if (query.isNotEmpty()) arrayOf(*query, "#root", "main", "body") else emptyArray()
diff --git a/app/src/test/kotlin/com/pitchedapps/frost/parsers/MessageParserTest.kt b/app/src/test/kotlin/com/pitchedapps/frost/parsers/MessageParserTest.kt
index 91f765cc..61c69c40 100644
--- a/app/src/test/kotlin/com/pitchedapps/frost/parsers/MessageParserTest.kt
+++ b/app/src/test/kotlin/com/pitchedapps/frost/parsers/MessageParserTest.kt
@@ -1,6 +1,6 @@
package com.pitchedapps.frost.parsers
-import com.pitchedapps.frost.facebook.formattedFbUrlCss
+import com.pitchedapps.frost.facebook.formattedFbUrl
import org.junit.Test
import kotlin.test.assertEquals
@@ -21,7 +21,7 @@ class MessageParserTest {
@Test
fun parseImage() {
var input = "https\\3a //scontent.fyhu1-1.fna.fbcdn.net/v/t1.0-1/cp0/e15/q65/p100x100/12994387_243040309382307_4586627375882013710_n.jpg?efg\\3d eyJpIjoidCJ9\\26 oh\\3d b9ae0d7a1298989fe24873e2ee4054b6\\26 oe\\3d 5A3A7FE1"
- input = input.formattedFbUrlCss
+ input = input.formattedFbUrl
println(input)
}
} \ No newline at end of file