mirror of
https://github.com/TeamPiped/Piped.git
synced 2024-12-22 21:43:37 +00:00
Merge pull request #3325 from Bnyro/fix-channel-id
fix: subscription groups use invalid channel id length
This commit is contained in:
commit
55fb472ba2
19
src/App.vue
19
src/App.vue
@ -36,7 +36,7 @@ export default {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if ("indexedDB" in window) {
|
if ("indexedDB" in window) {
|
||||||
const request = indexedDB.open("piped-db", 5);
|
const request = indexedDB.open("piped-db", 6);
|
||||||
request.onupgradeneeded = ev => {
|
request.onupgradeneeded = ev => {
|
||||||
const db = request.result;
|
const db = request.result;
|
||||||
console.log("Upgrading object store.");
|
console.log("Upgrading object store.");
|
||||||
@ -64,6 +64,23 @@ export default {
|
|||||||
const playlistVideosStore = db.createObjectStore("playlist_videos", { keyPath: "videoId" });
|
const playlistVideosStore = db.createObjectStore("playlist_videos", { keyPath: "videoId" });
|
||||||
playlistVideosStore.createIndex("videoId", "videoId", { unique: true });
|
playlistVideosStore.createIndex("videoId", "videoId", { unique: true });
|
||||||
}
|
}
|
||||||
|
// migration to fix an invalid previous length of channel ids: 11 -> 24
|
||||||
|
(async () => {
|
||||||
|
if (ev.oldVersion < 6) {
|
||||||
|
const subscriptions = await this.fetchSubscriptions();
|
||||||
|
const channelGroups = await this.getChannelGroups();
|
||||||
|
for (let group of channelGroups) {
|
||||||
|
for (let i = 0; i < group.channels.length; i++) {
|
||||||
|
const tooShortChannelId = group.channels[i];
|
||||||
|
const foundChannel = subscriptions.find(
|
||||||
|
channel => channel.url.substr(-11) == tooShortChannelId,
|
||||||
|
);
|
||||||
|
if (foundChannel) group.channels[i] = foundChannel.url.substr(-24);
|
||||||
|
}
|
||||||
|
this.createOrUpdateChannelGroup(group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
};
|
};
|
||||||
request.onsuccess = e => {
|
request.onsuccess = e => {
|
||||||
window.db = e.target.result;
|
window.db = e.target.result;
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<AddToGroupModal v-if="showGroupModal" :channel-id="channel.id.substr(-11)" @close="showGroupModal = false" />
|
<AddToGroupModal v-if="showGroupModal" :channel-id="channel.id.substr(-24)" @close="showGroupModal = false" />
|
||||||
</LoadingIndicatorPage>
|
</LoadingIndicatorPage>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@
|
|||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="checkbox"
|
class="checkbox"
|
||||||
:checked="selectedGroup.channels.includes(subscription.url.substr(-11))"
|
:checked="selectedGroup.channels.includes(subscription.url.substr(-24))"
|
||||||
@change="checkedChange(subscription)"
|
@change="checkedChange(subscription)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -138,7 +138,7 @@ export default {
|
|||||||
filteredSubscriptions(_this) {
|
filteredSubscriptions(_this) {
|
||||||
return _this.selectedGroup.groupName == ""
|
return _this.selectedGroup.groupName == ""
|
||||||
? _this.subscriptions
|
? _this.subscriptions
|
||||||
: _this.subscriptions.filter(channel => _this.selectedGroup.channels.includes(channel.url.substr(-11)));
|
: _this.subscriptions.filter(channel => _this.selectedGroup.channels.includes(channel.url.substr(-24)));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -157,28 +157,6 @@ export default {
|
|||||||
document.title = "Subscriptions - Piped";
|
document.title = "Subscriptions - Piped";
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async fetchSubscriptions() {
|
|
||||||
if (this.authenticated) {
|
|
||||||
return await this.fetchJson(this.authApiUrl() + "/subscriptions", null, {
|
|
||||||
headers: {
|
|
||||||
Authorization: this.getAuthToken(),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
const channels = this.getUnauthenticatedChannels();
|
|
||||||
const split = channels.split(",");
|
|
||||||
if (split.length > 100) {
|
|
||||||
return await this.fetchJson(this.authApiUrl() + "/subscriptions/unauthenticated", null, {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify(split),
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return await this.fetchJson(this.authApiUrl() + "/subscriptions/unauthenticated", {
|
|
||||||
channels: this.getUnauthenticatedChannels(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async loadChannelGroups() {
|
async loadChannelGroups() {
|
||||||
const groups = await this.getChannelGroups();
|
const groups = await this.getChannelGroups();
|
||||||
this.channelGroups.push(...groups);
|
this.channelGroups.push(...groups);
|
||||||
@ -254,7 +232,7 @@ export default {
|
|||||||
this.selectedGroup = this.channelGroups[0];
|
this.selectedGroup = this.channelGroups[0];
|
||||||
},
|
},
|
||||||
checkedChange(subscription) {
|
checkedChange(subscription) {
|
||||||
const channelId = subscription.url.substr(-11);
|
const channelId = subscription.url.substr(-24);
|
||||||
this.selectedGroup.channels = this.selectedGroup.channels.includes(channelId)
|
this.selectedGroup.channels = this.selectedGroup.channels.includes(channelId)
|
||||||
? this.selectedGroup.channels.filter(channel => channel != channelId)
|
? this.selectedGroup.channels.filter(channel => channel != channelId)
|
||||||
: this.selectedGroup.channels.concat(channelId);
|
: this.selectedGroup.channels.concat(channelId);
|
||||||
|
22
src/main.js
22
src/main.js
@ -236,6 +236,28 @@ const mixin = {
|
|||||||
const localSubscriptions = this.getLocalSubscriptions() ?? [];
|
const localSubscriptions = this.getLocalSubscriptions() ?? [];
|
||||||
return localSubscriptions.join(",");
|
return localSubscriptions.join(",");
|
||||||
},
|
},
|
||||||
|
async fetchSubscriptions() {
|
||||||
|
if (this.authenticated) {
|
||||||
|
return await this.fetchJson(this.authApiUrl() + "/subscriptions", null, {
|
||||||
|
headers: {
|
||||||
|
Authorization: this.getAuthToken(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const channels = this.getUnauthenticatedChannels();
|
||||||
|
const split = channels.split(",");
|
||||||
|
if (split.length > 100) {
|
||||||
|
return await this.fetchJson(this.authApiUrl() + "/subscriptions/unauthenticated", null, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(split),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return await this.fetchJson(this.authApiUrl() + "/subscriptions/unauthenticated", {
|
||||||
|
channels: this.getUnauthenticatedChannels(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
/* generate a temporary file and ask the user to download it */
|
/* generate a temporary file and ask the user to download it */
|
||||||
download(text, filename, mimeType) {
|
download(text, filename, mimeType) {
|
||||||
var file = new Blob([text], { type: mimeType });
|
var file = new Blob([text], { type: mimeType });
|
||||||
|
Loading…
Reference in New Issue
Block a user