diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/src/app/shared/misc/utils.ts | 5 | ||||
-rw-r--r-- | client/src/app/videos/+video-edit/shared/video-edit.component.ts | 2 | ||||
-rw-r--r-- | client/src/assets/player/peertube-chunk-store.ts | 59 |
3 files changed, 41 insertions, 25 deletions
diff --git a/client/src/app/shared/misc/utils.ts b/client/src/app/shared/misc/utils.ts index b5bf99be2..b9aa223cf 100644 --- a/client/src/app/shared/misc/utils.ts +++ b/client/src/app/shared/misc/utils.ts | |||
@@ -66,6 +66,11 @@ function objectToFormData (obj: any, form?: FormData, namespace?: string) { | |||
66 | 66 | ||
67 | if (obj[key] === undefined) continue | 67 | if (obj[key] === undefined) continue |
68 | 68 | ||
69 | if (Array.isArray(obj[key]) && obj[key].length === 0) { | ||
70 | fd.append(key, null) | ||
71 | continue | ||
72 | } | ||
73 | |||
69 | if (obj[key] !== null && typeof obj[ key ] === 'object' && !(obj[ key ] instanceof File)) { | 74 | if (obj[key] !== null && typeof obj[ key ] === 'object' && !(obj[ key ] instanceof File)) { |
70 | objectToFormData(obj[ key ], fd, key) | 75 | objectToFormData(obj[ key ], fd, key) |
71 | } else { | 76 | } else { |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.ts b/client/src/app/videos/+video-edit/shared/video-edit.component.ts index af4438bd2..d4567e26c 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.ts | |||
@@ -80,7 +80,7 @@ export class VideoEditComponent implements OnInit { | |||
80 | this.form.addControl('licence', new FormControl('', VIDEO_LICENCE.VALIDATORS)) | 80 | this.form.addControl('licence', new FormControl('', VIDEO_LICENCE.VALIDATORS)) |
81 | this.form.addControl('language', new FormControl('', VIDEO_LANGUAGE.VALIDATORS)) | 81 | this.form.addControl('language', new FormControl('', VIDEO_LANGUAGE.VALIDATORS)) |
82 | this.form.addControl('description', new FormControl('', VIDEO_DESCRIPTION.VALIDATORS)) | 82 | this.form.addControl('description', new FormControl('', VIDEO_DESCRIPTION.VALIDATORS)) |
83 | this.form.addControl('tags', new FormControl('')) | 83 | this.form.addControl('tags', new FormControl([])) |
84 | this.form.addControl('thumbnailfile', new FormControl('')) | 84 | this.form.addControl('thumbnailfile', new FormControl('')) |
85 | this.form.addControl('previewfile', new FormControl('')) | 85 | this.form.addControl('previewfile', new FormControl('')) |
86 | this.form.addControl('support', new FormControl('', VIDEO_SUPPORT.VALIDATORS)) | 86 | this.form.addControl('support', new FormControl('', VIDEO_SUPPORT.VALIDATORS)) |
diff --git a/client/src/assets/player/peertube-chunk-store.ts b/client/src/assets/player/peertube-chunk-store.ts index 84fbaf146..e14e31c04 100644 --- a/client/src/assets/player/peertube-chunk-store.ts +++ b/client/src/assets/player/peertube-chunk-store.ts | |||
@@ -155,17 +155,17 @@ export class PeertubeChunkStore extends EventEmitter { | |||
155 | this.cleanerInterval = null | 155 | this.cleanerInterval = null |
156 | } | 156 | } |
157 | 157 | ||
158 | if (this.db) { | ||
159 | await this.db.close() | ||
160 | |||
161 | await this.dropDatabase(this.databaseName) | ||
162 | } | ||
163 | |||
158 | if (this.expirationDB) { | 164 | if (this.expirationDB) { |
159 | await this.expirationDB.close() | 165 | await this.expirationDB.close() |
160 | this.expirationDB = null | 166 | this.expirationDB = null |
161 | } | 167 | } |
162 | 168 | ||
163 | if (this.db) { | ||
164 | console.log('Destroying IndexDB database %s.', this.databaseName) | ||
165 | await this.db.close() | ||
166 | await this.db.delete() | ||
167 | } | ||
168 | |||
169 | return cb() | 169 | return cb() |
170 | } catch (err) { | 170 | } catch (err) { |
171 | console.error('Cannot destroy peertube chunk store.', err) | 171 | console.error('Cannot destroy peertube chunk store.', err) |
@@ -181,31 +181,42 @@ export class PeertubeChunkStore extends EventEmitter { | |||
181 | }, PeertubeChunkStore.CLEANER_INTERVAL_MS) | 181 | }, PeertubeChunkStore.CLEANER_INTERVAL_MS) |
182 | } | 182 | } |
183 | 183 | ||
184 | private checkExpiration () { | 184 | private async checkExpiration () { |
185 | this.expirationDB.transaction('rw', this.expirationDB.databases, async () => { | 185 | let databasesToDeleteInfo: { name: string }[] = [] |
186 | // Update our database expiration since we are alive | ||
187 | await this.expirationDB.databases.put({ | ||
188 | name: this.databaseName, | ||
189 | expiration: new Date().getTime() + PeertubeChunkStore.CLEANER_EXPIRATION_MS | ||
190 | }) | ||
191 | 186 | ||
192 | const now = new Date().getTime() | 187 | try { |
193 | const databasesToDeleteInfo = await this.expirationDB.databases.where('expiration').below(now).toArray() | 188 | await this.expirationDB.transaction('rw', this.expirationDB.databases, async () => { |
189 | // Update our database expiration since we are alive | ||
190 | await this.expirationDB.databases.put({ | ||
191 | name: this.databaseName, | ||
192 | expiration: new Date().getTime() + PeertubeChunkStore.CLEANER_EXPIRATION_MS | ||
193 | }) | ||
194 | 194 | ||
195 | for (const databaseToDeleteInfo of databasesToDeleteInfo) { | 195 | const now = new Date().getTime() |
196 | await this.dropDatabase(databaseToDeleteInfo.name) | 196 | databasesToDeleteInfo = await this.expirationDB.databases.where('expiration').below(now).toArray() |
197 | }) | ||
198 | } catch (err) { | ||
199 | console.error('Cannot update expiration of fetch expired databases.', err) | ||
200 | } | ||
197 | 201 | ||
198 | await this.expirationDB.databases.where({ name: databaseToDeleteInfo.name }).delete() | 202 | for (const databaseToDeleteInfo of databasesToDeleteInfo) { |
199 | } | 203 | await this.dropDatabase(databaseToDeleteInfo.name) |
200 | }).catch(err => console.error('Cannot check expiration.', err)) | 204 | } |
201 | } | 205 | } |
202 | 206 | ||
203 | private dropDatabase (databaseName: string) { | 207 | private async dropDatabase (databaseName: string) { |
204 | const dbToDelete = new ChunkDatabase(databaseName) | 208 | const dbToDelete = new ChunkDatabase(databaseName) |
209 | console.log('Destroying IndexDB database %s.', databaseName) | ||
205 | 210 | ||
206 | console.log('Deleting %s.', databaseName) | 211 | try { |
207 | return dbToDelete.delete() | 212 | await dbToDelete.delete() |
208 | .catch(err => console.error('Cannot delete %s.', databaseName)) | 213 | |
214 | await this.expirationDB.transaction('rw', this.expirationDB.databases, () => { | ||
215 | return this.expirationDB.databases.where({ name: databaseName }).delete() | ||
216 | }) | ||
217 | } catch (err) { | ||
218 | console.error('Cannot delete %s.', databaseName, err) | ||
219 | } | ||
209 | } | 220 | } |
210 | 221 | ||
211 | private nextTick (cb, err, val?) { | 222 | private nextTick (cb, err, val?) { |