foaf online

This commit is contained in:
gdlbo
2022-07-23 21:36:37 +03:00
parent 8122c92bbf
commit 8756cd1f20
9 changed files with 105 additions and 45 deletions
@@ -9,23 +9,26 @@ import static ru.vtosters.lite.utils.Proxy.getApi;
import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
import androidx.exifinterface.media.ExifInterface;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.network.Network;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import ru.vtosters.lite.net.Request;
import ru.vtosters.lite.utils.Preferences;
public class FoafBase{
private static final Pattern FOAF_REGEX = Pattern.compile("<ya:created dc:date=\"(.+?)\"\\/>");
@@ -34,16 +37,30 @@ public class FoafBase{
private static final OkHttpClient client = new OkHttpClient();
public static long getLastSeen(long origtime, int id) throws ParseException, IOException{
if (!Preferences.foaf()) return origtime;
var request = new okhttp3.Request.a()
.b(getLink(id))
.a(Headers.a("User-Agent", Network.l.c().a(), "Content-Type", "application/x-www-form-urlencoded; charset=utf-8")).a();
String response = null;
try {
response = client.a(request).execute().a().g();
} catch (IOException e) {
Log.e("FoafBase", e.getMessage());
}
Matcher matcher = FOAF_REGEX_LAST_SEEN.matcher(response);
Matcher matcher = FOAF_REGEX_LAST_SEEN.matcher(
client.a(
new okhttp3.Request.a().a(getLink(id)).b().a()
).execute().a().g());
if (!matcher.find()) {
return origtime;
}
return new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss", Locale.getDefault()).parse(matcher.group(1)).getTime() / 1000;
var tz = TimeZone.getDefault();
var smf = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss", Locale.getDefault());
smf.setTimeZone(tz);
return smf.parse(matcher.group(1)).getTime() / 1000;
}
private static String getLink(int i){
@@ -43,10 +43,10 @@ import okhttp3.Request;
import ru.vtosters.lite.utils.Globals;
import ru.vtosters.lite.utils.Newsfeed;
public class JsonInjectors {
public class JsonInjectors{
private static final OkHttpClient mClient = new OkHttpClient();
public static JSONObject profileButton(JSONObject orig) throws JSONException {
public static JSONObject profileButton(JSONObject orig) throws JSONException{
if (haveDonateButton()) return orig;
var pic = "https://sun1-18.userapi.com/NLd_rNpGuSaBnPV6O-j5mqCGZk8BK8drAMd2LQ/5R-DEF37PFs.png";
@@ -65,7 +65,7 @@ public class JsonInjectors {
+ text_color + decode("In0="));
}
public static JSONObject convBar(JSONObject orig) throws JSONException {
public static JSONObject convBar(JSONObject orig) throws JSONException{
var peerid = Objects.requireNonNull(orig.optJSONObject("peer")).optInt("id");
var pic = "https://image.pngaaa.com/641/326641-middle.png"; // can be null
@@ -107,7 +107,7 @@ public class JsonInjectors {
+ decode("fQ=="));
}
public static JSONObject menu(JSONObject orig) throws JSONException {
public static JSONObject menu(JSONObject orig) throws JSONException{
var Special = orig.optJSONArray("special");
var Main = orig.getJSONArray("main");
var Other = orig.optJSONArray("other");
@@ -119,7 +119,7 @@ public class JsonInjectors {
return orig;
}
public static JSONObject superapp(JSONObject json) throws JSONException {
public static JSONObject superapp(JSONObject json) throws JSONException{
var superApps = Globals.getPreferences().getString("superapp_items",
"menu,promo,miniapps,vkpay_slim,greeting,holiday,weather,sport,games,informer,food,event,music,vk_run").split(",");
if (superApps.length == 0) return json;
@@ -148,7 +148,7 @@ public class JsonInjectors {
return json.putOpt("items", newItems);
}
public static JSONObject musiclink(JSONObject json) {
public static JSONObject musiclink(JSONObject json){
var oldItems = json.optJSONArray("links");
if (oldItems != null) {
@@ -161,31 +161,32 @@ public class JsonInjectors {
return json;
}
public static JSONObject onlineinfo(JSONObject json) throws ParseException, IOException, JSONException {
public static JSONObject setOnlineInfo(JSONObject json) throws ParseException, IOException, JSONException{
var id = json.optInt("id");
var onlineinfo = json.optJSONObject("online_info");
var time = getLastSeen(0L, id);
if (time == 0L) {
return json;
if (time != 0L && onlineinfo != null && !onlineinfo.optBoolean("is_online")) {
json.remove("online_info");
var online_info = new JSONObject()
.put("visible", true)
.put("last_seen", time)
.put("is_online", false)
.put("app_id", 0)
.put("is_mobile", false);
var last_seen = new JSONObject()
.put("platform", 4)
.put("time", time);
json.put("last_seen", last_seen).put("online_info", online_info);
}
onlineinfo.put("last_seen", time);
onlineinfo.put("visible", true);
onlineinfo.put("app_id", 0);
onlineinfo.put("is_online", false);
onlineinfo.put("is_mobile", false);
onlineinfo.remove("status");
var last_seen = new JSONObject();
last_seen.put("time", time);
last_seen.put("platform", 0);
json.put("last_seen", last_seen);
return json;
}
public static JSONObject storiesads(JSONObject json, boolean isDeleteFix) throws JSONException {
public static JSONObject storiesads(JSONObject json, boolean isDeleteFix) throws JSONException{
if (!adsstories()) {
return json;
}
@@ -219,7 +220,7 @@ public class JsonInjectors {
return json;
}
private static void parseStoriesItem(JSONObject item) throws JSONException {
private static void parseStoriesItem(JSONObject item) throws JSONException{
var stories = item.optJSONArray("stories");
var newStories = new JSONArray();
@@ -239,7 +240,7 @@ public class JsonInjectors {
item.put("stories", newStories);
}
public static Boolean isAds(JSONObject list, String type) throws JSONException {
public static Boolean isAds(JSONObject list, String type) throws JSONException{
if (list == null || type == null || !ads()) return false;
if (list.has("ads")
@@ -265,7 +266,7 @@ public class JsonInjectors {
return false;
}
public static JSONArray newsfeedlist(JSONArray items) throws JSONException {
public static JSONArray newsfeedlist(JSONArray items) throws JSONException{
for (int j = 0; j < items.length(); j++) {
var list = items.optJSONObject(j);
var name = list.optString("id");
@@ -279,7 +280,7 @@ public class JsonInjectors {
return items;
}
public static JSONArray newsfeedadtest(JSONArray items) throws JSONException {
public static JSONArray newsfeedadtest(JSONArray items) throws JSONException{
if (!getBoolValue("newadblock", true)) return items;
var newItems = new JSONArray();
@@ -349,7 +350,7 @@ public class JsonInjectors {
return newItems;
}
public static JSONObject music(JSONObject json) throws JSONException {
public static JSONObject music(JSONObject json) throws JSONException{
var catalog = json.optJSONObject("catalog");
JSONArray oldItems = null;
@@ -417,7 +418,7 @@ public class JsonInjectors {
return json;
}
public static JSONObject fetchCatalogId(String section) {
public static JSONObject fetchCatalogId(String section){
if (section == null) return null;
var request = new Request.a()
@@ -443,7 +444,7 @@ public class JsonInjectors {
return null;
}
public static JSONObject friends(JSONObject json) throws JSONException {
public static JSONObject friends(JSONObject json) throws JSONException{
JSONObject catalog = json;
boolean sectionexecute = true;
boolean hasBirthday = false;
@@ -510,7 +511,7 @@ public class JsonInjectors {
}
public static boolean haveDonateButton() {
public static boolean haveDonateButton(){
int randomshower = new Random().nextInt(6);
return hasVerification() || randomshower != 1;
@@ -1,6 +1,8 @@
package ru.vtosters.lite.hooks;
import static ru.vtosters.lite.hooks.JsonInjectors.setOnlineInfo;
import static ru.vtosters.lite.net.Request.makeRequest;
import static ru.vtosters.lite.utils.Globals.getString;
import static ru.vtosters.lite.utils.Globals.getUserId;
import static ru.vtosters.lite.utils.Globals.getUserToken;
import static ru.vtosters.lite.utils.Globals.sendToast;
import static ru.vtosters.lite.utils.Preferences.dev;
@@ -8,10 +10,15 @@ import static ru.vtosters.lite.utils.Preferences.getBoolValue;
import static ru.vtosters.lite.utils.Preferences.getPrefsFromFile;
import static ru.vtosters.lite.utils.Proxy.getApi;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.text.ParseException;
public class OnlineFormatterHook{
private static String AppName;
@@ -159,5 +166,16 @@ public class OnlineFormatterHook{
return getString("custom_online") + " " + appname;
}
public static JSONObject onlineHook(JSONObject json, boolean isGlobalHook) throws ParseException, IOException, JSONException{
if (!getBoolValue("onlinefix", false)) return json;
if (isGlobalHook && !getBoolValue("globalUsersOnline", false)) {
return json;
}
setOnlineInfo(json);
return json;
}
}
@@ -158,8 +158,8 @@ public class Preferences{
return getBoolValue("calls", false);
}
public static boolean convUsersOnline(){
return getBoolValue("convUsersOnline", false);
public static boolean globalUsersOnline(){
return getBoolValue("globalUsersOnline", false);
}
public static boolean dev(){
+12
View File
@@ -91,6 +91,18 @@
android:key="listen_v"
android:title="Отключить статус прослушивания" />
</PreferenceCategory>
<PreferenceCategory android:title="Скрытый онлайн VK Me">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="onlinefix"
android:summary="Показывать онлайн пользователей в профилях если у вас включен режим скрытия онлайна из VK Messenger"
android:title="Обходить онлайн" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="false"
android:key="globalUsersOnline"
android:summary="Может вызывать долгие загрузки разделов и большое потребление трафика \n\nНе рекомендуется включать данную функцию"
android:title="Глобальный обход онлайна" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/privacy_vtl">
<com.vtosters.lite.ui.MaterialSwitchPreference
android:defaultValue="true"
-6
View File
@@ -51,11 +51,5 @@
android:entryValues="@array/msgcount"
android:key="msgcount"
android:title="@string/messages_other_download_first" />
<com.vtosters.lite.ui.MaterialSwitchPreference
android:enabled="false"
android:defaultValue="false"
android:key="convUsersOnline"
android:summary="@string/convUsersOnlinesum"
android:title="@string/convUsersOnline" />
</PreferenceCategory>
</PreferenceScreen>
@@ -2928,6 +2928,12 @@
.method public static d(Lorg/json/JSONObject;)Lcom/vk/dto/user/OnlineInfo;
.locals 12
const v2, 0x1
invoke-static {p0, v2}, Lru/vtosters/lite/hooks/OnlineFormatterHook;->onlineHook(Lorg/json/JSONObject;Z)Lorg/json/JSONObject;
move-result-object p0
.line 1
sget-object v0, Lcom/vk/dto/user/VisibleStatus;->e:Lcom/vk/dto/user/VisibleStatus;
@@ -666,6 +666,12 @@
.method private final d(Lorg/json/JSONObject;)Lcom/vk/dto/user/OnlineInfo;
.locals 7
const v2, 0x1
invoke-static {p1, v2}, Lru/vtosters/lite/hooks/OnlineFormatterHook;->onlineHook(Lorg/json/JSONObject;Z)Lorg/json/JSONObject;
move-result-object p1
const-string v0, "online_info"
.line 1
@@ -133,6 +133,12 @@
move-object/from16 v1, p2
const v2, 0x0
invoke-static {v1, v2}, Lru/vtosters/lite/hooks/OnlineFormatterHook;->onlineHook(Lorg/json/JSONObject;Z)Lorg/json/JSONObject;
move-result-object v1
.line 2
iget-object v2, v0, Lcom/vtosters/lite/api/ExtendedUserProfile;->a:Lcom/vk/dto/user/UserProfile;