예제 #1
0
        protected override async Task Process(HttpListenerContext context)
        {
            context.AddAccessControlHeaders();
            string getRequest = context.Request.Url.AbsolutePath.Remove(0, 1); //Remove first slash

            Stream input = null;
            try
            {
                var mediastoreKey = HttpUtility.UrlDecode(getRequest.Split('/')[0]);
                var mediastoreSection = getRequest.Split('/')[1];
                var mediastoreItem = getRequest.Split('/')[2];
                var mediaStore = new FileMediaStore(mediastoreKey);
                switch(mediastoreSection){
                    case "images":
                       input = new FileStream(Path.Combine(this.MediaStoreRoot, mediastoreKey, mediastoreSection, mediaStore.Images[mediastoreItem]), FileMode.Open);
                       context.Response.AddHeader("Content-Type", MimeTypes.GetMimeType(mediaStore.Images[mediastoreItem]));

                       break;
                   case "audio":
                       input = new FileStream(Path.Combine(this.MediaStoreRoot, mediastoreKey, mediastoreSection, mediaStore.Audio[mediastoreItem]), FileMode.Open);
                       context.Response.AddHeader("Content-Type", MimeTypes.GetMimeType(mediaStore.Audio[mediastoreItem]));

                       break;
                   case "video":
                       input = new FileStream(Path.Combine(this.MediaStoreRoot, mediastoreKey, mediastoreSection, mediaStore.Video[mediastoreItem]), FileMode.Open);
                       context.Response.AddHeader("Content-Type", MimeTypes.GetMimeType(mediaStore.Video[mediastoreItem]));
                       break;
                    case "resoruces":
                       input = new FileStream(Path.Combine(this.MediaStoreRoot, mediastoreKey, mediastoreSection, mediaStore.Resources[mediastoreItem]), FileMode.Open);
                       context.Response.AddHeader("Content-Type", MimeTypes.GetMimeType(mediaStore.Resources[mediastoreItem]));
                       break;
                }
            }
            catch
            {
                input = new MemoryStream(new UTF8Encoding().GetBytes("404 not found"));
            }
           
            byte[] buffer = new byte[1024 * 16];
            int nbytes;
            //await Task.Run(() =>
        //    {
                while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0)
                    context.Response.OutputStream.Write(buffer, 0, nbytes);
        //    });
            input.Close();
            context.Response.OutputStream.Close();
        }
예제 #2
0
        public IMediaStore ToMediaStore(string mediaStoreKey)
        {
            IMediaStore mediaStore = new FileMediaStore(mediaStoreKey);
            using (var webClient = new WebClient())
            {
                for (int i = 0; i < this.Fanarts.Count; i++)
                {
                    var fanart = this.Fanarts[i];
                    string filename = Path.GetFileName(new Uri(fanart).AbsolutePath);
                    try
                    {
                        string downloadPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), $"fanart_{filename}");
                        webClient.DownloadFile(fanart, downloadPath);
                        mediaStore.Images.Add($"fanart_{i}", downloadPath);
                    }
                    catch
                    {
                    }
                }
                for (int i = 0; i < this.Screenshots.Count; i++)
                {
                    var screenshot = this.Screenshots[i];
                    string filename = Path.GetFileName(new Uri(screenshot).AbsolutePath);
                    try
                    {
                        string downloadPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), $"screenshot_{filename}");
                        webClient.DownloadFile(screenshot, downloadPath);
                        mediaStore.Images.Add($"screenshot_{i}", downloadPath);
                    }
                    catch
                    {
                    }
                }
                foreach (KeyValuePair<string, string> boxart in this.Boxarts)
                {

                    string filename = Path.GetFileName(new Uri(boxart.Value).AbsolutePath);
                    try
                    {
                        string downloadPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), $"boxart_{filename}");
                        webClient.DownloadFile(boxart.Value, downloadPath);
                        mediaStore.Images.Add(boxart.Key.Substring(4), downloadPath);//remove 'img_' prefix
                    }
                    catch
                    {
                    }
                }
            }
            return mediaStore;
        }
예제 #3
0
 public FileMediaStoreSection(string sectionName, FileMediaStore mediaStore)
 {
     this.mediaStoreRoot = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Snowflake", "mediastores", mediaStore.MediaStoreKey, sectionName);
     this.SectionName = sectionName;
     this.mediaStoreItems = this.LoadMediaStore();
 }