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 } }