Преглед изворни кода

handle duplicate media files

Mike L пре 3 година
родитељ
комит
3bc776884e
2 измењених фајлова са 20 додато и 3 уклоњено
  1. 11 1
      dist/wiki.js
  2. 9 2
      src/wiki.ts

+ 11 - 1
dist/wiki.js

@@ -95,7 +95,17 @@ class default_1 {
                         return this.bot.simpleUpload({
                             file: mediaFileName,
                             filename,
-                        }).then(() => filename);
+                        })
+                            .then(() => filename)
+                            .catch(error => {
+                            if (error instanceof mediawiki2_1.WikiError && error.data.result === 'Warning') {
+                                const { duplicate } = error.data.warnings;
+                                if (duplicate)
+                                    return duplicate[0];
+                            }
+                            else
+                                throw error;
+                        });
                     });
                     mediaItems.push(mediaPromise);
                 });

+ 9 - 2
src/wiki.ts

@@ -1,7 +1,7 @@
 import axios from 'axios';
 import fetchCookie = require('fetch-cookie');
 import { writeFileSync } from 'fs';
-import { MWBot } from 'mediawiki2';
+import { MWBot, WikiError } from 'mediawiki2';
 import nodeFetch from 'node-fetch';
 import { firefox } from 'playwright';
 import { CookieJar } from 'tough-cookie';
@@ -108,7 +108,14 @@ export default class {
               return this.bot.simpleUpload({
                 file: mediaFileName,
                 filename,
-              }).then(() => filename)
+              })
+                .then(() => filename)
+                .catch(error => {
+                  if (error instanceof WikiError && error.data.result === 'Warning') {
+                    const {duplicate} = error.data.warnings;
+                    if (duplicate) return duplicate[0];
+                  } else throw error;
+                })
             });
           mediaItems.push(mediaPromise);
         });