#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (C) 2007-2014 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at .
*/
#endregion License Information (GPL v3)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace ShareX
{
internal class Program
{
private enum SetupType
{
Stable, // Release build setup, creates portable zip file
Beta // Debug build setup, uploads it using Debug/ShareX.exe
}
private const SetupType Setup = SetupType.Beta;
private static string parentDir = @"..\..\..\";
private static string binDir = Path.Combine(parentDir, @"ShareX\bin");
private static string releaseDir = Path.Combine(binDir, "Release");
private static string debugDir = Path.Combine(binDir, "Debug");
private static string releasePath = Path.Combine(releaseDir, "ShareX.exe");
private static string debugPath = Path.Combine(debugDir, "ShareX.exe");
private static string outputDir = Path.Combine(parentDir, @"InnoSetup\Output");
private static string portableDir = Path.Combine(outputDir, "ShareX-portable");
private static string innoSetupPath = @"C:\Program Files (x86)\Inno Setup 5\ISCC.exe";
private static string innoSetupScriptPath = Path.Combine(parentDir, @"InnoSetup\ShareX setup.iss");
private static void Main(string[] args)
{
switch (Setup)
{
case SetupType.Stable:
CompileSetup("Release");
CreatePortable();
OpenOutputDirectory();
break;
case SetupType.Beta:
CompileSetup("Debug");
UploadLatestFile();
break;
}
Console.WriteLine("Done.");
//Console.Read();
}
private static void OpenOutputDirectory()
{
Process.Start("explorer.exe", outputDir);
}
private static void UploadLatestFile()
{
FileInfo fileInfo = new DirectoryInfo(outputDir).GetFiles("*.exe").OrderByDescending(f => f.LastWriteTime).FirstOrDefault();
if (fileInfo != null)
{
Console.WriteLine("Uploading setup file...");
Process.Start(debugPath, fileInfo.FullName);
}
}
private static void CompileSetup(string buildType)
{
Console.WriteLine("Compiling " + buildType + " setup...");
Process.Start(innoSetupPath, string.Format("\"{0}\" /d{1}", innoSetupScriptPath, buildType)).WaitForExit();
Console.WriteLine("Setup file created.");
}
private static void CreatePortable()
{
Console.WriteLine("Creating portable...");
if (Directory.Exists(portableDir))
{
Directory.Delete(portableDir, true);
}
Directory.CreateDirectory(portableDir);
List files = new List();
string[] endsWith = new string[] { "ShareX.exe", "ShareX.exe.config", ".dll", ".css", ".txt" };
string[] ignoreEndsWith = new string[] { };
foreach (string filepath in Directory.GetFiles(releaseDir))
{
if (endsWith.Any(x => filepath.EndsWith(x, StringComparison.InvariantCultureIgnoreCase)) &&
ignoreEndsWith.All(x => !filepath.EndsWith(x, StringComparison.InvariantCultureIgnoreCase)))
{
files.Add(filepath);
}
}
CopyFiles(files, portableDir);
CopyFiles(Path.Combine(releaseDir, @"tr\*.resources.dll"), Path.Combine(portableDir, @"Languages\tr"));
File.WriteAllText(Path.Combine(portableDir, "PersonalPath.cfg"), "ShareX", Encoding.UTF8);
//FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(Path.Combine(releaseDir, "ShareX.exe"));
//string zipFilename = string.Format("ShareX-{0}.{1}.{2}-portable.zip", versionInfo.ProductMajorPart, versionInfo.ProductMinorPart, versionInfo.ProductBuildPart);
string zipPath = Path.Combine(outputDir, "ShareX-portable.zip");
if (File.Exists(zipPath))
{
File.Delete(zipPath);
}
Zip(portableDir + "\\*.*", zipPath);
if (Directory.Exists(portableDir))
{
Directory.Delete(portableDir, true);
}
Console.WriteLine("Portable created.");
}
private static void CopyFiles(IEnumerable files, string toFolder)
{
foreach (string filepath in files)
{
string filename = Path.GetFileName(filepath);
string dest = Path.Combine(toFolder, filename);
File.Copy(filepath, dest);
}
}
private static void CopyFiles(string path, string toFolder)
{
string directory = Path.GetDirectoryName(path);
string filename = Path.GetFileName(path);
if (!Directory.Exists(toFolder)) Directory.CreateDirectory(toFolder);
CopyFiles(Directory.GetFiles(directory, filename), toFolder);
}
private static void Zip(string source, string target)
{
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "7za.exe";
p.Arguments = string.Format("a -tzip \"{0}\" \"{1}\" -r -mx=9", target, source);
p.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(p);
process.WaitForExit();
}
}
}