add server recommendations.

This commit is contained in:
fiatjaf 2022-01-21 05:26:03 -03:00
parent 013474e0a8
commit 91644f7684
7 changed files with 82 additions and 6 deletions

View File

@ -1,4 +1,5 @@
import RawEventData from '../components/RawEventData.vue' import RawEventData from '../components/RawEventData.vue'
import Recommend from '../components/Recommend.vue'
import Markdown from '../components/Markdown.vue' import Markdown from '../components/Markdown.vue'
import ShowMore from '../components/ShowMore.vue' import ShowMore from '../components/ShowMore.vue'
import Publish from '../components/Publish.vue' import Publish from '../components/Publish.vue'
@ -11,6 +12,7 @@ import Name from '../components/Name.vue'
export default ({app}) => { export default ({app}) => {
app.component('RawEventData', RawEventData) app.component('RawEventData', RawEventData)
app.component('Recommend', Recommend)
app.component('Markdown', Markdown) app.component('Markdown', Markdown)
app.component('ShowMore', ShowMore) app.component('ShowMore', ShowMore)
app.component('Publish', Publish) app.component('Publish', Publish)

View File

@ -71,7 +71,7 @@
@mousedown="startClicking" @mousedown="startClicking"
@mouseup="finishClicking" @mouseup="finishClicking"
> >
<Markdown> <Markdown v-if="event.kind === 1">
{{ trimmedContent }} {{ trimmedContent }}
<template #append> <template #append>
<q-icon <q-icon
@ -90,6 +90,7 @@
/> />
</template> </template>
</Markdown> </Markdown>
<Recommend v-else-if="event.kind === 2" :url="event.content" />
</q-item-label> </q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
@ -148,10 +149,12 @@ export default {
methods: { methods: {
startClicking() { startClicking() {
if (this.event.kind === 2) return
this.clicking = true this.clicking = true
setTimeout(() => { setTimeout(() => {
this.clicking = false this.clicking = false
}, 300) }, 200)
}, },
finishClicking(ev) { finishClicking(ev) {

View File

@ -0,0 +1,45 @@
<template>
<div class="w-full ml-2">
<q-banner class="py-5 bg-accent text-white cursor-auto">
<div class="mb-2 text-bold text-center">Relay Recommendation</div>
<div class="flex justify-evenly justify-center items-center ml-8 mt-4">
<div class="font-mono text-xs">{{ url }}</div>
<q-btn
rounded
color="secondary"
class="py-0 ml-2"
size="md"
:icon="url in $store.state.relays ? 'radio_button_checked' : 'add'"
:label="url in $store.state.relays ? 'Added' : 'Add Relay'"
:disable="url in $store.state.relays"
@click="addRelay"
/>
</div>
</q-banner>
</div>
</template>
<script>
import helpersMixin from '../utils/mixin'
export default {
name: 'Recommend',
mixins: [helpersMixin],
props: {
url: {type: String, required: true}
},
methods: {
addRelay() {
this.$q
.dialog({
title: 'Add relay?',
message: `Add ${this.url} to your list of relays?`,
cancel: true
})
.onOk(() => {
this.$store.commit('addRelay', this.url)
})
}
}
}
</script>

View File

@ -177,7 +177,7 @@ export default {
filter: [ filter: [
{ {
authors: [this.$route.params.pubkey], authors: [this.$route.params.pubkey],
kinds: [0, 1, 3] kinds: [0, 1, 2, 3]
} }
], ],
cb: async (event, relay) => { cb: async (event, relay) => {
@ -187,6 +187,7 @@ export default {
return return
case 1: case 1:
case 2:
if (this.eventsSet.has(event.id)) return if (this.eventsSet.has(event.id)) return
this.eventsSet.add(event.id) this.eventsSet.add(event.id)

View File

@ -55,6 +55,13 @@
@click="removeRelay(url)" @click="removeRelay(url)"
/> />
{{ url }} {{ url }}
<q-btn
color="primary"
size="sm"
label="Share"
:disable="hasJustSharedRelay"
@click="shareRelay(url)"
/>
</div> </div>
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section side>
@ -165,7 +172,8 @@ export default {
about, about,
nip05 nip05
}, },
unsubscribe: null unsubscribe: null,
hasJustSharedRelay: false
} }
}, },
@ -242,6 +250,13 @@ export default {
setRelayOpt(url, opt, value) { setRelayOpt(url, opt, value) {
this.$store.commit('setRelayOpt', {url, opt, value}) this.$store.commit('setRelayOpt', {url, opt, value})
}, },
shareRelay(url) {
this.hasJustSharedRelay = true
this.$store.dispatch('recommendServer', url)
setTimeout(() => {
this.hasJustSharedRelay = false
}, 5000)
},
async hardReset() { async hardReset() {
this.$q this.$q
.dialog({ .dialog({

View File

@ -181,6 +181,16 @@ export async function setMetadata(store, metadata) {
store.dispatch('addEvent', {event}) store.dispatch('addEvent', {event})
} }
export async function recommendServer(store, url) {
await pool.publish({
pubkey: store.state.keys.pub,
created_at: Math.round(Date.now() / 1000),
kind: 2,
tags: [],
content: url
})
}
export async function sendChatMessage(store, {now, pubkey, text, replyTo}) { export async function sendChatMessage(store, {now, pubkey, text, replyTo}) {
if (text.length === 0) return if (text.length === 0) return

View File

@ -18,7 +18,7 @@ const db = new PouchDB('nostr-events', {
// db schema (views) // db schema (views)
// ~ // ~
const DESIGN_VERSION = 3 const DESIGN_VERSION = 4
db.upsert('_design/main', current => { db.upsert('_design/main', current => {
if (current && current.version >= DESIGN_VERSION) return false if (current && current.version >= DESIGN_VERSION) return false
@ -34,7 +34,7 @@ db.upsert('_design/main', current => {
}, },
homefeed: { homefeed: {
map: function (event) { map: function (event) {
if (event.kind === 1) { if (event.kind === 1 || event.kind === 2) {
emit(event.created_at) emit(event.created_at)
} }
}.toString() }.toString()