/// <summary>
 /// Implementation of slot.
 /// </summary>
 /// <param name="signaler">Signaler used to raise the signal.</param>
 /// <param name="input">Arguments to slot.</param>
 public void Signal(ISignaler signaler, Node input)
 {
     _service.Delete(
         PathResolver.CombinePaths(
             _rootResolver.RootFolder,
             input.GetEx <string>()));
 }
Beispiel #2
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Making sure we're able to handle returned values and nodes from slot implementation.
            var result = new Node();

            signaler.Scope("slots.result", result, () =>
            {
                // Loading file and converting its content to lambda.
                var filename    = input.GetEx <string>();
                var hyperlambda = _service
                                  .Load(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        filename));

                // Creating and parametrising our lambda object from argument + file's Hyperlambda content.
                var lambda = GetLambda(input, hyperlambda, filename);

                // Evaluating lambda of slot.
                signaler.Signal("eval", lambda);

                // Applying result.
                ApplyResult(input, result);
            });
        }
Beispiel #3
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Checking if we should display hidden files (files starting with ".").
            var displayHiddenFiles = input.Children
                                     .FirstOrDefault(x => x.Name == "display-hidden")?
                                     .GetEx <bool>() ?? false;

            var root   = PathResolver.Normalize(_rootResolver.RootFolder);
            var folder = input.GetEx <string>();
            var files  = _service
                         .ListFiles(
                PathResolver.CombinePaths(
                    _rootResolver.RootFolder,
                    folder))
                         .ToList();

            // Sorting and returning files to caller as lambda children.
            files.Sort();
            input.Clear();
            foreach (var idx in files)
            {
                // Making sure we don't show hidden operating system files by default.
                if (displayHiddenFiles ||
                    !Path.GetFileName(idx).StartsWith(".", StringComparison.InvariantCulture))
                {
                    input.Add(new Node("", idx.Substring(root.Length)));
                }
            }
        }
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var displayHiddenFolders = input.Children
                                       .FirstOrDefault(x => x.Name == "display-hidden")?
                                       .GetEx <bool>() ?? false;
            var root   = PathResolver.Normalize(_rootResolver.RootFolder);
            var folder = input.GetEx <string>();

            input.Clear();
            input.Value = null;
            var folders = _service
                          .ListFolders(
                PathResolver.CombinePaths(
                    _rootResolver.RootFolder,
                    folder))
                          .ToList();

            folders.Sort();
            foreach (var idx in folders)
            {
                // Making sure we don't show hidden operating system folders by default.
                if (displayHiddenFolders ||
                    !idx.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last().StartsWith(".", StringComparison.InvariantCulture))
                {
                    input.Add(new Node("", idx.Substring(root.Length).TrimEnd('/') + "/"));
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        /// <returns>An awaitable task.</returns>
        public async Task SignalAsync(ISignaler signaler, Node input)
        {
            // Making sure we evaluate any children, to make sure any signals wanting to retrieve our source is evaluated.
            await signaler.SignalAsync("eval", input);

            // Saving file.
            if (input.Name == "io.file.save")
            {
                // Text content.
                await _service.SaveAsync(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        input.GetEx <string>()),
                    input.Children.First().GetEx <string>());
            }
            else
            {
                // Binary content.
                await _service.SaveAsync(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        input.GetEx <string>()),
                    input.Children.First().GetEx <byte[]>());
            }
        }
 /// <summary>
 /// Implementation of slot.
 /// </summary>
 /// <param name="signaler">Signaler used to raise the signal.</param>
 /// <param name="input">Arguments to slot.</param>
 public void Signal(ISignaler signaler, Node input)
 {
     input.Value = _service.Exists(
         PathResolver.CombinePaths(
             _rootResolver.RootFolder,
             input.GetEx <string>()));
 }
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        /// <returns>An awaitable task.</returns>
        public async Task SignalAsync(ISignaler signaler, Node input)
        {
            // Making sure we're able to handle returned values and nodes from slot implementation.
            var result = new Node();
            await signaler.ScopeAsync("slots.result", result, async() =>
            {
                // Loading file and converting its content to lambda.
                var filename    = input.GetEx <string>();
                var hyperlambda = await _service.LoadAsync(
                    PathResolver.CombinePaths(
                        _rootResolver.RootFolder,
                        filename));
                var lambda = new Parser(hyperlambda).Lambda();

                // Preparing arguments, if there are any.
                if (input.Children.Any())
                {
                    lambda.Insert(0, new Node(".arguments", null, input.Children.ToList()));
                }
                lambda.Insert(0, new Node(".filename", filename));

                // Evaluating lambda of slot.
                await signaler.SignalAsync("eval", lambda);

                // Clearing Children collection, since it might contain input parameters.
                input.Clear();

                /*
                 * Simply setting value and children to "slots.result" stack object, since its value
                 * was initially set to its old value during startup of method.
                 */
                input.Value = result.Value;
                input.AddRange(result.Children.ToList());
            });
        }
Beispiel #8
0
 /// <summary>
 /// Implementation of slot.
 /// </summary>
 /// <param name="signaler">Signaler used to raise the signal.</param>
 /// <param name="input">Arguments to slot.</param>
 /// <returns>An awaitable task.</returns>
 public async Task SignalAsync(ISignaler signaler, Node input)
 {
     input.Value = await _service.LoadAsync(
         PathResolver.CombinePaths(
             _rootResolver.RootFolder,
             input.GetEx <string>()));
 }
Beispiel #9
0
        void MoveImplementation(Node input)
        {
            // Retrieving source path.
            string sourcePath = PathResolver.CombinePaths(
                _rootResolver.RootFolder,
                input.GetEx <string>());

            // Retrieving destination path.
            var destinationPath = PathResolver
                                  .CombinePaths(
                _rootResolver.RootFolder,
                input.Children.First().GetEx <string>());

            // Defaulting detination folder to be the same as source folder, unless a different folder is explicitly given.
            if (destinationPath.EndsWith("/", StringComparison.InvariantCultureIgnoreCase))
            {
                destinationPath += Path.GetFileName(sourcePath);
            }

            // Sanity checking arguments.
            if (sourcePath == destinationPath)
            {
                throw new ArgumentException("You cannot copy a file using the same source and destination path");
            }

            // For simplicity, we're deleting any existing files with the path of the destination file.
            if (_service.Exists(destinationPath))
            {
                _service.Delete(destinationPath);
            }

            _service.Move(sourcePath, destinationPath);
        }
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            // Figuring out filename.
            var filename = PathResolver.CombinePaths(
                _rootResolver.RootFolder,
                input.GetEx <string>());

            // Opening file and returning to caller.
            input.Value = _service.OpenFile(filename);
        }
Beispiel #11
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        /// <returns>An awaitable task.</returns>
        public async Task SignalAsync(ISignaler signaler, Node input)
        {
            // Making sure we evaluate any children, to make sure any signals wanting to retrieve our source is evaluated.
            await signaler.SignalAsync("eval", input);

            // Saving file
            await _service.SaveAsync(
                PathResolver.CombinePaths(
                    _rootResolver.RootFolder,
                    input.GetEx <string>()),
                input.Children.First().GetEx <string>());
        }
Beispiel #12
0
        /// <summary>
        /// Implementation of slot.
        /// </summary>
        /// <param name="signaler">Signaler used to raise the signal.</param>
        /// <param name="input">Arguments to slot.</param>
        public void Signal(ISignaler signaler, Node input)
        {
            var zipFile = PathResolver.CombinePaths(
                _rootResolver.RootFolder,
                input.GetEx <string>());

            var folderNode = input.Children
                             .FirstOrDefault(x => x.Name == "folder")?
                             .GetEx <string>();

            var targetFolder = folderNode == null?
                               Path.GetDirectoryName(zipFile) : PathResolver.CombinePaths(_rootResolver.RootFolder, folderNode).Replace("/", "\\");

            var fastZip = new FastZip();

            fastZip.ExtractZip(zipFile, targetFolder, null);
        }