Changes

3,139 bytes added ,  03:30, 17 October 2020
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
 +
|-
 
|}
 
|}
  
73

edits