Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions MinecraftLaunch.Base/Enums/AdditionalFileType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

namespace MinecraftLaunch.Base.Enums;

public enum AdditionalFileType
{
RequiredResourcePack,
OptionalResourcePack
}
29 changes: 29 additions & 0 deletions MinecraftLaunch.Base/Enums/CurseForgeFileStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

namespace MinecraftLaunch.Base.Enums;

public enum CurseForgeFileStatus
{
Processing = 1,
ChangesRequired,
UnderReview,
Approved,
Rejected,
MalwareDetected,
Deleted,
Archived,
Testing,
Released,
ReadyForReview,
Deprecated,
Baking,
AwaitingPublishing,
FailedPublishing,
Cooking,
Cooked,
UnderManualReview,
ScanningForMalware,
ProcessingFile,
PendingRelease,
ReadyForCooking,
PostProcessing
}
10 changes: 10 additions & 0 deletions MinecraftLaunch.Base/Enums/DependencyType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

namespace MinecraftLaunch.Base.Enums;

public enum DependencyType
{
Required,
Optional,
Incompatible,
Embedded
}
12 changes: 12 additions & 0 deletions MinecraftLaunch.Base/Enums/FileRelationType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

namespace MinecraftLaunch.Base.Enums;

public enum FileRelationType
{
EmbeddedLibrary = 1,
OptionalDependency,
RequiredDependency,
Tool,
Incompatible,
Include
}
9 changes: 9 additions & 0 deletions MinecraftLaunch.Base/Enums/FileReleaseType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

namespace MinecraftLaunch.Base.Enums;

public enum FileReleaseType
{
Release = 1,
Beta,
Alpha
}
7 changes: 7 additions & 0 deletions MinecraftLaunch.Base/Enums/HashAlgo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace MinecraftLaunch.Base.Enums;

public enum HashAlgo
{
Sha1 = 1,
Md5 = 2
}
12 changes: 12 additions & 0 deletions MinecraftLaunch.Base/Enums/ModrinthFileStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

namespace MinecraftLaunch.Base.Enums;

public enum ModrinthFileStatus
{
Listed,
Archived,
Draft,
Unlisted,
Scheduled,
Unknown
}
10 changes: 10 additions & 0 deletions MinecraftLaunch.Base/Enums/RequestedStatus.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

namespace MinecraftLaunch.Base.Enums;

public enum RequestedStatus
{
Listed,
Archived,
Draft,
Unlisted
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using MinecraftLaunch.Base.Enums;

namespace MinecraftLaunch.Base.Models.Network;

public record CurseForgeFileDependency
{
public required int ModId { get; init; }
public required FileRelationType RelationType { get; init; }
}
34 changes: 25 additions & 9 deletions MinecraftLaunch.Base/Models/Network/CurseforgeResource.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MinecraftLaunch.Base.Interfaces;
using MinecraftLaunch.Base.Enums;
using MinecraftLaunch.Base.Interfaces;

namespace MinecraftLaunch.Base.Models.Network;

Expand All @@ -20,15 +21,30 @@

public record CurseforgeResourceFile {
public required int Id { get; init; }
public required int GameId { get; init; }
public required int ModId { get; init; }
public required int ReleaseType { get; init; }
public required uint FileFingerprint { get; init; }
public required bool IsAvailable { get; init; }
public required string FileName { get; init; }
public bool IsAvailable { get; init; }
public required string DisplayName { get; init; }
public required string FileName { get; init; }
public required FileReleaseType ReleaseType { get; init; }
public required CurseForgeFileStatus FileStatus { get; init; }
public required IEnumerable<FileHash> Hashes { get; init; }
public required DateTime FileDate { get; init; }
public required long FileLength { get; init; }
public required long DownloadCount { get; init; }
public required long? FileSizeOnDisk { get; init; }
public required string DownloadUrl { get; init; }
public required DateTime Published { get; init; }
public required IEnumerable<string> MinecraftVersions { get; init; }

public bool IsReleased => ReleaseType is 1;
public required IEnumerable<string> GameVersions { get; init; }
public required IEnumerable<SortableGameVersion> SortableGameVersions { get; init; }
public required IEnumerable<CurseForgeFileDependency> Dependencies { get; init; }
public required bool? ExposeAsAlternative { get; init; }
public required int? ParentProjectFileId { get; init; }
public required int? AlternateFileId { get; init; }
public required bool? IsServerPack { get; init; }
public required int? ServerPackFileId { get; init; }
public required bool? IsEarlyAccessContent { get; init; }
public required DateTime? EarlyAccessEndDate { get; init; }
public required long FileFingerprint { get; init; }
public required IEnumerable<FileModule> Modules { get; init; }

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A closing brace should not be preceded by a blank line.

Suggested change

}

Check notice on line 50 in MinecraftLaunch.Base/Models/Network/CurseforgeResource.cs

View check run for this annotation

codefactor.io / CodeFactor

MinecraftLaunch.Base/Models/Network/CurseforgeResource.cs#L50

A closing brace should not be preceded by a blank line. (SA1508)
9 changes: 9 additions & 0 deletions MinecraftLaunch.Base/Models/Network/FileHash.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using MinecraftLaunch.Base.Enums;

namespace MinecraftLaunch.Base.Models.Network;

public record FileHash
{
public required string Value { get; init; }
public required HashAlgo Algo { get; init; }
}
8 changes: 8 additions & 0 deletions MinecraftLaunch.Base/Models/Network/FileHashes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

namespace MinecraftLaunch.Base.Models.Network;

public record FileHashes
{
public required string Sha512 { get; init; }
public required string Sha1 { get; init; }
}
8 changes: 8 additions & 0 deletions MinecraftLaunch.Base/Models/Network/FileModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

namespace MinecraftLaunch.Base.Models.Network;

public record FileModule
{
public required string Name { get; init; }
public required long Fingerprint { get; init; }
}
12 changes: 12 additions & 0 deletions MinecraftLaunch.Base/Models/Network/ModrinthFileDependency.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

using MinecraftLaunch.Base.Enums;

namespace MinecraftLaunch.Base.Models.Network;

public record ModrinthFileDependency
{
public required DependencyType DependencyType { get; init; }
public string VersionId { get; init; }
public string ProjectId { get; init; }
public string FileName { get; init; }
}
44 changes: 25 additions & 19 deletions MinecraftLaunch.Base/Models/Network/ModrinthResource.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MinecraftLaunch.Base.Interfaces;
using MinecraftLaunch.Base.Enums;
using MinecraftLaunch.Base.Interfaces;

namespace MinecraftLaunch.Base.Models.Network;

Expand All @@ -23,25 +24,30 @@ public record ModrinthResource : IResource {
}

public record ModrinthResourceFiles {
public string Id { get; set; }
public string ChangeLog { get; set; }
public string SourceHash { get; set; }

public bool IsFeatured { get; set; }

public int DownloadCount { get; set; }

public DateTime Published { get; set; }
public IEnumerable<ModrinthResourceFile> Files { get; set; }
public required string Id { get; init; }
public required string ProjectId { get; init; }
public required string AuthorId { get; init; }
public required DateTime DatePublished { get; init; }
public required int Downloads { get; init; }
public required IEnumerable<ModrinthResourceFile> Files { get; init; }
public string ChangelogUrl { get; init; }
public string Name { get; init; }
public string VersionNumber { get; init; }
public string Changelog { get; init; }
public IEnumerable<ModrinthFileDependency> Dependencies { get; init; }
public IEnumerable<string> GameVersions { get; init; }
public FileReleaseType VersionType { get; init; }
public IEnumerable<string> Loaders { get; init; }
public bool Featured { get; init; }
public ModrinthFileStatus Status { get; init; }
public RequestedStatus? RequestedStatus { get; init; }
}

public record ModrinthResourceFile {
public string Sha1 { get; set; }
public string Sha512 { get; set; }
public string FileName { get; set; }
public string DownloadUrl { get; set; }

public bool IsPrimary { get; set; }

public long FileSize { get; set; }
public required FileHashes Hashes { get; init; }
public required string Url { get; init; }
public required string FileName { get; init; }
public required bool Primary { get; init; }
public int Size { get; init; }
public AdditionalFileType? FileType { get; init; }
}
10 changes: 10 additions & 0 deletions MinecraftLaunch.Base/Models/Network/SortableGameVersion.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace MinecraftLaunch.Base.Models.Network;

public record SortableGameVersion
{
public required string GameVersionName { get; init; }
public required string GameVersionPadded { get; init; }
public required string GameVersion { get; init; }
public required DateTime GameVersionReleaseDate { get; init; }
public required int? GameVersionTypeId { get; init; }
}
26 changes: 14 additions & 12 deletions MinecraftLaunch.Example/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,8 @@
#region Curseforge API

//CurseforgeProvider curseforgeProvider = new();
//var options = new CurseforgeSearchOptions {
//var options = new CurseforgeSearchOptions
//{
// SearchFilter = "JEI",
// SortOrder = SortOrder.Desc,
// SortField = SortField.TotalDownloads
Expand All @@ -200,19 +201,20 @@
// Console.WriteLine("LatestFiles - FileName: " + string.Join(',', cfResource.LatestFiles.Select(x => x.FileName)));
//}

//foreach (var cfResources in await curseforgeProvider.GetResourceFilesByFingerprintsAsync([568671043])) {
//foreach (var cfResources in await curseforgeProvider.GetResourceFilesByFingerprintsAsync([568671043]))
//{
// var cfResource = cfResources.Key;

// Console.WriteLine("Id: " + cfResource.Id);
// Console.WriteLine("ModId: " + cfResource.ModId);
// Console.WriteLine("FileName: " + cfResource.FileName);
// Console.WriteLine("Published: " + cfResource.Published);
// Console.WriteLine("IsAvailable: " + cfResource.IsAvailable);
// Console.WriteLine("ReleaseType: " + cfResource.ReleaseType);
// Console.WriteLine("DownloadUrl: " + cfResource.DownloadUrl);
// Console.WriteLine("FileFingerprint: " + cfResource.FileFingerprint);
// Console.WriteLine("MinecraftVersions: " + string.Join(',', cfResource.MinecraftVersions));
// Console.WriteLine();
// //Console.WriteLine("Id: " + cfResource.Id);
// //Console.WriteLine("ModId: " + cfResource.ModId);
// //Console.WriteLine("FileName: " + cfResource.FileName);
// //Console.WriteLine("Published: " + cfResource.Published);
// //Console.WriteLine("IsAvailable: " + cfResource.IsAvailable);
// //Console.WriteLine("ReleaseType: " + cfResource.ReleaseType);
// //Console.WriteLine("DownloadUrl: " + cfResource.DownloadUrl);
// //Console.WriteLine("FileFingerprint: " + cfResource.FileFingerprint);
// //Console.WriteLine("MinecraftVersions: " + string.Join(',', cfResource.MinecraftVersions));
// //Console.WriteLine();
//}

#endregion
Expand Down
50 changes: 45 additions & 5 deletions MinecraftLaunch/Components/Provider/CurseforgeProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,55 @@ private static CurseforgeResourceFile ParseFile(JsonNode node) {

return new CurseforgeResourceFile {
Id = node.GetInt32("id"),
GameId = node.GetInt32("gameId"),
ModId = node.GetInt32("modId"),
FileName = node.GetString("fileName"),
Published = node.GetDateTime("fileDate"),
IsAvailable = node.GetBool("isAvailable"),
ReleaseType = node.GetInt32("releaseType"),
DisplayName = node.GetString("displayName"),
FileName = node.GetString("fileName"),
ReleaseType = (FileReleaseType)node.GetInt32("releaseType"),
FileStatus = (CurseForgeFileStatus)node.GetInt32("fileStatus"),
Hashes = node.GetEnumerable("hashes").Select(j => new FileHash()
{
Value = j.GetString("value"),
Algo = j.GetInt32("algo") switch
{
1 => HashAlgo.Sha1,
2 => HashAlgo.Md5,
_ => throw new NotImplementedException()
}
}),
FileDate = node.GetDateTime("fileDate"),
FileLength = node.GetInt64("fileLength").Value,
DownloadCount = node.GetInt64("downloadCount").Value,
FileSizeOnDisk = node.GetInt64("fileSizeOnDisk"),
DownloadUrl = node.GetString("downloadUrl"),
FileFingerprint = node.GetUInt32("fileFingerprint"),
MinecraftVersions = node.GetEnumerable<string>("gameVersions")
GameVersions = node.GetEnumerable<string>("gameVersions"),
SortableGameVersions = node.GetEnumerable("sortableGameVersions").Select(j => new SortableGameVersion()
{
GameVersionName = j.GetString("gameVersionName"),
GameVersionPadded = j.GetString("gameVersionPadded"),
GameVersion = j.GetString("gameVersion"),
GameVersionReleaseDate = j.GetDateTime("gameVersionReleaseDate"),
GameVersionTypeId = j.GetValueOrDefault<int>("gameVersionTypeId")
}),
Dependencies = node.GetEnumerable("dependencies").Select(j => new CurseForgeFileDependency()
{
ModId = j.GetInt32("modId"),
RelationType = (FileRelationType)j.GetInt32("relationType")
}),
ExposeAsAlternative = node.GetValueOrDefault<bool>("exposeAsAlternative"),
ParentProjectFileId = node.GetValueOrDefault<int>("parentProjectFileId"),
AlternateFileId = node.GetValueOrDefault<int>("alternateFileId"),
IsServerPack = node.GetValueOrDefault<bool>("isServerPack"),
ServerPackFileId = node.GetValueOrDefault<int>("serverPackFileId"),
IsEarlyAccessContent = node.GetValueOrDefault<bool>("isEarlyAccessContent"),
EarlyAccessEndDate = node.GetValueOrDefault<DateTime>("earlyAccessEndDate"),
FileFingerprint = node.GetInt64("fileFingerprint").Value,
Modules = node.GetEnumerable("modules").Select(j => new FileModule()
{
Name = j.GetString("name"),
Fingerprint = j.GetInt64("fingerprint").Value
})
};
}

Expand Down
Loading
Loading