Skip to content

Commit

Permalink
Download files
Browse files Browse the repository at this point in the history
Load files from package or from remote
  • Loading branch information
aorzelskiGH committed Aug 21, 2023
1 parent 46d748d commit a9f48c2
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 28 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,7 @@ sample-aasx/
/.vs/aasx-package-explorer/v16/.suo
/.vs/slnx.sqlite
/.vs/aasx-package-explorer/v17/.suo
/src/WpfXamlTool/Properties/AssemblyInfo.cs
/src/WpfMtpVisuViewer/Properties/AssemblyInfo.cs
/src/WpfMtpControl/Properties/AssemblyInfo.cs
/src/MsaglWpfControl/Properties/AssemblyInfo.cs
98 changes: 98 additions & 0 deletions src/AasxCsharpLibrary/AdminShellPackageEnv.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@ This source code may use other Open Source software components (see LICENSE.txt)

using Extensions;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Packaging;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using static AasCore.Aas3_0.Reporting;

namespace AdminShellNS
{
Expand Down Expand Up @@ -1155,8 +1159,102 @@ public bool IsLocalFile(string uriString)
return isLocal;
}

private static WebProxy proxy = null;

public Stream GetLocalStreamFromPackage(string uriString, FileMode mode = FileMode.Open, FileAccess access = FileAccess.Read)
{
// Check, if remote
if (uriString.ToLower().Substring(0, 4) == "http")
{
if (proxy == null)
{
string proxyAddress = "";
string username = "";
string password = "";

string proxyFile = "proxy.txt";
if (System.IO.File.Exists(proxyFile))
{
try
{ // Open the text file using a stream reader.
using (StreamReader sr = new StreamReader(proxyFile))
{
proxyFile = sr.ReadLine();
}
}
catch (IOException e)
{
Console.WriteLine("proxy.txt could not be read:");
Console.WriteLine(e.Message);
}
}

try
{
using (StreamReader sr = new StreamReader(proxyFile))
{
proxyAddress = sr.ReadLine();
username = sr.ReadLine();
password = sr.ReadLine();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(proxyFile + " not found!");
}

if (proxyAddress != "")
{
proxy = new WebProxy();
Uri newUri = new Uri(proxyAddress);
proxy.Address = newUri;
proxy.Credentials = new NetworkCredential(username, password);
Console.WriteLine("Using proxy: " + proxyAddress);
}
}

var handler = new HttpClientHandler();

if (proxy != null)
handler.Proxy = proxy;
else
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var hc = new HttpClient(handler);

var response = hc.GetAsync(uriString).GetAwaiter().GetResult();

// if you call response.EnsureSuccessStatusCode here it will throw an exception
if (response.StatusCode == HttpStatusCode.Moved
|| response.StatusCode == HttpStatusCode.Found)
{
var location = response.Headers.Location;
response = hc.GetAsync(location).GetAwaiter().GetResult();
}

response.EnsureSuccessStatusCode();
var s = response.Content.ReadAsStreamAsync().GetAwaiter().GetResult();

if (s.Length < 500) // indirect load?
{
StreamReader reader = new StreamReader(s);
string json = reader.ReadToEnd();
var parsed = JObject.Parse(json);
try
{
string url = parsed.SelectToken("url").Value<string>();
response = hc.GetAsync(url).GetAwaiter().GetResult();
response.EnsureSuccessStatusCode();
s = response.Content.ReadAsStreamAsync().GetAwaiter().GetResult();
}
catch
{
}
}

return s;
}

// access
if (_openPackage == null)
throw (new Exception(string.Format($"AASX Package {_fn} not opened. Aborting!")));
Expand Down
4 changes: 3 additions & 1 deletion src/AasxIntegrationBaseGdi/AnyUI/AnyUiMagickHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public static AnyUiBitmapInfo MakePreviewFromPackageOrUrl(
try
{
System.IO.Stream thumbStream = null;
if (true == package?.IsLocalFile(path))
if (true /*= package?.IsLocalFile(path)*/)
thumbStream = package.GetLocalStreamFromPackage(path);
else
{
Expand All @@ -133,6 +133,7 @@ public static AnyUiBitmapInfo MakePreviewFromPackageOrUrl(
var wc = new WebClient();
thumbStream = wc.OpenRead(path);
#else
/*
// upgrade to HttpClient and follow re-directs
var hc = new HttpClient();
var response = hc.GetAsync(path).GetAwaiter().GetResult();
Expand All @@ -147,6 +148,7 @@ public static AnyUiBitmapInfo MakePreviewFromPackageOrUrl(
response.EnsureSuccessStatusCode();
thumbStream = response.Content.ReadAsStreamAsync().GetAwaiter().GetResult();
*/
#endif
}

Expand Down
16 changes: 13 additions & 3 deletions src/BlazorExplorer/Controllers/ImageController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ This source code may use other Open Source software components (see LICENSE.txt)
*/

using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Reflection;
using AnyUi;
Expand Down Expand Up @@ -50,12 +51,21 @@ public ActionResult Get(string id)
.GetExecutingAssembly()
.GetManifestResourceStream("BlazorUI.Resources.sample.png"))
{
if (stream == null)
return NotFound();
// if (stream == null)
// return NotFound();

using (MemoryStream ms = new MemoryStream())
{
stream.CopyTo(ms);
if (stream!= null)
{
stream.CopyTo(ms);
}
else
{
var b = new Bitmap(1, 1);
b.SetPixel(0, 0, Color.White);
b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
}
var bb = ms.ToArray();
return base.File(bb, "image/png");
}
Expand Down
1 change: 1 addition & 0 deletions src/BlazorExplorer/proxy.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c:/dat/proxy.dat
12 changes: 6 additions & 6 deletions src/MsaglWpfControl/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@


[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
)]


Expand Down
12 changes: 6 additions & 6 deletions src/WpfMtpControl/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@


[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
)]


Expand Down
12 changes: 6 additions & 6 deletions src/WpfMtpVisuViewer/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@


[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
)]


Expand Down
12 changes: 6 additions & 6 deletions src/WpfXamlTool/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@


[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
)]


Expand Down

0 comments on commit a9f48c2

Please sign in to comment.