Example #1
0
 public async Task snippets(params string[] args)
 {
     if (!HasExecutePermission)
         return;
     if (args.Length == 0)
     {
         EmbedBuilder b = new EmbedBuilder()
         {
             Title = "Ticket Snippets",
             Color = Color.DarkPurple,
             Description = "To add a snippet:\n`!snippets add <SnippetName> <SnippetValue>`\nTo Remove a snippet:\n`!snippets remove <SnippetName>`"
         };
         foreach(var snip in Snippets)
             b.AddField(snip.Key, snip.Value);
         await Context.Channel.SendMessageAsync("", false, b.Build());
     }
     else
     {
         if(args.Length >= 2)
         {
             switch (args[0].ToLower())
             {
                 case "add":
                     {
                         string snip = args[1];
                         string snipval = string.Join(' ', args.Skip(2));
                         if (!Snippets.ContainsKey(snip))
                         {
                             if(snipval.Length > 1024)
                             {
                                 await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                                 {
                                     Title = $"wOaH bUddY",
                                     Description = $"Your snippet is tooooooo long! try adding one that less than 1000 characters"
                                 }.Build());
                                 return;
                             }
                             Snippets.Add(snip, snipval);
                             Global.SaveSnippets();
                             await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                             {
                                 Title = $"Added **{snip}**",
                                 Description = $"Succesfully added **{snip}** to the snippets"
                             }.Build());
                         }
                         else
                         {
                             await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                             {
                                 Title = $"That snippet exists!",
                                 Description = $"someone already added that snippet!"
                             }.Build());
                         }
                     }
                     break;
                 case "remove":
                     {
                         string snip = args[1];
                         if (Snippets.ContainsKey(snip))
                         {
                             //remove snippet
                             Snippets.Remove(snip);
                             Global.SaveSnippets();
                             await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                             {
                                 Title = $"Removed **{snip}**",
                                 Description = $"Successfully removed the snippet {snip}",
                                 Color = Color.Green
                             }.Build());
                         }
                         else
                         {
                             await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                             {
                                 Title = "uhm.. wat?",
                                 Description = "That snippet doesnt exist, please do `!snippets` to view the current snippets!",
                                 Color = Color.Red
                             }.Build());
                             return;
                         }
                     }
                     break;
                 default:
                     {
                         await Context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                         {
                             Title = "uhm.. wat?",
                             Description = "that command is unreconized :/",
                             Color = Color.Red
                         }.Build());
                     }
                     break;
             }
         }
     }
 }
        protected IRichEditDocumentServer AddSpreadTable(ArgumentCollection arguments)
        {
            if (arguments.Count <= 0)
            {
                throw new Exception("'DOCVARIABLE SPREADTABLE' requires filename as first argument.");
            }
            if (arguments.Count <= 1)
            {
                throw new Exception("'DOCVARIABLE SPREADTABLE' requires table or range as second argument.");
            }

            var fileName = arguments[0].Value;

            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new Exception("DOCVARIABLE SPREADTABLE does not contain valid filename.");
            }

            object snippet = null;

            if (Snippets?.ContainsKey(fileName) ?? false)
            {
                snippet = Snippets[fileName];
                if (snippet is SCSpreadsheetContext)
                {
                }
                else
                {
                    throw new Exception($"Specified snippet '{fileName}' is not supported. Snippet shall be Spreadsheet.");
                }
            }
            else if (string.Compare(fileName, "$SPREAD", true) == 0)
            {
                //Do nothing
            }
            else
            {
                fileName = Project.Current.MapPath(fileName);
            }

            if (snippet == null && string.Compare(fileName, "$SPREAD", true) != 0 && !File.Exists(fileName))
            {
                throw new Exception($"File '{fileName}' does not exist.");
            }

            var tableName = arguments[1].Value;

            bool rebuild = false;

            if (arguments.Count > 2)
            {
                var properties = Utils.SplitNameValueString(arguments[2].Value, ';');

                foreach (var prop in properties)
                {
                    if (string.IsNullOrWhiteSpace(prop.Key))
                    {
                        continue;
                    }

                    switch (prop.Key.ToLower())
                    {
                    case "rebuild":
                    case "recalculate":
                    case "recalc":
                        var valueRebuild = prop.Value;
                        if (string.IsNullOrWhiteSpace(valueRebuild))
                        {
                            valueRebuild = bool.TrueString;
                        }
                        rebuild = bool.Parse(valueRebuild);
                        break;
                    }
                }
            }

            bool      needDispose = true;
            IWorkbook workbook    = null;

            try
            {
                //using var workbook = SpreadsheetUtils.CreateWorkbook();
                if (snippet is SCSpreadsheetContext spreadsheetContext)
                {
                    workbook = SpreadsheetUtils.CreateWorkbook();
                    workbook.Append(spreadsheetContext.Workbook);
                }
                else if (string.Compare(fileName, "$SPREAD", true) == 0)
                {
                    needDispose = false;
                    workbook    = this.DefaultSpreadsheet;

                    if (workbook == null)
                    {
                        throw new Exception("Current script does not support default (Host) spreadsheet.");
                    }
                }
                else
                {
                    workbook = SpreadsheetUtils.CreateWorkbook();
                    workbook.LoadDocument(fileName);
                }

                IRichEditDocumentServer result = null;
                if (workbook == this.DefaultSpreadsheet && NeedSynchronizeDefaultSpreadsheet)
                {
                    SCDispatcherService.UIDispatcherServer.Invoke(() => ProcessWorkbook(workbook, tableName, rebuild, out result));
                }
                else
                {
                    ProcessWorkbook(workbook, tableName, rebuild, out result);
                }
                return(result);
            }
            finally
            {
                if (needDispose && workbook != null)
                {
                    workbook.Dispose();
                }
            }
Example #3
0
        protected IRichEditDocumentServer AddImage(ArgumentCollection arguments)
        {
            if (arguments.Count <= 0)
            {
                throw new Exception("'DOCVARIABLE IMAGE' requires filename as first argument.");
            }

            var fileName = arguments[0].Value;

            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new Exception("DOCVARIABLE IMAGE does not contain valid filename.");
            }

            object snippet = null;

            if (Snippets?.ContainsKey(fileName) ?? false)
            {
                snippet = Snippets[fileName];
                if (snippet is Image)
                {
                }
                else
                {
                    throw new Exception($"Specified snippet '{fileName}' is not supported. Snippet shall be either Book or System.Drawing.Image.");
                }
            }
            else
            {
                fileName = Project.Current.MapPath(fileName);
            }

            if (snippet == null && !File.Exists(fileName))
            {
                throw new Exception($"File '{fileName}' does not exist.");
            }

            using (new UsingProcessor(() => CheckNestedFile(fileName), () => RemoveNestedFile(fileName)))
            {
                var image = snippet as Image ?? Bitmap.FromFile(fileName);

                float?scale = null, scaleX = null, scaleY = null;

                if (arguments.Count > 1)
                {
                    var properties = Utils.SplitNameValueString(arguments[1].Value, ';');

                    foreach (var prop in properties)
                    {
                        if (string.IsNullOrWhiteSpace(prop.Key))
                        {
                            continue;
                        }

                        switch (prop.Key.ToLower())
                        {
#pragma warning disable CRRSP06 // A misspelled word has been found
                        case "dpi":
                            var dpi = float.Parse(prop.Value, CultureInfo.InvariantCulture);
                            if (image is Bitmap bmp)
                            {
                                bmp.SetResolution(dpi, dpi);
                            }
                            break;

                        case "scale":
                            scale = float.Parse(prop.Value, CultureInfo.InvariantCulture);
                            break;

                        case "scalex":
                            scaleX = float.Parse(prop.Value, CultureInfo.InvariantCulture);
                            break;

                        case "scaley":
                            scaleY = float.Parse(prop.Value, CultureInfo.InvariantCulture);
                            break;
#pragma warning restore CRRSP06 // A misspelled word has been found
                        }
                    }
                }

                var server   = new RichEditDocumentServer();
                var document = server.Document;
                var docImage = document.Images.Append(image);

                if (scale.HasValue)
                {
                    docImage.ScaleX = docImage.ScaleY = scale.Value;
                }
                else
                {
                    if (scaleX.HasValue)
                    {
                        docImage.ScaleX = scaleX.Value;
                    }
                    if (scaleY.HasValue)
                    {
                        docImage.ScaleY = scaleY.Value;
                    }
                }

                return(server);
            }
        }
Example #4
0
        protected IRichEditDocumentServer AddDocument(ArgumentCollection arguments)
        {
            if (arguments.Count <= 0)
            {
                throw new Exception("'DOCVARIABLE FILE' requires filename as first argument.");
            }

            var fileName = arguments[0].Value;

            if (string.IsNullOrWhiteSpace(fileName))
            {
                throw new Exception("DOCVARIABLE FILE does not contain valid filename.");
            }

            object snippet = null;

            if (Snippets?.ContainsKey(fileName) ?? false)
            {
                snippet = Snippets[fileName];
                if (snippet is InternalBook)
                {
                }
                else if (snippet is SCBookContext)
                {
                }
                else if (snippet is Image)
                {
                }
                else
                {
                    throw new Exception($"Specified snippet '{fileName}' is not supported. Snippet shall be either Book or System.Drawing.Image.");
                }
            }
            else
            {
                fileName = Project.Current.MapPath(fileName);
            }

            if (snippet == null && !File.Exists(fileName))
            {
                throw new Exception($"File '{fileName}' does not exist.");
            }

            bool rebuild = false;

            if (arguments.Count > 1)
            {
                var properties = Utils.SplitNameValueString(arguments[1].Value, ';');

                foreach (var prop in properties)
                {
                    if (string.IsNullOrWhiteSpace(prop.Key))
                    {
                        continue;
                    }

                    switch (prop.Key.ToLower())
                    {
                    case "rebuild":
                    case "recalculate":
                    case "recalc":
                        var valueRecalc = prop.Value;
                        if (string.IsNullOrWhiteSpace(valueRecalc))
                        {
                            valueRecalc = bool.TrueString;
                        }
                        rebuild = bool.Parse(valueRecalc);
                        break;
                    }
                }
            }

            using (new UsingProcessor(() => CheckNestedFile(fileName), () => RemoveNestedFile(fileName)))
            {
                var server = new RichEditDocumentServer();

                if (snippet != null)
                {
                    InternalBook book = null;
                    if (snippet is InternalBook scBook)
                    {
                        book = scBook;
                    }
                    else if (snippet is SCBookContext bookContext)
                    {
                        book = bookContext.SCBook;
                    }

                    if (book != null)
                    {
                        server.Document.AppendDocumentContent(book.Document.Range);
                    }
                    else if (snippet is Image image)
                    {
                        server.Document.Images.Append(image);
                    }
                    else
                    {
                        throw new Exception($"Specified snippet '{fileName}' is not supported. Snippet shall be either Book or System.Drawing.Image.");
                    }
                }
                else
                {
                    var ext = Path.GetExtension(fileName)?.ToLower();
                    switch (ext)
                    {
                    case "markdown":
#pragma warning disable CRRSP06 // A misspelled word has been found
                    case "mdown":
#pragma warning restore CRRSP06 // A misspelled word has been found
                    case "md":
                        var content     = File.ReadAllText(fileName);
                        var htmlContent = Markdown.ToHtml(content);
                        server.Document.AppendHtmlText(htmlContent, DevExpress.XtraRichEdit.API.Native.InsertOptions.KeepSourceFormatting);
                        break;

                    default:
                        server.LoadDocument(fileName);
                        break;
                    }
                }

                if (rebuild)
                {
                    server.CalculateDocumentVariable += CalculateDocumentVariable;
                    using (new UsingProcessor(() => server.CalculateDocumentVariable += CalculateDocumentVariable,
                                              () => server.CalculateDocumentVariable -= CalculateDocumentVariable))
                    {
                        server.Document.UpdateAllFields();
                    }
                }

                return(server);
            }
        }