@gentbajko/slopify 3.7.1 → 3.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/edge/http/studio.js +4 -6
- package/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/patch-notes/3.7.2.md +11 -0
- package/dist/patch-notes/index.json +6 -0
- package/dist/slices/studio/queue.js +6 -4
- package/dist/web/assets/{index-glbbg3ZG.js → index-BB3oaUR6.js} +1 -1
- package/dist/web/assets/{index-CC9XywV_.css → index-DWA0T3Ai.css} +1 -1
- package/dist/web/assets/{pdf-B6O50xdO.js → pdf-DduTO1_g.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
package/dist/edge/http/studio.js
CHANGED
|
@@ -19,7 +19,7 @@ import { channelPerformance } from "../../slices/studio/performance.js";
|
|
|
19
19
|
import { writeUploadPick } from "../../slices/studio/pick.js";
|
|
20
20
|
import { postingPlanSchema, readPlan, writePlan } from "../../slices/studio/plan.js";
|
|
21
21
|
import { leadHoursMax, seriesOf } from "../../slices/studio/plan-model.js";
|
|
22
|
-
import { enqueueFill,
|
|
22
|
+
import { enqueueFill, fillOnly, readFillQueue, removeFill, } from "../../slices/studio/queue.js";
|
|
23
23
|
import { allReleases, freeSlots, planReleases, readLeadHours, releasesOf, setRelease, swapReleases, writeLeadHours, } from "../../slices/studio/releases.js";
|
|
24
24
|
import { parseStudioExport, readReport, saveReport } from "../../slices/studio/report.js";
|
|
25
25
|
import { autoCommentKey, bearerToken, isExtensionOrigin, pairStudioExtension, readChannelPlaylists, readStudioPlaylists, resetStudioPairing, saveProjectPlaylists, saveRealFootage, saveStudioPlaylists, studioPairing, studioPlaylistsMax, studioPlaylistsProblem, studioRequestAllowed, } from "../../slices/studio/settings.js";
|
|
@@ -639,7 +639,7 @@ export function studioRoutes(deps) {
|
|
|
639
639
|
});
|
|
640
640
|
return c.json({ projects });
|
|
641
641
|
})
|
|
642
|
-
// The popup's click: that upload
|
|
642
|
+
// The popup's click: only that upload waits, and the extension opens Studio's
|
|
643
643
|
// upload page, where the dialog takes it.
|
|
644
644
|
.post("/ext/upload", zValidator("json", queueItemBody, onInvalid), (c) => {
|
|
645
645
|
allowOrigin(c, false);
|
|
@@ -654,7 +654,7 @@ export function studioRoutes(deps) {
|
|
|
654
654
|
detail: "That upload isn't in the project any more. Open the popup again.",
|
|
655
655
|
});
|
|
656
656
|
planned(projectId);
|
|
657
|
-
|
|
657
|
+
fillOnly(deps.db, [{ projectId, short: short ?? null }], deps.clock.now());
|
|
658
658
|
return c.json({ url: studioUploadUrl });
|
|
659
659
|
})
|
|
660
660
|
// The popup's Upload all Shorts: each short not on YouTube yet waits, in order, and the
|
|
@@ -671,9 +671,7 @@ export function studioRoutes(deps) {
|
|
|
671
671
|
const shorts = result.pack.items.filter((item) => item.kind === "short" &&
|
|
672
672
|
item.video !== null &&
|
|
673
673
|
videoOf(deps.db, projectId, item.short ?? null)?.uploadState !== "done");
|
|
674
|
-
|
|
675
|
-
for (const item of shorts.toReversed())
|
|
676
|
-
fillNow(deps.db, projectId, item.short ?? null, deps.clock.now());
|
|
674
|
+
fillOnly(deps.db, shorts.map((item) => ({ projectId, short: item.short ?? null })), deps.clock.now());
|
|
677
675
|
return c.json({ url: studioUploadUrl, count: shorts.length });
|
|
678
676
|
})
|
|
679
677
|
// One project's upload pack, for a Studio page opened for one of its uploads.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Slopify 3.7.2
|
|
2
|
+
|
|
3
|
+
Released 4 October 2026.
|
|
4
|
+
|
|
5
|
+
## YouTube Studio extension
|
|
6
|
+
|
|
7
|
+
- **Upload one uploads one.** The extension's Upload now leaves only that video waiting, and Upload all Shorts only that project's shorts. Before, anything left waiting from an earlier click stayed in line, and the next upload dialogs took it. Together with extension 1.1.3 (one video per upload dialog), shorts go up strictly one at a time. If you're still on 1.1.2, download the extension again from Settings → YouTube Studio and reload it.
|
|
8
|
+
|
|
9
|
+
## Layout
|
|
10
|
+
|
|
11
|
+
- **The sidebar always reaches the bottom of the window.** In a short or zoomed window scrolled to the end, the sidebar could stop partway down and leave an empty band.
|
|
@@ -67,10 +67,12 @@ export function removeFill(db, projectId, short, now) {
|
|
|
67
67
|
write(db, queueKey(db), next);
|
|
68
68
|
return next;
|
|
69
69
|
}
|
|
70
|
-
// The
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const next =
|
|
70
|
+
// The popup's Upload or Upload all: only these wait, in this order, and anything left from an
|
|
71
|
+
// earlier pick is dropped, so Studio's upload dialogs never take more than was asked for.
|
|
72
|
+
export function fillOnly(db, items, now) {
|
|
73
|
+
const next = items
|
|
74
|
+
.slice(0, fillQueueMax)
|
|
75
|
+
.map((item) => ({ projectId: item.projectId, short: item.short, at: now.toISOString() }));
|
|
74
76
|
write(db, queueKey(db), next);
|
|
75
77
|
return next;
|
|
76
78
|
}
|