woach to spoor, anilist to external

THESE LEXICONS ARE NOT FINAL, she screamed into the wind.

converts all references to woach.me to spoor.my to reflect the official
domain name.

Rename "feed" 3ld to "log" since the content here is separate from what
an activity feed would look like. Log has more in common with records.

I maintained the name activity over "spoor" here, because I want the
items to be easily digested by other services. I think "spoor" is
actually a more apt term than "activity" since "activity" is more
generic, than the specific mediaspoor it is, but it will do.

Changes the "anilist" entry to a more generic "external" entry, which
will be able to handle tvdb, or similar.
This commit is contained in:
Julia Lange 2025-05-01 15:48:13 -07:00
parent 360a3b3fde
commit 60262fed0c
Signed by: Julia
SSH key fingerprint: SHA256:50XUMcOFYPUs9/1j7p9SPnwASZ7QnxXm7THF7HkbqzQ
6 changed files with 53 additions and 30 deletions

View file

@ -1,14 +0,0 @@
{
"lexicon": 1,
"id": "me.woach.content.anilist",
"defs": {
"main": {
"type": "object",
"required": ["id"],
"key": "nsid",
"properties": {
"id": { "type": "integer" }
}
}
}
}

View file

@ -0,0 +1,30 @@
{
"lexicon": 1,
"id": "my.spoor.content.external",
"defs": {
"main": {
"type": "object",
"required": [ "source", "queryable" ],
"key": "nsid",
"properties": {
"source": {
"type": "string",
"description": "An nsid for a specific data source. The domain authority governs how to process the queryable",
"format": "nsid",
"knownValues": [
"my.spoor.content.external#tvdb"
]
},
"queryable": {
"type": "union",
"description": "All the data needed to query the content from the source"
},
"overrides": {
"type": "object",
"description": "User defined overrides for the returned content",
"properties": {}
}
}
}
}
}

View file

@ -1,6 +1,6 @@
{
"lexicon": 1,
"id": "me.woach.content.media",
"id": "my.spoor.content.media",
"defs": {
"main": {
"type": "object",
@ -12,14 +12,14 @@
"minLength": 1,
"items": {
"type": "ref",
"ref": "me.woach.content.title"
"ref": "my.spoor.content.title"
}
},
"durationData": {
"type": "union",
"refs": [
"me.woach.content.media#television",
"me.woach.content.media#book"
"my.spoor.content.media#television",
"my.spoor.content.media#book"
]
},
"posterImage": {

View file

@ -1,16 +1,17 @@
{
"lexicon": 1,
"id": "me.woach.content.title",
"id": "my.spoor.content.title",
"defs": {
"main": {
"type": "object",
"properties": {
"language": {
"type": "string",
"format": "nsid",
"knownValues": [
"me.woach.content.title#romanization",
"me.woach.content.title#english",
"me.woach.content.title#native"
"my.spoor.content.title#romanization",
"my.spoor.content.title#english",
"my.spoor.content.title#native"
]
},
"value": { "type": "string", "minLength": 1 }

View file

@ -1,10 +1,10 @@
{
"lexicon": 1,
"id": "me.woach.feed.activity",
"id": "my.spoor.log.activity",
"defs": {
"main": {
"type": "record",
"description": "A single activity log for a specific show",
"description": "A single activity (spoor) for a specific session",
"key": "tid",
"record": {
"type": "object",
@ -13,13 +13,15 @@
"properties": {
"session": { "type": "ref", "ref": "com.atproto.repo.strongRef" },
"progress": {
"type": "integer",
"description": "The episode/chapter number for the content consumed."
"type": "union",
"refs": [
"my.spoor.log.activity#indexProgress"
]
},
"performedAt": {
"type": "string",
"format": "datetime",
"description": "User-declared timestamp for when they performed the activity."
"description": "User-declared timestamp for when they performed the activity. Null implies unknown time."
},
"createdAt": {
"type": "string",
@ -28,6 +30,10 @@
}
}
}
},
"indexProgress": {
"type": "integer",
"description": "The index of the content consumed. Content must be indexable"
}
}
}

View file

@ -1,6 +1,6 @@
{
"lexicon": 1,
"id": "me.woach.feed.session",
"id": "my.spoor.log.session",
"defs": {
"main": {
"type": "record",
@ -16,9 +16,9 @@
"maxGraphemes": 64,
"maxLength": 640
},
"participants": {
"otherParticipants": {
"type": "array",
"items": { "type": "ref", "ref": "com.atproto.repo.strongRef" }
"items": { "type": "string", "format": "did" }
},
"createdAt": {
"type": "string",