BCAT services: Difference between revisions

Behemoth (talk | contribs)
Behemoth (talk | contribs)
News docs
Line 200: Line 200:


On [1.0.0] these are <nowiki>"nn::news::detail::ipc::INewsService"</nowiki>, see [[#INewsService]].
On [1.0.0] these are <nowiki>"nn::news::detail::ipc::INewsService"</nowiki>, see [[#INewsService]].
News entries are fetched from CDN[https://switchbrew.org/wiki/Network#Others].
Metadata for each entry is stored and queried from an internal SQLite database.
Official software uses sqlite[https://www.sqlite.org/download.html] for processing.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 223: Line 227:
! Cmd || Name
! Cmd || Name
|-
|-
| 10100 || PostLocalNews
| 10100 || [[#PostLocalNews]]
|-
|-
| 20100 || SetPassphrase
| 20100 || SetPassphrase
Line 259: Line 263:
| 40201 || ClearSubscriptionStatusAll
| 40201 || ClearSubscriptionStatusAll
|-
|-
| 90100 || GetNewsDatabaseDump
| 90100 || [[#GetNewsDatabaseDump]]
|}
|}
=== PostLocalNews ===
Takes an input buffer msgpack.


=== 30110 ===
=== 30110 ===
Line 270: Line 277:
=== 30210 ===
=== 30210 ===
Returns the Database version retrieved from system setting news!db_version
Returns the Database version retrieved from system setting news!db_version
=== GetNewsDatabaseDump ===
Dumps internal SQLite file.


== INewlyArrivedEventHolder ==
== INewlyArrivedEventHolder ==
Line 278: Line 288:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || Get
| 0 || [[#Get]]
|}
|}
=== Get ===
Returns readable event.
Event is signaled on PostLocalNews or on fetch from CDN if the file doesn't exist.


== INewsDataService ==
== INewsDataService ==
Line 288: Line 302:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || Open
| 0 || [[#Open]]
|-
|-
| 1 || OpenWithNewsRecordV1
| 1 || [[#OpenWithNewsRecordV1]]
|-
|-
| 2 || Read
| 2 || [[#Read]]
|-
|-
| 3 || GetSize
| 3 || [[#GetSize]]
|-
|-
| 1001 || [6.0.0+] OpenWithNewsRecord
| 1001 || [6.0.0+] [[#OpenWithNewsRecord]]
|}
|}
=== Open ===
Takes an input string. Opens file with the output of snprintf from "news:/data/%s" with input.
=== OpenWithNewsRecordV1 ===
Takes an input #NewsRecordV1. Opens file with the output of snprintf of "news:/data/D00000000000000000000_%s.msgpack" with news_id if user_id is empty or else of "news:/data/U%s_%s.msgpack" with user_id and news_id of input.
=== Read ===
Read from file opened with [[#Open]], [[#OpenWithNewsRecordV1]] or [[#OpenWithNewsRecord]].
=== GetSize ===
Get size of file opened with [[#Open]], [[#OpenWithNewsRecordV1]] or [[#OpenWithNewsRecord]].
=== OpenWithNewsRecord===
Takes an input #NewsRecord. Same behavior as [[#OpenWithNewsRecordV1]].


== INewsDatabaseService ==
== INewsDatabaseService ==
Line 328: Line 357:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || Get
| 0 || [[#Get]]
|}
|}
=== Get ===
Returns readable event.
Event is signaled on fetch from CDN if the file already exists.


== IUnknown2 ==
== IUnknown2 ==
Line 345: Line 378:
|-
|-
| 3 ||  
| 3 ||  
|}
= NewsDatabase =
Internal SQLite database. Has a second version since 6.0.0.
{| class="wikitable" border="1"
|-
! Name
! Type
! Exists
|-
| news_id || TEXT || All
|-
| user_id || TEXT || All
|-
| topic_id || TEXT || All
|-
| application_ids || TEXT || All
|-
| received_at || INTEGER || All
|-
| published_at || INTEGER || All
|-
| expire_at || INTEGER || All
|-
| pickup_limit || INTEGER || All
|-
| essential_pickup_limit || INTEGER || Only V2
|-
| priority || INTEGER || All
|-
| deletion_priority || INTEGER || All
|-
| age_limit || INTEGER || All
|-
| surprise || INTEGER || All
|-
| bashotorya || INTEGER || Only V1
|-
| decoration_type || INTEGER || Only V2
|-
| point || INTEGER || All
|-
| read || INTEGER || All
|-
| newly || INTEGER || All
|-
| displayed || INTEGER || All
|-
| opted_in || INTEGER || All
|-
| point_status || INTEGER || All
|-
| feedback || INTEGER || Only V2
|-
| extra_1 || INTEGER || All
|-
| extra_2 || INTEGER || All
|-
|}
= NewsRecordV1 =
{| class="wikitable" border="1"
|-
! Offset
! Size
! SQLite association
|-
| 0x0 || 0x18 || TEXT news_id
|-
| 0x18 || 0x18 || TEXT user_id
|-
| 0x30 || 0x8 || INTEGER received_id
|-
| 0x38 || 0x4 || INTEGER news
|-
| 0x3c || 0x4 || INTEGER newly
|-
| 0x40 || 0x4 || INTEGER displayed
|-
| 0x44 || 0x4 || none
|-
|}
= NewsRecord =
{| class="wikitable" border="1"
|-
! Offset
! Size
! SQLite association
|-
| 0x0 || 0x18 || TEXT news_id
|-
| 0x18 || 0x18 || TEXT user_id
|-
| 0x30 || 0x20 || TEXT topic_id
|-
| 0x50 || 0x8 || INTEGER received_id
|-
| 0x58 || 0x8 || none
|-
| 0x60 || 0x4 || INTEGER decoration_type
|-
| 0x64 || 0x4 || INTEGER read
|-
| 0x68 || 0x4 || INTEGER newly
|-
| 0x6c || 0x4 || INTEGER displayed
|-
| 0x70 || 0x4 || INTEGER feedback
|-
| 0x74 || 0x4 || none
|-
| 0x78 || 0x4 || INTEGER extra_1
|-
| 0x7c || 0x4 || INTEGER extra_2
|-
|}
|}