using System; using System.Collections.Generic; using Nancy; using NzbDrone.Api.Extensions; using NzbDrone.Common; namespace NzbDrone.Api.Directories { public class DirectoryModule : NzbDroneApiModule { private readonly IDiskProvider _diskProvider; public DirectoryModule(IDiskProvider diskProvider) : base("/directories") { _diskProvider = diskProvider; Get["/"] = x => GetDirectories(); } private Response GetDirectories() { if (!Request.Query.query.HasValue) return new List().AsResponse(); string query = Request.Query.query.Value; IEnumerable dirs = null; try { //Windows (Including UNC) var windowsSep = query.LastIndexOf('\\'); if (windowsSep > -1) { dirs = _diskProvider.GetDirectories(query.Substring(0, windowsSep + 1)); } //Unix var index = query.LastIndexOf('/'); if (index > -1) { dirs = _diskProvider.GetDirectories(query.Substring(0, index + 1)); } } catch (Exception) { //Swallow the exceptions so proper JSON is returned to the client (Empty results) return new List().AsResponse(); } if (dirs == null) throw new Exception("A valid path was not provided"); return dirs.AsResponse(); } } }