package newsbuilder
import (
"encoding/json"
"fmt"
"io/ioutil"
"time"
"github.com/google/uuid"
"github.com/yosssi/gohtml"
newsfeed "github.com/go-i2p/newsgo/builder/feed"
)
type NewsBuilder struct {
Feed newsfeed.Feed
ReleasesJson string
BlocklistXML string
URNID string
TITLE string
SITEURL string
MAINFEED string
BACKUPFEED string
SUBTITLE string
}
func (nb *NewsBuilder) JSONtoXML() (string, error) {
content, err := ioutil.ReadFile(nb.ReleasesJson)
if err != nil {
return "", err
}
// Now let's unmarshall the data into `payload`
var payload []map[string]interface{}
err = json.Unmarshal(content, &payload)
if err != nil {
return "", err
}
str := ""
/*
2.0.0
*/
releasedate := payload[0]["date"]
version := payload[0]["version"]
minVersion := payload[0]["minVersion"]
minJavaVersion := payload[0]["minJavaVersion"]
updates := payload[0]["updates"].(map[string]interface{})["su3"].(map[string]interface{})
magnet := updates["torrent"]
urls := updates["url"].([]interface{})
str += "\n"
str += "" + version.(string) + ""
str += ""
str += ""
for _, u := range urls {
str += ""
}
str += ""
str += ""
return str, nil
}
func (nb *NewsBuilder) Build() (string, error) {
if err := nb.Feed.LoadHTML(); err != nil {
return "", fmt.Errorf("Build: error %s", err.Error())
}
current_time := time.Now()
str := ""
str += ""
str += "" + "urn:uuid:" + nb.URNID + ""
str += "" + nb.TITLE + ""
milli := current_time.Nanosecond() / 1000
t := fmt.Sprintf("%d-%02d-%02dT%02d:%02d:%02d.%02d+00:00\n", current_time.Year(), current_time.Month(), current_time.Day(), current_time.Hour(), current_time.Minute(), current_time.Second(), milli)
str += "" + t + ""
str += ""
str += ""
if nb.BACKUPFEED != "" {
str += ""
}
str += "newsgo"
str += "" + nb.SUBTITLE + ""
blocklistBytes, err := ioutil.ReadFile(nb.BlocklistXML)
if err != nil {
return "", err
}
str += string(blocklistBytes)
jsonxml, err := nb.JSONtoXML()
if err != nil {
return "", err
}
str += jsonxml
for index, _ := range nb.Feed.ArticlesSet {
art := nb.Feed.Article(index)
str += art.Entry()
}
str += ""
return gohtml.Format(str), nil
}
func Builder(newsFile, releasesJson, blocklistXML string) *NewsBuilder {
nb := &NewsBuilder{
Feed: newsfeed.Feed{
EntriesHTMLPath: newsFile,
},
ReleasesJson: releasesJson,
BlocklistXML: blocklistXML,
URNID: uuid.New().String(),
TITLE: "I2P News",
SITEURL: "http://i2p-projekt.i2p",
MAINFEED: "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.atom.xml",
BACKUPFEED: "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/news.atom.xml",
SUBTITLE: "News feed, and router updates",
}
return nb
}