diff --git a/lexicons/my/spoor/content/external.json b/lexicons/my/spoor/content/external.json new file mode 100644 index 0000000..fc6f470 --- /dev/null +++ b/lexicons/my/spoor/content/external.json @@ -0,0 +1,42 @@ +{ + "lexicon": 1, + "id": "my.spoor.content.external", + "defs": { + "main": { + "type": "record", + "key": "nsid", + "record": { + "type": "object", + "required": [ "source", "queryable" ], + "properties": { + "titles": { + "type": "array", + "minLength": 1, + "items": { + "type": "ref", + "ref": "my.spoor.content.title" + } + }, + "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", + "refs": [] + }, + "overrides": { + "type": "union", + "description": "User defined overrides for the returned content", + "refs": [] + } + } + } + } + } +} diff --git a/lexicons/my/spoor/content/media.json b/lexicons/my/spoor/content/media.json new file mode 100644 index 0000000..e8897c2 --- /dev/null +++ b/lexicons/my/spoor/content/media.json @@ -0,0 +1,53 @@ +{ + "lexicon": 1, + "id": "my.spoor.content.media", + "defs": { + "main": { + "type": "record", + "key": "nsid", + "record": { + "type": "object", + "required": [ "titles", "lastUpdated" ], + "properties": { + "titles": { + "type": "array", + "minLength": 1, + "items": { + "type": "ref", + "ref": "my.spoor.content.title" + } + }, + "durationData": { + "type": "union", + "refs": [ + "my.spoor.content.media#television", + "my.spoor.content.media#book" + ] + }, + "posterImage": { + "type": "blob", + "accept": ["image/png", "image/jpeg"], + "maxSize": 1000000 + }, + "lastUpdated": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp for when this activity was last updated" + } + } + } + }, + "television": { + "type": "object", + "properties": { + "episodes": { "type": "integer", "minimum": 0} + } + }, + "book": { + "type": "object", + "properties": { + "chapters": { "type": "integer", "minimum": 0} + } + } + } +} diff --git a/lexicons/my/spoor/content/title.json b/lexicons/my/spoor/content/title.json new file mode 100644 index 0000000..3368a47 --- /dev/null +++ b/lexicons/my/spoor/content/title.json @@ -0,0 +1,29 @@ +{ + "lexicon": 1, + "id": "my.spoor.content.title", + "defs": { + "main": { + "type": "object", + "properties": { + "translationType": { + "type": "string", + "format": "nsid", + "knownValues": [ + "#titleHomophonic", "#titleNative", "#titleTranslation" + ] + }, + "lang": { + "type": "string", + "format": "language" + }, + "value": { "type": "string", "minLength": 1 } + } + }, + "titleHomophonic": { "type": "token", + "description": "A phonetic transcription of the native title such that when read it will sound like the native title." }, + "titleNative": { "type": "token", + "description": "The title in its native script" }, + "titleTranslation": { "type": "token", + "description": "A translation of the title" } + } +} diff --git a/lexicons/me/woach/feed/activity.json b/lexicons/my/spoor/log/activity.json similarity index 60% rename from lexicons/me/woach/feed/activity.json rename to lexicons/my/spoor/log/activity.json index 67ab025..adb3a1e 100644 --- a/lexicons/me/woach/feed/activity.json +++ b/lexicons/my/spoor/log/activity.json @@ -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": [ + "#progressIndex" + ] }, "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,14 @@ } } } + }, + "progressIndex": { + "type": "object", + "description": "The index of the content consumed. Content must be indexable", + "required": [ "index" ], + "properties": { + "index": { "type": "integer" } + } } } } diff --git a/lexicons/my/spoor/log/session.json b/lexicons/my/spoor/log/session.json new file mode 100644 index 0000000..4da7738 --- /dev/null +++ b/lexicons/my/spoor/log/session.json @@ -0,0 +1,32 @@ +{ + "lexicon": 1, + "id": "my.spoor.log.session", + "defs": { + "main": { + "type": "record", + "description": "A session of consuming some content", + "key": "tid", + "record": { + "type": "object", + "required": ["content", "createdAt"], + "properties": { + "content": { "type": "ref", "ref": "com.atproto.repo.strongRef" }, + "label": { + "type": "string", + "maxGraphemes": 64, + "maxLength": 640 + }, + "otherParticipants": { + "type": "array", + "items": { "type": "string", "format": "did" } + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "Client-declared timestamp for when this activity was created" + } + } + } + } + } +}