From 6201ddf096a6406adc95593999ea08e516b8c421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Tue, 24 Dec 2024 19:23:55 -0300 Subject: [PATCH] Worker details mostly done --- .../com/example/dcav2gui/WorkerInterface.java | 70 ++++++++++++++++++- .../ui/exchanges/BinanceFragment.java | 12 +++- .../dcav2gui/ui/exchanges/GateioFragment.java | 3 +- .../dcav2gui/ui/exchanges/KucoinFragment.java | 3 +- .../dcav2gui/ui/exchanges/OkxFragment.java | 3 +- .../dcav2gui/ui/home/HomeFragment.java | 12 ++-- 6 files changed, 91 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/dcav2gui/WorkerInterface.java b/app/src/main/java/com/example/dcav2gui/WorkerInterface.java index cdc1c10..6b7f198 100644 --- a/app/src/main/java/com/example/dcav2gui/WorkerInterface.java +++ b/app/src/main/java/com/example/dcav2gui/WorkerInterface.java @@ -2,6 +2,12 @@ package com.example.dcav2gui; import static com.example.dcav2gui.MainActivity.globalSettings; +import android.app.AlertDialog; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.widget.Toast; + import java.io.IOException; import com.google.gson.JsonElement; @@ -50,8 +56,7 @@ public class WorkerInterface { System.err.println("The parsed JSON response contains Error"); return null; } - - JsonObject value = jsonObject.get(pair).getAsJsonObject(); + JsonObject value = jsonObject.getAsJsonObject(); try { boolean isShort = value.has("is_short") && value.get("is_short").isJsonPrimitive() && value.get("is_short").getAsBoolean(); boolean isBoosted = value.has("is_boosted") && value.get("is_boosted").isJsonPrimitive() && value.get("is_boosted").getAsBoolean(); @@ -654,6 +659,67 @@ public class WorkerInterface { } } + public static void fetchWorkerStats(String exchange, String pair, Context context) { + new Thread(() -> { + try { + InstanceInterface.WorkerStatsData result = WorkerInterface.getWorkerDetails(exchange, pair, true); + new Handler(Looper.getMainLooper()).post(() -> WorkerInterface.showWorkerDetailsDialog(result, context)); + } catch (IOException e) { + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, "Failed to fetch exchange config", Toast.LENGTH_SHORT).show()); + } + }).start(); + } + + public static void showWorkerDetailsDialog(InstanceInterface.WorkerStatsData result, Context context) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(result.getPair() + " status"); + String isPausedExtraString = ""; + if (result.getIsPaused()) { + isPausedExtraString = "Pause reason: " + result.getPauseReason() + "\n"; + } + String oldLongExtraString = ""; + if (result.getIsShort() && result.getOldLongDictionary()!=null) { + double oldTarget = result.getOldLongDictionary().getTpAmount() * result.getOldLongDictionary().getTpPrice(); + double baseLeft = result.getOldLongDictionary().getTpAmount() - result.getBaseBought(); + double minSwitchPrice = (oldTarget - result.getQuoteSpent()) / baseLeft; + oldLongExtraString = "\nOLD LONG:\n" + + "Switch date: " + result.getOldLongDictionary().getDatetime() + "\n" + + "Amount of base in the deal: " + result.getOldLongDictionary().getTpAmount() + "\n" + + "Take profit price: " + result.getOldLongDictionary().getTpPrice() + "\n" + + "Switch price: " + minSwitchPrice + "\n" + + "Quote spent: " + result.getOldLongDictionary().getQuoteSpent() + "\n" + + "Fees paid in quote: " + result.getOldLongDictionary().getFeesPaidInQuote(); + } + + builder.setMessage("Price: " + result.getPrice() + "\n" + + "Take profit price: " + result.getTakeProfitPrice() + "\n" + + "Next safety order price: " + result.getTakeProfitPrice() + "\n" + + "Take profit order ID: " + result.getTpOrderId() + "\n" + + "Safety order ID: " + result.getSoOrderId() + "\n" + + "Short: " + result.getIsShort() + "\n" + + "Boosted: " + result.getIsBoosted() + "\n" + + "Paused: " + result.getIsPaused() + "\n" + isPausedExtraString + + "Autoswitch: " + result.getAutoSwitchEnabled() + "\n" + + "Last call: " + result.getStopWhenProfit() + "\n" + + "Order size: " + result.getOrderSize() + "\n" + + "Quote in deal: " + result.getQuoteSpent() + "\n" + + "Base in deal: " + result.getBaseBought() + "\n" + + "Safety orders sent: " + (result.getSoAmount()-1) + "\n" + + "Max safety orders: " + result.getNumberOfSafetyOrders() + "\n" + + "Start time: " + result.getStartTime() + "\n" + + "Start price: " + result.getStartPrice() + "\n" + + "Deal start time: " + result.getDealStartTime() + "\n" + + "Deal uptime: " + result.getDealUptime() + "\n" + + "Total uptime: " + result.getTotalUptime() + "\n" + + "Fees paid in base: " + result.getFeesPaidInBase() + "\n" + + "Fees paid in quote: " + result.getFeesPaidInQuote() + "\n" + + "Partial profit: " + result.getPartialProfit() + "\n" + + oldLongExtraString); + builder.setPositiveButton("OK", null); + builder.show(); + } + } diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java index 59ab0b4..54f8934 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/BinanceFragment.java @@ -1,13 +1,18 @@ // BinanceFragment.java package com.example.dcav2gui.ui.exchanges; +import android.app.AlertDialog; +import android.content.Context; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.PopupMenu; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -16,9 +21,11 @@ import androidx.lifecycle.ViewModelProvider; import com.example.dcav2gui.InstanceInterface; import com.example.dcav2gui.MainActivity; import com.example.dcav2gui.R; +import com.example.dcav2gui.WorkerInterface; import com.example.dcav2gui.databinding.FragmentBinanceBinding; import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; +import java.io.IOException; import java.util.List; @@ -66,7 +73,7 @@ public class BinanceFragment extends Fragment implements WorkerCardAdapter.OnCar @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.workerMenuDetails) { - System.err.println(pair + " Details... option clicked"); + WorkerInterface.fetchWorkerStats("binance",pair, getContext()); return true; } else if (item.getItemId() == R.id.addTrader) { System.err.println(pair + " Add trader option clicked"); @@ -117,4 +124,7 @@ public class BinanceFragment extends Fragment implements WorkerCardAdapter.OnCar popupMenu.show(); } } + + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java index 7eb10a9..a59e4d2 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/GateioFragment.java @@ -15,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import com.example.dcav2gui.InstanceInterface; import com.example.dcav2gui.MainActivity; import com.example.dcav2gui.R; +import com.example.dcav2gui.WorkerInterface; import com.example.dcav2gui.databinding.FragmentGateioBinding; import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; @@ -65,7 +66,7 @@ public class GateioFragment extends Fragment implements WorkerCardAdapter.OnCard @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.workerMenuDetails) { - System.err.println(pair + " Details... option clicked"); + WorkerInterface.fetchWorkerStats("gateio",pair, getContext()); return true; } else if (item.getItemId() == R.id.addTrader) { System.err.println(pair + " Add trader option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java index e0c028a..f16795a 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/KucoinFragment.java @@ -15,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import com.example.dcav2gui.InstanceInterface; import com.example.dcav2gui.MainActivity; import com.example.dcav2gui.R; +import com.example.dcav2gui.WorkerInterface; import com.example.dcav2gui.databinding.FragmentKucoinBinding; import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; @@ -65,7 +66,7 @@ public class KucoinFragment extends Fragment implements WorkerCardAdapter.OnCard @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.workerMenuDetails) { - System.err.println(pair + " Details... option clicked"); + WorkerInterface.fetchWorkerStats("kucoin",pair, getContext()); return true; } else if (item.getItemId() == R.id.addTrader) { System.err.println(pair + " Add trader option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java index adfee9f..2c1756a 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/exchanges/OkxFragment.java @@ -15,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import com.example.dcav2gui.InstanceInterface; import com.example.dcav2gui.MainActivity; import com.example.dcav2gui.R; +import com.example.dcav2gui.WorkerInterface; import com.example.dcav2gui.databinding.FragmentOkxBinding; import com.example.dcav2gui.ui.exchanges.adapters.WorkerCardAdapter; @@ -65,7 +66,7 @@ public class OkxFragment extends Fragment implements WorkerCardAdapter.OnCardLon @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.workerMenuDetails) { - System.err.println(pair + " Details... option clicked"); + WorkerInterface.fetchWorkerStats("okex",pair, getContext()); return true; } else if (item.getItemId() == R.id.addTrader) { System.err.println(pair + " Add trader option clicked"); diff --git a/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java b/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java index 9b1609b..010b70e 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java @@ -444,7 +444,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showInstanceDetailsDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch details", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch exchange details", Toast.LENGTH_SHORT).show()); } }).start(); } @@ -460,7 +460,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showPausedTradersDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch details", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch paused traders", Toast.LENGTH_SHORT).show()); } }).start(); } @@ -485,7 +485,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showServerTimeDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch missing pairs", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch server time", Toast.LENGTH_SHORT).show()); } }).start(); } @@ -497,7 +497,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showTraderTimeDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch missing pairs", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch trader time", Toast.LENGTH_SHORT).show()); } }).start(); } @@ -512,7 +512,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showInstanceConfigDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch details", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch exchange config", Toast.LENGTH_SHORT).show()); } }).start(); } @@ -525,7 +525,7 @@ public class HomeFragment extends Fragment { new Handler(Looper.getMainLooper()).post(() -> showLastTradesDetailsDialog(result)); } catch (IOException e) { e.printStackTrace(); - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch details", Toast.LENGTH_SHORT).show()); + new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(getContext(), "Failed to fetch last deals", Toast.LENGTH_SHORT).show()); } }).start(); }