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 |
| + | |- |
| |} | | |} |
| | | |