From 6f2c0a22e9a42b1e1e56d184afccdab5e7923245 Mon Sep 17 00:00:00 2001
From: hymbz <hymbz3516@gmail.com>
Date: Tue, 17 Oct 2023 02:45:09 +0800
Subject: [PATCH] fix greasyfork 404 bug (#9632)

---
 services/greasyfork/greasyfork-base.js         | 18 +++++++++++++-----
 .../greasyfork/greasyfork-downloads.tester.js  |  4 ++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/services/greasyfork/greasyfork-base.js b/services/greasyfork/greasyfork-base.js
index a9c474647c..ff1ae77394 100644
--- a/services/greasyfork/greasyfork-base.js
+++ b/services/greasyfork/greasyfork-base.js
@@ -1,6 +1,6 @@
 import Joi from 'joi'
 import { nonNegativeInteger } from '../validators.js'
-import { BaseJsonService } from '../index.js'
+import { BaseJsonService, NotFound } from '../index.js'
 
 const schema = Joi.object({
   daily_installs: nonNegativeInteger,
@@ -16,9 +16,17 @@ export default class BaseGreasyForkService extends BaseJsonService {
   static defaultBadgeData = { label: 'greasy fork' }
 
   async fetch({ scriptId }) {
-    return this._requestJson({
-      schema,
-      url: `https://greasyfork.org/scripts/${scriptId}.json`,
-    })
+    try {
+      return await this._requestJson({
+        schema,
+        url: `https://greasyfork.org/scripts/${scriptId}.json`,
+      })
+    } catch (e) {
+      if (!(e instanceof NotFound)) throw e
+      return this._requestJson({
+        schema,
+        url: `https://sleazyfork.org/scripts/${scriptId}.json`,
+      })
+    }
   }
 }
diff --git a/services/greasyfork/greasyfork-downloads.tester.js b/services/greasyfork/greasyfork-downloads.tester.js
index dc69e7c1cb..ad8102e844 100644
--- a/services/greasyfork/greasyfork-downloads.tester.js
+++ b/services/greasyfork/greasyfork-downloads.tester.js
@@ -17,3 +17,7 @@ t.create('Total Installs')
 t.create('Total Installs (not found)')
   .get('/dt/000000.json')
   .expectBadge({ label: 'installs', message: 'not found' })
+
+t.create('Total Installs (sleazyfork)')
+  .get('/dt/374903.json')
+  .expectBadge({ label: 'installs', message: isMetric })
-- 
GitLab