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
584585func (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
592592func (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
12051182func (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