Skip to content

Commit

Permalink
Merge pull request #1 from ZtModArchive/develop
Browse files Browse the repository at this point in the history
added features
  • Loading branch information
Zt-freak authored Mar 23, 2022
2 parents c7aa0b8 + fd6207e commit c88ad13
Show file tree
Hide file tree
Showing 18 changed files with 253 additions and 70 deletions.
13 changes: 13 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
language: csharp
mono: none
dotnet: 5.0.302
solution: Castoreum.sln
before_install:
- dotnet --info
install:
- dotnet restore
- dotnet tool install dotnet-format
script:
- dotnet test
- dotnet dotnet-format --check
- dotnet publish
7 changes: 0 additions & 7 deletions Castoreum.Builder/Castoreum.Builder.csproj

This file was deleted.

6 changes: 5 additions & 1 deletion Castoreum.Compression/Castoreum.Compression.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Castoreum.Interface\Castoreum.Interface.csproj" />
</ItemGroup>

</Project>
49 changes: 49 additions & 0 deletions Castoreum.Compression/CompressionManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using Castoreum.Interface.Service.Compression;
using Castoreum.Interface.Service.Config;
using System.IO;
using System.IO.Compression;

namespace Castoreum.Compression
{
public class CompressionManager : ICompressionManager
{
public void BuildMod(ZipArchive archive, IConfig config, DirectoryInfo directoryInfo)
{
string[] directoryPath = Directory.GetCurrentDirectory().Split('\\');
string rootDirectory = directoryPath[^1];
string formattedPath = directoryInfo.FullName.Split(rootDirectory)[1].Remove(0, 1);

var files = directoryInfo.GetFiles();
foreach (var file in files)
{
if (config.Type == "module" || config.Type == "package")
{
archive.CreateEntryFromFile(file.FullName, $"modules\\{config.RepoName}\\{formattedPath}\\{file.Name}");
}
archive.CreateEntryFromFile(file.FullName, $"{formattedPath}\\{file.Name}");
}
var directories = directoryInfo.GetDirectories();
bool exclude;
string subDirectoryPath;
foreach (var directory in directories)
{
exclude = false;
subDirectoryPath = directory.FullName.Split(rootDirectory)[1].Remove(0, 1);
foreach (var excludedPath in config.ExcludeFolders)
{
if (subDirectoryPath == excludedPath || subDirectoryPath == excludedPath.Replace('/', '\\'))
exclude = true;
}

foreach (var dependencyPath in config.Dependencies)
{
if (subDirectoryPath == dependencyPath || subDirectoryPath == dependencyPath.Replace('/', '\\'))
exclude = true;
}

if (!exclude)
BuildMod(archive, config, directory);
}
}
}
}
4 changes: 4 additions & 0 deletions Castoreum.Config/Castoreum.Config.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Castoreum.Interface\Castoreum.Interface.csproj" />
</ItemGroup>
Expand Down
11 changes: 7 additions & 4 deletions Castoreum.Config/Service/ConfigManager.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using Castoreum.Config.Models;
using Castoreum.Interface.Service.Config;
using System;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Text.Json;

namespace Castoreum.Config.Service
{
Expand All @@ -17,12 +18,14 @@ public IConfig CreateConfigFile(string archiveName)

public IConfig GetConfig(string file)
{
throw new NotImplementedException();
string castorConfigText = File.ReadAllText(file);
return JsonSerializer.Deserialize<CastorConfig>(castorConfigText);
}

public void PlaceConfigFile(IConfig config)
public void PlaceConfigFile(IConfig config, string fileName)
{
throw new NotImplementedException();
string newJson = JToken.Parse(JsonSerializer.Serialize(config)).ToString();
File.WriteAllText(fileName, newJson);
}

public void PlaceGitIgnore(string path)
Expand Down
10 changes: 10 additions & 0 deletions Castoreum.Installation/Castoreum.Installation.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,14 @@
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.Linq" Version="4.3.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Castoreum.Config\Castoreum.Config.csproj" />
<ProjectReference Include="..\Castoreum.Interface\Castoreum.Interface.csproj" />
</ItemGroup>

</Project>
108 changes: 108 additions & 0 deletions Castoreum.Installation/InstallationManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
using Castoreum.Config.Models;
using Castoreum.Interface.Service.Config;
using Castoreum.Interface.Service.Installation;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Net;

namespace Castoreum.Installation
{
public class InstallationManager : IInstallationManager
{
public IConfig InstallDependency(IConfig config, string packageName)
{
InstallPackage(packageName);
List<string> dependencies = (List<string>)config.Dependencies;
if (!dependencies.Contains(packageName))
{
dependencies.Add(packageName);
}
return config;
}

public IConfig InstallDevDependency(IConfig config, string packageName)
{
InstallPackage(packageName);
List<string> dependencies = (List<string>)config.DevDependencies;
if (!dependencies.Contains(packageName))
{
dependencies.Add(packageName);
}
return config;
}

public IConfig RemoveDependency(IConfig config, string packageName)
{
UninstallPackage(packageName);
List<string> dependencies = (List<string>)config.Dependencies;
if (!dependencies.Contains(packageName))
{
dependencies.RemoveAll(p => p == packageName);
}
return config;
}

public IConfig RemoveDevDependency(IConfig config, string packageName)
{
UninstallPackage(packageName);
List<string> dependencies = (List<string>)config.DevDependencies;
if (!dependencies.Contains(packageName))
{
dependencies.RemoveAll(p => p == packageName);
}
return config;
}

public void InstallPackage(string packageName)
{
using WebClient client = new();
Guid guid = Guid.NewGuid();
string[] packageArgs = packageName.Split('/');
client.DownloadFile($"https://github.com/{packageArgs[0]}/{packageArgs[1]}/archive/refs/tags/{packageArgs[2]}.zip", $"{guid}.zip");
ZipFile.ExtractToDirectory($"{guid}.zip", $"{guid}");

// remove the package's modules folder if the dev didn't exclude it
if (Directory.Exists($"{guid}/modules"))
Directory.Delete($"{guid}/modules");

string[] subDirectories = Directory.GetDirectories($"{guid}");
string firstSubDir = "";
if (subDirectories.Length > 0)
{
firstSubDir = subDirectories[0];
}

CopyFilesRecursively($"{guid}/{firstSubDir.Split('\\')[1]}", $"modules/{packageArgs[0]}/{packageArgs[1]}");

var directory = new DirectoryInfo($"{guid}") { Attributes = FileAttributes.Normal };
foreach (var info in directory.GetFileSystemInfos("*", SearchOption.AllDirectories))
{
info.Attributes = FileAttributes.Normal;
}

Directory.Delete($"{guid}", true);
File.Delete($"{guid}.zip");
}

private void UninstallPackage(string packageName)
{
if (Directory.Exists($"modules/{packageName}"))
Directory.Delete($"modules/{packageName}");
}

private static void CopyFilesRecursively(string sourcePath, string targetPath)
{
foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(sourcePath, targetPath));
}

foreach (string newPath in Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories))
{
File.Copy(newPath, newPath.Replace(sourcePath, targetPath), true);
}
}
}
}
14 changes: 0 additions & 14 deletions Castoreum.Interface/Service/Builder/IBuildManager.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ namespace Castoreum.Interface.Service.Compression
{
public interface ICompressionManager
{
void CreateArchive(ZipArchive archive, IConfig config, DirectoryInfo directoryInfo);
void AddToArchive(ZipArchive archive, IConfig config, DirectoryInfo directoryInfo);
void BuildMod(ZipArchive archive, IConfig config, DirectoryInfo directoryInfo);
}
}
2 changes: 1 addition & 1 deletion Castoreum.Interface/Service/Config/IConfigManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public interface IConfigManager
{
IConfig CreateConfigFile(string archiveName);
void PlaceConfigFile(IConfig config);
void PlaceConfigFile(IConfig config, string fileName);
void PlaceGitIgnore(string path);
IConfig GetConfig(string file);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ namespace Castoreum.Interface.Service.Installation
{
public interface IInstallationManager
{
void InstallDependency(string packageName, IConfig config);
void InstallDevDependency(string packageName, IConfig config);
void RemoveDependency(string packageName, IConfig config);
IConfig InstallDependency(IConfig config, string packageName);
IConfig InstallDevDependency(IConfig config, string packageName);
void InstallPackage(string packageName);
IConfig RemoveDependency(IConfig config, string packageName);
IConfig RemoveDevDependency(IConfig config, string packageName);
}
}
4 changes: 1 addition & 3 deletions Castoreum.Interface/Service/Watch/IProcessWatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ namespace Castoreum.Interface.Service.Watch
{
public interface IProcessWatcher
{
void LaunchProcess();
void EndProcess();
void Watch();
void Watch(string program, string arg);
}
}
22 changes: 0 additions & 22 deletions Castoreum.Tests/Castoreum.Tests.csproj

This file was deleted.

6 changes: 5 additions & 1 deletion Castoreum.Watch/Castoreum.Watch.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Castoreum.Interface\Castoreum.Interface.csproj" />
</ItemGroup>

</Project>
32 changes: 32 additions & 0 deletions Castoreum.Watch/ProcessWatcher.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Castoreum.Interface.Service.Watch;
using System;
using System.Diagnostics;
using System.IO;

namespace Castoreum.Watch
{
public class ProcessWatcher : IProcessWatcher
{
public void Watch(string program, string arg)
{
using var process = new Process();
process.StartInfo.FileName = program;
process.StartInfo.Arguments = arg;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();

using (StreamWriter writer = new("castorlog.txt"))
{
while (!process.StandardOutput.EndOfStream)
{
string line = process.StandardOutput.ReadLine();
Console.WriteLine($"{line}");
writer.WriteLine($"{line}");
}
}

process.WaitForExit();
}
}
}
Loading

0 comments on commit c88ad13

Please sign in to comment.