File tree 4 files changed +36
-1
lines changed
4 files changed +36
-1
lines changed Original file line number Diff line number Diff line change @@ -78,6 +78,7 @@ ctrl.rss = async (ctx, next) => {
78
78
throw new Error ( 'NOT_SUB' ) ;
79
79
}
80
80
let builder = [ ] ;
81
+
81
82
builder . push ( `<strong>${ i18n [ 'SUB_LIST' ] } </strong>` ) ;
82
83
if ( raw ) {
83
84
feeds . forEach ( ( feed ) => {
Original file line number Diff line number Diff line change @@ -12,6 +12,8 @@ module.exports = async (ctx, next) => {
12
12
} else {
13
13
try {
14
14
const res = await got . get ( url ) ;
15
+ // handle redirect
16
+ ctx . state . feedUrl = decodeURI ( res . url ) ;
15
17
const parser = new Parser ( ) ;
16
18
let feed = await parser . parseString ( res . body ) ;
17
19
delete feed . items ;
Original file line number Diff line number Diff line change @@ -220,4 +220,31 @@ px.getAllFeedsCount = async () => {
220
220
}
221
221
} ;
222
222
223
+ px . handleRedirect = async ( url , realUrl ) => {
224
+ try {
225
+ const db = await dbPomise ;
226
+ const oldFeed = await db . get ( `SELECT * FROM rss_feed WHERE url=?` , url ) ;
227
+ const realFeed = await db . get (
228
+ `SELECT * FROM rss_feed WHERE url=?` ,
229
+ realUrl
230
+ ) ;
231
+ if ( realFeed ) {
232
+ await db . run (
233
+ `UPDATE subscribes SET feed_id=? WHERE feed_id=?` ,
234
+ realFeed . feed_id ,
235
+ oldFeed . feed_id
236
+ ) ;
237
+ await db . run ( `DELETE FROM rss_feed WHERE url=?` , oldFeed . url ) ;
238
+ } else {
239
+ await db . run (
240
+ `UPDATE rss_feed SET url=? WHERE url=?` ,
241
+ realUrl ,
242
+ oldFeed . url
243
+ ) ;
244
+ }
245
+ } catch ( e ) {
246
+ throw new Error ( 'DB_ERROR' ) ;
247
+ }
248
+ } ;
249
+
223
250
module . exports = px ;
Original file line number Diff line number Diff line change @@ -10,7 +10,8 @@ const {
10
10
updateHashList,
11
11
failAttempt,
12
12
getFeedByUrl,
13
- resetErrorCount
13
+ resetErrorCount,
14
+ handleRedirect
14
15
} = require ( '../proxies/rssFeed' ) ;
15
16
const {
16
17
notify_error_count,
@@ -23,6 +24,10 @@ const fetch = async (feedUrl) => {
23
24
try {
24
25
logger . debug ( `fetching ${ feedUrl } ` ) ;
25
26
const res = await got . get ( encodeURI ( feedUrl ) ) ;
27
+ // handle redirect
28
+ if ( encodeURI ( feedUrl ) !== res . url ) {
29
+ await handleRedirect ( feedUrl , decodeURI ( res . url ) ) ;
30
+ }
26
31
const parser = new Parser ( ) ;
27
32
const feed = await parser . parseString ( res . body ) ;
28
33
const items = feed . items . slice ( 0 , item_num ) ;
You can’t perform that action at this time.
0 commit comments