Compare commits
No commits in common. "da11811e2dfd789519532f0f953e05412f0d84d3" and "e7d2c0e1a931c20bd73279dddd3296ebaf3978be" have entirely different histories.
da11811e2d
...
e7d2c0e1a9
51
block.go
51
block.go
|
|
@ -25,56 +25,23 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type BlockRepository interface {
|
type BlockRepository interface {
|
||||||
Save(id string, block Block) error
|
Save(block Block) error
|
||||||
Load(id string) (Block, error)
|
Load(id string) (Block, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type blockSaveMessage struct {
|
|
||||||
id string
|
|
||||||
block Block
|
|
||||||
}
|
|
||||||
|
|
||||||
type blockRepo struct {
|
type blockRepo struct {
|
||||||
dirname string
|
dirname string
|
||||||
saveC chan blockSaveMessage
|
|
||||||
errC chan error
|
|
||||||
}
|
|
||||||
|
|
||||||
func saveBlock(dirname, id string, block Block) error {
|
|
||||||
f, err := os.OpenFile(filepath.Join(dirname, BlocksDirectory, id), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
enc := json.NewEncoder(f)
|
|
||||||
enc.SetIndent("", " ")
|
|
||||||
err = enc.Encode(&block)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewBlockRepo(dirname string) BlockRepository {
|
|
||||||
saveC := make(chan blockSaveMessage, 1)
|
|
||||||
errC := make(chan error)
|
|
||||||
go func() {
|
|
||||||
for msg := range saveC {
|
|
||||||
err := saveBlock(dirname, msg.id, msg.block)
|
|
||||||
errC <- err
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
return &blockRepo{
|
|
||||||
dirname: dirname,
|
|
||||||
saveC: saveC,
|
|
||||||
errC: errC,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (br *blockRepo) Save(id string, block Block) error {
|
func (br *blockRepo) Save(id string, block Block) error {
|
||||||
br.saveC <- blockSaveMessage{id, block}
|
f, err := os.OpenFile(filepath.Join(br.dirname, BlocksDirectory, id), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
|
||||||
err := <-br.errC
|
defer f.Close()
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
enc := json.NewEncoder(f)
|
||||||
|
enc.SetIndent("", " ")
|
||||||
|
return enc.Encode(&block)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (br *blockRepo) Load(id string) (Block, error) {
|
func (br *blockRepo) Load(id string) (Block, error) {
|
||||||
|
|
|
||||||
20
file.go
20
file.go
|
|
@ -337,19 +337,14 @@ func (fp *FilePages) save(msg saveMessage) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("while creating search object %s: %w", page.Name, err)
|
return fmt.Errorf("while creating search object %s: %w", page.Name, err)
|
||||||
}
|
}
|
||||||
batch := fp.index.NewBatch()
|
|
||||||
for _, so := range searchObjects {
|
for _, so := range searchObjects {
|
||||||
if fp.index != nil {
|
if fp.index != nil {
|
||||||
err = batch.Index(so.ID, so)
|
err = fp.index.Index(so.ID, so)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("while indexing %s: %w", page.Name, err)
|
return fmt.Errorf("while indexing %s: %w", page.Name, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = fp.index.Batch(batch)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("while indexing %s: %w", page.Name, err)
|
|
||||||
}
|
|
||||||
sw.Stop()
|
sw.Stop()
|
||||||
sw.Start("links")
|
sw.Start("links")
|
||||||
err = saveLinksIncremental(fp.dirname, page.Title)
|
err = saveLinksIncremental(fp.dirname, page.Title)
|
||||||
|
|
@ -704,9 +699,6 @@ func (fp *FilePages) PageHistory(p string) ([]Revision, error) {
|
||||||
commitId := line[0:start]
|
commitId := line[0:start]
|
||||||
rest := line[start+1:]
|
rest := line[start+1:]
|
||||||
pageText := gitRevision(fp.dirname, page, commitId)
|
pageText := gitRevision(fp.dirname, page, commitId)
|
||||||
if pageText == "" {
|
|
||||||
return nil, errors.New("git revision failed")
|
|
||||||
}
|
|
||||||
revisions = append(revisions, Revision{
|
revisions = append(revisions, Revision{
|
||||||
Version: commitId,
|
Version: commitId,
|
||||||
Page: DiffPage{Content: pageText},
|
Page: DiffPage{Content: pageText},
|
||||||
|
|
@ -735,14 +727,8 @@ func gitRevision(dirname, page, version string) string {
|
||||||
cmd.Dir = dirname
|
cmd.Dir = dirname
|
||||||
buf := bytes.Buffer{}
|
buf := bytes.Buffer{}
|
||||||
cmd.Stdout = &buf
|
cmd.Stdout = &buf
|
||||||
err := cmd.Start()
|
cmd.Start()
|
||||||
if err != nil {
|
cmd.Wait()
|
||||||
return ""
|
|
||||||
}
|
|
||||||
err = cmd.Wait()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return buf.String()
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -203,10 +203,10 @@ function Store(inputData) {
|
||||||
|
|
||||||
function updateFold(id, open) {
|
function updateFold(id, open) {
|
||||||
let closedFolds = JSON.parse(localStorage.getItem("closed-folds") || '{}') || {}
|
let closedFolds = JSON.parse(localStorage.getItem("closed-folds") || '{}') || {}
|
||||||
if (open) {
|
if (!open) {
|
||||||
delete closedFolds[id]
|
|
||||||
} else {
|
|
||||||
closedFolds[id] = true
|
closedFolds[id] = true
|
||||||
|
} else {
|
||||||
|
delete closedFolds[id]
|
||||||
}
|
}
|
||||||
localStorage.setItem('closed-folds', JSON.stringify(closedFolds))
|
localStorage.setItem('closed-folds', JSON.stringify(closedFolds))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
52
main.go
52
main.go
|
|
@ -37,6 +37,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/davecgh/go-spew/spew"
|
||||||
"p83.nl/go/ekster/pkg/util"
|
"p83.nl/go/ekster/pkg/util"
|
||||||
"p83.nl/go/indieauth"
|
"p83.nl/go/indieauth"
|
||||||
"p83.nl/go/wiki/link"
|
"p83.nl/go/wiki/link"
|
||||||
|
|
@ -1063,39 +1064,8 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
mp = NewFilePages(dataDir, searchIndex)
|
mp = NewFilePages(dataDir, searchIndex)
|
||||||
repo := NewBlockRepo("data")
|
|
||||||
|
|
||||||
http.Handle("/auth/", &authHandler{})
|
http.Handle("/auth/", &authHandler{})
|
||||||
http.HandleFunc("/api/block/view", wrapAuth(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
defer r.Body.Close()
|
|
||||||
|
|
||||||
if !r.Context().Value(authKey).(bool) {
|
|
||||||
http.Error(w, "Unauthorized", 401)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Method != "GET" {
|
|
||||||
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
id := r.URL.Query().Get("id")
|
|
||||||
|
|
||||||
block, err := repo.Load(id)
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, err.Error(), 500)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
w.Header().Set("Cache-Control", "no-store")
|
|
||||||
enc := json.NewEncoder(w)
|
|
||||||
enc.SetIndent("", " ")
|
|
||||||
err = enc.Encode(block)
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, err.Error(), 500)
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
http.HandleFunc("/api/block/", wrapAuth(func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/api/block/", wrapAuth(func(w http.ResponseWriter, r *http.Request) {
|
||||||
defer r.Body.Close()
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
|
@ -1164,6 +1134,7 @@ func main() {
|
||||||
http.Error(w, "missing id", 400)
|
http.Error(w, "missing id", 400)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
repo := blockRepo{dirname: "data"}
|
||||||
block, err := repo.Load(id)
|
block, err := repo.Load(id)
|
||||||
block.Text = r.Form.Get("text")
|
block.Text = r.Form.Get("text")
|
||||||
err = repo.Save(id, block)
|
err = repo.Save(id, block)
|
||||||
|
|
@ -1194,6 +1165,9 @@ func main() {
|
||||||
http.Error(w, "missing id", 400)
|
http.Error(w, "missing id", 400)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
repo := blockRepo{
|
||||||
|
dirname: "data",
|
||||||
|
}
|
||||||
newBlock := Block{
|
newBlock := Block{
|
||||||
Text: r.Form.Get("text"),
|
Text: r.Form.Get("text"),
|
||||||
Children: []string{},
|
Children: []string{},
|
||||||
|
|
@ -1207,25 +1181,13 @@ func main() {
|
||||||
err = repo.Save(id, block)
|
err = repo.Save(id, block)
|
||||||
|
|
||||||
// update search index
|
// update search index
|
||||||
sw := stopwatch{}
|
|
||||||
sw.Start("createSearchObjects")
|
|
||||||
searchObjects, err := createSearchObjects(id)
|
searchObjects, err := createSearchObjects(id)
|
||||||
|
spew.Dump("searchObjects", searchObjects)
|
||||||
batch := searchIndex.NewBatch()
|
|
||||||
|
|
||||||
for _, so := range searchObjects {
|
for _, so := range searchObjects {
|
||||||
err = batch.Index(so.ID, so)
|
searchIndex.Index(so.ID, so)
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = searchIndex.Batch(batch)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sw.Stop()
|
|
||||||
return
|
return
|
||||||
}))
|
}))
|
||||||
http.HandleFunc("/links.json", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/links.json", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user