diff --git a/lnbits/extensions/gerty/crud.py b/lnbits/extensions/gerty/crud.py
index 385282ed..f56faad3 100644
--- a/lnbits/extensions/gerty/crud.py
+++ b/lnbits/extensions/gerty/crud.py
@@ -20,7 +20,7 @@ async def create_gerty(wallet_id: str, data: Gerty) -> Gerty:
data.lnbits_wallets,
data.sats_quote,
data.exchange,
- data.onchain_sats,
+ data.onchain_stats,
data.ln_stats,
),
)
@@ -28,7 +28,13 @@ async def create_gerty(wallet_id: str, data: Gerty) -> Gerty:
gerty = await get_gerty(gerty_id)
assert gerty, "Newly created gerty couldn't be retrieved"
return gerty
-
+
+async def update_gerty(gerty_id: str, **kwargs) -> Gerty:
+ q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()])
+ await db.execute(
+ f"UPDATE gerty.gertys SET {q} WHERE id = ?", (*kwargs.values(), gerty_id)
+ )
+ return await get_gerty(gerty_id)
async def get_gerty(gerty_id: str) -> Optional[Gerty]:
row = await db.fetchone("SELECT * FROM gerty.gertys WHERE id = ?", (gerty_id,))
diff --git a/lnbits/extensions/gerty/migrations.py b/lnbits/extensions/gerty/migrations.py
index 09af3f0e..d3bba79c 100644
--- a/lnbits/extensions/gerty/migrations.py
+++ b/lnbits/extensions/gerty/migrations.py
@@ -9,6 +9,7 @@ async def m001_initial(db):
name TEXT NOT NULL,
wallet TEXT NOT NULL,
lnbits_wallets TEXT,
+ mempool_endpoint TEXT,
sats_quote BOOL,
exchange TEXT,
onchain_stats BOOL,
diff --git a/lnbits/extensions/gerty/models.py b/lnbits/extensions/gerty/models.py
index 690614ee..b8eee6b5 100644
--- a/lnbits/extensions/gerty/models.py
+++ b/lnbits/extensions/gerty/models.py
@@ -11,9 +11,10 @@ class Gerty(BaseModel):
name: str
wallet: str
lnbits_wallets: str = Query(None) # Wallets to keep an eye on, {"wallet-id": "wallet-read-key, etc"}
+ mempool_endpoint: str = Query("https://mempool.space") # Mempool endpoint to use
sats_quote: bool = Query(False) # Fetch Satoshi quotes
exchange: str = Query(None) # BTC <-> Fiat exchange rate to pull ie "USD", in 0.0001 and sats
- onchain_sats: bool = Query(False) # Onchain stats
+ onchain_stats: bool = Query(False) # Onchain stats
ln_stats: bool = Query(False) # ln Sats
@classmethod
diff --git a/lnbits/extensions/gerty/templates/gerty/gerty.html b/lnbits/extensions/gerty/templates/gerty/gerty.html
index ef4db38d..1411f7e9 100644
--- a/lnbits/extensions/gerty/templates/gerty/gerty.html
+++ b/lnbits/extensions/gerty/templates/gerty/gerty.html
@@ -1,19 +1,23 @@
-{% extends "public.html" %} {% block page %}
-
+{% extends "public.html" %} {% block toolbar_title %} {{ gerty.name }}{% endblock %}{% block page %}
+
+
{% raw %}
+
+
+
+ sentiment_satisfied
+
+
{{gertywallet.amount}}
Wallet: {{gertywallet.name}}
+
{% endraw %}
+
+
+
+
+
+
+
-
Copy LNURL
- {% include "lnurlp/_lnurl.html" %}
@@ -48,7 +51,45 @@
new Vue({
el: '#vue',
- mixins: [windowMixin]
+ mixins: [windowMixin],
+ data: function () {
+ return {
+ gertyName: '{{gerty.name}}',
+ walletColors: [
+ {first: "#3f51b5",
+ second: "#1a237e"},
+ {first: "#9c27b0",
+ second: "#4a148c"},
+ {first: "#e91e63",
+ second: "#880e4f"},
+ {first: "#009688",
+ second: "#004d40"},
+ {first: "#ff9800",
+ second: "#e65100"},
+ {first: "#2196f3",
+ second: "#0d47a1"},
+ {first: "#4caf50",
+ second: "#1b5e20"}
+ ],
+ gertywallets: [{
+ name:"poo",
+ amount:"200"
+ },
+ {
+ name:"poo",
+ amount:"200"
+ }]
+ }
+ },
+ methods: {
+
+ },
+ created: function () {
+ console.log(this.gerty)
+ // if(){
+
+ // }
+ }
})
{% endblock %}
diff --git a/lnbits/extensions/gerty/templates/gerty/index.html b/lnbits/extensions/gerty/templates/gerty/index.html
index 852e054d..c55ccb9e 100644
--- a/lnbits/extensions/gerty/templates/gerty/index.html
+++ b/lnbits/extensions/gerty/templates/gerty/index.html
@@ -35,6 +35,7 @@
{{ col.label }}
+
@@ -45,17 +46,27 @@
unelevated
dense
size="xs"
- icon="launch"
+ icon="sentiment_satisfied"
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
type="a"
:href="props.row.gerty"
target="_blank"
- >
+ >Launch software Gerty
{{ (col.name == 'tip_options' && col.value ?
JSON.parse(col.value).join(", ") : col.value) }}
+
+
+
-
+
-
+ emit-value
+ v-model="formDialog.data.lnbits_wallets"
+ use-input
+ use-chips
+ multiple
+ hide-dropdown-icon
+ new-value-mode="add-unique"
+ label="Wallets to watch"
+ >Hit enter to add values
Create Gerty
+ Update Gerty
Cancel
@@ -383,15 +410,17 @@
show: false,
data: {sats_quote: false,
onchain_stats: false,
- ln_stats: false}
+ ln_stats: false,
+ lnbits_wallets:[]}
}
}
},
methods: {
closeFormDialog: function () {
this.formDialog.data = {sats_quote: false,
- onchain_sats: false,
- ln_stats: false}
+ onchain_stats: false,
+ ln_stats: false,
+ lnbits_wallets:[]}
},
getGertys: function () {
var self = this
@@ -407,14 +436,40 @@
})
})
},
+ updateformDialog: function (formId) {
+ var gerty = _.findWhere(this.gertys, {id: formId})
+ this.formDialog.data.id = gerty.id
+ this.formDialog.data.name = gerty.name
+ this.formDialog.data.wallet = gerty.wallet
+ this.formDialog.data.lnbits_wallets = JSON.parse(gerty.lnbits_wallets)
+ this.formDialog.data.exchange = gerty.exchange,
+ this.formDialog.data.sats_quote = Boolean(gerty.sats_quote)
+ this.formDialog.data.onchain_stats = Boolean(gerty.onchain_stats)
+ this.formDialog.data.ln_stats = Boolean(gerty.ln_stats)
+ this.formDialog.show = true
+ },
+ sendFormDataGerty: function () {
+ var self = this
+ if (self.formDialog.data.id) {
+ this.updateGerty(
+ self.g.user.wallets[0].adminkey,
+ self.formDialog.data
+ )
+ } else {
+ this.createGerty(
+ self.g.user.wallets[0].adminkey,
+ self.formDialog.data
+ )
+ }
+ },
createGerty: function () {
var data = {
name: this.formDialog.data.name,
wallet: this.formDialog.data.wallet,
- lnbits_wallets: this.formDialog.data.lnbits_wallets,
+ lnbits_wallets: JSON.stringify(this.formDialog.data.lnbits_wallets),
sats_quote: this.formDialog.data.sats_quote,
exchange: this.formDialog.data.exchange,
- onchain_sats: this.formDialog.data.onchain_sats,
+ onchain_stats: this.formDialog.data.onchain_stats,
ln_stats: this.formDialog.data.ln_stats
}
var self = this
@@ -435,6 +490,27 @@
LNbits.utils.notifyApiError(error)
})
},
+ updateGerty: function (wallet, data) {
+ var self = this
+ data.lnbits_wallets = JSON.stringify(this.formDialog.data.lnbits_wallets)
+ LNbits.api
+ .request(
+ 'PUT',
+ '/gerty/api/v1/gerty/' + data.id,
+ wallet,
+ data
+ )
+ .then(function (response) {
+ self.gertys = _.reject(self.gertys, function (obj) {
+ return obj.id == data.id
+ })
+ self.gertys.push(mapGerty(response.data))
+ self.formDialog.show = false
+ })
+ .catch(function (error) {
+ LNbits.utils.notifyApiError(error)
+ })
+ },
deleteGerty: function (gertyId) {
var self = this
var gerty = _.findWhere(this.gertys, {id: gertyId})
diff --git a/lnbits/extensions/gerty/views.py b/lnbits/extensions/gerty/views.py
index c2a87085..f749d354 100644
--- a/lnbits/extensions/gerty/views.py
+++ b/lnbits/extensions/gerty/views.py
@@ -12,6 +12,9 @@ from lnbits.settings import LNBITS_CUSTOM_LOGO, LNBITS_SITE_TITLE
from . import gerty_ext, gerty_renderer
from .crud import get_gerty
+from .views_api import api_gerty_json
+
+import json
templates = Jinja2Templates(directory="templates")
@@ -28,4 +31,5 @@ async def display(request: Request, gerty_id):
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail="Gerty does not exist."
)
- return lnurlp_renderer().TemplateResponse("gerty/gerty.html", ctx)
\ No newline at end of file
+ gertyData = await api_gerty_json(gerty_id)
+ return gerty_renderer().TemplateResponse("gerty/gerty.html", {"request": request, "gerty": gertyData})
\ No newline at end of file
diff --git a/lnbits/extensions/gerty/views_api.py b/lnbits/extensions/gerty/views_api.py
index d24843b5..6ed16864 100644
--- a/lnbits/extensions/gerty/views_api.py
+++ b/lnbits/extensions/gerty/views_api.py
@@ -12,12 +12,12 @@ from starlette.exceptions import HTTPException
from lnbits.core.crud import get_user
from lnbits.core.services import create_invoice
-from lnbits.core.views.api import api_payment
+from lnbits.core.views.api import api_payment, api_wallet
from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key
from fastapi.templating import Jinja2Templates
from . import gerty_ext
-from .crud import create_gerty, delete_gerty, get_gerty, get_gertys
+from .crud import create_gerty, update_gerty, delete_gerty, get_gerty, get_gertys
from .models import Gerty
from lnbits.utils.exchange_rates import fiat_amount_as_satoshis
@@ -101,8 +101,13 @@ async def api_gerty_json(
)
gertyReturn = []
if gerty.lnbits_wallets != "":
- gertyReturn.append(gerty.lnbitsWallets)
-
+ for lnbits_wallet in json.loads(gerty.lnbits_wallets):
+ logger.debug(lnbits_wallet)
+ walletPrint = await api_wallet(wallet=lnbits_wallet)
+ gertyReturn.wallets.append(walletPrint)
+ #logger.debug(walletPrint)
+ logger.debug(gertyReturn)
+
if gerty.sats_quote:
gertyReturn.append(await api_gerty_satoshi())
@@ -111,7 +116,7 @@ async def api_gerty_json(
gertyReturn.append(await fiat_amount_as_satoshis(1, gerty.exchange))
except:
pass
- if gerty.onchain_sats:
+ if gerty.onchain_stats:
async with httpx.AsyncClient() as client:
r = await client.get(gerty.mempool_endpoint + "/api/v1/difficulty-adjustment")
gertyReturn.append({"difficulty-adjustment": json.dumps(r)})
@@ -124,7 +129,7 @@ async def api_gerty_json(
async with httpx.AsyncClient() as client:
r = await client.get(gerty.mempool_endpoint + "/api/v1/lightning/statistics/latest")
gertyReturn.append({"latest": json.dumps(r)})
-
+ logger.debug(gertyReturn)
return gertyReturn