Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
SaveFile.cs
1using System.Collections.Generic;
2using System.IO;
3using System.Threading.Tasks;
4using Waher.Content;
10
12{
17 {
26 public SaveFile(ScriptNode Object, ScriptNode FileName, int Start, int Length, Expression Expression)
27 : base(Object, FileName, Start, Length, Expression)
28 {
29 }
30
34 public override string FunctionName => nameof(SaveFile);
35
39 public override string[] DefaultArgumentNames => new string[] { "Object", "FileName" };
40
45 public override bool IsAsynchronous => true;
46
55 {
56 return this.EvaluateAsync(Argument1, Argument2, Variables).Result;
57 }
58
66 public override async Task<IElement> EvaluateAsync(IElement Argument1, IElement Argument2, Variables Variables)
67 {
68 object Obj = Argument1.AssociatedObjectValue;
69 string FileName = Argument2.AssociatedObjectValue.ToString();
70
71 if (Obj is Graph G)
72 Obj = G.CreatePixels();
73
74 byte[] Bin = null;
75
76 if (InternetContent.TryGetContentType(Path.GetExtension(FileName), out string ContentType) &&
77 InternetContent.Encodes(Obj, out Grade _, out IContentEncoder Encoder, ContentType))
78 {
79 KeyValuePair<byte[], string> P = await Encoder.EncodeAsync(Obj, System.Text.Encoding.UTF8, ContentType);
80 Bin = P.Key;
81 ContentType = P.Value;
82 }
83
84 if (Bin is null)
85 {
86 KeyValuePair<byte[], string> P = await InternetContent.EncodeAsync(Obj, System.Text.Encoding.UTF8);
87 Bin = P.Key;
88 ContentType = P.Value;
89 }
90
91 using (FileStream fs = File.Create(FileName))
92 {
93 await fs.WriteAsync(Bin, 0, Bin.Length);
94 }
95
96 return new StringValue(ContentType);
97 }
98 }
99}
Static class managing encoding and decoding of internet content.
static Task< KeyValuePair< byte[], string > > EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
Encodes an object.
static bool Encodes(object Object, out Grade Grade, out IContentEncoder Encoder, params string[] AcceptedContentTypes)
If a given object can be encoded.
static bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of an item, given its file extension.
override string FunctionName
Name of the function
Definition: SaveFile.cs:34
override IElement Evaluate(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function.
Definition: SaveFile.cs:54
SaveFile(ScriptNode Object, ScriptNode FileName, int Start, int Length, Expression Expression)
SaveFile(Object,FileName)
Definition: SaveFile.cs:26
override string[] DefaultArgumentNames
Default Argument names
Definition: SaveFile.cs:39
override bool IsAsynchronous
If the node (or its decendants) include asynchronous evaluation. Asynchronous nodes should be evaluat...
Definition: SaveFile.cs:45
override async Task< IElement > EvaluateAsync(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function.
Definition: SaveFile.cs:66
Class managing a script expression.
Definition: Expression.cs:39
Base class for graphs.
Definition: Graph.cs:79
Base class for funcions of one variable.
ScriptNode Argument2
Function argument 2.
ScriptNode Argument1
Function argument 1.
Base class for all nodes in a parsed script tree.
Definition: ScriptNode.cs:69
int Length
Length of expression covered by node.
Definition: ScriptNode.cs:101
override string ToString()
Definition: ScriptNode.cs:359
int Start
Start position in script expression.
Definition: ScriptNode.cs:92
Collection of variables.
Definition: Variables.cs:25
Basic interface for Internet Content encoders. A class implementing this interface and having a defau...
Basic interface for all types of elements.
Definition: IElement.cs:20
Grade
Grade enumeration
Definition: Grade.cs:7