Compare commits
No commits in common. "745da46fb61e774c382e51aebe0cdbcfa60464f2" and "44a553420809e53bd273cb91cfad6f7b7c2945d7" have entirely different histories.
745da46fb6
...
44a5534208
171
main.go
171
main.go
|
|
@ -11,26 +11,18 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jinzhu/now"
|
"github.com/jinzhu/now"
|
||||||
"p83.nl/go/ekster/pkg/jf2"
|
|
||||||
"p83.nl/go/ekster/pkg/microsub"
|
"p83.nl/go/ekster/pkg/microsub"
|
||||||
"willnorris.com/go/microformats"
|
"willnorris.com/go/microformats"
|
||||||
)
|
|
||||||
|
|
||||||
type Summary struct {
|
"p83.nl/go/ekster/pkg/jf2"
|
||||||
PostTypes map[string]string
|
)
|
||||||
Name string
|
|
||||||
Items []microsub.Item
|
|
||||||
Grouped map[string][]microsub.Item
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
u, err := url.Parse(os.Args[1])
|
u, err := url.Parse(os.Args[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -43,7 +35,7 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := forceCreate(filename)
|
f, err := openAndCreate(filename)
|
||||||
|
|
||||||
data, err := ioutil.ReadAll(f)
|
data, err := ioutil.ReadAll(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -58,12 +50,9 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
monday := now.With(time.Now()).Monday().AddDate(0, 0, -7)
|
items = filterEntriesAfter(items, now.With(time.Now()).Monday())
|
||||||
items = filterEntriesAfter(items, monday)
|
|
||||||
|
|
||||||
summary := getSummary(monday, items)
|
err = outputEntries(items, &buf)
|
||||||
|
|
||||||
err = outputEntries(summary, &buf)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -75,145 +64,47 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSummary(monday time.Time, items []microsub.Item) Summary {
|
func openAndCreate(filename string) (io.ReadCloser, error) {
|
||||||
year, week := monday.ISOWeek()
|
f, err := os.Open(filename)
|
||||||
grouped := make(map[string][]microsub.Item)
|
if err != nil && !os.IsExist(err) {
|
||||||
for _, item := range items {
|
t, err := template.ParseFiles("templates/full.html")
|
||||||
itemType := postTypeDiscovery(&item)
|
if err != nil {
|
||||||
grouped[itemType] = append(grouped[itemType], item)
|
return nil, err
|
||||||
}
|
}
|
||||||
summary := Summary{
|
f, err = os.Create(filename)
|
||||||
Name: fmt.Sprintf("Digest for Week %d-%d", week, year),
|
if err != nil {
|
||||||
Items: items,
|
return nil, err
|
||||||
Grouped: grouped,
|
}
|
||||||
}
|
err = t.Execute(f, nil)
|
||||||
return summary
|
if err != nil {
|
||||||
}
|
return nil, err
|
||||||
|
}
|
||||||
func forceCreate(filename string) (io.ReadCloser, error) {
|
err = f.Close()
|
||||||
t, err := template.ParseFiles("templates/full.html")
|
if err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return nil, err
|
}
|
||||||
}
|
f, err = os.Open(filename)
|
||||||
f, err := os.Create(filename)
|
if err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return nil, err
|
}
|
||||||
}
|
} else if err != nil {
|
||||||
err = t.Execute(f, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
err = f.Close()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
f, err = os.Open(filename)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return f, nil
|
return f, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func openAndCreate(filename string) (io.ReadCloser, error) {
|
func outputEntries(items []microsub.Item, w io.Writer) error {
|
||||||
var f io.ReadCloser
|
|
||||||
var err error
|
|
||||||
|
|
||||||
f, err = os.Open(filename)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
if !os.IsExist(err) {
|
|
||||||
f, err = forceCreate(filename)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return f, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func outputEntries(summary Summary, w io.Writer) error {
|
|
||||||
summary.PostTypes = map[string]string{
|
|
||||||
"checkin": "Checkins",
|
|
||||||
"event": "Events",
|
|
||||||
"repost-of": "Reposts",
|
|
||||||
"like-of": "Likes",
|
|
||||||
"in-reply-to": "Replies",
|
|
||||||
"bookmark": "Bookmarks",
|
|
||||||
"photo": "Photos",
|
|
||||||
"note": "Notes",
|
|
||||||
"article": "Articles",
|
|
||||||
}
|
|
||||||
|
|
||||||
t, err := template.ParseFiles("templates/weekly.html")
|
t, err := template.ParseFiles("templates/weekly.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
err = t.Execute(w, summary)
|
err = t.Execute(w, items)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func postTypeDiscovery(item *microsub.Item) string {
|
|
||||||
if item == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if item.Checkin != nil {
|
|
||||||
return "checkin"
|
|
||||||
}
|
|
||||||
if item.Type == "event" {
|
|
||||||
return "event"
|
|
||||||
}
|
|
||||||
if len(item.RepostOf) > 0 && validUrl(item.RepostOf[0]) {
|
|
||||||
return "repost-of"
|
|
||||||
}
|
|
||||||
if len(item.LikeOf) > 0 && validUrl(item.LikeOf[0]) {
|
|
||||||
return "like-of"
|
|
||||||
}
|
|
||||||
if len(item.InReplyTo) > 0 && validUrl(item.InReplyTo[0]) {
|
|
||||||
return "in-reply-to"
|
|
||||||
}
|
|
||||||
if len(item.BookmarkOf) > 0 && validUrl(item.BookmarkOf[0]) {
|
|
||||||
return "bookmark"
|
|
||||||
}
|
|
||||||
if len(item.Photo) > 0 && validUrl(item.Photo[0]) {
|
|
||||||
return "photo"
|
|
||||||
}
|
|
||||||
|
|
||||||
var content, name string
|
|
||||||
if item.Content != nil {
|
|
||||||
content = item.Content.Text
|
|
||||||
}
|
|
||||||
if content == "" {
|
|
||||||
if item.Summary != "" {
|
|
||||||
content = item.Summary
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if content == "" {
|
|
||||||
return "note"
|
|
||||||
}
|
|
||||||
|
|
||||||
name = item.Name
|
|
||||||
|
|
||||||
if name == "" {
|
|
||||||
return "note"
|
|
||||||
}
|
|
||||||
|
|
||||||
name = strings.Join(strings.Fields(strings.TrimSpace(name)), " ")
|
|
||||||
content = strings.Join(strings.Fields(strings.TrimSpace(content)), " ")
|
|
||||||
|
|
||||||
if !strings.HasPrefix(content, name) {
|
|
||||||
return "article"
|
|
||||||
}
|
|
||||||
|
|
||||||
return "note"
|
|
||||||
}
|
|
||||||
|
|
||||||
func validUrl(u string) bool {
|
|
||||||
_, err := url.Parse(u)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getEntriesForFeed(u *url.URL) ([]microsub.Item, error) {
|
func getEntriesForFeed(u *url.URL) ([]microsub.Item, error) {
|
||||||
resp, err := http.Get(u.String())
|
resp, err := http.Get(u.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,14 @@
|
||||||
<span class="next-entry"></span>
|
<span class="next-entry"></span>
|
||||||
<div class="h-entry">
|
<div class="h-entry">
|
||||||
<h2 class="p-name">{{ .Name }}</h2>
|
{{ range . }}
|
||||||
{{ range $k, $items := .Grouped }}
|
<h2 class="p-name">{{ .Name }}</h2>
|
||||||
<h3>{{ index $.PostTypes $k }}</h3>
|
{{ if .Content }}
|
||||||
<ul class="{{ $k }}">
|
{{ if .Content.HTML }}
|
||||||
{{ range $items }}
|
<div class="e-content">{{ .Content.HTML }}</div>
|
||||||
{{ if eq $k "like-of" }}
|
{{ else }}
|
||||||
{{ range .LikeOf }}
|
<div class="p-content">{{ .Content.Text }}</div>
|
||||||
<li><a href="{{ . }}">{{ . }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
{{ else if eq $k "repost-of" }}
|
|
||||||
{{ range .RepostOf }}
|
|
||||||
<li><a href="{{ . }}">{{ . }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
{{ else if eq $k "in-reply-to" }}
|
|
||||||
{{ range .InReplyTo }}
|
|
||||||
<li><a href="{{ . }}">{{ . }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
{{ else }}
|
|
||||||
{{ if .Checkin }}
|
|
||||||
<li><a href="{{ .URL }}">Checkin at {{ .Checkin.Name }} in {{ .Checkin.Locality }}, {{ .Checkin.Region }}</a></li>
|
|
||||||
{{ else if .Content }}
|
|
||||||
<li><a href="{{ .URL }}">{{ .Content.Text }}</a></li>
|
|
||||||
{{ else }}
|
|
||||||
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
{{ end }}
|
||||||
|
<time datetime="{{ .Published }}">{{ .Published }}</time>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
Loading…
Reference in New Issue
Block a user