mirror of
https://github.com/claunia/osrepodbmgr.git
synced 2025-12-16 19:14:25 +00:00
Initial version.
This commit is contained in:
40
.gitignore
vendored
Normal file
40
.gitignore
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Autosave files
|
||||||
|
*~
|
||||||
|
|
||||||
|
# build
|
||||||
|
[Oo]bj/
|
||||||
|
[Bb]in/
|
||||||
|
packages/
|
||||||
|
TestResults/
|
||||||
|
|
||||||
|
# globs
|
||||||
|
Makefile.in
|
||||||
|
*.DS_Store
|
||||||
|
*.sln.cache
|
||||||
|
*.suo
|
||||||
|
*.cache
|
||||||
|
*.pidb
|
||||||
|
*.userprefs
|
||||||
|
*.usertasks
|
||||||
|
config.log
|
||||||
|
config.make
|
||||||
|
config.status
|
||||||
|
aclocal.m4
|
||||||
|
install-sh
|
||||||
|
autom4te.cache/
|
||||||
|
*.user
|
||||||
|
*.tar.gz
|
||||||
|
tarballs/
|
||||||
|
test-results/
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Mac bundle stuff
|
||||||
|
*.dmg
|
||||||
|
*.app
|
||||||
|
|
||||||
|
# resharper
|
||||||
|
*_Resharper.*
|
||||||
|
*.Resharper
|
||||||
|
|
||||||
|
# dotCover
|
||||||
|
*.dotCover
|
||||||
50
osrepodbmgr.sln
Normal file
50
osrepodbmgr.sln
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osrepodbmgr", "osrepodbmgr\osrepodbmgr.csproj", "{19FB7436-031F-42B3-87F6-8508F63EDADA}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{19FB7436-031F-42B3-87F6-8508F63EDADA}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{19FB7436-031F-42B3-87F6-8508F63EDADA}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{19FB7436-031F-42B3-87F6-8508F63EDADA}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{19FB7436-031F-42B3-87F6-8508F63EDADA}.Release|x86.Build.0 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(MonoDevelopProperties) = preSolution
|
||||||
|
Policies = $0
|
||||||
|
$0.TextStylePolicy = $1
|
||||||
|
$1.FileWidth = 120
|
||||||
|
$1.inheritsSet = VisualStudio
|
||||||
|
$1.inheritsScope = text/plain
|
||||||
|
$1.scope = text/x-csharp
|
||||||
|
$0.CSharpFormattingPolicy = $2
|
||||||
|
$2.IndentSwitchSection = True
|
||||||
|
$2.NewLinesForBracesInProperties = True
|
||||||
|
$2.NewLinesForBracesInAccessors = True
|
||||||
|
$2.NewLinesForBracesInAnonymousMethods = True
|
||||||
|
$2.NewLinesForBracesInControlBlocks = True
|
||||||
|
$2.NewLinesForBracesInAnonymousTypes = True
|
||||||
|
$2.NewLinesForBracesInObjectCollectionArrayInitializers = True
|
||||||
|
$2.NewLinesForBracesInLambdaExpressionBody = True
|
||||||
|
$2.NewLineForElse = True
|
||||||
|
$2.NewLineForCatch = True
|
||||||
|
$2.NewLineForFinally = True
|
||||||
|
$2.inheritsSet = Mono
|
||||||
|
$2.inheritsScope = text/x-csharp
|
||||||
|
$2.scope = text/x-csharp
|
||||||
|
$2.SpacingAfterMethodDeclarationName = False
|
||||||
|
$2.SpaceAfterMethodCallName = False
|
||||||
|
$2.SpaceAfterControlFlowStatementKeyword = False
|
||||||
|
$2.SpaceBeforeOpenSquareBracket = False
|
||||||
|
$0.ChangeLogPolicy = $3
|
||||||
|
$3.UpdateMode = ProjectRoot
|
||||||
|
$3.MessageStyle = $4
|
||||||
|
$4.LastFilePostfix = "@:\n "
|
||||||
|
$4.IncludeDirectoryPaths = True
|
||||||
|
$3.inheritsSet = Mono
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
25
osrepodbmgr/ChangeLog
Normal file
25
osrepodbmgr/ChangeLog
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
2017-04-20 Natalia Portillo <claunia@claunia.com>
|
||||||
|
|
||||||
|
* Core.cs:
|
||||||
|
* Schema.cs:
|
||||||
|
* SQLite.cs:
|
||||||
|
* DBCore.cs:
|
||||||
|
* frmHelp.cs:
|
||||||
|
* Program.cs:
|
||||||
|
* DetectOS.cs:
|
||||||
|
* Settings.cs:
|
||||||
|
* DBEntries.cs:
|
||||||
|
* PlatformID.cs:
|
||||||
|
* MainWindow.cs:
|
||||||
|
* frmSettings.cs:
|
||||||
|
* packages.config:
|
||||||
|
* SHA256Context.cs:
|
||||||
|
* osrepodbmgr.csproj:
|
||||||
|
* gtk-gui/gui.stetic:
|
||||||
|
* gtk-gui/generated.cs:
|
||||||
|
* gtk-gui/MainWindow.cs:
|
||||||
|
* Properties/AssemblyInfo.cs:
|
||||||
|
* gtk-gui/osrepodbmgr.frmHelp.cs:
|
||||||
|
* gtk-gui/osrepodbmgr.frmSettings.cs:
|
||||||
|
Initial version.
|
||||||
|
|
||||||
274
osrepodbmgr/Core.cs
Normal file
274
osrepodbmgr/Core.cs
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public static class Core
|
||||||
|
{
|
||||||
|
// Sets a 128Kbyte buffer
|
||||||
|
const long bufferSize = 131072;
|
||||||
|
|
||||||
|
public delegate void UpdateProgressDelegate(string text, string inner, long current, long maximum);
|
||||||
|
public delegate void UpdateProgress2Delegate(string text, string inner, long current, long maximum);
|
||||||
|
public delegate void FailedDelegate(string text);
|
||||||
|
public delegate void FinishedWithoutErrorDelegate();
|
||||||
|
public delegate void AddEntryDelegate(string filename, string hash, bool known);
|
||||||
|
|
||||||
|
public static event UpdateProgressDelegate UpdateProgress;
|
||||||
|
public static event UpdateProgress2Delegate UpdateProgress2;
|
||||||
|
public static event FailedDelegate Failed;
|
||||||
|
public static event FinishedWithoutErrorDelegate Finished;
|
||||||
|
public static event AddEntryDelegate AddEntry;
|
||||||
|
|
||||||
|
static DBCore dbCore;
|
||||||
|
|
||||||
|
public static void FindFiles()
|
||||||
|
{
|
||||||
|
if(string.IsNullOrEmpty(MainClass.path))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("Path is null or empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!Directory.Exists(MainClass.path))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("Directory not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MainClass.files = new List<string>(Directory.EnumerateFiles(MainClass.path, "*", SearchOption.AllDirectories));
|
||||||
|
MainClass.files.Sort();
|
||||||
|
if(Finished != null)
|
||||||
|
Finished();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if(System.Diagnostics.Debugger.IsAttached)
|
||||||
|
throw;
|
||||||
|
if(Failed != null)
|
||||||
|
Failed(string.Format("Exception {0}\n{1}", ex.Message, ex.InnerException));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void HashFiles()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MainClass.hashes = new Dictionary<string, string>();
|
||||||
|
long counter = 1;
|
||||||
|
foreach(string file in MainClass.files)
|
||||||
|
{
|
||||||
|
string relpath = file.Substring(MainClass.path.Length + 1);
|
||||||
|
if(UpdateProgress != null)
|
||||||
|
UpdateProgress(string.Format("Hashing file {0} of {1}", counter, MainClass.files.Count), null, counter, MainClass.files.Count);
|
||||||
|
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
|
||||||
|
|
||||||
|
byte[] dataBuffer = new byte[bufferSize];
|
||||||
|
SHA256Context sha256Context = new SHA256Context();
|
||||||
|
sha256Context.Init();
|
||||||
|
|
||||||
|
if(fileStream.Length > bufferSize)
|
||||||
|
{
|
||||||
|
long offset;
|
||||||
|
long remainder = fileStream.Length % bufferSize;
|
||||||
|
for(offset = 0; offset < (fileStream.Length - remainder); offset += (int)bufferSize)
|
||||||
|
{
|
||||||
|
if(UpdateProgress2 != null)
|
||||||
|
UpdateProgress2(string.Format("{0:P}", offset / (double)fileStream.Length), relpath, offset, fileStream.Length);
|
||||||
|
dataBuffer = new byte[bufferSize];
|
||||||
|
fileStream.Read(dataBuffer, 0, (int)bufferSize);
|
||||||
|
sha256Context.Update(dataBuffer);
|
||||||
|
}
|
||||||
|
if(UpdateProgress2 != null)
|
||||||
|
UpdateProgress2(string.Format("{0:P}", offset / (double)fileStream.Length), relpath, offset, fileStream.Length);
|
||||||
|
dataBuffer = new byte[remainder];
|
||||||
|
fileStream.Read(dataBuffer, 0, (int)remainder);
|
||||||
|
sha256Context.Update(dataBuffer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(UpdateProgress2 != null)
|
||||||
|
UpdateProgress2(string.Format("{0:P}", 0 / (double)fileStream.Length), relpath, 0, fileStream.Length);
|
||||||
|
dataBuffer = new byte[fileStream.Length];
|
||||||
|
fileStream.Read(dataBuffer, 0, (int)fileStream.Length);
|
||||||
|
sha256Context.Update(dataBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fileStream.Close();
|
||||||
|
string hash = stringify(sha256Context.Final());
|
||||||
|
MainClass.hashes.Add(relpath, hash);
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if(Finished != null)
|
||||||
|
Finished();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if(System.Diagnostics.Debugger.IsAttached)
|
||||||
|
throw;
|
||||||
|
if(Failed != null)
|
||||||
|
Failed(string.Format("Exception {0}\n{1}", ex.Message, ex.InnerException));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CheckDbForFiles()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
long counter = 0;
|
||||||
|
foreach(KeyValuePair<string, string> kvp in MainClass.hashes)
|
||||||
|
{
|
||||||
|
if(UpdateProgress != null)
|
||||||
|
UpdateProgress(null, "Checking files in database", counter, MainClass.hashes.Count);
|
||||||
|
|
||||||
|
if(AddEntry != null)
|
||||||
|
AddEntry(kvp.Key, kvp.Value, dbCore.DBEntries.ExistsFile(kvp.Value));
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
if(Finished != null)
|
||||||
|
Finished();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if(System.Diagnostics.Debugger.IsAttached)
|
||||||
|
throw;
|
||||||
|
if(Failed != null)
|
||||||
|
Failed(string.Format("Exception {0}\n{1}", ex.Message, ex.InnerException));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AddFilesToDb()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
long counter = 0;
|
||||||
|
foreach(KeyValuePair<string, string> kvp in MainClass.hashes)
|
||||||
|
{
|
||||||
|
if(UpdateProgress != null)
|
||||||
|
UpdateProgress(null, "Adding files to database", counter, MainClass.hashes.Count);
|
||||||
|
|
||||||
|
if(!dbCore.DBEntries.ExistsFile(kvp.Value))
|
||||||
|
dbCore.DBEntries.AddFile(kvp.Value);
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(UpdateProgress != null)
|
||||||
|
UpdateProgress(null, "Adding OS information", counter, MainClass.hashes.Count);
|
||||||
|
dbCore.DBEntries.AddOS(MainClass.dbInfo);
|
||||||
|
|
||||||
|
if(Finished != null)
|
||||||
|
Finished();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if(System.Diagnostics.Debugger.IsAttached)
|
||||||
|
throw;
|
||||||
|
if(Failed != null)
|
||||||
|
Failed(string.Format("Exception {0}\n{1}", ex.Message, ex.InnerException));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static string stringify(byte[] hash)
|
||||||
|
{
|
||||||
|
StringBuilder hashOutput = new StringBuilder();
|
||||||
|
|
||||||
|
for(int i = 0; i < hash.Length; i++)
|
||||||
|
{
|
||||||
|
hashOutput.Append(hash[i].ToString("x2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return hashOutput.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InitDB()
|
||||||
|
{
|
||||||
|
CloseDB();
|
||||||
|
dbCore = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(string.IsNullOrEmpty(Settings.Current.DatabasePath))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("No database file specified");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbCore = new SQLite();
|
||||||
|
if(File.Exists(Settings.Current.DatabasePath))
|
||||||
|
{
|
||||||
|
if(!dbCore.OpenDB(Settings.Current.DatabasePath, null, null, null))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("Could not open database, correct file selected?");
|
||||||
|
dbCore = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(!dbCore.CreateDB(Settings.Current.DatabasePath, null, null, null))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("Could not create database, correct file selected?");
|
||||||
|
dbCore = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!dbCore.OpenDB(Settings.Current.DatabasePath, null, null, null))
|
||||||
|
{
|
||||||
|
if(Failed != null)
|
||||||
|
Failed("Could not open database, correct file selected?");
|
||||||
|
dbCore = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(Finished != null)
|
||||||
|
Finished();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
if(System.Diagnostics.Debugger.IsAttached)
|
||||||
|
throw;
|
||||||
|
if(Failed != null)
|
||||||
|
Failed(string.Format("Exception {0}\n{1}", ex.Message, ex.InnerException));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CloseDB()
|
||||||
|
{
|
||||||
|
if(dbCore != null)
|
||||||
|
dbCore.CloseDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
44
osrepodbmgr/DBCore.cs
Normal file
44
osrepodbmgr/DBCore.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System.Data;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public abstract class DBCore
|
||||||
|
{
|
||||||
|
public abstract bool OpenDB(string database, string server, string user, string password);
|
||||||
|
|
||||||
|
public abstract void CloseDB();
|
||||||
|
|
||||||
|
public abstract bool CreateDB(string database, string server, string user, string password);
|
||||||
|
|
||||||
|
public DBEntries DBEntries;
|
||||||
|
|
||||||
|
public abstract IDbDataAdapter GetNewDataAdapter();
|
||||||
|
}
|
||||||
|
}
|
||||||
252
osrepodbmgr/DBEntries.cs
Normal file
252
osrepodbmgr/DBEntries.cs
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public struct DBEntry
|
||||||
|
{
|
||||||
|
public string developer;
|
||||||
|
public string product;
|
||||||
|
public string version;
|
||||||
|
public string languages;
|
||||||
|
public string architecture;
|
||||||
|
public string machine;
|
||||||
|
public string format;
|
||||||
|
public string description;
|
||||||
|
public bool oem;
|
||||||
|
public bool upgrade;
|
||||||
|
public bool update;
|
||||||
|
public bool source;
|
||||||
|
public bool files;
|
||||||
|
public bool netinstall;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DBEntries
|
||||||
|
{
|
||||||
|
readonly IDbConnection dbCon;
|
||||||
|
readonly DBCore dbCore;
|
||||||
|
|
||||||
|
public DBEntries(IDbConnection connection, DBCore core)
|
||||||
|
{
|
||||||
|
dbCon = connection;
|
||||||
|
dbCore = core;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetAllOSes(out List<DBEntry> entries)
|
||||||
|
{
|
||||||
|
entries = new List<DBEntry>();
|
||||||
|
|
||||||
|
const string sql = "SELECT * from oses";
|
||||||
|
|
||||||
|
IDbCommand dbcmd = dbCon.CreateCommand();
|
||||||
|
IDbDataAdapter dataAdapter = dbCore.GetNewDataAdapter();
|
||||||
|
dbcmd.CommandText = sql;
|
||||||
|
DataSet dataSet = new DataSet();
|
||||||
|
dataAdapter.SelectCommand = dbcmd;
|
||||||
|
dataAdapter.Fill(dataSet);
|
||||||
|
DataTable dataTable = dataSet.Tables[0];
|
||||||
|
|
||||||
|
foreach(DataRow dRow in dataTable.Rows)
|
||||||
|
{
|
||||||
|
DBEntry fEntry = new DBEntry();
|
||||||
|
fEntry.developer = dRow["name"].ToString();
|
||||||
|
fEntry.product = dRow["founded"].ToString();
|
||||||
|
fEntry.version = dRow["website"].ToString();
|
||||||
|
fEntry.languages = dRow["twitter"].ToString();
|
||||||
|
fEntry.architecture = dRow["facebook"].ToString();
|
||||||
|
fEntry.machine = dRow["sold"].ToString();
|
||||||
|
fEntry.format = dRow["sold_to"].ToString();
|
||||||
|
fEntry.description = dRow["address"].ToString();
|
||||||
|
fEntry.oem = bool.Parse(dRow["city"].ToString());
|
||||||
|
fEntry.upgrade = bool.Parse(dRow["province"].ToString());
|
||||||
|
fEntry.update = bool.Parse(dRow["postal_code"].ToString());
|
||||||
|
fEntry.source = bool.Parse(dRow["country"].ToString());
|
||||||
|
fEntry.files = bool.Parse(dRow["city"].ToString());
|
||||||
|
fEntry.netinstall = bool.Parse(dRow["city"].ToString());
|
||||||
|
entries.Add(fEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
IDbCommand GetOSCommand(DBEntry entry)
|
||||||
|
{
|
||||||
|
IDbCommand dbcmd = dbCon.CreateCommand();
|
||||||
|
|
||||||
|
IDbDataParameter param1 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param2 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param3 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param4 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param5 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param6 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param7 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param8 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param9 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param10 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param11 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param12 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param13 = dbcmd.CreateParameter();
|
||||||
|
IDbDataParameter param14 = dbcmd.CreateParameter();
|
||||||
|
|
||||||
|
param1.ParameterName = "@developer";
|
||||||
|
param2.ParameterName = "@product";
|
||||||
|
param3.ParameterName = "@version";
|
||||||
|
param4.ParameterName = "@languages";
|
||||||
|
param5.ParameterName = "@architecture";
|
||||||
|
param6.ParameterName = "@machine";
|
||||||
|
param7.ParameterName = "@format";
|
||||||
|
param8.ParameterName = "@description";
|
||||||
|
param9.ParameterName = "@oem";
|
||||||
|
param10.ParameterName = "@upgrade";
|
||||||
|
param11.ParameterName = "@update";
|
||||||
|
param12.ParameterName = "@source";
|
||||||
|
param13.ParameterName = "@files";
|
||||||
|
param14.ParameterName = "@netinstall";
|
||||||
|
|
||||||
|
param1.DbType = DbType.String;
|
||||||
|
param2.DbType = DbType.String;
|
||||||
|
param3.DbType = DbType.String;
|
||||||
|
param4.DbType = DbType.String;
|
||||||
|
param5.DbType = DbType.String;
|
||||||
|
param7.DbType = DbType.String;
|
||||||
|
param8.DbType = DbType.String;
|
||||||
|
param9.DbType = DbType.Boolean;
|
||||||
|
param10.DbType = DbType.Boolean;
|
||||||
|
param11.DbType = DbType.Boolean;
|
||||||
|
param12.DbType = DbType.Boolean;
|
||||||
|
param13.DbType = DbType.Boolean;
|
||||||
|
param14.DbType = DbType.Boolean;
|
||||||
|
|
||||||
|
param1.Value = entry.developer;
|
||||||
|
param2.Value = entry.product;
|
||||||
|
param3.Value = entry.version;
|
||||||
|
param4.Value = entry.languages;
|
||||||
|
param5.Value = entry.architecture;
|
||||||
|
param6.Value = entry.machine;
|
||||||
|
param7.Value = entry.format;
|
||||||
|
param8.Value = entry.description;
|
||||||
|
param9.Value = entry.oem;
|
||||||
|
param10.Value = entry.upgrade;
|
||||||
|
param11.Value = entry.update;
|
||||||
|
param12.Value = entry.source;
|
||||||
|
param13.Value = entry.files;
|
||||||
|
param14.Value = entry.netinstall;
|
||||||
|
|
||||||
|
dbcmd.Parameters.Add(param1);
|
||||||
|
dbcmd.Parameters.Add(param2);
|
||||||
|
dbcmd.Parameters.Add(param3);
|
||||||
|
dbcmd.Parameters.Add(param4);
|
||||||
|
dbcmd.Parameters.Add(param5);
|
||||||
|
dbcmd.Parameters.Add(param6);
|
||||||
|
dbcmd.Parameters.Add(param7);
|
||||||
|
dbcmd.Parameters.Add(param8);
|
||||||
|
dbcmd.Parameters.Add(param9);
|
||||||
|
dbcmd.Parameters.Add(param10);
|
||||||
|
dbcmd.Parameters.Add(param11);
|
||||||
|
dbcmd.Parameters.Add(param12);
|
||||||
|
dbcmd.Parameters.Add(param13);
|
||||||
|
dbcmd.Parameters.Add(param14);
|
||||||
|
|
||||||
|
return dbcmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AddOS(DBEntry entry)
|
||||||
|
{
|
||||||
|
IDbCommand dbcmd = GetOSCommand(entry);
|
||||||
|
IDbTransaction trans = dbCon.BeginTransaction();
|
||||||
|
dbcmd.Transaction = trans;
|
||||||
|
|
||||||
|
const string sql = "INSERT INTO oses (developer, product, version, languages, architecture, machine, format, description, oem, upgrade, `update`, source, files, netinstall)" +
|
||||||
|
" VALUES (@developer, @product, @version, @languages, @architecture, @machine, @format, @description, @oem, @upgrade, @update, @source, @files, @netinstall)";
|
||||||
|
|
||||||
|
dbcmd.CommandText = sql;
|
||||||
|
|
||||||
|
dbcmd.ExecuteNonQuery();
|
||||||
|
trans.Commit();
|
||||||
|
dbcmd.Dispose();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AddFile(string hash)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Adding {0}", hash);
|
||||||
|
IDbCommand dbcmd = dbCon.CreateCommand();
|
||||||
|
|
||||||
|
IDbDataParameter param1 = dbcmd.CreateParameter();
|
||||||
|
|
||||||
|
param1.ParameterName = "@hash";
|
||||||
|
|
||||||
|
param1.DbType = DbType.String;
|
||||||
|
|
||||||
|
param1.Value = hash;
|
||||||
|
|
||||||
|
dbcmd.Parameters.Add(param1);
|
||||||
|
IDbTransaction trans = dbCon.BeginTransaction();
|
||||||
|
dbcmd.Transaction = trans;
|
||||||
|
|
||||||
|
const string sql = "INSERT INTO files (sha256) VALUES (@hash)";
|
||||||
|
|
||||||
|
dbcmd.CommandText = sql;
|
||||||
|
|
||||||
|
dbcmd.ExecuteNonQuery();
|
||||||
|
trans.Commit();
|
||||||
|
dbcmd.Dispose();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ExistsFile(string hash)
|
||||||
|
{
|
||||||
|
IDbCommand dbcmd = dbCon.CreateCommand();
|
||||||
|
IDbDataParameter param1 = dbcmd.CreateParameter();
|
||||||
|
|
||||||
|
param1.ParameterName = "@hash";
|
||||||
|
param1.DbType = DbType.String;
|
||||||
|
param1.Value = hash;
|
||||||
|
dbcmd.Parameters.Add(param1);
|
||||||
|
dbcmd.CommandText = "SELECT * FROM files WHERE sha256 = @hash";
|
||||||
|
DataSet dataSet = new DataSet();
|
||||||
|
IDbDataAdapter dataAdapter = dbCore.GetNewDataAdapter();
|
||||||
|
dataAdapter.SelectCommand = dbcmd;
|
||||||
|
dataAdapter.Fill(dataSet);
|
||||||
|
DataTable dataTable = dataSet.Tables[0];
|
||||||
|
|
||||||
|
foreach(DataRow dRow in dataTable.Rows)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
217
osrepodbmgr/DetectOS.cs
Normal file
217
osrepodbmgr/DetectOS.cs
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : DetectOS.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Interop services.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Detects underlying operating system.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2016 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace DiscImageChef.Interop
|
||||||
|
{
|
||||||
|
public static class DetectOS
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// POSIX uname structure, size from OSX, big enough to handle extra fields
|
||||||
|
/// </summary>
|
||||||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||||
|
struct utsname
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// System name
|
||||||
|
/// </summary>
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string sysname;
|
||||||
|
/// <summary>
|
||||||
|
/// Node name
|
||||||
|
/// </summary>
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string nodename;
|
||||||
|
/// <summary>
|
||||||
|
/// Release level
|
||||||
|
/// </summary>
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string release;
|
||||||
|
/// <summary>
|
||||||
|
/// Version level
|
||||||
|
/// </summary>
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string version;
|
||||||
|
/// <summary>
|
||||||
|
/// Hardware level
|
||||||
|
/// </summary>
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string machine;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("libc", SetLastError = true)]
|
||||||
|
static extern int uname(out utsname name);
|
||||||
|
|
||||||
|
[DllImport("libc", SetLastError = true, EntryPoint = "sysctlbyname", CharSet = CharSet.Ansi)]
|
||||||
|
static extern int OSX_sysctlbyname(string name, IntPtr oldp, IntPtr oldlenp, IntPtr newp, uint newlen);
|
||||||
|
|
||||||
|
public static PlatformID GetRealPlatformID()
|
||||||
|
{
|
||||||
|
if((int)Environment.OSVersion.Platform < 4 ||
|
||||||
|
(int)Environment.OSVersion.Platform == 5)
|
||||||
|
{
|
||||||
|
return (PlatformID)((int)Environment.OSVersion.Platform);
|
||||||
|
}
|
||||||
|
|
||||||
|
utsname unixname;
|
||||||
|
int error = uname(out unixname);
|
||||||
|
if(error != 0)
|
||||||
|
throw new Exception(string.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
|
||||||
|
|
||||||
|
switch(unixname.sysname)
|
||||||
|
{
|
||||||
|
// TODO: Differentiate Linux, Android, Tizen
|
||||||
|
case "Linux":
|
||||||
|
{
|
||||||
|
#if __ANDROID__
|
||||||
|
return PlatformID.Android;
|
||||||
|
#else
|
||||||
|
return PlatformID.Linux;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
case "Darwin":
|
||||||
|
{
|
||||||
|
int osx_error;
|
||||||
|
|
||||||
|
IntPtr pLen = Marshal.AllocHGlobal(sizeof(int));
|
||||||
|
osx_error = OSX_sysctlbyname("hw.machine", IntPtr.Zero, pLen, IntPtr.Zero, 0);
|
||||||
|
if(osx_error != 0)
|
||||||
|
{
|
||||||
|
Marshal.FreeHGlobal(pLen);
|
||||||
|
|
||||||
|
throw new Exception(string.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
|
||||||
|
}
|
||||||
|
|
||||||
|
int length = Marshal.ReadInt32(pLen);
|
||||||
|
IntPtr pStr = Marshal.AllocHGlobal(length);
|
||||||
|
osx_error = OSX_sysctlbyname("hw.machine", pStr, pLen, IntPtr.Zero, 0);
|
||||||
|
if(osx_error != 0)
|
||||||
|
{
|
||||||
|
Marshal.FreeHGlobal(pStr);
|
||||||
|
Marshal.FreeHGlobal(pLen);
|
||||||
|
|
||||||
|
throw new Exception(string.Format("Unhandled exception calling uname: {0}", Marshal.GetLastWin32Error()));
|
||||||
|
}
|
||||||
|
|
||||||
|
string machine = Marshal.PtrToStringAnsi(pStr);
|
||||||
|
|
||||||
|
Marshal.FreeHGlobal(pStr);
|
||||||
|
Marshal.FreeHGlobal(pLen);
|
||||||
|
|
||||||
|
if(machine.StartsWith("iPad", StringComparison.Ordinal) ||
|
||||||
|
machine.StartsWith("iPod", StringComparison.Ordinal) ||
|
||||||
|
machine.StartsWith("iPhone", StringComparison.Ordinal))
|
||||||
|
return PlatformID.iOS;
|
||||||
|
|
||||||
|
return PlatformID.MacOSX;
|
||||||
|
}
|
||||||
|
case "GNU":
|
||||||
|
return PlatformID.Hurd;
|
||||||
|
case "FreeBSD":
|
||||||
|
case "GNU/kFreeBSD":
|
||||||
|
return PlatformID.FreeBSD;
|
||||||
|
case "DragonFly":
|
||||||
|
return PlatformID.DragonFly;
|
||||||
|
case "Haiku":
|
||||||
|
return PlatformID.Haiku;
|
||||||
|
case "HP-UX":
|
||||||
|
return PlatformID.HPUX;
|
||||||
|
case "AIX":
|
||||||
|
return PlatformID.AIX;
|
||||||
|
case "OS400":
|
||||||
|
return PlatformID.OS400;
|
||||||
|
case "IRIX":
|
||||||
|
case "IRIX64":
|
||||||
|
return PlatformID.IRIX;
|
||||||
|
case "Minix":
|
||||||
|
return PlatformID.Minix;
|
||||||
|
case "NetBSD":
|
||||||
|
return PlatformID.NetBSD;
|
||||||
|
case "NONSTOP_KERNEL":
|
||||||
|
return PlatformID.NonStop;
|
||||||
|
case "OpenBSD":
|
||||||
|
return PlatformID.OpenBSD;
|
||||||
|
case "QNX":
|
||||||
|
return PlatformID.QNX;
|
||||||
|
case "SINIX-Y":
|
||||||
|
return PlatformID.SINIX;
|
||||||
|
case "SunOS":
|
||||||
|
return PlatformID.Solaris;
|
||||||
|
case "OSF1":
|
||||||
|
return PlatformID.Tru64;
|
||||||
|
case "ULTRIX":
|
||||||
|
return PlatformID.Ultrix;
|
||||||
|
case "SCO_SV":
|
||||||
|
return PlatformID.OpenServer;
|
||||||
|
case "UnixWare":
|
||||||
|
return PlatformID.UnixWare;
|
||||||
|
case "Interix":
|
||||||
|
case "UWIN-W7":
|
||||||
|
return PlatformID.Win32NT;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if(unixname.sysname.StartsWith("CYGWIN_NT", StringComparison.Ordinal) ||
|
||||||
|
unixname.sysname.StartsWith("MINGW32_NT", StringComparison.Ordinal) ||
|
||||||
|
unixname.sysname.StartsWith("MSYS_NT", StringComparison.Ordinal) ||
|
||||||
|
unixname.sysname.StartsWith("UWIN", StringComparison.Ordinal))
|
||||||
|
return PlatformID.Win32NT;
|
||||||
|
|
||||||
|
return PlatformID.Unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the underlying runtime runs in 64-bit mode
|
||||||
|
/// </summary>
|
||||||
|
public static bool Is64Bit()
|
||||||
|
{
|
||||||
|
return IntPtr.Size == 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the underlying runtime runs in 32-bit mode
|
||||||
|
/// </summary>
|
||||||
|
public static bool Is32Bit()
|
||||||
|
{
|
||||||
|
return IntPtr.Size == 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
532
osrepodbmgr/MainWindow.cs
Normal file
532
osrepodbmgr/MainWindow.cs
Normal file
@@ -0,0 +1,532 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using Gtk;
|
||||||
|
using osrepodbmgr;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public partial class MainWindow : Window
|
||||||
|
{
|
||||||
|
Thread thdPulseProgress;
|
||||||
|
Thread thdFindFiles;
|
||||||
|
Thread thdHashFiles;
|
||||||
|
Thread thdCheckFiles;
|
||||||
|
Thread thdAddFiles;
|
||||||
|
bool stopped;
|
||||||
|
ListStore view;
|
||||||
|
|
||||||
|
public MainWindow() : base(WindowType.Toplevel)
|
||||||
|
{
|
||||||
|
Build();
|
||||||
|
Core.InitDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnDeleteEvent(object sender, DeleteEventArgs a)
|
||||||
|
{
|
||||||
|
if(btnStop.Visible)
|
||||||
|
OnBtnStopClicked(sender, a);
|
||||||
|
if(btnClose.Sensitive)
|
||||||
|
OnBtnCloseClicked(sender, a);
|
||||||
|
|
||||||
|
Application.Quit();
|
||||||
|
a.RetVal = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnHelpClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
frmHelp _help = new frmHelp();
|
||||||
|
_help.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnFolderClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileChooserDialog dlgFolder = new FileChooserDialog("Open folder", this, FileChooserAction.SelectFolder,
|
||||||
|
"Cancel", ResponseType.Cancel, "Choose", ResponseType.Accept);
|
||||||
|
dlgFolder.SelectMultiple = false;
|
||||||
|
|
||||||
|
if(dlgFolder.Run() == (int)ResponseType.Accept)
|
||||||
|
{
|
||||||
|
stopped = false;
|
||||||
|
lblProgress.Text = "Finding files";
|
||||||
|
lblProgress.Visible = true;
|
||||||
|
prgProgress.Visible = true;
|
||||||
|
btnExit.Sensitive = false;
|
||||||
|
btnFolder.Visible = false;
|
||||||
|
btnArchive.Visible = false;
|
||||||
|
btnSettings.Sensitive = false;
|
||||||
|
thdPulseProgress = new Thread(() =>
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
prgProgress.Pulse();
|
||||||
|
});
|
||||||
|
Thread.Sleep(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
thdFindFiles = new Thread(Core.FindFiles);
|
||||||
|
MainClass.path = dlgFolder.Filename;
|
||||||
|
Core.Failed += FindFilesFailed;
|
||||||
|
Core.Finished += FindFilesFinished;
|
||||||
|
btnStop.Visible = true;
|
||||||
|
thdPulseProgress.Start();
|
||||||
|
thdFindFiles.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
dlgFolder.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindFilesFailed(string text)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(!stopped)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, text);
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
}
|
||||||
|
if(thdPulseProgress != null)
|
||||||
|
thdPulseProgress.Abort();
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
btnFolder.Visible = true;
|
||||||
|
btnArchive.Visible = true;
|
||||||
|
btnSettings.Sensitive = true;
|
||||||
|
Core.Failed -= FindFilesFailed;
|
||||||
|
Core.Finished -= FindFilesFinished;
|
||||||
|
thdFindFiles = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindFilesFinished()
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(thdPulseProgress != null)
|
||||||
|
thdPulseProgress.Abort();
|
||||||
|
|
||||||
|
Core.Failed -= FindFilesFailed;
|
||||||
|
Core.Finished -= FindFilesFinished;
|
||||||
|
|
||||||
|
lblProgress.Visible = true;
|
||||||
|
prgProgress.Visible = true;
|
||||||
|
lblProgress2.Visible = true;
|
||||||
|
prgProgress2.Visible = true;
|
||||||
|
|
||||||
|
thdFindFiles = null;
|
||||||
|
thdHashFiles = new Thread(Core.HashFiles);
|
||||||
|
Core.Failed += HashFilesFailed;
|
||||||
|
Core.Finished += HashFilesFinished;
|
||||||
|
Core.UpdateProgress += UpdateProgress;
|
||||||
|
Core.UpdateProgress2 += UpdateProgress2;
|
||||||
|
thdHashFiles.Start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void HashFilesFailed(string text)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(!stopped)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, text);
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
}
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
lblProgress2.Visible = false;
|
||||||
|
prgProgress2.Visible = false;
|
||||||
|
Core.Failed -= HashFilesFailed;
|
||||||
|
Core.Finished -= HashFilesFinished;
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.UpdateProgress2 -= UpdateProgress2;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
btnFolder.Visible = true;
|
||||||
|
btnArchive.Visible = true;
|
||||||
|
btnSettings.Sensitive = true;
|
||||||
|
thdHashFiles = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void HashFilesFinished()
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
lblProgress2.Visible = false;
|
||||||
|
prgProgress2.Visible = false;
|
||||||
|
Core.Failed -= HashFilesFailed;
|
||||||
|
Core.Finished -= HashFilesFinished;
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.UpdateProgress2 -= UpdateProgress2;
|
||||||
|
thdHashFiles = null;
|
||||||
|
|
||||||
|
prgProgress.Visible = true;
|
||||||
|
|
||||||
|
CellRendererText filenameCell = new CellRendererText();
|
||||||
|
CellRendererText hashCell = new CellRendererText();
|
||||||
|
CellRendererToggle dbCell = new CellRendererToggle();
|
||||||
|
|
||||||
|
TreeViewColumn filenameColumn = new TreeViewColumn("Path", filenameCell, "text", 0, "background", 3, "foreground", 4);
|
||||||
|
TreeViewColumn hashColumn = new TreeViewColumn("SHA256", hashCell, "text", 1, "background", 3, "foreground", 4);
|
||||||
|
TreeViewColumn dbColumn = new TreeViewColumn("Known?", dbCell, "active", 2);
|
||||||
|
|
||||||
|
view = new ListStore(typeof(string), typeof(string), typeof(bool), typeof(string), typeof(string));
|
||||||
|
|
||||||
|
treeFiles.Model = view;
|
||||||
|
treeFiles.AppendColumn(filenameColumn);
|
||||||
|
treeFiles.AppendColumn(hashColumn);
|
||||||
|
treeFiles.AppendColumn(dbColumn);
|
||||||
|
|
||||||
|
thdCheckFiles = new Thread(Core.CheckDbForFiles);
|
||||||
|
Core.Failed += ChkFilesFailed;
|
||||||
|
Core.Finished += ChkFilesFinished;
|
||||||
|
Core.UpdateProgress += UpdateProgress;
|
||||||
|
Core.AddEntry += AddFile;
|
||||||
|
btnAdd.Sensitive = false;
|
||||||
|
thdCheckFiles.Start();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChkFilesFailed(string text)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(!stopped)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, text);
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
}
|
||||||
|
if(thdCheckFiles != null)
|
||||||
|
thdCheckFiles.Abort();
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
btnStop.Visible = false;
|
||||||
|
btnClose.Visible = true;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
Core.Failed -= ChkFilesFailed;
|
||||||
|
Core.Finished -= ChkFilesFinished;
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.AddEntry -= AddFile;
|
||||||
|
thdHashFiles = null;
|
||||||
|
if(view != null)
|
||||||
|
{
|
||||||
|
view.Clear();
|
||||||
|
treeFiles.Model = null;
|
||||||
|
view = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChkFilesFinished()
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(thdCheckFiles != null)
|
||||||
|
thdCheckFiles.Abort();
|
||||||
|
|
||||||
|
Core.Failed -= ChkFilesFailed;
|
||||||
|
Core.Finished -= ChkFilesFinished;
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.AddEntry -= AddFile;
|
||||||
|
|
||||||
|
thdHashFiles = null;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
btnStop.Visible = false;
|
||||||
|
btnClose.Visible = true;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
btnSettings.Sensitive = true;
|
||||||
|
btnAdd.Visible = true;
|
||||||
|
btnPack.Visible = true;
|
||||||
|
|
||||||
|
txtFormat.IsEditable = true;
|
||||||
|
txtMachine.IsEditable = true;
|
||||||
|
txtProduct.IsEditable = true;
|
||||||
|
txtVersion.IsEditable = true;
|
||||||
|
txtLanguages.IsEditable = true;
|
||||||
|
txtDeveloper.IsEditable = true;
|
||||||
|
txtDescription.IsEditable = true;
|
||||||
|
txtArchitecture.IsEditable = true;
|
||||||
|
chkOem.Sensitive = true;
|
||||||
|
chkFiles.Sensitive = true;
|
||||||
|
chkUpdate.Sensitive = true;
|
||||||
|
chkUpgrade.Sensitive = true;
|
||||||
|
chkNetinstall.Sensitive = true;
|
||||||
|
chkSource.Sensitive = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddFile(string filename, string hash, bool known)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
string color = known ? "green" : "red";
|
||||||
|
view.AppendValues(filename, hash, known, color, "black");
|
||||||
|
btnAdd.Sensitive |= !known;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnExitClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if(btnClose.Sensitive)
|
||||||
|
OnBtnCloseClicked(sender, e);
|
||||||
|
|
||||||
|
Application.Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnCloseClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
btnFolder.Visible = true;
|
||||||
|
btnArchive.Visible = true;
|
||||||
|
MainClass.path = "";
|
||||||
|
MainClass.files = null;
|
||||||
|
MainClass.hashes = null;
|
||||||
|
btnStop.Visible = false;
|
||||||
|
btnAdd.Visible = false;
|
||||||
|
btnPack.Visible = false;
|
||||||
|
btnClose.Visible = false;
|
||||||
|
if(view != null)
|
||||||
|
{
|
||||||
|
view.Clear();
|
||||||
|
treeFiles.Model = null;
|
||||||
|
view = null;
|
||||||
|
}
|
||||||
|
txtFormat.IsEditable = false;
|
||||||
|
txtMachine.IsEditable = false;
|
||||||
|
txtProduct.IsEditable = false;
|
||||||
|
txtVersion.IsEditable = false;
|
||||||
|
txtLanguages.IsEditable = false;
|
||||||
|
txtDeveloper.IsEditable = false;
|
||||||
|
txtDescription.IsEditable = false;
|
||||||
|
txtArchitecture.IsEditable = false;
|
||||||
|
chkOem.Sensitive = false;
|
||||||
|
chkFiles.Sensitive = false;
|
||||||
|
chkUpdate.Sensitive = false;
|
||||||
|
chkUpgrade.Sensitive = false;
|
||||||
|
chkNetinstall.Sensitive = false;
|
||||||
|
chkSource.Sensitive = false;
|
||||||
|
txtFormat.Text = "";
|
||||||
|
txtMachine.Text = "";
|
||||||
|
txtProduct.Text = "";
|
||||||
|
txtVersion.Text = "";
|
||||||
|
txtLanguages.Text = "";
|
||||||
|
txtDeveloper.Text = "";
|
||||||
|
txtDescription.Text = "";
|
||||||
|
txtArchitecture.Text = "";
|
||||||
|
chkOem.Active = false;
|
||||||
|
chkFiles.Active = false;
|
||||||
|
chkUpdate.Active = false;
|
||||||
|
chkUpgrade.Active = false;
|
||||||
|
chkNetinstall.Active = false;
|
||||||
|
chkSource.Active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateProgress(string text, string inner, long current, long maximum)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
lblProgress.Text = text;
|
||||||
|
prgProgress.Text = inner;
|
||||||
|
if(maximum > 0)
|
||||||
|
prgProgress.Fraction = current / (double)maximum;
|
||||||
|
else
|
||||||
|
prgProgress.Pulse();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateProgress2(string text, string inner, long current, long maximum)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
lblProgress2.Text = text;
|
||||||
|
prgProgress2.Text = inner;
|
||||||
|
if(maximum > 0)
|
||||||
|
prgProgress2.Fraction = current / (double)maximum;
|
||||||
|
else
|
||||||
|
prgProgress2.Pulse();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnStopClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
stopped = true;
|
||||||
|
|
||||||
|
if(thdPulseProgress != null)
|
||||||
|
{
|
||||||
|
thdPulseProgress.Abort();
|
||||||
|
thdPulseProgress = null;
|
||||||
|
}
|
||||||
|
if(thdFindFiles != null)
|
||||||
|
{
|
||||||
|
thdFindFiles.Abort();
|
||||||
|
thdFindFiles = null;
|
||||||
|
}
|
||||||
|
if(thdHashFiles != null)
|
||||||
|
{
|
||||||
|
thdHashFiles.Abort();
|
||||||
|
thdHashFiles = null;
|
||||||
|
}
|
||||||
|
if(thdCheckFiles != null)
|
||||||
|
{
|
||||||
|
thdCheckFiles.Abort();
|
||||||
|
thdCheckFiles = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
lblProgress2.Visible = false;
|
||||||
|
prgProgress2.Visible = false;
|
||||||
|
Core.Failed -= HashFilesFailed;
|
||||||
|
Core.Finished -= HashFilesFinished;
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.UpdateProgress2 -= UpdateProgress2;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
btnFolder.Visible = true;
|
||||||
|
btnArchive.Visible = true;
|
||||||
|
btnSettings.Sensitive = true;
|
||||||
|
lblProgress.Visible = false;
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
btnExit.Sensitive = true;
|
||||||
|
btnFolder.Visible = true;
|
||||||
|
btnArchive.Visible = true;
|
||||||
|
btnSettings.Sensitive = true;
|
||||||
|
Core.Failed -= FindFilesFailed;
|
||||||
|
Core.Finished -= FindFilesFinished;
|
||||||
|
btnStop.Visible = false;
|
||||||
|
if(view != null)
|
||||||
|
{
|
||||||
|
view.Clear();
|
||||||
|
treeFiles.Model = null;
|
||||||
|
view = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnAddClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
btnAdd.Sensitive = false;
|
||||||
|
btnPack.Sensitive = false;
|
||||||
|
btnClose.Sensitive = false;
|
||||||
|
prgProgress.Visible = true;
|
||||||
|
txtFormat.IsEditable = false;
|
||||||
|
txtMachine.IsEditable = false;
|
||||||
|
txtProduct.IsEditable = false;
|
||||||
|
txtVersion.IsEditable = false;
|
||||||
|
txtLanguages.IsEditable = false;
|
||||||
|
txtDeveloper.IsEditable = false;
|
||||||
|
txtDescription.IsEditable = false;
|
||||||
|
txtArchitecture.IsEditable = false;
|
||||||
|
chkOem.Sensitive = false;
|
||||||
|
chkFiles.Sensitive = false;
|
||||||
|
chkUpdate.Sensitive = false;
|
||||||
|
chkUpgrade.Sensitive = false;
|
||||||
|
chkNetinstall.Sensitive = false;
|
||||||
|
chkSource.Sensitive = false;
|
||||||
|
|
||||||
|
Core.UpdateProgress += UpdateProgress;
|
||||||
|
Core.Finished += AddFilesToDbFinished;
|
||||||
|
Core.Failed += AddFilesToDbFailed;
|
||||||
|
|
||||||
|
MainClass.dbInfo.architecture = txtArchitecture.Text;
|
||||||
|
MainClass.dbInfo.description = txtDescription.Text;
|
||||||
|
MainClass.dbInfo.developer = txtDeveloper.Text;
|
||||||
|
MainClass.dbInfo.format = txtFormat.Text;
|
||||||
|
MainClass.dbInfo.languages = txtLanguages.Text;
|
||||||
|
MainClass.dbInfo.machine = txtMachine.Text;
|
||||||
|
MainClass.dbInfo.product = txtProduct.Text;
|
||||||
|
MainClass.dbInfo.version = txtVersion.Text;
|
||||||
|
MainClass.dbInfo.files = chkFiles.Active;
|
||||||
|
MainClass.dbInfo.netinstall = chkNetinstall.Active;
|
||||||
|
MainClass.dbInfo.oem = chkOem.Active;
|
||||||
|
MainClass.dbInfo.source = chkSource.Active;
|
||||||
|
MainClass.dbInfo.update = chkUpdate.Active;
|
||||||
|
MainClass.dbInfo.upgrade = chkUpgrade.Active;
|
||||||
|
|
||||||
|
thdHashFiles = new Thread(Core.AddFilesToDb);
|
||||||
|
thdHashFiles.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddFilesToDbFinished()
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(thdAddFiles != null)
|
||||||
|
thdAddFiles.Abort();
|
||||||
|
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.Finished -= AddFilesToDbFinished;
|
||||||
|
Core.Failed -= AddFilesToDbFailed;
|
||||||
|
|
||||||
|
long counter = 0;
|
||||||
|
view.Clear();
|
||||||
|
foreach(KeyValuePair<string, string> kvp in MainClass.hashes)
|
||||||
|
{
|
||||||
|
UpdateProgress(null, "Updating table", counter, MainClass.hashes.Count);
|
||||||
|
view.AppendValues(kvp.Key, kvp.Value, true, "green", "black");
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
prgProgress.Visible = false;
|
||||||
|
btnPack.Sensitive = true;
|
||||||
|
btnClose.Sensitive = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddFilesToDbFailed(string text)
|
||||||
|
{
|
||||||
|
Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
if(!stopped)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, text);
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(thdAddFiles != null)
|
||||||
|
thdAddFiles.Abort();
|
||||||
|
|
||||||
|
Core.UpdateProgress -= UpdateProgress;
|
||||||
|
Core.Finished -= AddFilesToDbFinished;
|
||||||
|
Core.Failed -= AddFilesToDbFailed;
|
||||||
|
|
||||||
|
ChkFilesFinished();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnSettingsClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
frmSettings _frmSettings = new frmSettings();
|
||||||
|
_frmSettings.Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
189
osrepodbmgr/PlatformID.cs
Normal file
189
osrepodbmgr/PlatformID.cs
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : PlatformID.cs
|
||||||
|
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
||||||
|
//
|
||||||
|
// Component : Interop services.
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Contains an enhanced PlatformID enumeration.
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright © 2011-2016 Natalia Portillo
|
||||||
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
namespace DiscImageChef.Interop
|
||||||
|
{
|
||||||
|
public enum PlatformID
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Win32s
|
||||||
|
/// </summary>
|
||||||
|
Win32S = 0,
|
||||||
|
/// <summary>
|
||||||
|
/// Win32 (Windows 9x)
|
||||||
|
/// </summary>
|
||||||
|
Win32Windows = 1,
|
||||||
|
/// <summary>
|
||||||
|
/// Windows NT
|
||||||
|
/// </summary>
|
||||||
|
Win32NT = 2,
|
||||||
|
/// <summary>
|
||||||
|
/// Windows Mobile
|
||||||
|
/// </summary>
|
||||||
|
WinCE = 3,
|
||||||
|
/// <summary>
|
||||||
|
/// UNIX (do not use, too generic)
|
||||||
|
/// </summary>
|
||||||
|
Unix = 4,
|
||||||
|
/// <summary>
|
||||||
|
/// Xbox 360
|
||||||
|
/// </summary>
|
||||||
|
Xbox = 5,
|
||||||
|
/// <summary>
|
||||||
|
/// OS X
|
||||||
|
/// </summary>
|
||||||
|
MacOSX = 6,
|
||||||
|
/// <summary>
|
||||||
|
/// iOS is not OS X
|
||||||
|
/// </summary>
|
||||||
|
iOS = 7,
|
||||||
|
/// <summary>
|
||||||
|
/// Linux
|
||||||
|
/// </summary>
|
||||||
|
Linux = 8,
|
||||||
|
/// <summary>
|
||||||
|
/// Sun Solaris
|
||||||
|
/// </summary>
|
||||||
|
Solaris = 9,
|
||||||
|
/// <summary>
|
||||||
|
/// NetBSD
|
||||||
|
/// </summary>
|
||||||
|
NetBSD = 10,
|
||||||
|
/// <summary>
|
||||||
|
/// OpenBSD
|
||||||
|
/// </summary>
|
||||||
|
OpenBSD = 11,
|
||||||
|
/// <summary>
|
||||||
|
/// FreeBSD
|
||||||
|
/// </summary>
|
||||||
|
FreeBSD = 12,
|
||||||
|
/// <summary>
|
||||||
|
/// DragonFly BSD
|
||||||
|
/// </summary>
|
||||||
|
DragonFly = 13,
|
||||||
|
/// <summary>
|
||||||
|
/// Nintendo Wii
|
||||||
|
/// </summary>
|
||||||
|
Wii = 14,
|
||||||
|
/// <summary>
|
||||||
|
/// Nintendo Wii U
|
||||||
|
/// </summary>
|
||||||
|
WiiU = 15,
|
||||||
|
/// <summary>
|
||||||
|
/// Sony PlayStation 3
|
||||||
|
/// </summary>
|
||||||
|
PlayStation3 = 16,
|
||||||
|
/// <summary>
|
||||||
|
/// Sony Playstation 4
|
||||||
|
/// </summary>
|
||||||
|
PlayStation4 = 17,
|
||||||
|
/// <summary>
|
||||||
|
/// Google Android
|
||||||
|
/// </summary>
|
||||||
|
Android = 18,
|
||||||
|
/// <summary>
|
||||||
|
/// Samsung Tizen
|
||||||
|
/// </summary>
|
||||||
|
Tizen = 19,
|
||||||
|
/// <summary>
|
||||||
|
/// Windows Phone
|
||||||
|
/// </summary>
|
||||||
|
WindowsPhone = 20,
|
||||||
|
/// <summary>
|
||||||
|
/// GNU/Hurd
|
||||||
|
/// </summary>
|
||||||
|
Hurd = 21,
|
||||||
|
/// <summary>
|
||||||
|
/// Haiku
|
||||||
|
/// </summary>
|
||||||
|
Haiku = 22,
|
||||||
|
/// <summary>
|
||||||
|
/// HP-UX
|
||||||
|
/// </summary>
|
||||||
|
HPUX = 23,
|
||||||
|
/// <summary>
|
||||||
|
/// AIX
|
||||||
|
/// </summary>
|
||||||
|
AIX = 24,
|
||||||
|
/// <summary>
|
||||||
|
/// OS/400
|
||||||
|
/// </summary>
|
||||||
|
OS400 = 25,
|
||||||
|
/// <summary>
|
||||||
|
/// IRIX
|
||||||
|
/// </summary>
|
||||||
|
IRIX = 26,
|
||||||
|
/// <summary>
|
||||||
|
/// Minix
|
||||||
|
/// </summary>
|
||||||
|
Minix = 27,
|
||||||
|
/// <summary>
|
||||||
|
/// NonStop
|
||||||
|
/// </summary>
|
||||||
|
NonStop = 28,
|
||||||
|
/// <summary>
|
||||||
|
/// QNX
|
||||||
|
/// </summary>
|
||||||
|
QNX = 29,
|
||||||
|
/// <summary>
|
||||||
|
/// SINIX
|
||||||
|
/// </summary>
|
||||||
|
SINIX = 30,
|
||||||
|
/// <summary>
|
||||||
|
/// Tru64 UNIX
|
||||||
|
/// </summary>
|
||||||
|
Tru64 = 31,
|
||||||
|
/// <summary>
|
||||||
|
/// Ultrix
|
||||||
|
/// </summary>
|
||||||
|
Ultrix = 32,
|
||||||
|
/// <summary>
|
||||||
|
/// SCO OpenServer / SCO UNIX
|
||||||
|
/// </summary>
|
||||||
|
OpenServer = 33,
|
||||||
|
/// <summary>
|
||||||
|
/// SCO UnixWare
|
||||||
|
/// </summary>
|
||||||
|
UnixWare = 34,
|
||||||
|
/// <summary>
|
||||||
|
/// IBM z/OS
|
||||||
|
/// </summary>
|
||||||
|
zOS = 35,
|
||||||
|
Unknown = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
49
osrepodbmgr/Program.cs
Normal file
49
osrepodbmgr/Program.cs
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Gtk;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
static class MainClass
|
||||||
|
{
|
||||||
|
public static List<string> files;
|
||||||
|
public static Dictionary<string, string> hashes;
|
||||||
|
public static string path;
|
||||||
|
public static DBEntry dbInfo;
|
||||||
|
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Settings.LoadSettings();
|
||||||
|
Application.Init();
|
||||||
|
MainWindow win = new MainWindow();
|
||||||
|
win.Show();
|
||||||
|
Application.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
53
osrepodbmgr/Properties/AssemblyInfo.cs
Normal file
53
osrepodbmgr/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
// Information about this assembly is defined by the following attributes.
|
||||||
|
// Change them to the values specific to your project.
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle ("osrepodbmgr")]
|
||||||
|
[assembly: AssemblyDescription ("")]
|
||||||
|
[assembly: AssemblyConfiguration ("")]
|
||||||
|
[assembly: AssemblyCompany ("Claunia.com")]
|
||||||
|
[assembly: AssemblyProduct ("")]
|
||||||
|
[assembly: AssemblyCopyright ("© Claunia.com")]
|
||||||
|
[assembly: AssemblyTrademark ("")]
|
||||||
|
[assembly: AssemblyCulture ("")]
|
||||||
|
|
||||||
|
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
|
||||||
|
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
|
||||||
|
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion ("1.0.*")]
|
||||||
|
|
||||||
|
// The following attributes are used to specify the signing key for the assembly,
|
||||||
|
// if desired. See the Mono documentation for more information about signing.
|
||||||
|
|
||||||
|
//[assembly: AssemblyDelaySign(false)]
|
||||||
|
//[assembly: AssemblyKeyFile("")]
|
||||||
152
osrepodbmgr/SHA256Context.cs
Normal file
152
osrepodbmgr/SHA256Context.cs
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System.IO;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides a UNIX similar API to .NET SHA256.
|
||||||
|
/// </summary>
|
||||||
|
public class SHA256Context
|
||||||
|
{
|
||||||
|
SHA256 _sha256Provider;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the SHA256 hash provider
|
||||||
|
/// </summary>
|
||||||
|
public void Init()
|
||||||
|
{
|
||||||
|
_sha256Provider = SHA256.Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the hash with data.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of buffer to hash.</param>
|
||||||
|
public void Update(byte[] data, uint len)
|
||||||
|
{
|
||||||
|
_sha256Provider.TransformBlock(data, 0, (int)len, data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the hash with data.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
public void Update(byte[] data)
|
||||||
|
{
|
||||||
|
Update(data, (uint)data.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a byte array of the hash value.
|
||||||
|
/// </summary>
|
||||||
|
public byte[] Final()
|
||||||
|
{
|
||||||
|
_sha256Provider.TransformFinalBlock(new byte[0], 0, 0);
|
||||||
|
return _sha256Provider.Hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a hexadecimal representation of the hash value.
|
||||||
|
/// </summary>
|
||||||
|
public string End()
|
||||||
|
{
|
||||||
|
_sha256Provider.TransformFinalBlock(new byte[0], 0, 0);
|
||||||
|
StringBuilder sha256Output = new StringBuilder();
|
||||||
|
|
||||||
|
for(int i = 0; i < _sha256Provider.Hash.Length; i++)
|
||||||
|
{
|
||||||
|
sha256Output.Append(_sha256Provider.Hash[i].ToString("x2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sha256Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the hash of a file
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">File path.</param>
|
||||||
|
public byte[] File(string filename)
|
||||||
|
{
|
||||||
|
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||||
|
return _sha256Provider.ComputeHash(fileStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the hash of a file in hexadecimal and as a byte array.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">File path.</param>
|
||||||
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
|
public string File(string filename, out byte[] hash)
|
||||||
|
{
|
||||||
|
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||||
|
hash = _sha256Provider.ComputeHash(fileStream);
|
||||||
|
StringBuilder sha256Output = new StringBuilder();
|
||||||
|
|
||||||
|
for(int i = 0; i < hash.Length; i++)
|
||||||
|
{
|
||||||
|
sha256Output.Append(hash[i].ToString("x2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sha256Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the hash of the specified data buffer.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="len">Length of the data buffer to hash.</param>
|
||||||
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
|
public string Data(byte[] data, uint len, out byte[] hash)
|
||||||
|
{
|
||||||
|
hash = _sha256Provider.ComputeHash(data, 0, (int)len);
|
||||||
|
StringBuilder sha256Output = new StringBuilder();
|
||||||
|
|
||||||
|
for(int i = 0; i < hash.Length; i++)
|
||||||
|
{
|
||||||
|
sha256Output.Append(hash[i].ToString("x2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sha256Output.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the hash of the specified data buffer.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">Data buffer.</param>
|
||||||
|
/// <param name="hash">Byte array of the hash value.</param>
|
||||||
|
public string Data(byte[] data, out byte[] hash)
|
||||||
|
{
|
||||||
|
return Data(data, (uint)data.Length, out hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
138
osrepodbmgr/SQLite.cs
Normal file
138
osrepodbmgr/SQLite.cs
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
using System.Data;
|
||||||
|
using System.Data.SQLite;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public class SQLite : DBCore
|
||||||
|
{
|
||||||
|
SQLiteConnection dbCon;
|
||||||
|
|
||||||
|
#region implemented abstract members of DBCore
|
||||||
|
|
||||||
|
public override bool OpenDB(string database, string server, string user, string password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string dataSrc = string.Format("URI=file:{0}", database);
|
||||||
|
dbCon = new SQLiteConnection(dataSrc);
|
||||||
|
dbCon.Open();
|
||||||
|
string sql;
|
||||||
|
|
||||||
|
sql = "SELECT * FROM cicm";
|
||||||
|
|
||||||
|
SQLiteCommand dbcmd = dbCon.CreateCommand();
|
||||||
|
dbcmd.CommandText = sql;
|
||||||
|
SQLiteDataAdapter dAdapter = new SQLiteDataAdapter();
|
||||||
|
dAdapter.SelectCommand = dbcmd;
|
||||||
|
DataSet dSet = new DataSet();
|
||||||
|
dAdapter.Fill(dSet);
|
||||||
|
DataTable dTable = dSet.Tables[0];
|
||||||
|
|
||||||
|
if(dTable.Rows.Count != 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if((long)dTable.Rows[0]["version"] != 1)
|
||||||
|
{
|
||||||
|
dbCon = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBEntries = new DBEntries(dbCon, this);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(SQLiteException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Error opening DB.");
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
dbCon = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void CloseDB()
|
||||||
|
{
|
||||||
|
if(dbCon != null)
|
||||||
|
dbCon.Close();
|
||||||
|
|
||||||
|
DBEntries = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CreateDB(string database, string server, string user, string password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string dataSrc = string.Format("URI=file:{0}", database);
|
||||||
|
dbCon = new SQLiteConnection(dataSrc);
|
||||||
|
dbCon.Open();
|
||||||
|
SQLiteCommand dbCmd = dbCon.CreateCommand();
|
||||||
|
string sql;
|
||||||
|
|
||||||
|
Console.WriteLine("Creating cicm table");
|
||||||
|
|
||||||
|
sql = "CREATE TABLE cicm ( version INTEGER, name TEXT )";
|
||||||
|
dbCmd.CommandText = sql;
|
||||||
|
dbCmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
sql = "INSERT INTO cicm ( version, name ) VALUES ( '1', 'Canary Islands Computer Museum' )";
|
||||||
|
dbCmd.CommandText = sql;
|
||||||
|
dbCmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
Console.WriteLine("Creating oses table");
|
||||||
|
dbCmd.CommandText = Schema.OSesTableSql;
|
||||||
|
dbCmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
Console.WriteLine("Creating files table");
|
||||||
|
dbCmd.CommandText = Schema.FilesTableSql;
|
||||||
|
dbCmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
dbCmd.Dispose();
|
||||||
|
dbCon = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(SQLiteException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Error opening DB.");
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
dbCon = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IDbDataAdapter GetNewDataAdapter()
|
||||||
|
{
|
||||||
|
return new SQLiteDataAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
72
osrepodbmgr/Schema.cs
Normal file
72
osrepodbmgr/Schema.cs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public static class Schema
|
||||||
|
{
|
||||||
|
public const string FilesTableSql = "-- -----------------------------------------------------\n" +
|
||||||
|
"-- Table `files`\n" +
|
||||||
|
"-- -----------------------------------------------------\n" +
|
||||||
|
"DROP TABLE IF EXISTS `files` ;\n\n" +
|
||||||
|
"CREATE TABLE IF NOT EXISTS `files` (\n" +
|
||||||
|
" `id` INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
|
||||||
|
" `sha256` VARCHAR(64) NOT NULL);\n\n" +
|
||||||
|
"CREATE UNIQUE INDEX `files_id_UNIQUE` ON `files` (`id` ASC);\n\n" +
|
||||||
|
"CREATE UNIQUE INDEX `files_sha256_UNIQUE` ON `files` (`sha256` ASC);";
|
||||||
|
|
||||||
|
public const string OSesTableSql = "-- -----------------------------------------------------\n" +
|
||||||
|
"-- Table `oses`\n" +
|
||||||
|
"-- -----------------------------------------------------\n" +
|
||||||
|
"DROP TABLE IF EXISTS `oses` ;\n\n" +
|
||||||
|
"CREATE TABLE IF NOT EXISTS `oses` (\n" +
|
||||||
|
" `id` INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
|
||||||
|
" `developer` VARCHAR(45) NOT NULL,\n" +
|
||||||
|
" `product` VARCHAR(45) NOT NULL,\n" +
|
||||||
|
" `version` VARCHAR(45) NULL,\n" +
|
||||||
|
" `languages` VARCHAR(45) NULL,\n" +
|
||||||
|
" `architecture` VARCHAR(45) NULL,\n" +
|
||||||
|
" `machine` VARCHAR(45) NULL,\n" +
|
||||||
|
" `format` VARCHAR(45) NULL,\n" +
|
||||||
|
" `description` VARCHAR(45) NULL,\n" +
|
||||||
|
" `oem` BOOLEAN NULL,\n" +
|
||||||
|
" `upgrade` BOOLEAN NULL,\n" +
|
||||||
|
" `update` BOOLEAN NULL,\n" +
|
||||||
|
" `source` BOOLEAN NULL,\n" +
|
||||||
|
" `files` BOOLEAN NULL,\n" +
|
||||||
|
" `netinstall` BOOLEAN NULL);\n\n" +
|
||||||
|
"CREATE UNIQUE INDEX `oses_id_UNIQUE` ON `oses` (`id` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_developer_idx` ON `oses` (`developer` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_product_idx` ON `oses` (`product` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_version_idx` ON `oses` (`version` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_architecture_idx` ON `oses` (`architecture` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_format_idx` ON `oses` (`format` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_machine_idx` ON `oses` (`machine` ASC);\n\n" +
|
||||||
|
"CREATE INDEX `oses_description_idx` ON `oses` (`description` ASC);";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
237
osrepodbmgr/Settings.cs
Normal file
237
osrepodbmgr/Settings.cs
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Canary Islands Computer Museum
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using Claunia.PropertyList;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public class SetSettings
|
||||||
|
{
|
||||||
|
public string TemporaryFolder;
|
||||||
|
public string DatabasePath;
|
||||||
|
public string RepositoryPath;
|
||||||
|
public string UnArchiverPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Settings
|
||||||
|
{
|
||||||
|
public static SetSettings Current;
|
||||||
|
|
||||||
|
public static void LoadSettings()
|
||||||
|
{
|
||||||
|
Current = new SetSettings();
|
||||||
|
DiscImageChef.Interop.PlatformID ptID = DiscImageChef.Interop.DetectOS.GetRealPlatformID();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch(ptID)
|
||||||
|
{
|
||||||
|
case DiscImageChef.Interop.PlatformID.MacOSX:
|
||||||
|
case DiscImageChef.Interop.PlatformID.iOS:
|
||||||
|
{
|
||||||
|
string preferencesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Preferences");
|
||||||
|
string preferencesFilePath = Path.Combine(preferencesPath, "com.claunia.museum.osrepodbmgr.plist");
|
||||||
|
|
||||||
|
if(!File.Exists(preferencesFilePath))
|
||||||
|
{
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
NSDictionary parsedPreferences = (NSDictionary)BinaryPropertyListParser.Parse(new FileInfo(preferencesFilePath));
|
||||||
|
if(parsedPreferences != null)
|
||||||
|
{
|
||||||
|
NSObject obj;
|
||||||
|
|
||||||
|
if(parsedPreferences.TryGetValue("TemporaryFolder", out obj))
|
||||||
|
{
|
||||||
|
Current.TemporaryFolder = ((NSString)obj).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Current.TemporaryFolder = Path.GetTempPath();
|
||||||
|
|
||||||
|
if(parsedPreferences.TryGetValue("DatabasePath", out obj))
|
||||||
|
{
|
||||||
|
Current.DatabasePath = ((NSString)obj).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Current.DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepodbmgr.db");
|
||||||
|
|
||||||
|
if(parsedPreferences.TryGetValue("RepositoryPath", out obj))
|
||||||
|
{
|
||||||
|
Current.RepositoryPath = ((NSString)obj).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Current.RepositoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepo");
|
||||||
|
|
||||||
|
if(parsedPreferences.TryGetValue("UnArchiverPath", out obj))
|
||||||
|
{
|
||||||
|
Current.UnArchiverPath = ((NSString)obj).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Current.UnArchiverPath = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32NT:
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32S:
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32Windows:
|
||||||
|
case DiscImageChef.Interop.PlatformID.WinCE:
|
||||||
|
case DiscImageChef.Interop.PlatformID.WindowsPhone:
|
||||||
|
{
|
||||||
|
RegistryKey parentKey = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("Canary Islands Computer Museum");
|
||||||
|
if(parentKey == null)
|
||||||
|
{
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegistryKey key = parentKey.OpenSubKey("OSRepoDBMgr");
|
||||||
|
if(key == null)
|
||||||
|
{
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Current.TemporaryFolder = (string)key.GetValue("TemporaryFolder");
|
||||||
|
Current.DatabasePath = (string)key.GetValue("DatabasePath");
|
||||||
|
Current.RepositoryPath = (string)key.GetValue("RepositoryPath");
|
||||||
|
Current.UnArchiverPath = (string)key.GetValue("UnArchiverPath");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config");
|
||||||
|
string settingsPath = Path.Combine(configPath, "OSRepoDBMgr.xml");
|
||||||
|
|
||||||
|
if(!Directory.Exists(configPath))
|
||||||
|
{
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XmlSerializer xs = new XmlSerializer(Current.GetType());
|
||||||
|
StreamReader sr = new StreamReader(settingsPath);
|
||||||
|
Current = (SetSettings)xs.Deserialize(sr);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
SetDefaultSettings();
|
||||||
|
SaveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SaveSettings()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DiscImageChef.Interop.PlatformID ptID = DiscImageChef.Interop.DetectOS.GetRealPlatformID();
|
||||||
|
|
||||||
|
switch(ptID)
|
||||||
|
{
|
||||||
|
case DiscImageChef.Interop.PlatformID.MacOSX:
|
||||||
|
case DiscImageChef.Interop.PlatformID.iOS:
|
||||||
|
{
|
||||||
|
NSDictionary root = new NSDictionary();
|
||||||
|
root.Add("TemporaryFolder", Current.TemporaryFolder);
|
||||||
|
root.Add("DatabasePath", Current.DatabasePath);
|
||||||
|
root.Add("RepositoryPath", Current.RepositoryPath);
|
||||||
|
root.Add("UnArchiverPath", Current.UnArchiverPath);
|
||||||
|
|
||||||
|
string preferencesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Preferences");
|
||||||
|
string preferencesFilePath = Path.Combine(preferencesPath, "com.claunia.museum.osrepodbmgr.plist");
|
||||||
|
|
||||||
|
FileStream fs = new FileStream(preferencesFilePath, FileMode.Create);
|
||||||
|
BinaryPropertyListWriter.Write(fs, root);
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32NT:
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32S:
|
||||||
|
case DiscImageChef.Interop.PlatformID.Win32Windows:
|
||||||
|
case DiscImageChef.Interop.PlatformID.WinCE:
|
||||||
|
case DiscImageChef.Interop.PlatformID.WindowsPhone:
|
||||||
|
{
|
||||||
|
RegistryKey parentKey = Registry.CurrentUser.OpenSubKey("SOFTWARE").CreateSubKey("Canary Islands Computer Museum");
|
||||||
|
RegistryKey key = parentKey.CreateSubKey("OSRepoDBMgr");
|
||||||
|
|
||||||
|
key.SetValue("TemporaryFolder", Current.TemporaryFolder);
|
||||||
|
key.SetValue("DatabasePath", Current.DatabasePath);
|
||||||
|
key.SetValue("RepositoryPath", Current.RepositoryPath);
|
||||||
|
key.SetValue("UnArchiverPath", Current.UnArchiverPath);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config");
|
||||||
|
string settingsPath = Path.Combine(configPath, "OSRepoDBMgr.xml");
|
||||||
|
|
||||||
|
if(!Directory.Exists(configPath))
|
||||||
|
Directory.CreateDirectory(configPath);
|
||||||
|
|
||||||
|
FileStream fs = new FileStream(settingsPath, FileMode.Create);
|
||||||
|
XmlSerializer xs = new XmlSerializer(Current.GetType());
|
||||||
|
xs.Serialize(fs, Current);
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||||
|
catch
|
||||||
|
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetDefaultSettings()
|
||||||
|
{
|
||||||
|
Current = new SetSettings();
|
||||||
|
Current.TemporaryFolder = Path.GetTempPath();
|
||||||
|
Current.DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepodbmgr.db");
|
||||||
|
Current.RepositoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "osrepo");
|
||||||
|
Current.UnArchiverPath = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
44
osrepodbmgr/frmHelp.cs
Normal file
44
osrepodbmgr/frmHelp.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public partial class frmHelp : Gtk.Window
|
||||||
|
{
|
||||||
|
public frmHelp() :
|
||||||
|
base(Gtk.WindowType.Toplevel)
|
||||||
|
{
|
||||||
|
Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnOKClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
175
osrepodbmgr/frmSettings.cs
Normal file
175
osrepodbmgr/frmSettings.cs
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
//
|
||||||
|
// Author:
|
||||||
|
// Natalia Portillo claunia@claunia.com
|
||||||
|
//
|
||||||
|
// Copyright (c) 2017, © Claunia.com
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
|
||||||
|
// the documentation and/or other materials provided with the distribution.
|
||||||
|
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
using System;
|
||||||
|
using Gtk;
|
||||||
|
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public partial class frmSettings : Window
|
||||||
|
{
|
||||||
|
public frmSettings() :
|
||||||
|
base(WindowType.Toplevel)
|
||||||
|
{
|
||||||
|
Build();
|
||||||
|
txtTmp.Text = osrepodbmgr.Settings.Current.TemporaryFolder;
|
||||||
|
txtUnar.Text = osrepodbmgr.Settings.Current.UnArchiverPath;
|
||||||
|
txtDatabase.Text = osrepodbmgr.Settings.Current.DatabasePath;
|
||||||
|
txtRepository.Text = osrepodbmgr.Settings.Current.RepositoryPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnCancelClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnApplyClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// TODO: Check sanity
|
||||||
|
osrepodbmgr.Settings.Current.TemporaryFolder = txtTmp.Text;
|
||||||
|
osrepodbmgr.Settings.Current.UnArchiverPath = txtUnar.Text;
|
||||||
|
osrepodbmgr.Settings.Current.DatabasePath = txtDatabase.Text;
|
||||||
|
osrepodbmgr.Settings.Current.RepositoryPath = txtRepository.Text;
|
||||||
|
osrepodbmgr.Settings.SaveSettings();
|
||||||
|
Core.CloseDB();
|
||||||
|
Core.InitDB();
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnUnarClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileChooserDialog dlgFile = new FileChooserDialog("Choose UnArchiver executable", this, FileChooserAction.Open,
|
||||||
|
"Cancel", ResponseType.Cancel, "Choose", ResponseType.Accept);
|
||||||
|
dlgFile.SelectMultiple = false;
|
||||||
|
dlgFile.SetCurrentFolder(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));
|
||||||
|
|
||||||
|
// TODO: Check it is really unarchiver
|
||||||
|
if(dlgFile.Run() == (int)ResponseType.Accept)
|
||||||
|
{
|
||||||
|
txtUnar.Text = dlgFile.Filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlgFile.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnTmpClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileChooserDialog dlgFolder = new FileChooserDialog("Choose temporary folder", this, FileChooserAction.SelectFolder,
|
||||||
|
"Cancel", ResponseType.Cancel, "Choose", ResponseType.Accept);
|
||||||
|
dlgFolder.SelectMultiple = false;
|
||||||
|
dlgFolder.SetCurrentFolder(System.IO.Path.GetTempPath());
|
||||||
|
|
||||||
|
if(dlgFolder.Run() == (int)ResponseType.Accept)
|
||||||
|
{
|
||||||
|
txtTmp.Text = dlgFolder.Filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlgFolder.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnRepositoryClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileChooserDialog dlgFolder = new FileChooserDialog("Choose repository folder", this, FileChooserAction.SelectFolder,
|
||||||
|
"Cancel", ResponseType.Cancel, "Choose", ResponseType.Accept);
|
||||||
|
dlgFolder.SelectMultiple = false;
|
||||||
|
dlgFolder.SetCurrentFolder(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
|
||||||
|
|
||||||
|
// TODO: Check it is really unarchiver
|
||||||
|
if(dlgFolder.Run() == (int)ResponseType.Accept)
|
||||||
|
{
|
||||||
|
txtRepository.Text = dlgFolder.Filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlgFolder.Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnBtnDatabaseClicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileChooserDialog dlgFile = new FileChooserDialog("Choose database to open/create", this, FileChooserAction.Save,
|
||||||
|
"Cancel", ResponseType.Cancel, "Choose", ResponseType.Accept);
|
||||||
|
dlgFile.SelectMultiple = false;
|
||||||
|
dlgFile.SetCurrentFolder(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
|
||||||
|
dlgFile.SetFilename("osrepodbmgr.db");
|
||||||
|
|
||||||
|
// TODO: Check it is really unarchiver
|
||||||
|
if(dlgFile.Run() == (int)ResponseType.Accept)
|
||||||
|
{
|
||||||
|
if(System.IO.File.Exists(dlgFile.Filename))
|
||||||
|
{
|
||||||
|
DBCore _dbCore = new SQLite();
|
||||||
|
bool notDb = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
notDb |= !_dbCore.OpenDB(dlgFile.Filename, null, null, null);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
notDb = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(notDb)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "Cannot open specified file as a database, please choose another.");
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
dlgFile.Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_dbCore.CloseDB();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBCore _dbCore = new SQLite();
|
||||||
|
bool notDb = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
notDb |= !_dbCore.CreateDB(dlgFile.Filename, null, null, null);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
notDb = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(notDb)
|
||||||
|
{
|
||||||
|
MessageDialog dlgMsg = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "Cannot create a database in the specified file as a database.");
|
||||||
|
dlgMsg.Run();
|
||||||
|
dlgMsg.Destroy();
|
||||||
|
dlgFile.Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_dbCore.CloseDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
txtUnar.Text = dlgFile.Filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlgFile.Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
662
osrepodbmgr/gtk-gui/MainWindow.cs
Normal file
662
osrepodbmgr/gtk-gui/MainWindow.cs
Normal file
@@ -0,0 +1,662 @@
|
|||||||
|
|
||||||
|
// This file has been generated by the GUI designer. Do not modify.
|
||||||
|
|
||||||
|
public partial class MainWindow
|
||||||
|
{
|
||||||
|
private global::Gtk.VBox vbox1;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox15;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblDeveloper;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtDeveloper;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox14;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblProduct;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtProduct;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox13;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblVersion;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtVersion;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox12;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblLanguages;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtLanguages;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox11;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblArchitecture;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtArchitecture;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox10;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblMachine;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtMachine;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox21;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblFormat;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtFormat;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox20;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblDescription;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtDescription;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox17;
|
||||||
|
|
||||||
|
private global::Gtk.VBox vbox3;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkOem;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkUpgrade;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkSource;
|
||||||
|
|
||||||
|
private global::Gtk.VBox vbox2;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkUpdate;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkFiles;
|
||||||
|
|
||||||
|
private global::Gtk.CheckButton chkNetinstall;
|
||||||
|
|
||||||
|
private global::Gtk.ScrolledWindow GtkScrolledWindow;
|
||||||
|
|
||||||
|
private global::Gtk.TreeView treeFiles;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox2;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblProgress;
|
||||||
|
|
||||||
|
private global::Gtk.ProgressBar prgProgress;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox27;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblProgress2;
|
||||||
|
|
||||||
|
private global::Gtk.ProgressBar prgProgress2;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox1;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnExit;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnSettings;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnHelp;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnClose;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnPack;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnAdd;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnArchive;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnFolder;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnStop;
|
||||||
|
|
||||||
|
protected virtual void Build()
|
||||||
|
{
|
||||||
|
global::Stetic.Gui.Initialize(this);
|
||||||
|
// Widget MainWindow
|
||||||
|
this.Name = "MainWindow";
|
||||||
|
this.Title = global::Mono.Unix.Catalog.GetString("MainWindow");
|
||||||
|
this.WindowPosition = ((global::Gtk.WindowPosition)(4));
|
||||||
|
// Container child MainWindow.Gtk.Container+ContainerChild
|
||||||
|
this.vbox1 = new global::Gtk.VBox();
|
||||||
|
this.vbox1.Name = "vbox1";
|
||||||
|
this.vbox1.Spacing = 6;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox15 = new global::Gtk.HBox();
|
||||||
|
this.hbox15.Name = "hbox15";
|
||||||
|
this.hbox15.Spacing = 6;
|
||||||
|
// Container child hbox15.Gtk.Box+BoxChild
|
||||||
|
this.lblDeveloper = new global::Gtk.Label();
|
||||||
|
this.lblDeveloper.Name = "lblDeveloper";
|
||||||
|
this.lblDeveloper.LabelProp = global::Mono.Unix.Catalog.GetString("Developer");
|
||||||
|
this.hbox15.Add(this.lblDeveloper);
|
||||||
|
global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox15[this.lblDeveloper]));
|
||||||
|
w1.Position = 0;
|
||||||
|
w1.Expand = false;
|
||||||
|
w1.Fill = false;
|
||||||
|
// Container child hbox15.Gtk.Box+BoxChild
|
||||||
|
this.txtDeveloper = new global::Gtk.Entry();
|
||||||
|
this.txtDeveloper.CanFocus = true;
|
||||||
|
this.txtDeveloper.Name = "txtDeveloper";
|
||||||
|
this.txtDeveloper.IsEditable = false;
|
||||||
|
this.txtDeveloper.InvisibleChar = '●';
|
||||||
|
this.hbox15.Add(this.txtDeveloper);
|
||||||
|
global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox15[this.txtDeveloper]));
|
||||||
|
w2.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox15);
|
||||||
|
global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox15]));
|
||||||
|
w3.Position = 0;
|
||||||
|
w3.Expand = false;
|
||||||
|
w3.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox14 = new global::Gtk.HBox();
|
||||||
|
this.hbox14.Name = "hbox14";
|
||||||
|
this.hbox14.Spacing = 6;
|
||||||
|
// Container child hbox14.Gtk.Box+BoxChild
|
||||||
|
this.lblProduct = new global::Gtk.Label();
|
||||||
|
this.lblProduct.Name = "lblProduct";
|
||||||
|
this.lblProduct.LabelProp = global::Mono.Unix.Catalog.GetString("Product");
|
||||||
|
this.hbox14.Add(this.lblProduct);
|
||||||
|
global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox14[this.lblProduct]));
|
||||||
|
w4.Position = 0;
|
||||||
|
w4.Expand = false;
|
||||||
|
w4.Fill = false;
|
||||||
|
// Container child hbox14.Gtk.Box+BoxChild
|
||||||
|
this.txtProduct = new global::Gtk.Entry();
|
||||||
|
this.txtProduct.CanFocus = true;
|
||||||
|
this.txtProduct.Name = "txtProduct";
|
||||||
|
this.txtProduct.IsEditable = false;
|
||||||
|
this.txtProduct.InvisibleChar = '●';
|
||||||
|
this.hbox14.Add(this.txtProduct);
|
||||||
|
global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox14[this.txtProduct]));
|
||||||
|
w5.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox14);
|
||||||
|
global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox14]));
|
||||||
|
w6.Position = 1;
|
||||||
|
w6.Expand = false;
|
||||||
|
w6.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox13 = new global::Gtk.HBox();
|
||||||
|
this.hbox13.Name = "hbox13";
|
||||||
|
this.hbox13.Spacing = 6;
|
||||||
|
// Container child hbox13.Gtk.Box+BoxChild
|
||||||
|
this.lblVersion = new global::Gtk.Label();
|
||||||
|
this.lblVersion.Name = "lblVersion";
|
||||||
|
this.lblVersion.LabelProp = global::Mono.Unix.Catalog.GetString("Version");
|
||||||
|
this.hbox13.Add(this.lblVersion);
|
||||||
|
global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox13[this.lblVersion]));
|
||||||
|
w7.Position = 0;
|
||||||
|
w7.Expand = false;
|
||||||
|
w7.Fill = false;
|
||||||
|
// Container child hbox13.Gtk.Box+BoxChild
|
||||||
|
this.txtVersion = new global::Gtk.Entry();
|
||||||
|
this.txtVersion.CanFocus = true;
|
||||||
|
this.txtVersion.Name = "txtVersion";
|
||||||
|
this.txtVersion.IsEditable = false;
|
||||||
|
this.txtVersion.InvisibleChar = '●';
|
||||||
|
this.hbox13.Add(this.txtVersion);
|
||||||
|
global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hbox13[this.txtVersion]));
|
||||||
|
w8.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox13);
|
||||||
|
global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox13]));
|
||||||
|
w9.Position = 2;
|
||||||
|
w9.Expand = false;
|
||||||
|
w9.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox12 = new global::Gtk.HBox();
|
||||||
|
this.hbox12.Name = "hbox12";
|
||||||
|
this.hbox12.Spacing = 6;
|
||||||
|
// Container child hbox12.Gtk.Box+BoxChild
|
||||||
|
this.lblLanguages = new global::Gtk.Label();
|
||||||
|
this.lblLanguages.Name = "lblLanguages";
|
||||||
|
this.lblLanguages.LabelProp = global::Mono.Unix.Catalog.GetString("Languages");
|
||||||
|
this.hbox12.Add(this.lblLanguages);
|
||||||
|
global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.hbox12[this.lblLanguages]));
|
||||||
|
w10.Position = 0;
|
||||||
|
w10.Expand = false;
|
||||||
|
w10.Fill = false;
|
||||||
|
// Container child hbox12.Gtk.Box+BoxChild
|
||||||
|
this.txtLanguages = new global::Gtk.Entry();
|
||||||
|
this.txtLanguages.CanFocus = true;
|
||||||
|
this.txtLanguages.Name = "txtLanguages";
|
||||||
|
this.txtLanguages.IsEditable = false;
|
||||||
|
this.txtLanguages.InvisibleChar = '●';
|
||||||
|
this.hbox12.Add(this.txtLanguages);
|
||||||
|
global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox12[this.txtLanguages]));
|
||||||
|
w11.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox12);
|
||||||
|
global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox12]));
|
||||||
|
w12.Position = 3;
|
||||||
|
w12.Expand = false;
|
||||||
|
w12.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox11 = new global::Gtk.HBox();
|
||||||
|
this.hbox11.Name = "hbox11";
|
||||||
|
this.hbox11.Spacing = 6;
|
||||||
|
// Container child hbox11.Gtk.Box+BoxChild
|
||||||
|
this.lblArchitecture = new global::Gtk.Label();
|
||||||
|
this.lblArchitecture.Name = "lblArchitecture";
|
||||||
|
this.lblArchitecture.LabelProp = global::Mono.Unix.Catalog.GetString("Architecture");
|
||||||
|
this.hbox11.Add(this.lblArchitecture);
|
||||||
|
global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.hbox11[this.lblArchitecture]));
|
||||||
|
w13.Position = 0;
|
||||||
|
w13.Expand = false;
|
||||||
|
w13.Fill = false;
|
||||||
|
// Container child hbox11.Gtk.Box+BoxChild
|
||||||
|
this.txtArchitecture = new global::Gtk.Entry();
|
||||||
|
this.txtArchitecture.CanFocus = true;
|
||||||
|
this.txtArchitecture.Name = "txtArchitecture";
|
||||||
|
this.txtArchitecture.IsEditable = false;
|
||||||
|
this.txtArchitecture.InvisibleChar = '●';
|
||||||
|
this.hbox11.Add(this.txtArchitecture);
|
||||||
|
global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox11[this.txtArchitecture]));
|
||||||
|
w14.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox11);
|
||||||
|
global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox11]));
|
||||||
|
w15.Position = 4;
|
||||||
|
w15.Expand = false;
|
||||||
|
w15.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox10 = new global::Gtk.HBox();
|
||||||
|
this.hbox10.Name = "hbox10";
|
||||||
|
this.hbox10.Spacing = 6;
|
||||||
|
// Container child hbox10.Gtk.Box+BoxChild
|
||||||
|
this.lblMachine = new global::Gtk.Label();
|
||||||
|
this.lblMachine.Name = "lblMachine";
|
||||||
|
this.lblMachine.LabelProp = global::Mono.Unix.Catalog.GetString("Machine");
|
||||||
|
this.hbox10.Add(this.lblMachine);
|
||||||
|
global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox10[this.lblMachine]));
|
||||||
|
w16.Position = 0;
|
||||||
|
w16.Expand = false;
|
||||||
|
w16.Fill = false;
|
||||||
|
// Container child hbox10.Gtk.Box+BoxChild
|
||||||
|
this.txtMachine = new global::Gtk.Entry();
|
||||||
|
this.txtMachine.CanFocus = true;
|
||||||
|
this.txtMachine.Name = "txtMachine";
|
||||||
|
this.txtMachine.IsEditable = false;
|
||||||
|
this.txtMachine.InvisibleChar = '●';
|
||||||
|
this.hbox10.Add(this.txtMachine);
|
||||||
|
global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox10[this.txtMachine]));
|
||||||
|
w17.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox10);
|
||||||
|
global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox10]));
|
||||||
|
w18.Position = 5;
|
||||||
|
w18.Expand = false;
|
||||||
|
w18.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox21 = new global::Gtk.HBox();
|
||||||
|
this.hbox21.Name = "hbox21";
|
||||||
|
this.hbox21.Spacing = 6;
|
||||||
|
// Container child hbox21.Gtk.Box+BoxChild
|
||||||
|
this.lblFormat = new global::Gtk.Label();
|
||||||
|
this.lblFormat.Name = "lblFormat";
|
||||||
|
this.lblFormat.LabelProp = global::Mono.Unix.Catalog.GetString("Format");
|
||||||
|
this.hbox21.Add(this.lblFormat);
|
||||||
|
global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.hbox21[this.lblFormat]));
|
||||||
|
w19.Position = 0;
|
||||||
|
w19.Expand = false;
|
||||||
|
w19.Fill = false;
|
||||||
|
// Container child hbox21.Gtk.Box+BoxChild
|
||||||
|
this.txtFormat = new global::Gtk.Entry();
|
||||||
|
this.txtFormat.CanFocus = true;
|
||||||
|
this.txtFormat.Name = "txtFormat";
|
||||||
|
this.txtFormat.IsEditable = false;
|
||||||
|
this.txtFormat.InvisibleChar = '●';
|
||||||
|
this.hbox21.Add(this.txtFormat);
|
||||||
|
global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.hbox21[this.txtFormat]));
|
||||||
|
w20.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox21);
|
||||||
|
global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox21]));
|
||||||
|
w21.Position = 6;
|
||||||
|
w21.Expand = false;
|
||||||
|
w21.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox20 = new global::Gtk.HBox();
|
||||||
|
this.hbox20.Name = "hbox20";
|
||||||
|
this.hbox20.Spacing = 6;
|
||||||
|
// Container child hbox20.Gtk.Box+BoxChild
|
||||||
|
this.lblDescription = new global::Gtk.Label();
|
||||||
|
this.lblDescription.Name = "lblDescription";
|
||||||
|
this.lblDescription.LabelProp = global::Mono.Unix.Catalog.GetString("Description");
|
||||||
|
this.hbox20.Add(this.lblDescription);
|
||||||
|
global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.hbox20[this.lblDescription]));
|
||||||
|
w22.Position = 0;
|
||||||
|
w22.Expand = false;
|
||||||
|
w22.Fill = false;
|
||||||
|
// Container child hbox20.Gtk.Box+BoxChild
|
||||||
|
this.txtDescription = new global::Gtk.Entry();
|
||||||
|
this.txtDescription.CanFocus = true;
|
||||||
|
this.txtDescription.Name = "txtDescription";
|
||||||
|
this.txtDescription.IsEditable = false;
|
||||||
|
this.txtDescription.InvisibleChar = '●';
|
||||||
|
this.hbox20.Add(this.txtDescription);
|
||||||
|
global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.hbox20[this.txtDescription]));
|
||||||
|
w23.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox20);
|
||||||
|
global::Gtk.Box.BoxChild w24 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox20]));
|
||||||
|
w24.Position = 7;
|
||||||
|
w24.Expand = false;
|
||||||
|
w24.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox17 = new global::Gtk.HBox();
|
||||||
|
this.hbox17.Name = "hbox17";
|
||||||
|
this.hbox17.Spacing = 6;
|
||||||
|
// Container child hbox17.Gtk.Box+BoxChild
|
||||||
|
this.vbox3 = new global::Gtk.VBox();
|
||||||
|
this.vbox3.Name = "vbox3";
|
||||||
|
this.vbox3.Spacing = 6;
|
||||||
|
// Container child vbox3.Gtk.Box+BoxChild
|
||||||
|
this.chkOem = new global::Gtk.CheckButton();
|
||||||
|
this.chkOem.Sensitive = false;
|
||||||
|
this.chkOem.CanFocus = true;
|
||||||
|
this.chkOem.Name = "chkOem";
|
||||||
|
this.chkOem.Label = global::Mono.Unix.Catalog.GetString("oem");
|
||||||
|
this.chkOem.DrawIndicator = true;
|
||||||
|
this.chkOem.UseUnderline = true;
|
||||||
|
this.vbox3.Add(this.chkOem);
|
||||||
|
global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.chkOem]));
|
||||||
|
w25.Position = 0;
|
||||||
|
w25.Expand = false;
|
||||||
|
w25.Fill = false;
|
||||||
|
// Container child vbox3.Gtk.Box+BoxChild
|
||||||
|
this.chkUpgrade = new global::Gtk.CheckButton();
|
||||||
|
this.chkUpgrade.Sensitive = false;
|
||||||
|
this.chkUpgrade.CanFocus = true;
|
||||||
|
this.chkUpgrade.Name = "chkUpgrade";
|
||||||
|
this.chkUpgrade.Label = global::Mono.Unix.Catalog.GetString("upgrade");
|
||||||
|
this.chkUpgrade.DrawIndicator = true;
|
||||||
|
this.chkUpgrade.UseUnderline = true;
|
||||||
|
this.vbox3.Add(this.chkUpgrade);
|
||||||
|
global::Gtk.Box.BoxChild w26 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.chkUpgrade]));
|
||||||
|
w26.Position = 1;
|
||||||
|
w26.Expand = false;
|
||||||
|
w26.Fill = false;
|
||||||
|
// Container child vbox3.Gtk.Box+BoxChild
|
||||||
|
this.chkSource = new global::Gtk.CheckButton();
|
||||||
|
this.chkSource.Sensitive = false;
|
||||||
|
this.chkSource.CanFocus = true;
|
||||||
|
this.chkSource.Name = "chkSource";
|
||||||
|
this.chkSource.Label = global::Mono.Unix.Catalog.GetString("source");
|
||||||
|
this.chkSource.DrawIndicator = true;
|
||||||
|
this.chkSource.UseUnderline = true;
|
||||||
|
this.vbox3.Add(this.chkSource);
|
||||||
|
global::Gtk.Box.BoxChild w27 = ((global::Gtk.Box.BoxChild)(this.vbox3[this.chkSource]));
|
||||||
|
w27.Position = 2;
|
||||||
|
w27.Expand = false;
|
||||||
|
w27.Fill = false;
|
||||||
|
this.hbox17.Add(this.vbox3);
|
||||||
|
global::Gtk.Box.BoxChild w28 = ((global::Gtk.Box.BoxChild)(this.hbox17[this.vbox3]));
|
||||||
|
w28.Position = 0;
|
||||||
|
// Container child hbox17.Gtk.Box+BoxChild
|
||||||
|
this.vbox2 = new global::Gtk.VBox();
|
||||||
|
this.vbox2.Name = "vbox2";
|
||||||
|
this.vbox2.Spacing = 6;
|
||||||
|
// Container child vbox2.Gtk.Box+BoxChild
|
||||||
|
this.chkUpdate = new global::Gtk.CheckButton();
|
||||||
|
this.chkUpdate.Sensitive = false;
|
||||||
|
this.chkUpdate.CanFocus = true;
|
||||||
|
this.chkUpdate.Name = "chkUpdate";
|
||||||
|
this.chkUpdate.Label = global::Mono.Unix.Catalog.GetString("update");
|
||||||
|
this.chkUpdate.DrawIndicator = true;
|
||||||
|
this.chkUpdate.UseUnderline = true;
|
||||||
|
this.vbox2.Add(this.chkUpdate);
|
||||||
|
global::Gtk.Box.BoxChild w29 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.chkUpdate]));
|
||||||
|
w29.Position = 0;
|
||||||
|
w29.Expand = false;
|
||||||
|
w29.Fill = false;
|
||||||
|
// Container child vbox2.Gtk.Box+BoxChild
|
||||||
|
this.chkFiles = new global::Gtk.CheckButton();
|
||||||
|
this.chkFiles.Sensitive = false;
|
||||||
|
this.chkFiles.CanFocus = true;
|
||||||
|
this.chkFiles.Name = "chkFiles";
|
||||||
|
this.chkFiles.Label = global::Mono.Unix.Catalog.GetString("files");
|
||||||
|
this.chkFiles.DrawIndicator = true;
|
||||||
|
this.chkFiles.UseUnderline = true;
|
||||||
|
this.vbox2.Add(this.chkFiles);
|
||||||
|
global::Gtk.Box.BoxChild w30 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.chkFiles]));
|
||||||
|
w30.Position = 1;
|
||||||
|
w30.Expand = false;
|
||||||
|
w30.Fill = false;
|
||||||
|
// Container child vbox2.Gtk.Box+BoxChild
|
||||||
|
this.chkNetinstall = new global::Gtk.CheckButton();
|
||||||
|
this.chkNetinstall.Sensitive = false;
|
||||||
|
this.chkNetinstall.CanFocus = true;
|
||||||
|
this.chkNetinstall.Name = "chkNetinstall";
|
||||||
|
this.chkNetinstall.Label = global::Mono.Unix.Catalog.GetString("netinstall");
|
||||||
|
this.chkNetinstall.DrawIndicator = true;
|
||||||
|
this.chkNetinstall.UseUnderline = true;
|
||||||
|
this.vbox2.Add(this.chkNetinstall);
|
||||||
|
global::Gtk.Box.BoxChild w31 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.chkNetinstall]));
|
||||||
|
w31.Position = 2;
|
||||||
|
w31.Expand = false;
|
||||||
|
w31.Fill = false;
|
||||||
|
this.hbox17.Add(this.vbox2);
|
||||||
|
global::Gtk.Box.BoxChild w32 = ((global::Gtk.Box.BoxChild)(this.hbox17[this.vbox2]));
|
||||||
|
w32.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox17);
|
||||||
|
global::Gtk.Box.BoxChild w33 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox17]));
|
||||||
|
w33.Position = 8;
|
||||||
|
w33.Expand = false;
|
||||||
|
w33.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.GtkScrolledWindow = new global::Gtk.ScrolledWindow();
|
||||||
|
this.GtkScrolledWindow.Name = "GtkScrolledWindow";
|
||||||
|
this.GtkScrolledWindow.ShadowType = ((global::Gtk.ShadowType)(1));
|
||||||
|
// Container child GtkScrolledWindow.Gtk.Container+ContainerChild
|
||||||
|
this.treeFiles = new global::Gtk.TreeView();
|
||||||
|
this.treeFiles.CanFocus = true;
|
||||||
|
this.treeFiles.Name = "treeFiles";
|
||||||
|
this.GtkScrolledWindow.Add(this.treeFiles);
|
||||||
|
this.vbox1.Add(this.GtkScrolledWindow);
|
||||||
|
global::Gtk.Box.BoxChild w35 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.GtkScrolledWindow]));
|
||||||
|
w35.Position = 9;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox2 = new global::Gtk.HBox();
|
||||||
|
this.hbox2.Name = "hbox2";
|
||||||
|
this.hbox2.Spacing = 6;
|
||||||
|
// Container child hbox2.Gtk.Box+BoxChild
|
||||||
|
this.lblProgress = new global::Gtk.Label();
|
||||||
|
this.lblProgress.Name = "lblProgress";
|
||||||
|
this.lblProgress.LabelProp = global::Mono.Unix.Catalog.GetString("label2");
|
||||||
|
this.hbox2.Add(this.lblProgress);
|
||||||
|
global::Gtk.Box.BoxChild w36 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.lblProgress]));
|
||||||
|
w36.Position = 0;
|
||||||
|
w36.Expand = false;
|
||||||
|
w36.Fill = false;
|
||||||
|
// Container child hbox2.Gtk.Box+BoxChild
|
||||||
|
this.prgProgress = new global::Gtk.ProgressBar();
|
||||||
|
this.prgProgress.Name = "prgProgress";
|
||||||
|
this.hbox2.Add(this.prgProgress);
|
||||||
|
global::Gtk.Box.BoxChild w37 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.prgProgress]));
|
||||||
|
w37.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox2);
|
||||||
|
global::Gtk.Box.BoxChild w38 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox2]));
|
||||||
|
w38.Position = 10;
|
||||||
|
w38.Expand = false;
|
||||||
|
w38.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox27 = new global::Gtk.HBox();
|
||||||
|
this.hbox27.Name = "hbox27";
|
||||||
|
this.hbox27.Spacing = 6;
|
||||||
|
// Container child hbox27.Gtk.Box+BoxChild
|
||||||
|
this.lblProgress2 = new global::Gtk.Label();
|
||||||
|
this.lblProgress2.Name = "lblProgress2";
|
||||||
|
this.lblProgress2.LabelProp = global::Mono.Unix.Catalog.GetString("label22");
|
||||||
|
this.hbox27.Add(this.lblProgress2);
|
||||||
|
global::Gtk.Box.BoxChild w39 = ((global::Gtk.Box.BoxChild)(this.hbox27[this.lblProgress2]));
|
||||||
|
w39.Position = 0;
|
||||||
|
w39.Expand = false;
|
||||||
|
w39.Fill = false;
|
||||||
|
// Container child hbox27.Gtk.Box+BoxChild
|
||||||
|
this.prgProgress2 = new global::Gtk.ProgressBar();
|
||||||
|
this.prgProgress2.Name = "prgProgress2";
|
||||||
|
this.hbox27.Add(this.prgProgress2);
|
||||||
|
global::Gtk.Box.BoxChild w40 = ((global::Gtk.Box.BoxChild)(this.hbox27[this.prgProgress2]));
|
||||||
|
w40.Position = 1;
|
||||||
|
this.vbox1.Add(this.hbox27);
|
||||||
|
global::Gtk.Box.BoxChild w41 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox27]));
|
||||||
|
w41.Position = 11;
|
||||||
|
w41.Expand = false;
|
||||||
|
w41.Fill = false;
|
||||||
|
// Container child vbox1.Gtk.Box+BoxChild
|
||||||
|
this.hbox1 = new global::Gtk.HBox();
|
||||||
|
this.hbox1.Name = "hbox1";
|
||||||
|
this.hbox1.Spacing = 6;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnExit = new global::Gtk.Button();
|
||||||
|
this.btnExit.CanFocus = true;
|
||||||
|
this.btnExit.Name = "btnExit";
|
||||||
|
this.btnExit.UseStock = true;
|
||||||
|
this.btnExit.UseUnderline = true;
|
||||||
|
this.btnExit.Label = "gtk-quit";
|
||||||
|
this.hbox1.Add(this.btnExit);
|
||||||
|
global::Gtk.Box.BoxChild w42 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnExit]));
|
||||||
|
w42.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w42.Position = 0;
|
||||||
|
w42.Expand = false;
|
||||||
|
w42.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnSettings = new global::Gtk.Button();
|
||||||
|
this.btnSettings.CanFocus = true;
|
||||||
|
this.btnSettings.Name = "btnSettings";
|
||||||
|
this.btnSettings.UseUnderline = true;
|
||||||
|
this.btnSettings.Label = global::Mono.Unix.Catalog.GetString("_Settings");
|
||||||
|
global::Gtk.Image w43 = new global::Gtk.Image();
|
||||||
|
w43.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-preferences", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnSettings.Image = w43;
|
||||||
|
this.hbox1.Add(this.btnSettings);
|
||||||
|
global::Gtk.Box.BoxChild w44 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnSettings]));
|
||||||
|
w44.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w44.Position = 1;
|
||||||
|
w44.Expand = false;
|
||||||
|
w44.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnHelp = new global::Gtk.Button();
|
||||||
|
this.btnHelp.CanFocus = true;
|
||||||
|
this.btnHelp.Name = "btnHelp";
|
||||||
|
this.btnHelp.UseStock = true;
|
||||||
|
this.btnHelp.UseUnderline = true;
|
||||||
|
this.btnHelp.Label = "gtk-help";
|
||||||
|
this.hbox1.Add(this.btnHelp);
|
||||||
|
global::Gtk.Box.BoxChild w45 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnHelp]));
|
||||||
|
w45.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w45.Position = 2;
|
||||||
|
w45.Expand = false;
|
||||||
|
w45.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnClose = new global::Gtk.Button();
|
||||||
|
this.btnClose.CanFocus = true;
|
||||||
|
this.btnClose.Name = "btnClose";
|
||||||
|
this.btnClose.UseUnderline = true;
|
||||||
|
this.btnClose.Label = global::Mono.Unix.Catalog.GetString("_Close");
|
||||||
|
global::Gtk.Image w46 = new global::Gtk.Image();
|
||||||
|
w46.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-close", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnClose.Image = w46;
|
||||||
|
this.hbox1.Add(this.btnClose);
|
||||||
|
global::Gtk.Box.BoxChild w47 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnClose]));
|
||||||
|
w47.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w47.Position = 3;
|
||||||
|
w47.Expand = false;
|
||||||
|
w47.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnPack = new global::Gtk.Button();
|
||||||
|
this.btnPack.Sensitive = false;
|
||||||
|
this.btnPack.CanFocus = true;
|
||||||
|
this.btnPack.Name = "btnPack";
|
||||||
|
this.btnPack.UseUnderline = true;
|
||||||
|
this.btnPack.Label = global::Mono.Unix.Catalog.GetString("_Pack...");
|
||||||
|
global::Gtk.Image w48 = new global::Gtk.Image();
|
||||||
|
w48.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-save", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnPack.Image = w48;
|
||||||
|
this.hbox1.Add(this.btnPack);
|
||||||
|
global::Gtk.Box.BoxChild w49 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnPack]));
|
||||||
|
w49.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w49.Position = 4;
|
||||||
|
w49.Expand = false;
|
||||||
|
w49.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnAdd = new global::Gtk.Button();
|
||||||
|
this.btnAdd.CanFocus = true;
|
||||||
|
this.btnAdd.Name = "btnAdd";
|
||||||
|
this.btnAdd.UseUnderline = true;
|
||||||
|
this.btnAdd.Label = global::Mono.Unix.Catalog.GetString("Add to _DB");
|
||||||
|
global::Gtk.Image w50 = new global::Gtk.Image();
|
||||||
|
w50.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-add", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnAdd.Image = w50;
|
||||||
|
this.hbox1.Add(this.btnAdd);
|
||||||
|
global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnAdd]));
|
||||||
|
w51.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w51.Position = 5;
|
||||||
|
w51.Expand = false;
|
||||||
|
w51.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnArchive = new global::Gtk.Button();
|
||||||
|
this.btnArchive.CanFocus = true;
|
||||||
|
this.btnArchive.Name = "btnArchive";
|
||||||
|
this.btnArchive.UseUnderline = true;
|
||||||
|
this.btnArchive.Label = global::Mono.Unix.Catalog.GetString("Open _archive");
|
||||||
|
global::Gtk.Image w52 = new global::Gtk.Image();
|
||||||
|
w52.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnArchive.Image = w52;
|
||||||
|
this.hbox1.Add(this.btnArchive);
|
||||||
|
global::Gtk.Box.BoxChild w53 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnArchive]));
|
||||||
|
w53.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w53.Position = 6;
|
||||||
|
w53.Expand = false;
|
||||||
|
w53.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnFolder = new global::Gtk.Button();
|
||||||
|
this.btnFolder.CanFocus = true;
|
||||||
|
this.btnFolder.Name = "btnFolder";
|
||||||
|
this.btnFolder.UseUnderline = true;
|
||||||
|
this.btnFolder.Label = global::Mono.Unix.Catalog.GetString("Open _folder");
|
||||||
|
global::Gtk.Image w54 = new global::Gtk.Image();
|
||||||
|
w54.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnFolder.Image = w54;
|
||||||
|
this.hbox1.Add(this.btnFolder);
|
||||||
|
global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnFolder]));
|
||||||
|
w55.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w55.Position = 7;
|
||||||
|
w55.Expand = false;
|
||||||
|
w55.Fill = false;
|
||||||
|
// Container child hbox1.Gtk.Box+BoxChild
|
||||||
|
this.btnStop = new global::Gtk.Button();
|
||||||
|
this.btnStop.CanFocus = true;
|
||||||
|
this.btnStop.Name = "btnStop";
|
||||||
|
this.btnStop.UseStock = true;
|
||||||
|
this.btnStop.UseUnderline = true;
|
||||||
|
this.btnStop.Label = "gtk-stop";
|
||||||
|
this.hbox1.Add(this.btnStop);
|
||||||
|
global::Gtk.Box.BoxChild w56 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.btnStop]));
|
||||||
|
w56.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w56.Position = 8;
|
||||||
|
w56.Expand = false;
|
||||||
|
w56.Fill = false;
|
||||||
|
this.vbox1.Add(this.hbox1);
|
||||||
|
global::Gtk.Box.BoxChild w57 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox1]));
|
||||||
|
w57.Position = 12;
|
||||||
|
w57.Expand = false;
|
||||||
|
w57.Fill = false;
|
||||||
|
this.Add(this.vbox1);
|
||||||
|
if((this.Child != null))
|
||||||
|
{
|
||||||
|
this.Child.ShowAll();
|
||||||
|
}
|
||||||
|
this.DefaultWidth = 771;
|
||||||
|
this.DefaultHeight = 544;
|
||||||
|
this.lblProgress.Hide();
|
||||||
|
this.prgProgress.Hide();
|
||||||
|
this.lblProgress2.Hide();
|
||||||
|
this.prgProgress2.Hide();
|
||||||
|
this.btnClose.Hide();
|
||||||
|
this.btnPack.Hide();
|
||||||
|
this.btnAdd.Hide();
|
||||||
|
this.btnStop.Hide();
|
||||||
|
this.Show();
|
||||||
|
this.DeleteEvent += new global::Gtk.DeleteEventHandler(this.OnDeleteEvent);
|
||||||
|
this.btnStop.Clicked += new global::System.EventHandler(this.OnBtnStopClicked);
|
||||||
|
this.btnFolder.Clicked += new global::System.EventHandler(this.OnBtnFolderClicked);
|
||||||
|
this.btnAdd.Clicked += new global::System.EventHandler(this.OnBtnAddClicked);
|
||||||
|
this.btnClose.Clicked += new global::System.EventHandler(this.OnBtnCloseClicked);
|
||||||
|
this.btnHelp.Clicked += new global::System.EventHandler(this.OnBtnHelpClicked);
|
||||||
|
this.btnSettings.Clicked += new global::System.EventHandler(this.OnBtnSettingsClicked);
|
||||||
|
this.btnExit.Clicked += new global::System.EventHandler(this.OnBtnExitClicked);
|
||||||
|
}
|
||||||
|
}
|
||||||
75
osrepodbmgr/gtk-gui/generated.cs
Normal file
75
osrepodbmgr/gtk-gui/generated.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
// This file has been generated by the GUI designer. Do not modify.
|
||||||
|
namespace Stetic
|
||||||
|
{
|
||||||
|
internal class Gui
|
||||||
|
{
|
||||||
|
private static bool initialized;
|
||||||
|
|
||||||
|
internal static void Initialize(Gtk.Widget iconRenderer)
|
||||||
|
{
|
||||||
|
if((Stetic.Gui.initialized == false))
|
||||||
|
{
|
||||||
|
Stetic.Gui.initialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class IconLoader
|
||||||
|
{
|
||||||
|
public static Gdk.Pixbuf LoadIcon(Gtk.Widget widget, string name, Gtk.IconSize size)
|
||||||
|
{
|
||||||
|
Gdk.Pixbuf res = widget.RenderIcon(name, size, null);
|
||||||
|
if((res != null))
|
||||||
|
{
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int sz;
|
||||||
|
int sy;
|
||||||
|
global::Gtk.Icon.SizeLookup(size, out sz, out sy);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Gtk.IconTheme.Default.LoadIcon(name, sz, 0);
|
||||||
|
}
|
||||||
|
catch(System.Exception)
|
||||||
|
{
|
||||||
|
if((name != "gtk-missing-image"))
|
||||||
|
{
|
||||||
|
return Stetic.IconLoader.LoadIcon(widget, "gtk-missing-image", size);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Gdk.Pixmap pmap = new Gdk.Pixmap(Gdk.Screen.Default.RootWindow, sz, sz);
|
||||||
|
Gdk.GC gc = new Gdk.GC(pmap);
|
||||||
|
gc.RgbFgColor = new Gdk.Color(255, 255, 255);
|
||||||
|
pmap.DrawRectangle(gc, true, 0, 0, sz, sz);
|
||||||
|
gc.RgbFgColor = new Gdk.Color(0, 0, 0);
|
||||||
|
pmap.DrawRectangle(gc, false, 0, 0, (sz - 1), (sz - 1));
|
||||||
|
gc.SetLineAttributes(3, Gdk.LineStyle.Solid, Gdk.CapStyle.Round, Gdk.JoinStyle.Round);
|
||||||
|
gc.RgbFgColor = new Gdk.Color(255, 0, 0);
|
||||||
|
pmap.DrawLine(gc, (sz / 4), (sz / 4), ((sz - 1)
|
||||||
|
- (sz / 4)), ((sz - 1)
|
||||||
|
- (sz / 4)));
|
||||||
|
pmap.DrawLine(gc, ((sz - 1)
|
||||||
|
- (sz / 4)), (sz / 4), (sz / 4), ((sz - 1)
|
||||||
|
- (sz / 4)));
|
||||||
|
return Gdk.Pixbuf.FromDrawable(pmap, pmap.Colormap, 0, 0, 0, 0, sz, sz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ActionGroups
|
||||||
|
{
|
||||||
|
public static Gtk.ActionGroup GetActionGroup(System.Type type)
|
||||||
|
{
|
||||||
|
return Stetic.ActionGroups.GetActionGroup(type.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Gtk.ActionGroup GetActionGroup(string name)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1150
osrepodbmgr/gtk-gui/gui.stetic
Normal file
1150
osrepodbmgr/gtk-gui/gui.stetic
Normal file
File diff suppressed because it is too large
Load Diff
65
osrepodbmgr/gtk-gui/osrepodbmgr.frmHelp.cs
Normal file
65
osrepodbmgr/gtk-gui/osrepodbmgr.frmHelp.cs
Normal file
File diff suppressed because one or more lines are too long
272
osrepodbmgr/gtk-gui/osrepodbmgr.frmSettings.cs
Normal file
272
osrepodbmgr/gtk-gui/osrepodbmgr.frmSettings.cs
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
|
||||||
|
// This file has been generated by the GUI designer. Do not modify.
|
||||||
|
namespace osrepodbmgr
|
||||||
|
{
|
||||||
|
public partial class frmSettings
|
||||||
|
{
|
||||||
|
private global::Gtk.VBox vbox5;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox26;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblDatabase;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtDatabase;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnDatabase;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox25;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblRepository;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtRepository;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnRepository;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox24;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblTmp;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtTmp;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnTmp;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox23;
|
||||||
|
|
||||||
|
private global::Gtk.Label lblUnar;
|
||||||
|
|
||||||
|
private global::Gtk.Entry txtUnar;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnUnar;
|
||||||
|
|
||||||
|
private global::Gtk.HBox hbox18;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnCancel;
|
||||||
|
|
||||||
|
private global::Gtk.Button btnApply;
|
||||||
|
|
||||||
|
protected virtual void Build()
|
||||||
|
{
|
||||||
|
global::Stetic.Gui.Initialize(this);
|
||||||
|
// Widget osrepodbmgr.frmSettings
|
||||||
|
this.Name = "osrepodbmgr.frmSettings";
|
||||||
|
this.Title = global::Mono.Unix.Catalog.GetString("frmSettings");
|
||||||
|
this.WindowPosition = ((global::Gtk.WindowPosition)(4));
|
||||||
|
// Container child osrepodbmgr.frmSettings.Gtk.Container+ContainerChild
|
||||||
|
this.vbox5 = new global::Gtk.VBox();
|
||||||
|
this.vbox5.Name = "vbox5";
|
||||||
|
this.vbox5.Spacing = 6;
|
||||||
|
// Container child vbox5.Gtk.Box+BoxChild
|
||||||
|
this.hbox26 = new global::Gtk.HBox();
|
||||||
|
this.hbox26.Name = "hbox26";
|
||||||
|
this.hbox26.Spacing = 6;
|
||||||
|
// Container child hbox26.Gtk.Box+BoxChild
|
||||||
|
this.lblDatabase = new global::Gtk.Label();
|
||||||
|
this.lblDatabase.Name = "lblDatabase";
|
||||||
|
this.lblDatabase.LabelProp = global::Mono.Unix.Catalog.GetString("Database file");
|
||||||
|
this.hbox26.Add(this.lblDatabase);
|
||||||
|
global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox26[this.lblDatabase]));
|
||||||
|
w1.Position = 0;
|
||||||
|
w1.Expand = false;
|
||||||
|
w1.Fill = false;
|
||||||
|
// Container child hbox26.Gtk.Box+BoxChild
|
||||||
|
this.txtDatabase = new global::Gtk.Entry();
|
||||||
|
this.txtDatabase.CanFocus = true;
|
||||||
|
this.txtDatabase.Name = "txtDatabase";
|
||||||
|
this.txtDatabase.IsEditable = true;
|
||||||
|
this.txtDatabase.InvisibleChar = '●';
|
||||||
|
this.hbox26.Add(this.txtDatabase);
|
||||||
|
global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox26[this.txtDatabase]));
|
||||||
|
w2.Position = 1;
|
||||||
|
// Container child hbox26.Gtk.Box+BoxChild
|
||||||
|
this.btnDatabase = new global::Gtk.Button();
|
||||||
|
this.btnDatabase.CanFocus = true;
|
||||||
|
this.btnDatabase.Name = "btnDatabase";
|
||||||
|
this.btnDatabase.UseUnderline = true;
|
||||||
|
this.btnDatabase.Label = global::Mono.Unix.Catalog.GetString("Choose");
|
||||||
|
global::Gtk.Image w3 = new global::Gtk.Image();
|
||||||
|
w3.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnDatabase.Image = w3;
|
||||||
|
this.hbox26.Add(this.btnDatabase);
|
||||||
|
global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox26[this.btnDatabase]));
|
||||||
|
w4.Position = 2;
|
||||||
|
w4.Expand = false;
|
||||||
|
w4.Fill = false;
|
||||||
|
this.vbox5.Add(this.hbox26);
|
||||||
|
global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.hbox26]));
|
||||||
|
w5.Position = 0;
|
||||||
|
w5.Expand = false;
|
||||||
|
w5.Fill = false;
|
||||||
|
// Container child vbox5.Gtk.Box+BoxChild
|
||||||
|
this.hbox25 = new global::Gtk.HBox();
|
||||||
|
this.hbox25.Name = "hbox25";
|
||||||
|
this.hbox25.Spacing = 6;
|
||||||
|
// Container child hbox25.Gtk.Box+BoxChild
|
||||||
|
this.lblRepository = new global::Gtk.Label();
|
||||||
|
this.lblRepository.Name = "lblRepository";
|
||||||
|
this.lblRepository.LabelProp = global::Mono.Unix.Catalog.GetString("Repository folder");
|
||||||
|
this.hbox25.Add(this.lblRepository);
|
||||||
|
global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox25[this.lblRepository]));
|
||||||
|
w6.Position = 0;
|
||||||
|
w6.Expand = false;
|
||||||
|
w6.Fill = false;
|
||||||
|
// Container child hbox25.Gtk.Box+BoxChild
|
||||||
|
this.txtRepository = new global::Gtk.Entry();
|
||||||
|
this.txtRepository.CanFocus = true;
|
||||||
|
this.txtRepository.Name = "txtRepository";
|
||||||
|
this.txtRepository.IsEditable = true;
|
||||||
|
this.txtRepository.InvisibleChar = '●';
|
||||||
|
this.hbox25.Add(this.txtRepository);
|
||||||
|
global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox25[this.txtRepository]));
|
||||||
|
w7.Position = 1;
|
||||||
|
// Container child hbox25.Gtk.Box+BoxChild
|
||||||
|
this.btnRepository = new global::Gtk.Button();
|
||||||
|
this.btnRepository.CanFocus = true;
|
||||||
|
this.btnRepository.Name = "btnRepository";
|
||||||
|
this.btnRepository.UseUnderline = true;
|
||||||
|
this.btnRepository.Label = global::Mono.Unix.Catalog.GetString("Choose");
|
||||||
|
global::Gtk.Image w8 = new global::Gtk.Image();
|
||||||
|
w8.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnRepository.Image = w8;
|
||||||
|
this.hbox25.Add(this.btnRepository);
|
||||||
|
global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(this.hbox25[this.btnRepository]));
|
||||||
|
w9.Position = 2;
|
||||||
|
w9.Expand = false;
|
||||||
|
w9.Fill = false;
|
||||||
|
this.vbox5.Add(this.hbox25);
|
||||||
|
global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.hbox25]));
|
||||||
|
w10.Position = 1;
|
||||||
|
w10.Expand = false;
|
||||||
|
w10.Fill = false;
|
||||||
|
// Container child vbox5.Gtk.Box+BoxChild
|
||||||
|
this.hbox24 = new global::Gtk.HBox();
|
||||||
|
this.hbox24.Name = "hbox24";
|
||||||
|
this.hbox24.Spacing = 6;
|
||||||
|
// Container child hbox24.Gtk.Box+BoxChild
|
||||||
|
this.lblTmp = new global::Gtk.Label();
|
||||||
|
this.lblTmp.Name = "lblTmp";
|
||||||
|
this.lblTmp.LabelProp = global::Mono.Unix.Catalog.GetString("Temporary folder");
|
||||||
|
this.hbox24.Add(this.lblTmp);
|
||||||
|
global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox24[this.lblTmp]));
|
||||||
|
w11.Position = 0;
|
||||||
|
w11.Expand = false;
|
||||||
|
w11.Fill = false;
|
||||||
|
// Container child hbox24.Gtk.Box+BoxChild
|
||||||
|
this.txtTmp = new global::Gtk.Entry();
|
||||||
|
this.txtTmp.CanFocus = true;
|
||||||
|
this.txtTmp.Name = "txtTmp";
|
||||||
|
this.txtTmp.IsEditable = true;
|
||||||
|
this.txtTmp.InvisibleChar = '●';
|
||||||
|
this.hbox24.Add(this.txtTmp);
|
||||||
|
global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.hbox24[this.txtTmp]));
|
||||||
|
w12.Position = 1;
|
||||||
|
// Container child hbox24.Gtk.Box+BoxChild
|
||||||
|
this.btnTmp = new global::Gtk.Button();
|
||||||
|
this.btnTmp.CanFocus = true;
|
||||||
|
this.btnTmp.Name = "btnTmp";
|
||||||
|
this.btnTmp.UseUnderline = true;
|
||||||
|
this.btnTmp.Label = global::Mono.Unix.Catalog.GetString("Choose");
|
||||||
|
global::Gtk.Image w13 = new global::Gtk.Image();
|
||||||
|
w13.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnTmp.Image = w13;
|
||||||
|
this.hbox24.Add(this.btnTmp);
|
||||||
|
global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox24[this.btnTmp]));
|
||||||
|
w14.Position = 2;
|
||||||
|
w14.Expand = false;
|
||||||
|
w14.Fill = false;
|
||||||
|
this.vbox5.Add(this.hbox24);
|
||||||
|
global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.hbox24]));
|
||||||
|
w15.Position = 2;
|
||||||
|
w15.Expand = false;
|
||||||
|
w15.Fill = false;
|
||||||
|
// Container child vbox5.Gtk.Box+BoxChild
|
||||||
|
this.hbox23 = new global::Gtk.HBox();
|
||||||
|
this.hbox23.Name = "hbox23";
|
||||||
|
this.hbox23.Spacing = 6;
|
||||||
|
// Container child hbox23.Gtk.Box+BoxChild
|
||||||
|
this.lblUnar = new global::Gtk.Label();
|
||||||
|
this.lblUnar.Name = "lblUnar";
|
||||||
|
this.lblUnar.LabelProp = global::Mono.Unix.Catalog.GetString("Path to unar");
|
||||||
|
this.hbox23.Add(this.lblUnar);
|
||||||
|
global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox23[this.lblUnar]));
|
||||||
|
w16.Position = 0;
|
||||||
|
w16.Expand = false;
|
||||||
|
w16.Fill = false;
|
||||||
|
// Container child hbox23.Gtk.Box+BoxChild
|
||||||
|
this.txtUnar = new global::Gtk.Entry();
|
||||||
|
this.txtUnar.CanFocus = true;
|
||||||
|
this.txtUnar.Name = "txtUnar";
|
||||||
|
this.txtUnar.IsEditable = true;
|
||||||
|
this.txtUnar.InvisibleChar = '●';
|
||||||
|
this.hbox23.Add(this.txtUnar);
|
||||||
|
global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox23[this.txtUnar]));
|
||||||
|
w17.Position = 1;
|
||||||
|
// Container child hbox23.Gtk.Box+BoxChild
|
||||||
|
this.btnUnar = new global::Gtk.Button();
|
||||||
|
this.btnUnar.CanFocus = true;
|
||||||
|
this.btnUnar.Name = "btnUnar";
|
||||||
|
this.btnUnar.UseUnderline = true;
|
||||||
|
this.btnUnar.Label = global::Mono.Unix.Catalog.GetString("Choose");
|
||||||
|
global::Gtk.Image w18 = new global::Gtk.Image();
|
||||||
|
w18.Pixbuf = global::Stetic.IconLoader.LoadIcon(this, "gtk-open", global::Gtk.IconSize.Menu);
|
||||||
|
this.btnUnar.Image = w18;
|
||||||
|
this.hbox23.Add(this.btnUnar);
|
||||||
|
global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.hbox23[this.btnUnar]));
|
||||||
|
w19.Position = 2;
|
||||||
|
w19.Expand = false;
|
||||||
|
w19.Fill = false;
|
||||||
|
this.vbox5.Add(this.hbox23);
|
||||||
|
global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.hbox23]));
|
||||||
|
w20.Position = 3;
|
||||||
|
w20.Expand = false;
|
||||||
|
w20.Fill = false;
|
||||||
|
// Container child vbox5.Gtk.Box+BoxChild
|
||||||
|
this.hbox18 = new global::Gtk.HBox();
|
||||||
|
this.hbox18.Name = "hbox18";
|
||||||
|
this.hbox18.Spacing = 6;
|
||||||
|
// Container child hbox18.Gtk.Box+BoxChild
|
||||||
|
this.btnCancel = new global::Gtk.Button();
|
||||||
|
this.btnCancel.CanFocus = true;
|
||||||
|
this.btnCancel.Name = "btnCancel";
|
||||||
|
this.btnCancel.UseStock = true;
|
||||||
|
this.btnCancel.UseUnderline = true;
|
||||||
|
this.btnCancel.Label = "gtk-cancel";
|
||||||
|
this.hbox18.Add(this.btnCancel);
|
||||||
|
global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.hbox18[this.btnCancel]));
|
||||||
|
w21.Position = 0;
|
||||||
|
w21.Expand = false;
|
||||||
|
w21.Fill = false;
|
||||||
|
// Container child hbox18.Gtk.Box+BoxChild
|
||||||
|
this.btnApply = new global::Gtk.Button();
|
||||||
|
this.btnApply.CanFocus = true;
|
||||||
|
this.btnApply.Name = "btnApply";
|
||||||
|
this.btnApply.UseStock = true;
|
||||||
|
this.btnApply.UseUnderline = true;
|
||||||
|
this.btnApply.Label = "gtk-apply";
|
||||||
|
this.hbox18.Add(this.btnApply);
|
||||||
|
global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.hbox18[this.btnApply]));
|
||||||
|
w22.PackType = ((global::Gtk.PackType)(1));
|
||||||
|
w22.Position = 1;
|
||||||
|
w22.Expand = false;
|
||||||
|
w22.Fill = false;
|
||||||
|
this.vbox5.Add(this.hbox18);
|
||||||
|
global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.hbox18]));
|
||||||
|
w23.Position = 4;
|
||||||
|
w23.Expand = false;
|
||||||
|
w23.Fill = false;
|
||||||
|
this.Add(this.vbox5);
|
||||||
|
if((this.Child != null))
|
||||||
|
{
|
||||||
|
this.Child.ShowAll();
|
||||||
|
}
|
||||||
|
this.DefaultWidth = 400;
|
||||||
|
this.DefaultHeight = 194;
|
||||||
|
this.Show();
|
||||||
|
this.btnDatabase.Clicked += new global::System.EventHandler(this.OnBtnDatabaseClicked);
|
||||||
|
this.btnRepository.Clicked += new global::System.EventHandler(this.OnBtnRepositoryClicked);
|
||||||
|
this.btnTmp.Clicked += new global::System.EventHandler(this.OnBtnTmpClicked);
|
||||||
|
this.btnUnar.Clicked += new global::System.EventHandler(this.OnBtnUnarClicked);
|
||||||
|
this.btnCancel.Clicked += new global::System.EventHandler(this.OnBtnCancelClicked);
|
||||||
|
this.btnApply.Clicked += new global::System.EventHandler(this.OnBtnApplyClicked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
90
osrepodbmgr/osrepodbmgr.csproj
Normal file
90
osrepodbmgr/osrepodbmgr.csproj
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
<ProjectGuid>{19FB7436-031F-42B3-87F6-8508F63EDADA}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>osrepodbmgr</RootNamespace>
|
||||||
|
<AssemblyName>osrepodbmgr</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="gdk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="glib-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="pango-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="atk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Posix" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
|
<Reference Include="System.Data.SQLite">
|
||||||
|
<HintPath>..\packages\System.Data.SQLite.Core.1.0.105.0\lib\net45\System.Data.SQLite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="plist-cil">
|
||||||
|
<HintPath>..\packages\plist-cil.1.15.0\lib\net40\plist-cil.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="gtk-gui\gui.stetic">
|
||||||
|
<LogicalName>gui.stetic</LogicalName>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="gtk-gui\generated.cs" />
|
||||||
|
<Compile Include="MainWindow.cs" />
|
||||||
|
<Compile Include="gtk-gui\MainWindow.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="frmHelp.cs" />
|
||||||
|
<Compile Include="gtk-gui\osrepodbmgr.frmHelp.cs" />
|
||||||
|
<Compile Include="frmSettings.cs" />
|
||||||
|
<Compile Include="gtk-gui\osrepodbmgr.frmSettings.cs" />
|
||||||
|
<Compile Include="Core.cs" />
|
||||||
|
<Compile Include="SHA256Context.cs" />
|
||||||
|
<Compile Include="DBCore.cs" />
|
||||||
|
<Compile Include="SQLite.cs" />
|
||||||
|
<Compile Include="DBEntries.cs" />
|
||||||
|
<Compile Include="Schema.cs" />
|
||||||
|
<Compile Include="Settings.cs" />
|
||||||
|
<Compile Include="PlatformID.cs" />
|
||||||
|
<Compile Include="DetectOS.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Import Project="..\packages\System.Data.SQLite.Core.1.0.105.0\build\net45\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.105.0\build\net45\System.Data.SQLite.Core.targets')" />
|
||||||
|
</Project>
|
||||||
5
osrepodbmgr/packages.config
Normal file
5
osrepodbmgr/packages.config
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="plist-cil" version="1.15.0" targetFramework="net45" />
|
||||||
|
<package id="System.Data.SQLite.Core" version="1.0.105.0" targetFramework="net45" />
|
||||||
|
</packages>
|
||||||
Reference in New Issue
Block a user