]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/plugins/register-helpers.ts
Add ability to delete previously added constants
[github/Chocobozzz/PeerTube.git] / server / lib / plugins / register-helpers.ts
index f5b5733702105ad1a53d0cf029c61deb8b5ccf20..09275f9ba8ea6e59a268bc9b2a5243931e8f980b 100644 (file)
@@ -37,18 +37,20 @@ type VideoConstant = { [key in number | string]: string }
 
 type UpdatedVideoConstant = {
   [name in AlterableVideoConstant]: {
-    added: { key: number | string, label: string }[]
-    deleted: { key: number | string, label: string }[]
+    [ npmName: string]: {
+      added: { key: number | string, label: string }[]
+      deleted: { key: number | string, label: string }[]
+    }
   }
 }
 
 export class RegisterHelpers {
   private readonly updatedVideoConstants: UpdatedVideoConstant = {
-    playlistPrivacy: { added: [], deleted: [] },
-    privacy: { added: [], deleted: [] },
-    language: { added: [], deleted: [] },
-    licence: { added: [], deleted: [] },
-    category: { added: [], deleted: [] }
+    playlistPrivacy: { },
+    privacy: { },
+    language: { },
+    licence: { },
+    category: { }
   }
 
   private readonly transcodingProfiles: {
@@ -377,7 +379,7 @@ export class RegisterHelpers {
     const { npmName, type, obj, key } = parameters
 
     if (!obj[key]) {
-      logger.warn('Cannot delete %s %s by plugin %s: key does not exist.', type, npmName, key)
+      logger.warn('Cannot delete %s by plugin %s: key %s does not exist.', type, npmName, key)
       return false
     }
 
@@ -388,7 +390,15 @@ export class RegisterHelpers {
       }
     }
 
-    this.updatedVideoConstants[type][npmName].deleted.push({ key, label: obj[key] })
+    const updatedConstants = this.updatedVideoConstants[type][npmName]
+
+    const alreadyAdded = updatedConstants.added.find(a => a.key === key)
+    if (alreadyAdded) {
+      updatedConstants.added.filter(a => a.key !== key)
+    } else if (obj[key]) {
+      updatedConstants.deleted.push({ key, label: obj[key] })
+    }
+
     delete obj[key]
 
     return true