update discovery few

This commit is contained in:
Believethehype
2024-03-07 14:21:36 +01:00
parent a06b688642
commit b08962bbb3
5 changed files with 753 additions and 12 deletions

View File

@@ -16,7 +16,7 @@ import {
import store from '../store';
import miniToastr from "mini-toastr";
import VueNotifications from "vue-notifications";
import {computed, watch} from "vue";
import {computed, onMounted, watch} from "vue";
import deadnip89s from "@/components/data/deadnip89s.json";
import {data} from "autoprefixer";
import {requestProvider} from "webln";
@@ -29,7 +29,20 @@ import StringUtil from "@/components/helper/string.ts";
let dvms =[]
async function generate_feed() {
onMounted(async () => {
while(store.state.nip89dvms.length === 0){
await sleep(100)
}
await addAllContentDVMs()
console.log("mount")
console.log(dvms)
})
async function generate_feed(id) {
try {
if(store.state.pubkey === undefined || localStorage.getItem('nostr-key-method') === "anon"){
@@ -37,14 +50,15 @@ async function generate_feed() {
}
dvms = []
store.commit('set_recommendation_dvms', dvms)
//dvms = []
//store.commit('set_recommendation_dvms', dvms)
let client = store.state.client
let content = "NIP 90 Content Discovery request"
let kind = 5300
let tags = []
tags.push(["p", id])
let res;
let requestid;
@@ -128,9 +142,47 @@ async function listen() {
console.log("7000: ", event.content);
// console.log("DVM: " + event.author.toHex())
//miniToastr.showMessage("DVM: " + dvmname, event.content, VueNotifications.types.info)
for (const tag in event.tags) {
if (event.tags[tag].asVec()[0] === "status") {
dvms.find(i => i.id === event.author.toHex()).status = event.tags[tag].asVec()[1]
}
await addDVM(event)
if (event.tags[tag].asVec()[0] === "amount") {
dvms.find(i => i.id === event.author.toHex()).amount = event.tags[tag].asVec()[1]
if (event.tags[tag].asVec().length > 2) {
dvms.find(i => i.id === event.author.toHex()).bolt11 = event.tags[tag].asVec()[2]
} else {
let profiles = await get_user_infos([event.author])
let created = 0
if (profiles.length > 0) {
// for (const profile of profiles){
console.log(profiles[0].profile)
let current = profiles[0]
// if (profiles[0].profile.createdAt > created){
// created = profile.profile.createdAt
// current = profile
// }
let lud16 = current.profile.lud16
if (lud16 !== null && lud16 !== "") {
console.log("LUD16: " + lud16)
dvms.find(i => i.id === event.author.toHex()).bolt11 = await createBolt11Lud16(lud16, dvms.find(i => i.id === event.author.toHex()).amount)
console.log(dvms.find(i => i.id === event.author.toHex()).bolt11)
if (dvms.find(i => i.id === event.author.toHex()).bolt11 === "") {
dvms.find(i => i.id === event.author.toHex()).status = "error"
}
} else {
console.log("NO LNURL")
}
} else {
console.log("PROFILE NOT FOUND")
}
}
}
store.commit('set_recommendation_dvms', dvms)
}
} catch (error) {
console.log("Error: ", error);
}
@@ -221,6 +273,59 @@ async function listen() {
const urlinput = ref("");
async function addAllContentDVMs(){
for (const el of store.state.nip89dvms) {
for (const tag of JSON.parse(el.event).tags){
if (tag[0] === "k" && tag[1] === "5300"){
console.log(el)
const filtera = new Filter().author(PublicKey.parse(el.id)).kinds([6300, 7000]).limit(1)
let client = store.state.client
let activities = await client.getEventsOf([filtera], Duration.fromSecs(1))
let last_active = 0
for (let activity of activities){
console.log(activity.createdAt.asSecs())
if (activity.createdAt.asSecs() > last_active){
last_active = activity.createdAt.asSecs()
}
}
console.log(last_active)
// If DVM hasnt been active for 3 weeks, don't consider it.
if(last_active < Timestamp.now().asSecs() - 60*60*24*7){
continue
}
let status = "announced"
let jsonentry = {
id: el.id,
kind: "",
status: status,
result: [],
name: el.name,
about: el.about,
image: el.image,
amount: el.amount,
bolt11: ""
}
console.log(jsonentry)
if (dvms.filter(i => i.id === jsonentry.id).length === 0) {
dvms.push(jsonentry)
}
store.commit('set_recommendation_dvms', dvms)
}
}
}
}
async function addDVM(event){
let status = "unknown"
let jsonentry = {
@@ -308,6 +413,10 @@ async function addDVM(event){
store.commit('set_recommendation_dvms', dvms)
}
async function zap(invoice) {
let webln;
@@ -323,7 +432,7 @@ async function zap(invoice) {
try{
let response = await webln.sendPayment(invoice)
dvms.find(i => i.bolt11 === invoice).status = "paid"
store.commit('set_recommendation_results', dvms)
store.commit('set_recommendation_dvms', dvms)
}
catch(err){
console.log(err)
@@ -346,6 +455,8 @@ import VueDatePicker from "@vuepic/vue-datepicker";
import {timestamp} from "@vueuse/core";
import NoteTable from "@/components/NoteTable.vue";
const isModalOpened = ref(false);
const modalcontent = ref("");
const datetopost = ref(Date.now());
@@ -376,6 +487,7 @@ const submitHandler = async () => {
</script>
<!-- font-thin bg-gradient-to-r from-white to-nostr bg-clip-text text-transparent -->
@@ -393,7 +505,8 @@ const submitHandler = async () => {
Algorithms, but you are the one in control.</h2>
<h3>
<br>
<button class="v-Button" @click="generate_feed()">Recommend me Notes</button>
<button v-if="store.state.recommendationdvms.length === 0" class="v-Button">Loading DVMs..</button>
</h3>
</div>
<br>
@@ -445,22 +558,28 @@ const submitHandler = async () => {
<h3 class="fa-cut" v-html="StringUtil.parseHyperlinks(dvm.about)"></h3>
<div className="card-actions justify-end mt-auto" >
<div className="tooltip mt-auto">
<button v-if="dvm.status !== 'finished' && dvm.status !== 'paid' && dvm.status !== 'payment-required' && dvm.status !== 'error'" className="btn">{{dvm.status}}</button>
<button v-if="dvm.status === 'finished'" className="btn">Done</button>
<button v-if="dvm.status !== 'finished' && dvm.status !== 'paid' && dvm.status !== 'payment-required' && dvm.status !== 'error' && dvm.status !== 'announced'" className="btn">{{dvm.status}}</button>
<button v-if="dvm.status === 'finished'" class="bg-base-200 text-bg-base200" @click="generate_feed(dvm.id)" className="btn">Done</button>
<button v-if="dvm.status === 'paid'" className="btn">Paid, waiting for DVM..</button>
<button v-if="dvm.status === 'error'" className="btn">Error</button>
<button v-if="dvm.status === 'payment-required'" className="zap-Button" @click="zap(dvm.bolt11);">{{ dvm.amount/1000 }} Sats</button>
<button v-if="dvm.status === 'announced'" className="request-Button" @click="generate_feed(dvm.id);">Request</button>
<!--<h3 v-if="dvm.amount.toString().toLowerCase()==='free'" class="bg-nostr btn rounded-full" >{{ "Free" }}</h3> -->
</div>
</div>
<!-- <div v-if="dvm.result.length > 0" class="collapse bg-base-200">
@@ -473,6 +592,17 @@ const submitHandler = async () => {
</div>
</div> -->
<!-- <details open ></details> -->
<div style="margin-left: auto; margin-right: 10px;">
<p v-if="dvm.amount.toString().toLowerCase()==='free'" class="text-sm text-gray-600 rounded" >Free</p>
<p v-if="dvm.amount.toString().toLowerCase()==='subscription'" class="bg-orange-500 label rounded-full" >{{ dvm.amount/1000 }}</p>
<p v-if="dvm.amount.toString()===''" ></p>
<p v-if="!isNaN(parseInt(dvm.amount))" class="text-sm text-gray-600 rounded" ><div class="flex"><svg style="margin-top:3px" xmlns="http://www.w3.org/2000/svg" width="14" height="16" fill="currentColor" class="bi bi-lightning" viewBox="0 0 16 20">
<path d="M5.52.359A.5.5 0 0 1 6 0h4a.5.5 0 0 1 .474.658L8.694 6H12.5a.5.5 0 0 1 .395.807l-7 9a.5.5 0 0 1-.873-.454L6.823 9.5H3.5a.5.5 0 0 1-.48-.641zM6.374 1 4.168 8.5H7.5a.5.5 0 0 1 .478.647L6.78 13.04 11.478 7H8a.5.5 0 0 1-.474-.658L9.306 1z"/></svg> {{dvm.amount/1000}}</div></p>
</div>
<details open v-if="dvm.status === 'finished'" class="collapse bg-base">
<summary class="collapse-title "><div class="btn">Show/Hide Results</div></summary>
@@ -509,6 +639,11 @@ const submitHandler = async () => {
bottom: 0;
}
.request-Button{
@apply btn hover:bg-nostr border-nostr text-base;
bottom: 0;
}
.v-Button {
@apply bg-nostr hover:bg-nostr2 focus:ring-white mb-2 inline-flex flex-none items-center rounded-lg border border-black px-3 py-1.5 text-sm leading-4 text-white transition-colors duration-300 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900;
height: 48px;