config overhaul/general fixup
This commit is contained in:
parent
798237219f
commit
616bb2da7f
2 changed files with 74 additions and 103 deletions
|
@ -1,62 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace RepoFullDownloader
|
|
||||||
{
|
|
||||||
class Options
|
|
||||||
{
|
|
||||||
public bool originalFilenames { get; set; } = false;
|
|
||||||
public Repo[] repos { get; set; } = {
|
|
||||||
new Repo()
|
|
||||||
{
|
|
||||||
url = "http://repo.kawaiizenbo.me/",
|
|
||||||
type = "cydia"
|
|
||||||
},
|
|
||||||
new Repo()
|
|
||||||
{
|
|
||||||
url = "http://apptapp.saurik.com/",
|
|
||||||
type = "installer"
|
|
||||||
},
|
|
||||||
new Repo()
|
|
||||||
{
|
|
||||||
url = "http://apt.saurik.com/",
|
|
||||||
type = "dist",
|
|
||||||
distAttributes = new DistAttributes()
|
|
||||||
{
|
|
||||||
suites = "ios/",
|
|
||||||
components = "main",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
public int delay { get; set; } = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
class Repo
|
|
||||||
{
|
|
||||||
public string url { get; set; }
|
|
||||||
public string type { get; set; }
|
|
||||||
public DistAttributes distAttributes { get; set; } = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
class DistAttributes
|
|
||||||
{
|
|
||||||
public string suites { get; set; }
|
|
||||||
public string components { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
class CydiaPackage
|
|
||||||
{
|
|
||||||
public CydiaPackage(string _link, string _name, string _version)
|
|
||||||
{
|
|
||||||
this.link = _link;
|
|
||||||
this.name = _name;
|
|
||||||
this.version = _version;
|
|
||||||
}
|
|
||||||
public string link { get; set; }
|
|
||||||
public string name { get; set; }
|
|
||||||
public string version { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,21 +3,21 @@ using ICSharpCode.SharpZipLib.GZip;
|
||||||
|
|
||||||
using PlistCS;
|
using PlistCS;
|
||||||
|
|
||||||
using RepoFullDownloader;
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Text.Json;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace RepoFullDownloader_Core
|
namespace RepoFullDownloader_Core
|
||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
private static Options options = new Options();
|
private static List<string> repos = new List<string>();
|
||||||
|
private static bool originalFilenames;
|
||||||
|
private static int delayMS;
|
||||||
|
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
@ -33,17 +33,19 @@ namespace RepoFullDownloader_Core
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory("./output/");
|
Directory.CreateDirectory("./output/");
|
||||||
}
|
}
|
||||||
// Load Options from 'options.json'
|
// Load Options from 'options.ini'
|
||||||
if (!File.Exists("./options.json"))
|
if (!File.Exists("./options.ini"))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Could not find options.json");
|
Console.WriteLine("Could not find options.ini");
|
||||||
Console.WriteLine("Generating example...");
|
Console.WriteLine("Generating example...");
|
||||||
// generate example options
|
// generate example options
|
||||||
File.WriteAllText("./options.json", JsonSerializer.Serialize(new Options()));
|
File.WriteAllText("options.ini",
|
||||||
return;
|
"delayMS=1\n" +
|
||||||
|
"originalFilenames=false");
|
||||||
}
|
}
|
||||||
string optionsJson = File.ReadAllText("./options.json");
|
string[] options = File.ReadAllLines("options.ini");
|
||||||
options = JsonSerializer.Deserialize<Options>(optionsJson);
|
delayMS = int.Parse(options[0].Split('=')[1]);
|
||||||
|
originalFilenames = bool.Parse(options[1].Split('=')[1]);
|
||||||
if (args.Length != 0)
|
if (args.Length != 0)
|
||||||
{
|
{
|
||||||
string url = args[0];
|
string url = args[0];
|
||||||
|
@ -67,31 +69,48 @@ namespace RepoFullDownloader_Core
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (File.Exists("repos.txt"))
|
||||||
foreach (Repo r in options.repos)
|
|
||||||
{
|
{
|
||||||
if (r.type.ToLower() == "installer")
|
foreach (string r in File.ReadAllLines("repos.txt"))
|
||||||
{
|
{
|
||||||
DownloadInstallerRepo(r.url);
|
if (r.StartsWith('#')) continue;
|
||||||
}
|
string[] repoWAttributes = r.Split(' ');
|
||||||
else if (r.type.ToLower() == "cydia")
|
try
|
||||||
{
|
|
||||||
DownloadRepo(r.url);
|
|
||||||
}
|
|
||||||
else if (r.type.ToLower() == "dist")
|
|
||||||
{
|
|
||||||
if(r.distAttributes == null)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine($"No dist attributes were defined for {r.url} :(");
|
switch (repoWAttributes[1])
|
||||||
return;
|
{
|
||||||
|
case "installer":
|
||||||
|
DownloadInstallerRepo(repoWAttributes[0]);
|
||||||
|
break;
|
||||||
|
case "cydia":
|
||||||
|
DownloadRepo(repoWAttributes[0]);
|
||||||
|
break;
|
||||||
|
case "dist":
|
||||||
|
DownloadDistRepo(repoWAttributes[0], repoWAttributes[2], repoWAttributes[3]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Console.WriteLine($"Invalid repo type {repoWAttributes[1]} on {repoWAttributes[0]}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Invalid formatting on {r}");
|
||||||
|
Console.WriteLine(e);
|
||||||
}
|
}
|
||||||
DownloadDistRepo(r.url, r.distAttributes);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Invalid repo type {r.type} on {r.url}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Could not find repos.txt");
|
||||||
|
Console.WriteLine("Generating example...");
|
||||||
|
// generate example repo list
|
||||||
|
File.WriteAllText("repos.txt",
|
||||||
|
"http://repo.kawaiizenbo.me cydia\n" +
|
||||||
|
"http://apptapp.saurik.com installer\n" +
|
||||||
|
"http://apt.saurik.com dist ios/ main"
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is the part where it is over
|
// this is the part where it is over
|
||||||
|
@ -189,7 +208,7 @@ namespace RepoFullDownloader_Core
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string[] choppedUp = p.link.Split('/');
|
string[] choppedUp = p.link.Split('/');
|
||||||
string fileToDownload = options.originalFilenames ? $"./output/{cleanLink}/" + choppedUp[choppedUp.Length - 1].Replace("/", "_").Replace(":", "_") : $"./output/{cleanLink}/" + p.name.Replace("/", "_").Replace(":", "_") + "-" + p.version.Replace("/", "_").Replace(":", "_") + ".deb";
|
string fileToDownload = originalFilenames ? $"./output/{cleanLink}/" + choppedUp[choppedUp.Length - 1].Replace("/", "_").Replace(":", "_") : $"./output/{cleanLink}/" + p.name.Replace("/", "_").Replace(":", "_") + "-" + p.version.Replace("/", "_").Replace(":", "_") + ".deb";
|
||||||
if (File.Exists(fileToDownload))
|
if (File.Exists(fileToDownload))
|
||||||
{
|
{
|
||||||
fileToDownload += "_" + r.Next(0000, 9999);
|
fileToDownload += "_" + r.Next(0000, 9999);
|
||||||
|
@ -206,7 +225,7 @@ namespace RepoFullDownloader_Core
|
||||||
Console.WriteLine(e.Message);
|
Console.WriteLine(e.Message);
|
||||||
failed.Add(link + p.link);
|
failed.Add(link + p.link);
|
||||||
}
|
}
|
||||||
Thread.Sleep(options.delay);
|
Thread.Sleep(delayMS);
|
||||||
}
|
}
|
||||||
Console.WriteLine("Finished downloading " + link);
|
Console.WriteLine("Finished downloading " + link);
|
||||||
if(failed.Count != 0) File.WriteAllLines($"./output/{cleanLink}/failed.txt", failed);
|
if(failed.Count != 0) File.WriteAllLines($"./output/{cleanLink}/failed.txt", failed);
|
||||||
|
@ -236,7 +255,8 @@ namespace RepoFullDownloader_Core
|
||||||
Console.WriteLine("Could not download package list from " + link + ": " + e.Message);
|
Console.WriteLine("Could not download package list from " + link + ": " + e.Message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Dictionary<string, object> plist = (Dictionary<string, object>)Plist.readPlist($"./output/{cleanLink}/packages.plist");
|
Dictionary<string, object> plist = (Dictionary<string, object>)Plist.readPlistSource(Regex.Replace(File.ReadAllText($"./output/{cleanLink}/packages.plist"),
|
||||||
|
"<!--([^|]+)-->", ""));
|
||||||
foreach (Dictionary<string, object> d in (List<object>)plist["packages"])
|
foreach (Dictionary<string, object> d in (List<object>)plist["packages"])
|
||||||
{
|
{
|
||||||
Random r = new Random();
|
Random r = new Random();
|
||||||
|
@ -281,7 +301,7 @@ namespace RepoFullDownloader_Core
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DownloadDistRepo(string link, DistAttributes da)
|
static void DownloadDistRepo(string link, string suites, string components)
|
||||||
{
|
{
|
||||||
// clean up link so no issues can ever arise
|
// clean up link so no issues can ever arise
|
||||||
if (!link.StartsWith("https://") && !link.StartsWith("http://"))
|
if (!link.StartsWith("https://") && !link.StartsWith("http://"))
|
||||||
|
@ -295,15 +315,15 @@ namespace RepoFullDownloader_Core
|
||||||
|
|
||||||
// make that good dist path
|
// make that good dist path
|
||||||
string distPath;
|
string distPath;
|
||||||
if(!da.suites.EndsWith("/"))
|
if(!suites.EndsWith("/"))
|
||||||
{
|
{
|
||||||
da.suites += "/";
|
suites += "/";
|
||||||
}
|
}
|
||||||
if (!da.components.EndsWith("/"))
|
if (!components.EndsWith("/"))
|
||||||
{
|
{
|
||||||
da.components += "/";
|
components += "/";
|
||||||
}
|
}
|
||||||
distPath = da.suites + da.components;
|
distPath = suites + components;
|
||||||
string poolpfLink = link + "dists/" + distPath + "binary-iphoneos-arm/";
|
string poolpfLink = link + "dists/" + distPath + "binary-iphoneos-arm/";
|
||||||
|
|
||||||
string cleanLink = link.TrimEnd('/').Replace("http://", "").Replace("https://", "").Replace("/", "_").Replace(":", "_");
|
string cleanLink = link.TrimEnd('/').Replace("http://", "").Replace("https://", "").Replace("/", "_").Replace(":", "_");
|
||||||
|
@ -387,7 +407,7 @@ namespace RepoFullDownloader_Core
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string[] choppedUp = p.link.Split('/');
|
string[] choppedUp = p.link.Split('/');
|
||||||
string fileToDownload = options.originalFilenames ? $"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/" + choppedUp[choppedUp.Length - 1].Replace("/", "_").Replace(":", "_") : $"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/" + p.name.Replace("/", "_").Replace(":", "_") + "-" + p.version.Replace("/", "_").Replace(":", "_") + ".deb";
|
string fileToDownload = originalFilenames ? $"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/" + choppedUp[choppedUp.Length - 1].Replace("/", "_").Replace(":", "_") : $"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/" + p.name.Replace("/", "_").Replace(":", "_") + "-" + p.version.Replace("/", "_").Replace(":", "_") + ".deb";
|
||||||
if (File.Exists(fileToDownload))
|
if (File.Exists(fileToDownload))
|
||||||
{
|
{
|
||||||
fileToDownload += "_" + r.Next(0000, 9999);
|
fileToDownload += "_" + r.Next(0000, 9999);
|
||||||
|
@ -404,10 +424,23 @@ namespace RepoFullDownloader_Core
|
||||||
Console.WriteLine(e.Message);
|
Console.WriteLine(e.Message);
|
||||||
failed.Add(link + p.link);
|
failed.Add(link + p.link);
|
||||||
}
|
}
|
||||||
Thread.Sleep(options.delay);
|
Thread.Sleep(delayMS);
|
||||||
}
|
}
|
||||||
Console.WriteLine("Finished downloading " + link);
|
Console.WriteLine("Finished downloading " + link);
|
||||||
if (failed.Count != 0) File.WriteAllLines($"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/failed.txt", failed);
|
if (failed.Count != 0) File.WriteAllLines($"./output/{cleanLink}-({distPath.Replace("/", "_").Replace(":", "_")})/failed.txt", failed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CydiaPackage
|
||||||
|
{
|
||||||
|
public CydiaPackage(string _link, string _name, string _version)
|
||||||
|
{
|
||||||
|
this.link = _link;
|
||||||
|
this.name = _name;
|
||||||
|
this.version = _version;
|
||||||
|
}
|
||||||
|
public string link { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public string version { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue