@gentbajko/slopify 3.10.0 → 3.10.1

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.
@@ -0,0 +1,18 @@
1
+ # Slopify 3.10.1
2
+
3
+ Released 4 October 2026.
4
+
5
+ ## YouTube Studio extension (1.2.2)
6
+
7
+ - **The schedule date sticks.** Studio stopped taking the date the extension typed on the Visibility step ("Studio didn't keep the date Slopify typed"). The extension now commits the date the way pressing Enter does, so the date and time are both set and you only press Schedule.
8
+ - **Shorts playlists.** Settings → Publishing → YouTube Studio warns when a playlist named for shorts is set to Videos and shorts: with that setting every short also went into your long-video playlists. Set it to Shorts only, and the long-video ones to Long videos only.
9
+
10
+ ## Opening a long project
11
+
12
+ - **No more freeze when opening a finished long project.** Working out which narration chunk each transcript line came from (for the pencil beside each line) re-read every chunk for every line: a two-hour project froze the page for about 7 seconds. It now takes a few milliseconds.
13
+
14
+ ## Upload status
15
+
16
+ - **One Studio video belongs to one upload.** When two projects have a short with the same title, the video Studio lists under that title was ticked as uploaded on both. Now a video already linked to a project's upload is never given to another.
17
+
18
+ Download the extension again from Settings → YouTube Studio and reload it.
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "id": "3.10.1",
4
+ "title": "Slopify 3.10.1",
5
+ "version": "3.10.1",
6
+ "date": "2026-10-04"
7
+ },
2
8
  {
3
9
  "id": "3.10.0",
4
10
  "title": "Slopify 3.10.0",
@@ -8,6 +8,12 @@ export function backfillVideos(deps, rows, at) {
8
8
  byTitle.set(norm(row.title), row.videoId);
9
9
  if (byTitle.size === 0)
10
10
  return 0;
11
+ // A video already linked to an upload is never claimed by another: two projects can have a
12
+ // short with the same title (a remake of a topic), and only one of them made that video.
13
+ const taken = new Set(deps.db
14
+ .prepare("SELECT video_id FROM youtube_videos")
15
+ .all()
16
+ .map((row) => String(row.video_id)));
11
17
  let found = 0;
12
18
  for (const project of listProjects(deps.db)) {
13
19
  const known = projectVideos(deps.db, project.id).filter((one) => one.uploadState === "done");
@@ -20,9 +26,10 @@ export function backfillVideos(deps, rows, at) {
20
26
  continue;
21
27
  const titles = item.pickable?.titles ?? [item.title, ...item.titles];
22
28
  const videoId = titles.map((one) => byTitle.get(norm(one))).find((one) => one !== undefined);
23
- if (videoId === undefined)
29
+ if (videoId === undefined || taken.has(videoId))
24
30
  continue;
25
31
  recordVideo(deps.db, project.id, short, videoId, at);
32
+ taken.add(videoId);
26
33
  found += 1;
27
34
  }
28
35
  }