From f30dcf5ef41d54c588d7b42c48be8d941abba72e Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 8 Jan 2017 09:57:10 -0500 Subject: Initial upload --- ShiftOS_TheReturn/FileSkimmerBackend.cs | 152 ++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 ShiftOS_TheReturn/FileSkimmerBackend.cs (limited to 'ShiftOS_TheReturn/FileSkimmerBackend.cs') diff --git a/ShiftOS_TheReturn/FileSkimmerBackend.cs b/ShiftOS_TheReturn/FileSkimmerBackend.cs new file mode 100644 index 0000000..00ad45b --- /dev/null +++ b/ShiftOS_TheReturn/FileSkimmerBackend.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using static ShiftOS.Objects.ShiftFS.Utils; + +namespace ShiftOS.Engine +{ + /// + /// Provides basic high-level access to the ShiftOS filesystem engine (ShiftFS) and File Skimmer. + /// + public static class FileSkimmerBackend + { + private static IFileSkimmer _fs = null; + + /// + /// Opens a file from the specified ShiftFS path. + /// + /// The path to open. + public static void OpenFile(string path) + { + _fs.OpenFile(path); + } + + /// + /// Gets the file type of a given path. + /// + /// The path to check + /// The FileType of the path + public static FileType GetFileType(string path) + { + + if (path == "__upone") + return FileType.UpOne; + + if (DirectoryExists(path)) + { + if (Mounts.Contains(GetDirectoryInfo(path))) + return FileType.Mount; + else + return FileType.Directory; + } + + + string ext = path.Split('.')[path.Split('.').Length - 1]; + switch (ext) + { + case "txt": + return FileType.TextFile; + case "pic": + case "png": + case "jpg": + case "bmp": + case "gif": + return FileType.Image; + case "py": + return FileType.Python; + case "mfs": + return FileType.Filesystem; + case "lua": + return FileType.Lua; + case "skn": + return FileType.Skin; + case "json": + return FileType.JSON; + case "sft": + //No, not "sex" - ShiftOS EXecutable. xD + case "sex": + return FileType.Executable; + default: + return FileType.Unknown; + } + } + + /// + /// Opens the specified directory path inside a new File Skimmer frontend. + /// + /// The path to open + public static void OpenDirectory(string path) + { + _fs.OpenDirectory(path); + } + + /// + /// Allows you to prompt the user to select a file, either to open or save, and filter the types of files they can select. + /// + /// An array of file extensions that the user may select. + /// The UI style of the new file select frontend. + /// The Action that is called when the user selects a file. The string argument provided by this call is the path of the file they selected. + public static void GetFile(string[] types, FileOpenerStyle style, Action callback) + { + _fs.GetPath(types, style, callback); + } + + /// + /// Initiates the file skimmer backend with a new middle-end layer. + /// + /// The middle-end IFileSkimmer that'll do all the work. + /// Without a middle-end, the File Skimmer will not function properly. + public static void Init(IFileSkimmer fs) + { + _fs = fs; + } + + public static System.Drawing.Image GetImage(string filepath) + { + return new Bitmap(42, 42); + } + } + + /// + /// Provides primary middle-end functions allowing the File Skimmer API to talk with your frontend. + /// + public interface IFileSkimmer + { + void OpenFile(string filepath); + void GetPath(string[] filetypes, FileOpenerStyle style, Action callback); + void OpenDirectory(string path); + } + + + /// + /// Different types of UI styles for File Openers. + /// + public enum FileOpenerStyle + { + Open, + Save + } + + /// + /// Recognized file types within the ShiftFS engine. + /// + public enum FileType + { + TextFile, + Directory, + Mount, + UpOne, + Image, + Skin, + JSON, + Executable, + Lua, + Python, + Filesystem, + Unknown + } +} -- cgit v1.2.3