/
main.go
88 lines (68 loc) · 1.9 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright (c) 2018 Dean Jackson <deanishe@deanishe.net>
// MIT Licence - http://opensource.org/licenses/MIT
/*
Workflow bookmarks demonstrates implementing fuzzy.Sortable.
(This is not strictly necessary, as the Workflow/Feedback structs also
implement fuzzy.Sortable.)
It loads your Safari bookmarks from ~/Library/Safari/Bookmarks.plist into the
Bookmarks slice, which implements fuzzy.Sortable and a Filter() method,
which returns another Bookmarks slice containing all bookmarks that match
the given query.
See bookmarks.go for the implementation.
Alfred natively allows you to search your Safari bookmarks, but not with
fuzzy search.
*/
package main
import (
"log"
"github.com/deanishe/awgo"
)
var (
helpURL = "http://www.deanishe.net"
maxResults = 200
wf *aw.Workflow
// Icon for bookmark filetype
icon = &aw.Icon{
Value: "com.apple.safari.bookmark",
Type: aw.IconTypeFileType,
}
)
func init() {
wf = aw.New(aw.HelpURL(helpURL), aw.MaxResults(maxResults))
}
func run() {
var query string
// Use wf.args() to enable Magic Actions
if args := wf.Args(); len(args) > 0 {
query = args[0]
}
log.Printf("[main] query=%s", query)
// ----------------------------------------------------------------
// Load bookmarks
bookmarks, err := loadBookmarks()
if err != nil {
wf.FatalError(err)
}
log.Printf("%d total bookmark(s)", len(bookmarks))
// ----------------------------------------------------------------
// Filter bookmarks based on user query
if query != "" {
bookmarks = bookmarks.Filter(query)
}
// ----------------------------------------------------------------
// Generate results for Alfred
for _, b := range bookmarks {
wf.NewItem(b.Title).
Subtitle(b.URL).
Arg(b.URL).
UID(b.Title + b.URL).
Icon(icon).
Valid(true)
}
// Send results
wf.WarnEmpty("No matching bookmarks", "Try a different query?")
wf.SendFeedback()
}
func main() {
wf.Run(run)
}