@@ -11,7 +11,7 @@ import (
1111 "strconv"
1212 "strings"
1313
14- "jaytaylor .com/html2text"
14+ "github .com/k3a /html2text"
1515 "github.com/fxamacker/cbor/v2"
1616 "github.com/goccy/go-json"
1717 "github.com/shamaton/msgpack/v2"
@@ -138,7 +138,7 @@ func saveCBOR(filename string, metadata []AppStreamData) error {
138138func saveJSON (filename string , metadata []AppStreamData ) error {
139139 var buffer strings.Builder
140140 encoder := json .NewEncoder (& buffer )
141- encoder .SetEscapeHTML (false ) // Prevent escaping HTML tags
141+ encoder .SetEscapeHTML (false )
142142 encoder .SetIndent ("" , " " )
143143
144144 if err := encoder .Encode (metadata ); err != nil {
@@ -200,11 +200,37 @@ func getSummary(summaries []struct {
200200}
201201
202202func getContentRating (ratings []Tag ) string {
203- var contentRating strings. Builder
203+ var ratingStrings [] string
204204 for _ , rating := range ratings {
205- contentRating .WriteString (rating .Content )
205+ decoder := xml .NewDecoder (strings .NewReader (rating .Content ))
206+ for {
207+ tok , err := decoder .Token ()
208+ if err == io .EOF {
209+ break
210+ }
211+ if err != nil {
212+ continue
213+ }
214+ switch se := tok .(type ) {
215+ case xml.StartElement :
216+ if se .Name .Local == "content_attribute" {
217+ var id string
218+ for _ , attr := range se .Attr {
219+ if attr .Name .Local == "id" {
220+ id = attr .Value
221+ break
222+ }
223+ }
224+ var value string
225+ decoder .DecodeElement (& value , & se )
226+ if id != "" && value != "" {
227+ ratingStrings = append (ratingStrings , fmt .Sprintf ("%s:%s" , id , strings .TrimSpace (value )))
228+ }
229+ }
230+ }
231+ }
206232 }
207- return contentRating . String ( )
233+ return strings . Join ( ratingStrings , "," )
208234}
209235
210236func getContentByLang [T any ](elements []T ) string {
@@ -334,12 +360,12 @@ func main() {
334360 metadata = append (metadata , AppStreamData {
335361 AppId : component .Id ,
336362 Name : name ,
337- Summary : summary ,
363+ Summary : html2text . HTML2Text ( summary ) ,
338364 ContentRating : contentRating ,
339365 Icons : icons ,
340366 Screenshots : screenshots ,
341367 Categories : categories ,
342- RichDescription : richDescription ,
368+ RichDescription : html2text . HTML2Text ( richDescription ) ,
343369 Version : version ,
344370 })
345371 }
@@ -350,3 +376,6 @@ func main() {
350376 fmt .Println ("Metadata saved successfully." )
351377 }
352378}
379+
380+
381+
0 commit comments