Skip to content

Commit 7846ddb

Browse files
jvoisinfguillot
authored andcommitted
refactor(googlereader): minor code simplifications
- Hoist 4 similar error into a single global variable - Hoist a bunch of fmt.Sprintf calls outside of loops - Remove an else-return construct - Use strconv.FormatInt instead of fmt.Sprintf
1 parent 6ff4f5a commit 7846ddb

1 file changed

Lines changed: 34 additions & 76 deletions

File tree

internal/googlereader/handler.go

Lines changed: 34 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ var (
3838
errEmptyFeedTitle = errors.New("googlereader: empty feed title")
3939
errFeedNotFound = errors.New("googlereader: feed not found")
4040
errCategoryNotFound = errors.New("googlereader: category not found")
41+
errSimultaneously = fmt.Errorf("googlereader: %s and %s should not be supplied simultaneously", keptUnreadStreamSuffix, readStreamSuffix)
4142
)
4243

4344
// Serve handles Google Reader API calls.
@@ -69,12 +70,12 @@ func checkAndSimplifyTags(addTags []Stream, removeTags []Stream) (map[StreamType
6970
switch s.Type {
7071
case ReadStream:
7172
if _, ok := tags[KeptUnreadStream]; ok {
72-
return nil, fmt.Errorf("googlereader: %s and %s should not be supplied simultaneously", keptUnreadStreamSuffix, readStreamSuffix)
73+
return nil, errSimultaneously
7374
}
7475
tags[ReadStream] = true
7576
case KeptUnreadStream:
7677
if _, ok := tags[ReadStream]; ok {
77-
return nil, fmt.Errorf("googlereader: %s and %s should not be supplied simultaneously", keptUnreadStreamSuffix, readStreamSuffix)
78+
return nil, errSimultaneously
7879
}
7980
tags[ReadStream] = false
8081
case StarredStream:
@@ -89,12 +90,12 @@ func checkAndSimplifyTags(addTags []Stream, removeTags []Stream) (map[StreamType
8990
switch s.Type {
9091
case ReadStream:
9192
if _, ok := tags[ReadStream]; ok {
92-
return nil, fmt.Errorf("googlereader: %s and %s should not be supplied simultaneously", keptUnreadStreamSuffix, readStreamSuffix)
93+
return nil, errSimultaneously
9394
}
9495
tags[ReadStream] = false
9596
case KeptUnreadStream:
9697
if _, ok := tags[ReadStream]; ok {
97-
return nil, fmt.Errorf("googlereader: %s and %s should not be supplied simultaneously", keptUnreadStreamSuffix, readStreamSuffix)
98+
return nil, errSimultaneously
9899
}
99100
tags[ReadStream] = true
100101
case StarredStream:
@@ -452,7 +453,7 @@ func (h *handler) quickAddHandler(w http.ResponseWriter, r *http.Request) {
452453
json.OK(w, r, quickAddResponse{
453454
NumResults: 1,
454455
Query: newFeed.FeedURL,
455-
StreamID: fmt.Sprintf(feedPrefix+"%d", newFeed.ID),
456+
StreamID: feedPrefix + strconv.FormatInt(newFeed.ID, 10),
456457
StreamName: newFeed.Title,
457458
})
458459
}
@@ -584,9 +585,8 @@ func move(feedStream Stream, labelStream Stream, store *storage.Storage, userID
584585
func (h *handler) feedIconURL(f *model.Feed) string {
585586
if f.Icon != nil && f.Icon.ExternalIconID != "" {
586587
return config.Opts.RootURL() + route.Path(h.router, "feedIcon", "externalIconID", f.Icon.ExternalIconID)
587-
} else {
588-
return ""
589588
}
589+
return ""
590590
}
591591

592592
func (h *handler) editSubscriptionHandler(w http.ResponseWriter, r *http.Request) {
@@ -697,9 +697,10 @@ func (h *handler) streamItemContentsHandler(w http.ResponseWriter, r *http.Reque
697697
return
698698
}
699699

700-
userReadingList := fmt.Sprintf(userStreamPrefix, userID) + readingListStreamSuffix
701-
userRead := fmt.Sprintf(userStreamPrefix, userID) + readStreamSuffix
702-
userStarred := fmt.Sprintf(userStreamPrefix, userID) + starredStreamSuffix
700+
streamPrefix := fmt.Sprintf(userStreamPrefix, userID)
701+
userReadingList := streamPrefix + readingListStreamSuffix
702+
userRead := streamPrefix + readStreamSuffix
703+
userStarred := streamPrefix + starredStreamSuffix
703704

704705
itemIDs, err := parseItemIDsFromRequest(r)
705706
if err != nil {
@@ -739,6 +740,7 @@ func (h *handler) streamItemContentsHandler(w http.ResponseWriter, r *http.Reque
739740
Items: make([]contentItem, len(entries)),
740741
}
741742

743+
labelPrefix := fmt.Sprintf(userLabelPrefix, userID)
742744
for i, entry := range entries {
743745
enclosures := make([]contentItemEnclosure, 0, len(entry.Enclosures))
744746
for _, enclosure := range entry.Enclosures {
@@ -747,7 +749,7 @@ func (h *handler) streamItemContentsHandler(w http.ResponseWriter, r *http.Reque
747749
categories := make([]string, 0)
748750
categories = append(categories, userReadingList)
749751
if entry.Feed.Category.Title != "" {
750-
categories = append(categories, fmt.Sprintf(userLabelPrefix, userID)+entry.Feed.Category.Title)
752+
categories = append(categories, labelPrefix+entry.Feed.Category.Title)
751753
}
752754
if entry.Status == model.EntryStatusRead {
753755
categories = append(categories, userRead)
@@ -789,7 +791,7 @@ func (h *handler) streamItemContentsHandler(w http.ResponseWriter, r *http.Reque
789791
Content: entry.Content,
790792
},
791793
Origin: contentItemOrigin{
792-
StreamID: fmt.Sprintf(feedPrefix+"%d", entry.FeedID),
794+
StreamID: feedPrefix + strconv.FormatInt(entry.FeedID, 10),
793795
Title: entry.Feed.Title,
794796
HTMLUrl: entry.Feed.SiteURL,
795797
},
@@ -933,9 +935,10 @@ func (h *handler) tagListHandler(w http.ResponseWriter, r *http.Request) {
933935
result.Tags = append(result.Tags, subscriptionCategoryResponse{
934936
ID: fmt.Sprintf(userStreamPrefix, userID) + starredStreamSuffix,
935937
})
938+
labelPrefix := fmt.Sprintf(userLabelPrefix, userID)
936939
for _, category := range categories {
937940
result.Tags = append(result.Tags, subscriptionCategoryResponse{
938-
ID: fmt.Sprintf(userLabelPrefix, userID) + category.Title,
941+
ID: labelPrefix + category.Title,
939942
Label: category.Title,
940943
Type: "folder",
941944
})
@@ -965,13 +968,14 @@ func (h *handler) subscriptionListHandler(w http.ResponseWriter, r *http.Request
965968
return
966969
}
967970

971+
labelPrefix := fmt.Sprintf(userLabelPrefix, userID)
968972
result.Subscriptions = make([]subscriptionResponse, 0)
969973
for _, feed := range feeds {
970974
result.Subscriptions = append(result.Subscriptions, subscriptionResponse{
971-
ID: fmt.Sprintf(feedPrefix+"%d", feed.ID),
975+
ID: feedPrefix + strconv.FormatInt(feed.ID, 10),
972976
Title: feed.Title,
973977
URL: feed.FeedURL,
974-
Categories: []subscriptionCategoryResponse{{fmt.Sprintf(userLabelPrefix, userID) + feed.Category.Title, feed.Category.Title, "folder"}},
978+
Categories: []subscriptionCategoryResponse{{labelPrefix + feed.Category.Title, feed.Category.Title, "folder"}},
975979
HTMLURL: feed.SiteURL,
976980
IconURL: h.feedIconURL(feed),
977981
})
@@ -1102,27 +1106,11 @@ func (h *handler) handleReadingListStreamHandler(w http.ResponseWriter, r *http.
11021106
builder.BeforePublishedDate(time.Unix(rm.StopTime, 0))
11031107
}
11041108

1105-
rawEntryIDs, err := builder.GetEntryIDs()
1106-
if err != nil {
1107-
json.ServerError(w, r, err)
1108-
return
1109-
}
1110-
var itemRefs = make([]itemRef, 0)
1111-
for _, entryID := range rawEntryIDs {
1112-
formattedID := strconv.FormatInt(entryID, 10)
1113-
itemRefs = append(itemRefs, itemRef{ID: formattedID})
1114-
}
1115-
1116-
totalEntries, err := builder.CountEntries()
1109+
itemRefs, continuation, err := getItemRefsAndContinuation(*builder, rm)
11171110
if err != nil {
11181111
json.ServerError(w, r, err)
11191112
return
11201113
}
1121-
continuation := 0
1122-
if len(itemRefs)+rm.Offset < totalEntries {
1123-
continuation = len(itemRefs) + rm.Offset
1124-
}
1125-
11261114
json.OK(w, r, streamIDResponse{itemRefs, continuation})
11271115
}
11281116

@@ -1139,28 +1127,11 @@ func (h *handler) handleStarredStreamHandler(w http.ResponseWriter, r *http.Requ
11391127
if rm.StopTime > 0 {
11401128
builder.BeforePublishedDate(time.Unix(rm.StopTime, 0))
11411129
}
1142-
1143-
rawEntryIDs, err := builder.GetEntryIDs()
1144-
if err != nil {
1145-
json.ServerError(w, r, err)
1146-
return
1147-
}
1148-
var itemRefs = make([]itemRef, 0)
1149-
for _, entryID := range rawEntryIDs {
1150-
formattedID := strconv.FormatInt(entryID, 10)
1151-
itemRefs = append(itemRefs, itemRef{ID: formattedID})
1152-
}
1153-
1154-
totalEntries, err := builder.CountEntries()
1130+
itemRefs, continuation, err := getItemRefsAndContinuation(*builder, rm)
11551131
if err != nil {
11561132
json.ServerError(w, r, err)
11571133
return
11581134
}
1159-
continuation := 0
1160-
if len(itemRefs)+rm.Offset < totalEntries {
1161-
continuation = len(itemRefs) + rm.Offset
1162-
}
1163-
11641135
json.OK(w, r, streamIDResponse{itemRefs, continuation})
11651136
}
11661137

@@ -1178,28 +1149,34 @@ func (h *handler) handleReadStreamHandler(w http.ResponseWriter, r *http.Request
11781149
builder.BeforePublishedDate(time.Unix(rm.StopTime, 0))
11791150
}
11801151

1181-
rawEntryIDs, err := builder.GetEntryIDs()
1152+
itemRefs, continuation, err := getItemRefsAndContinuation(*builder, rm)
11821153
if err != nil {
11831154
json.ServerError(w, r, err)
11841155
return
11851156
}
1186-
var itemRefs = make([]itemRef, 0)
1157+
json.OK(w, r, streamIDResponse{itemRefs, continuation})
1158+
}
1159+
1160+
func getItemRefsAndContinuation(builder storage.EntryQueryBuilder, rm requestModifiers) ([]itemRef, int, error) {
1161+
rawEntryIDs, err := builder.GetEntryIDs()
1162+
if err != nil {
1163+
return nil, 0, err
1164+
}
1165+
var itemRefs = make([]itemRef, 0, len(rawEntryIDs))
11871166
for _, entryID := range rawEntryIDs {
11881167
formattedID := strconv.FormatInt(entryID, 10)
11891168
itemRefs = append(itemRefs, itemRef{ID: formattedID})
11901169
}
11911170

11921171
totalEntries, err := builder.CountEntries()
11931172
if err != nil {
1194-
json.ServerError(w, r, err)
1195-
return
1173+
return nil, 0, err
11961174
}
11971175
continuation := 0
11981176
if len(itemRefs)+rm.Offset < totalEntries {
11991177
continuation = len(itemRefs) + rm.Offset
12001178
}
1201-
1202-
json.OK(w, r, streamIDResponse{itemRefs, continuation})
1179+
return itemRefs, continuation, nil
12031180
}
12041181

12051182
func (h *handler) handleFeedStreamHandler(w http.ResponseWriter, r *http.Request, rm requestModifiers) {
@@ -1231,30 +1208,11 @@ func (h *handler) handleFeedStreamHandler(w http.ResponseWriter, r *http.Request
12311208
}
12321209
}
12331210
}
1234-
1235-
rawEntryIDs, err := builder.GetEntryIDs()
1236-
if err != nil {
1237-
json.ServerError(w, r, err)
1238-
return
1239-
}
1240-
1241-
var itemRefs = make([]itemRef, 0)
1242-
for _, entryID := range rawEntryIDs {
1243-
formattedID := strconv.FormatInt(entryID, 10)
1244-
itemRefs = append(itemRefs, itemRef{ID: formattedID})
1245-
}
1246-
1247-
totalEntries, err := builder.CountEntries()
1211+
itemRefs, continuation, err := getItemRefsAndContinuation(*builder, rm)
12481212
if err != nil {
12491213
json.ServerError(w, r, err)
12501214
return
12511215
}
1252-
1253-
continuation := 0
1254-
if len(itemRefs)+rm.Offset < totalEntries {
1255-
continuation = len(itemRefs) + rm.Offset
1256-
}
1257-
12581216
json.OK(w, r, streamIDResponse{itemRefs, continuation})
12591217
}
12601218

0 commit comments

Comments
 (0)