From 6bfcdd06c8d97e3f7566b1f34b4c6b5701adabea Mon Sep 17 00:00:00 2001 From: bkfox Date: Tue, 26 Mar 2024 17:47:32 +0100 Subject: [PATCH] create EpisodeSound & adapt; update list editors --- aircox/models/sound.py | 5 ++-- aircox/static/aircox/js/chunk-common.js | 2 +- .../aircox/dashboard/soundlist_editor.html | 1 - aircox/views/episode.py | 2 +- assets/src/components/ASelectFile.vue | 27 +++++++++---------- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/aircox/models/sound.py b/aircox/models/sound.py index b3f807e..afe032c 100644 --- a/aircox/models/sound.py +++ b/aircox/models/sound.py @@ -12,8 +12,6 @@ from aircox.conf import settings from .program import Program from .file import File, FileQuerySet -from .track import Track -from .controllers.playlist_import import PlaylistImport __all__ = ("Sound", "SoundQuerySet") @@ -133,6 +131,9 @@ class Sound(File): Use provided sound's metadata if any and no csv file has been found. """ + from aircox.controllers.playlist_import import PlaylistImport + from .track import Track + if self.track_set.count() > 1: return diff --git a/aircox/static/aircox/js/chunk-common.js b/aircox/static/aircox/js/chunk-common.js index 2dfcc90..74a5b84 100644 --- a/aircox/static/aircox/js/chunk-common.js +++ b/aircox/static/aircox/js/chunk-common.js @@ -365,7 +365,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-upload\"\n})], -1 /* HOISTED */);\nconst _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_3 = {\n class: \"a-select-file\"\n};\nconst _hoisted_4 = {\n key: 0\n};\nconst _hoisted_5 = [\"onClick\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"mr-3\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_file_upload = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-file-upload\");\n const _component_a_action_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-action-button\");\n const _component_a_modal = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-modal\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_modal, {\n ref: \"modal\",\n title: $props.title\n }, {\n bar: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [$data.panel == $data.LIST ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n type: \"button\",\n class: \"button small mr-3\",\n onClick: _cache[0] || (_cache[0] = $event => $options.showPanel($data.UPLOAD))\n }, [_hoisted_1, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.upload), 1 /* TEXT */)])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 1,\n type: \"button\",\n class: \"button small mr-3\",\n onClick: _cache[1] || (_cache[1] = $event => $options.showPanel($data.LIST))\n }, [_hoisted_2, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.list), 1 /* TEXT */)]))]),\n\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [$data.panel == $data.UPLOAD ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_file_upload, {\n key: 0,\n ref: \"upload\",\n url: $props.uploadUrl,\n label: $props.uploadLabel,\n \"field-name\": $props.uploadFieldName,\n onLoad: $options.uploadDone\n }, {\n form: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"upload-form\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n preview: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"upload-preview\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"url\", \"label\", \"field-name\", \"onLoad\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n ref: \"list\",\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['a-select-file-list', $props.listClass])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" tiles \"), $data.prevUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: \"#\",\n onClick: _cache[2] || (_cache[2] = $event => $options.load($data.prevUrl))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.show_previous), 1 /* TEXT */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.items, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: item.id,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['file-preview', this.item && item.id == this.item.id && 'active']),\n onClick: $event => $options.select(item)\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {\n item: item,\n load: $options.load,\n lastUrl: $data.lastUrl\n }), $props.deleteUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_action_button, {\n key: 0,\n class: \"has-text-danger small float-right\",\n icon: \"fa fa-trash\",\n confirm: $props.labels.confirm_delete,\n method: \"DELETE\",\n url: $props.deleteUrl.replace('123', item.id),\n onDone: _cache[3] || (_cache[3] = $event => $options.load($data.lastUrl))\n }, null, 8 /* PROPS */, [\"confirm\", \"url\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 10 /* CLASS, PROPS */, _hoisted_5);\n }), 128 /* KEYED_FRAGMENT */)), $data.nextUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: \"#\",\n onClick: _cache[4] || (_cache[4] = $event => $options.load($data.nextUrl))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.show_next), 1 /* TEXT */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 2 /* CLASS */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.panel == $data.LIST]])])]),\n footer: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"footer\", {\n item: $data.item\n }, () => [$data.item ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.item.name), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), $data.panel == $data.LIST ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n type: \"button\",\n class: \"button align-right\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.selected && $options.selected(...args))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.select_file), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"title\"]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASelectFile.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _hoisted_1 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-upload\"\n})], -1 /* HOISTED */);\nconst _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_3 = {\n key: 1,\n class: \"a-select-file\"\n};\nconst _hoisted_4 = {\n key: 0\n};\nconst _hoisted_5 = [\"onClick\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"mr-3\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_file_upload = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-file-upload\");\n const _component_a_action_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-action-button\");\n const _component_a_modal = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-modal\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_modal, {\n ref: \"modal\",\n title: $props.title\n }, {\n bar: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [$data.panel == $data.LIST ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n type: \"button\",\n class: \"button small mr-3\",\n onClick: _cache[0] || (_cache[0] = $event => $options.showPanel($data.UPLOAD))\n }, [_hoisted_1, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.upload), 1 /* TEXT */)])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 1,\n type: \"button\",\n class: \"button small mr-3\",\n onClick: _cache[1] || (_cache[1] = $event => $options.showPanel($data.LIST))\n }, [_hoisted_2, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.list), 1 /* TEXT */)]))]),\n\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [$data.panel == $data.UPLOAD ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_file_upload, {\n key: 0,\n ref: \"upload\",\n url: $props.uploadUrl,\n label: $props.uploadLabel,\n \"field-name\": $props.uploadFieldName,\n onLoad: $options.uploadDone\n }, {\n form: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"upload-form\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n preview: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"upload-preview\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"url\", \"label\", \"field-name\", \"onLoad\"])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n ref: \"list\",\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['a-select-file-list', $props.listClass])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" tiles \"), $data.prevUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: \"#\",\n onClick: _cache[2] || (_cache[2] = $event => $options.load($data.prevUrl))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.show_previous), 1 /* TEXT */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.items, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: item.id,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['file-preview', this.item && item.id == this.item.id && 'active']),\n onClick: $event => $options.select(item)\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {\n item: item,\n load: $options.load,\n lastUrl: $data.lastUrl\n }), $props.deleteUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_a_action_button, {\n key: 0,\n class: \"has-text-danger small float-right\",\n icon: \"fa fa-trash\",\n confirm: $props.labels.confirm_delete,\n method: \"DELETE\",\n url: $props.deleteUrl.replace('123', item.id),\n onDone: _cache[3] || (_cache[3] = $event => $options.load($data.lastUrl))\n }, null, 8 /* PROPS */, [\"confirm\", \"url\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 10 /* CLASS, PROPS */, _hoisted_5);\n }), 128 /* KEYED_FRAGMENT */)), $data.nextUrl ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: \"#\",\n onClick: _cache[4] || (_cache[4] = $event => $options.load($data.nextUrl))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.show_next), 1 /* TEXT */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)], 2 /* CLASS */)]))]),\n\n footer: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"footer\", {\n item: $data.item\n }, () => [$data.item ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.item.name), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), $data.panel == $data.LIST ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"button\", {\n key: 0,\n type: \"button\",\n class: \"button align-right\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.selected && $options.selected(...args))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.labels.select_file), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"title\"]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASelectFile.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), diff --git a/aircox/templates/aircox/dashboard/soundlist_editor.html b/aircox/templates/aircox/dashboard/soundlist_editor.html index 9053df1..c5e7c7f 100644 --- a/aircox/templates/aircox/dashboard/soundlist_editor.html +++ b/aircox/templates/aircox/dashboard/soundlist_editor.html @@ -17,7 +17,6 @@ Context: {% block tag-attrs %} {{ block.super }} -list-url="{% url "api:episodesound-list" %}" sound-list-url="{% url "api:sound-list" %}?program={{ object.parent_id }}" sound-upload-url="{% url "api:sound-list" %}" sound-delete-url="{% url "api:sound-detail" pk=123 %}" diff --git a/aircox/views/episode.py b/aircox/views/episode.py index 2755f10..d57b63f 100644 --- a/aircox/views/episode.py +++ b/aircox/views/episode.py @@ -73,7 +73,7 @@ class EpisodeUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView): return forms.TrackFormSet(**kwargs) def get_soundlist_queryset(self, episode): - return episode.episodesound_set.all().select_related("sound").order_by("-broadcast", "position") + return episode.episodesound_set.all().select_related("sound").order_by("position") def get_soundlist_formset(self, episode, **kwargs): kwargs.update( diff --git a/assets/src/components/ASelectFile.vue b/assets/src/components/ASelectFile.vue index 47f058c..19a61aa 100644 --- a/assets/src/components/ASelectFile.vue +++ b/assets/src/components/ASelectFile.vue @@ -18,20 +18,19 @@