Compare commits

...

4 Commits

Author SHA1 Message Date
8b58e7dd13 Website: On Download Chapters only show chapters that have not yet been downloaded
API: Added new variables to /Publications/GetChapters: onlyNew and onlyExisting. API will return only new, only existing or all chapters depending on variables.
#19
2023-06-15 17:14:20 +02:00
b571bfa43d Moved GetNewChaptersList to taskManager and added GetExistingChaptersList 2023-06-15 17:07:32 +02:00
088d1c4647 Derived Constructor 2023-06-15 17:06:41 +02:00
f280c01802 Browser Version for both windows and linux 2023-06-15 16:30:07 +02:00
6 changed files with 56 additions and 57 deletions

View File

@ -75,7 +75,7 @@ app.MapGet("/Publications/GetFromConnector", (string connectorName, string title
return taskManager.GetPublicationsFromConnector(connector, title); return taskManager.GetPublicationsFromConnector(connector, title);
}); });
app.MapGet("/Publications/GetChapters", (string connectorName, string internalId, string? language) => app.MapGet("/Publications/GetChapters", (string connectorName, string internalId, bool onlyNew, bool onlyExisting, string? language) =>
{ {
Connector? connector = taskManager.GetAvailableConnectors().FirstOrDefault(con => con.Key == connectorName).Value; Connector? connector = taskManager.GetAvailableConnectors().FirstOrDefault(con => con.Key == connectorName).Value;
if (connector is null) if (connector is null)
@ -83,7 +83,13 @@ app.MapGet("/Publications/GetChapters", (string connectorName, string internalId
Publication? publication = taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId); Publication? publication = taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId);
if (publication is null) if (publication is null)
return Array.Empty<Chapter>(); return Array.Empty<Chapter>();
return connector.GetChapters((Publication)publication, language??"en");
if(onlyNew)
return taskManager.GetNewChaptersList(connector, (Publication)publication, language??"en").ToArray();
else if (onlyExisting)
return taskManager.GetExistingChaptersList(connector, (Publication)publication, language ?? "en").ToArray();
else
return connector.GetChapters((Publication)publication, language??"en");
}); });
app.MapGet("/Tasks/GetTypes", () => Enum.GetNames(typeof(TrangaTask.Task))); app.MapGet("/Tasks/GetTypes", () => Enum.GetNames(typeof(TrangaTask.Task)));

View File

@ -14,7 +14,7 @@ public class Mangasee : Connector
{ {
public override string name { get; } public override string name { get; }
private IBrowser? _browser = null; private IBrowser? _browser = null;
private const string ChromiumVersion = "1153303"; private const string ChromiumVersion = "1154303";
public Mangasee(string downloadLocation, string imageCachePath, Logger? logger) : base(downloadLocation, public Mangasee(string downloadLocation, string imageCachePath, Logger? logger) : base(downloadLocation,
imageCachePath, logger) imageCachePath, logger)

View File

@ -26,20 +26,24 @@ public class TaskManager
/// <param name="imageCachePath">Path to the cover-image cache</param> /// <param name="imageCachePath">Path to the cover-image cache</param>
/// <param name="libraryManagers"></param> /// <param name="libraryManagers"></param>
/// <param name="logger"></param> /// <param name="logger"></param>
public TaskManager(string downloadFolderPath, string workingDirectory, string imageCachePath, HashSet<LibraryManager> libraryManagers, Logger? logger = null) public TaskManager(string downloadFolderPath, string workingDirectory, string imageCachePath, HashSet<LibraryManager> libraryManagers, Logger? logger = null) : this(new TrangaSettings(downloadFolderPath, workingDirectory, libraryManagers), logger)
{
}
public TaskManager(TrangaSettings settings, Logger? logger = null)
{ {
this.logger = logger; this.logger = logger;
this.settings = new TrangaSettings(downloadFolderPath, workingDirectory, libraryManagers);
ExportDataAndSettings();
this._connectors = new Connector[] this._connectors = new Connector[]
{ {
new MangaDex(downloadFolderPath, imageCachePath, logger), new MangaDex(settings.downloadLocation, settings.coverImageCache, logger),
new Manganato(downloadFolderPath, imageCachePath, logger), new Manganato(settings.downloadLocation, settings.coverImageCache, logger),
new Mangasee(downloadFolderPath, imageCachePath, logger) new Mangasee(settings.downloadLocation, settings.coverImageCache, logger)
}; };
this.settings = settings;
ImportData();
ExportDataAndSettings();
Thread taskChecker = new(TaskCheckerThread); Thread taskChecker = new(TaskCheckerThread);
taskChecker.Start(); taskChecker.Start();
} }
@ -61,23 +65,6 @@ public class TaskManager
ExportDataAndSettings(); ExportDataAndSettings();
} }
public TaskManager(TrangaSettings settings, Logger? logger = null)
{
this.logger = logger;
this._connectors = new Connector[]
{
new MangaDex(settings.downloadLocation, settings.coverImageCache, logger),
new Manganato(settings.downloadLocation, settings.coverImageCache, logger),
new Mangasee(settings.downloadLocation, settings.coverImageCache, logger)
};
this.settings = settings;
ImportData();
ExportDataAndSettings();
Thread taskChecker = new(TaskCheckerThread);
taskChecker.Start();
}
/// <summary> /// <summary>
/// Runs continuously until shutdown. /// Runs continuously until shutdown.
/// Checks if tasks have to be executed (time elapsed) /// Checks if tasks have to be executed (time elapsed)
@ -385,6 +372,31 @@ public class TaskManager
return this.chapterCollection.Keys.ToArray(); return this.chapterCollection.Keys.ToArray();
} }
/// <summary>
/// Updates the available Chapters of a Publication
/// </summary>
/// <param name="connector">Connector to use</param>
/// <param name="publication">Publication to check</param>
/// <param name="language">Language to receive chapters for</param>
/// <returns>List of Chapters that were previously not in collection</returns>
public List<Chapter> GetNewChaptersList(Connector connector, Publication publication, string language)
{
List<Chapter> newChaptersList = new();
chapterCollection.TryAdd(publication, newChaptersList); //To ensure publication is actually in collection
Chapter[] newChapters = connector.GetChapters(publication, language);
newChaptersList = newChapters.Where(nChapter => !connector.CheckChapterIsDownloaded(publication, nChapter)).ToList();
return newChaptersList;
}
public List<Chapter> GetExistingChaptersList(Connector connector, Publication publication, string language)
{
Chapter[] newChapters = connector.GetChapters(publication, language);
return newChapters.Where(nChapter => connector.CheckChapterIsDownloaded(publication, nChapter)).ToList();
}
/// <summary> /// <summary>
/// Return Connector with given Name /// Return Connector with given Name
/// </summary> /// </summary>

View File

@ -24,7 +24,7 @@ public class DownloadNewChaptersTask : TrangaTask
//Check if Publication already has a Folder //Check if Publication already has a Folder
pub.CreatePublicationFolder(taskManager.settings.downloadLocation); pub.CreatePublicationFolder(taskManager.settings.downloadLocation);
List<Chapter> newChapters = GetNewChaptersList(connector, pub, language!, ref taskManager.chapterCollection); List<Chapter> newChapters = taskManager.GetNewChaptersList(connector, pub, language!);
connector.CopyCoverFromCacheToDownloadLocation(pub, taskManager.settings); connector.CopyCoverFromCacheToDownloadLocation(pub, taskManager.settings);
@ -38,25 +38,6 @@ public class DownloadNewChaptersTask : TrangaTask
} }
} }
/// <summary>
/// Updates the available Chapters of a Publication
/// </summary>
/// <param name="connector">Connector to use</param>
/// <param name="publication">Publication to check</param>
/// <param name="language">Language to receive chapters for</param>
/// <param name="chapterCollection"></param>
/// <returns>List of Chapters that were previously not in collection</returns>
private static List<Chapter> GetNewChaptersList(Connector connector, Publication publication, string language, ref Dictionary<Publication, List<Chapter>> chapterCollection)
{
List<Chapter> newChaptersList = new();
chapterCollection.TryAdd(publication, newChaptersList); //To ensure publication is actually in collection
Chapter[] newChapters = connector.GetChapters(publication, language);
newChaptersList = newChapters.Where(nChapter => !connector.CheckChapterIsDownloaded(publication, nChapter)).ToList();
return newChaptersList;
}
public override string ToString() public override string ToString()
{ {
return $"{base.ToString()}, {connectorName}, {publication.sortName} {publication.internalId}"; return $"{base.ToString()}, {connectorName}, {publication.sortName} {publication.internalId}";

View File

@ -66,8 +66,8 @@ async function GetPublication(internalId){
return json; return json;
} }
async function GetChapters(internalId, connectorName, language){ async function GetChapters(internalId, connectorName, onlyNew, language){
var uri = apiUri + `/Publications/GetChapters?internalId=${internalId}&connectorName=${connectorName}&language=${language}`; var uri = apiUri + `/Publications/GetChapters?internalId=${internalId}&connectorName=${connectorName}&onlyNew=${onlyNew}&language=${language}`;
let json = await GetData(uri); let json = await GetData(uri);
return json; return json;
} }

View File

@ -154,7 +154,7 @@ function OpenDownloadChapterTaskPopup(){
selectedChapters.value = ""; selectedChapters.value = "";
chapterOutput.replaceChildren(); chapterOutput.replaceChildren();
createDownloadChaptersTask.style.display = "block"; createDownloadChaptersTask.style.display = "block";
GetChapters(toEditId, connectorSelect.value, "en").then((json) => { GetChapters(toEditId, connectorSelect.value, true, "en").then((json) => {
var i = 0; var i = 0;
json.forEach(chapter => { json.forEach(chapter => {
var chapterDom = document.createElement("div"); var chapterDom = document.createElement("div");