subscriptions loaded per guild

This commit is contained in:
Corban-Lee Jones 2024-04-24 16:00:12 +01:00
parent a7dfc042a6
commit 397e02aa42
2 changed files with 246 additions and 165 deletions

View File

@ -23,6 +23,8 @@ async function ajaxRequest(url, method, data) {
}
}
// Saved Guilds
async function getSavedGuilds() {
return await ajaxRequest("/api/saved-guilds/", "GET");
}
@ -39,10 +41,30 @@ async function deleteSavedGuild(id) {
return await ajaxRequest(`/api/saved-guilds/${id}/`, "DELETE");
}
// Loading Guilds
async function loadGuilds() {
return await ajaxRequest("/guilds", "GET");
}
// Subscriptions
async function getSubscriptions(guildId) {
const url = `/api/subscription/?guild_id=${guildId}`;
return await ajaxRequest(url, "GET");
}
async function getSubscription(id) {
return await ajaxRequest(`/api/subscription/${id}/`, "GET");
}
async function newSubscription(formData) {
return await ajaxRequest("/api/subscription/", "POST", formData);
}
async function deleteSubscription(id) {
return await ajaxRequest(`/api/subscription/${id}/`, "DELETE");
}
// Old functions
@ -107,137 +129,137 @@ async function loadGuilds() {
// });
// }
function getSubscriptions() {
return new Promise(function(resolve, reject) {
$.ajax({
url: "/api/subscription/",
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function getSubscriptions() {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: "/api/subscription/",
// type: "GET",
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }
function getSubscription(uuid) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `/api/subscription/${uuid}/`,
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function getSubscription(uuid) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: `/api/subscription/${uuid}/`,
// type: "GET",
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }
function getServer(serverId) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `/api/serverlink/?server_id=${serverId}`,
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response.results[0]);
},
error: function(response) {
reject(response.results[0]);
}
});
});
}
// function getServer(serverId) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: `/api/serverlink/?server_id=${serverId}`,
// type: "GET",
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response.results[0]);
// },
// error: function(response) {
// reject(response.results[0]);
// }
// });
// });
// }
function newSubscription(formData) {
return new Promise(function(resolve, reject) {
$.ajax({
url: "/api/subscription/",
type: "POST",
data: formData,
processData: false,
contentType: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function newSubscription(formData) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: "/api/subscription/",
// type: "POST",
// data: formData,
// processData: false,
// contentType: false,
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }
function editSubscription(uuid, formData) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `/api/subscription/${uuid}/`,
type: "PUT",
data: formData,
processData: false,
contentType: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function editSubscription(uuid, formData) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: `/api/subscription/${uuid}/`,
// type: "PUT",
// data: formData,
// processData: false,
// contentType: false,
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }
function patchSubscription(uuid, formData) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `/api/subscription/${uuid}/`,
type: "PATCH",
data: formData,
processData: false,
contentType: false,
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function patchSubscription(uuid, formData) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: `/api/subscription/${uuid}/`,
// type: "PATCH",
// data: formData,
// processData: false,
// contentType: false,
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }
function deleteSubscription(uuid) {
return new Promise(function(resolve, reject) {
$.ajax({
url: `/api/subscription/${uuid}/`,
type: "DELETE",
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
},
success: function(response) {
resolve(response);
},
error: function(response) {
reject(response);
}
});
});
}
// function deleteSubscription(uuid) {
// return new Promise(function(resolve, reject) {
// $.ajax({
// url: `/api/subscription/${uuid}/`,
// type: "DELETE",
// beforeSend: function(xhr) {
// xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
// },
// success: function(response) {
// resolve(response);
// },
// error: function(response) {
// reject(response);
// }
// });
// });
// }

View File

@ -33,10 +33,10 @@ function initSubscriptionTable() {
{ title: "Name", data: "name" },
{ title: "URL", data: "url" },
{ title: "Channels", data: "channels_count" },
{ title: "Created", data: "created" },
{ title: "Created", data: "creation_datetime" },
{
title: "Notes",
data: "notes",
data: "extra_notes",
orderable: false,
className: "text-center",
render: function(data, type) {
@ -55,40 +55,40 @@ function initSubscriptionTable() {
]
});
subTable.rows.add([
{
name: "BBC News",
url: "https://feeds.bbci.co.uk/news/rss.xml",
channels_count: 3,
created: "13-03-2024",
notes: "No Description",
active: true
},
{
name: "BBC News - Entertainment",
url: "https://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml",
channels_count: 1,
created: "22-03-2024",
notes: "No Description",
active: true
},
{
name: "BBC News - Politics",
url: "https://feeds.bbci.co.uk/news/politics/rss.xml",
channels_count: 5,
created: "16-03-2024",
notes: "No Description",
active: true
},
{
name: "BBC News - North America",
url: "https://feeds.bbci.co.uk/news/north_america/rss.xml",
channels_count: 2,
created: "04-04-2024",
notes: "No Description",
active: true
}
]).draw(false);
// subTable.rows.add([
// {
// name: "BBC News",
// url: "https://feeds.bbci.co.uk/news/rss.xml",
// channels_count: 3,
// created: "13-03-2024",
// notes: "No Description",
// active: true
// },
// {
// name: "BBC News - Entertainment",
// url: "https://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml",
// channels_count: 1,
// created: "22-03-2024",
// notes: "No Description",
// active: true
// },
// {
// name: "BBC News - Politics",
// url: "https://feeds.bbci.co.uk/news/politics/rss.xml",
// channels_count: 5,
// created: "16-03-2024",
// notes: "No Description",
// active: true
// },
// {
// name: "BBC News - North America",
// url: "https://feeds.bbci.co.uk/news/north_america/rss.xml",
// channels_count: 2,
// created: "04-04-2024",
// notes: "No Description",
// active: true
// }
// ]).draw(false);
}
// Determine and apply the state of the 'select all' checkbox
@ -143,4 +143,63 @@ $("#tableButton").on("click", function() {
// Open new subscription modal
$("#tableAddRowBtn").on("click", function() {
$("#subFormModal").modal("show");
});
});
$("#subForm").on("submit", async function(event) {
event.preventDefault();
var name = $("#subName").val();
url = $("#subUrl").val();
guildId = $("#subGuildId").val();
extraNotes = $("#subExtraNotes").val();
var subPrimaryKey = await registerNewSubscription(name, url, guildId, extraNotes);
if (subPrimaryKey)
showToast("success", "subscription created", "created with ID: " + subPrimaryKey);
$("#subFormModal").modal("hide");
});
async function registerNewSubscription(name, url, guildId, extraNotes) {
var formData = new FormData();
formData.append("name", name);
formData.append("url", url);
formData.append("guild_id", guildId);
formData.append("extra_notes", extraNotes);
formData.append("active", true);
try { response = await newSubscription(formData); }
catch (err) {
// alert(JSON.stringify(err))
showToast("danger", "Subscription Error", err.responseText, 18000);
return false;
}
return response.id;
}
function clearExistingTableRows() {
subTable.clear().draw(false);
}
async function loadSubscriptions(guildId) {
if (!guildId)
return;
clearExistingTableRows();
try {
const subscriptions = await getSubscriptions(guildId);
subTable.rows.add(subscriptions.results).draw(false);
}
catch (err) {
console.error(JSON.stringify(error, null, 4));
showToast("danger", `Error Loading Subscriptions: HTTP ${error.status}`, error.responseJSON.message, 15000);
}
}
$(document).on("selectedServerChange", async function() {
const activeServer = getCurrentlyActiveServer();
await loadSubscriptions(activeServer.guild_id);
})