forked from jason/cpolis
		
	Converted RSS package to git.streifling.com/jason/rss
This commit is contained in:
		@@ -6,96 +6,96 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/gorilla/feeds"
 | 
			
		||||
	"git.streifling.com/jason/rss"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Feed struct {
 | 
			
		||||
	addCh chan *feeds.Item
 | 
			
		||||
	setCh chan feeds.Feed
 | 
			
		||||
	getCh chan feeds.Feed
 | 
			
		||||
	feed  feeds.Feed
 | 
			
		||||
	wg    sync.WaitGroup
 | 
			
		||||
type Channel struct {
 | 
			
		||||
	addCh   chan *rss.Item
 | 
			
		||||
	setCh   chan rss.Channel
 | 
			
		||||
	getCh   chan rss.Channel
 | 
			
		||||
	channel rss.Channel
 | 
			
		||||
	wg      sync.WaitGroup
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func initFeed() *Feed {
 | 
			
		||||
	return &Feed{
 | 
			
		||||
		addCh: make(chan *feeds.Item),
 | 
			
		||||
		setCh: make(chan feeds.Feed),
 | 
			
		||||
		getCh: make(chan feeds.Feed),
 | 
			
		||||
func initChannel() *Channel {
 | 
			
		||||
	return &Channel{
 | 
			
		||||
		addCh: make(chan *rss.Item),
 | 
			
		||||
		setCh: make(chan rss.Channel),
 | 
			
		||||
		getCh: make(chan rss.Channel),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Feed) start() {
 | 
			
		||||
	f.wg.Done()
 | 
			
		||||
func (c *Channel) start() {
 | 
			
		||||
	c.wg.Done()
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case item := <-f.addCh:
 | 
			
		||||
			f.feed.Items = append(f.feed.Items, item)
 | 
			
		||||
		case f.getCh <- f.feed:
 | 
			
		||||
		case f.feed = <-f.setCh:
 | 
			
		||||
		case item := <-c.addCh:
 | 
			
		||||
			c.channel.Items = append(c.channel.Items, item)
 | 
			
		||||
		case c.getCh <- c.channel:
 | 
			
		||||
		case c.channel = <-c.setCh:
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewFeed(title, link, desc string) *Feed {
 | 
			
		||||
	feed := initFeed()
 | 
			
		||||
	feed.feed = feeds.Feed{
 | 
			
		||||
func NewChannel(title, link, desc string) *Channel {
 | 
			
		||||
	channel := initChannel()
 | 
			
		||||
	channel.channel = rss.Channel{
 | 
			
		||||
		Title:       title,
 | 
			
		||||
		Link:        &feeds.Link{Href: link},
 | 
			
		||||
		Link:        link,
 | 
			
		||||
		Description: desc,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	feed.wg.Add(1)
 | 
			
		||||
	go feed.start()
 | 
			
		||||
	feed.wg.Wait()
 | 
			
		||||
	channel.wg.Add(1)
 | 
			
		||||
	go channel.start()
 | 
			
		||||
	channel.wg.Wait()
 | 
			
		||||
 | 
			
		||||
	return feed
 | 
			
		||||
	return channel
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Feed) Get() feeds.Feed {
 | 
			
		||||
	return <-f.getCh
 | 
			
		||||
func (c *Channel) Get() rss.Channel {
 | 
			
		||||
	return <-c.getCh
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Feed) Set(feed feeds.Feed) {
 | 
			
		||||
	f.setCh <- feed
 | 
			
		||||
func (f *Channel) Set(channel rss.Channel) {
 | 
			
		||||
	f.setCh <- channel
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func OpenFeed(filename string) (*Feed, error) {
 | 
			
		||||
func LoadChannel(filename string) (*Channel, error) {
 | 
			
		||||
	file, err := os.Open(filename)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("error opening file %v: %v", filename, err)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	feed := initFeed()
 | 
			
		||||
	feed.wg.Add(1)
 | 
			
		||||
	go feed.start()
 | 
			
		||||
	feed.wg.Wait()
 | 
			
		||||
	channel := initChannel()
 | 
			
		||||
	channel.wg.Add(1)
 | 
			
		||||
	go channel.start()
 | 
			
		||||
	channel.wg.Wait()
 | 
			
		||||
 | 
			
		||||
	tmpFeed := new(feeds.Feed)
 | 
			
		||||
	if err = gob.NewDecoder(file).Decode(tmpFeed); err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("error decoding file %v: %v", filename, err)
 | 
			
		||||
	tmpChannel := new(rss.Channel)
 | 
			
		||||
	if err = gob.NewDecoder(file).Decode(tmpChannel); err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("error decoding channel from file %v: %v", filename, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	feed.Set(*tmpFeed)
 | 
			
		||||
	return feed, nil
 | 
			
		||||
	channel.Set(*tmpChannel)
 | 
			
		||||
	return channel, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Feed) Save(filename string) error {
 | 
			
		||||
func (c *Channel) Save(filename string) error {
 | 
			
		||||
	file, err := os.Create(filename)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("error creating file %v: %v", filename, err)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	feed := f.Get()
 | 
			
		||||
	if err = gob.NewEncoder(file).Encode(feed); err != nil {
 | 
			
		||||
	channel := c.Get()
 | 
			
		||||
	if err = gob.NewEncoder(file).Encode(channel); err != nil {
 | 
			
		||||
		return fmt.Errorf("error encoding file %v: %v", filename, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Feed) Add(i *feeds.Item) {
 | 
			
		||||
	f.addCh <- i
 | 
			
		||||
func (c *Channel) Add(i *rss.Item) {
 | 
			
		||||
	c.addCh <- i
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.streifling.com/jason/rss"
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
	"github.com/gorilla/feeds"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +116,7 @@ func ReviewArticle(al *data.ArticleList, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PublishArticle(f *data.Feed, al *data.ArticleList, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func PublishArticle(c *data.Channel, al *data.ArticleList, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		uuid, err := uuid.Parse(r.PostFormValue("uuid"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -141,14 +141,14 @@ func PublishArticle(f *data.Feed, al *data.ArticleList, s *data.CookieStore) htt
 | 
			
		||||
			template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		f.Add(&feeds.Item{
 | 
			
		||||
		c.Add(&rss.Item{
 | 
			
		||||
			Title:       article.Title,
 | 
			
		||||
			Author:      &feeds.Author{Name: session.Values["name"].(string)},
 | 
			
		||||
			Created:     article.Created,
 | 
			
		||||
			Author:      session.Values["name"].(string),
 | 
			
		||||
			PubDate:     article.Created.Format(time.RFC1123Z),
 | 
			
		||||
			Description: article.Desc,
 | 
			
		||||
			Content:     article.Content,
 | 
			
		||||
			Content:     &rss.Content{Value: article.Content},
 | 
			
		||||
		})
 | 
			
		||||
		f.Save("tmp/rss.gob")
 | 
			
		||||
		c.Save("tmp/rss.gob")
 | 
			
		||||
 | 
			
		||||
		tmpl, err := template.ParseFiles("web/templates/hub.html")
 | 
			
		||||
		tmpl = template.Must(tmpl, err)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,13 +5,16 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"git.streifling.com/jason/rss"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func ShowRSS(f *data.Feed) http.HandlerFunc {
 | 
			
		||||
func ShowRSS(c *data.Channel) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		feed := f.Get()
 | 
			
		||||
		rss, err := feed.ToRss()
 | 
			
		||||
		channel := c.Get()
 | 
			
		||||
		feed := rss.NewFeed()
 | 
			
		||||
		feed.Channels = append(feed.Channels, &channel)
 | 
			
		||||
		rss, err := feed.ToXML()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Println(err)
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							@@ -3,6 +3,7 @@ module streifling.com/jason/cpolis
 | 
			
		||||
go 1.22.0
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	git.streifling.com/jason/rss v0.0.0-20240305160829-6cd08bb65d2a
 | 
			
		||||
	github.com/go-sql-driver/mysql v1.7.1
 | 
			
		||||
	github.com/google/uuid v1.6.0
 | 
			
		||||
	github.com/gorilla/feeds v1.1.2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							@@ -1,3 +1,9 @@
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305152729-9d8cc6464565 h1:/eO9NTksh+9yLz3HiYNR7BJo/iMTxxW5/d9h8I6vR6E=
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305152729-9d8cc6464565/go.mod h1:gpZF0nZbQSstMpyHD9DTAvlQEG7v4pjO5c7aIMWM4Jg=
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305160544-c8551159fe32 h1:G25NZzsD73rOkGYgV2vPUDviB0JXk5qi+dXOwB6J56U=
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305160544-c8551159fe32/go.mod h1:gpZF0nZbQSstMpyHD9DTAvlQEG7v4pjO5c7aIMWM4Jg=
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305160829-6cd08bb65d2a h1:TWQ9gwe7eWjaLUrZ0CJSc+sUUOw3VoGHlR3F8mH6vqs=
 | 
			
		||||
git.streifling.com/jason/rss v0.0.0-20240305160829-6cd08bb65d2a/go.mod h1:gpZF0nZbQSstMpyHD9DTAvlQEG7v4pjO5c7aIMWM4Jg=
 | 
			
		||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
 | 
			
		||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 | 
			
		||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.go
									
									
									
									
									
								
							@@ -29,10 +29,10 @@ func main() {
 | 
			
		||||
	}
 | 
			
		||||
	defer db.Close()
 | 
			
		||||
 | 
			
		||||
	feed, err := data.OpenFeed("tmp/rss.gob")
 | 
			
		||||
	feed, err := data.LoadChannel("tmp/rss.gob")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Println(err)
 | 
			
		||||
		feed = data.NewFeed("Freimaurer Distrikt Niedersachsen und Sachsen-Anhalt",
 | 
			
		||||
		feed = data.NewChannel("Freimaurer Distrikt Niedersachsen und Sachsen-Anhalt",
 | 
			
		||||
			"https://distrikt-ni-st.de",
 | 
			
		||||
			"Freiheit, Gleichheit, Brüderlichkeit, Toleranz und Humanität")
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user