Skip to content

Commit 6ebee6f

Browse files
committed
/api/os/*** added to resolve ShokoAnime/Shoko-WebUI#36
1 parent de113af commit 6ebee6f

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

JMMServer/API/APIv2_core_Module.cs

+80
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ public APIv2_core_Module() : base("/api")
143143
Get["/webui/update/unstable"] = _ => { return WebUIUnstableUpdate(); };
144144
Get["/webui/latest/unstable"] = _ => { return WebUILatestUnstableVersion(); };
145145

146+
// 16. OS-based operations
147+
Get["/os/folder/base"] = _ => { return GetOSBaseFolder(); };
148+
Post["/os/folder"] = x => { return GetOSFolder(x.folder); };
149+
Get["/os/drives"] = _ => { return GetOSDrives(); };
146150
}
147151

148152
#region 1.Folders
@@ -1485,5 +1489,81 @@ internal string WebUIGetVersionsTag(bool stable)
14851489

14861490
#endregion
14871491

1492+
#region 16.OS-based operations
1493+
1494+
/// <summary>
1495+
/// Return OSFolder object that is a folder from which jmmserver is running
1496+
/// </summary>
1497+
/// <returns></returns>
1498+
private object GetOSBaseFolder()
1499+
{
1500+
OSFolder dir = new OSFolder();
1501+
dir.full_path = Environment.CurrentDirectory;
1502+
System.IO.DirectoryInfo dir_info = new DirectoryInfo(dir.full_path);
1503+
dir.dir = dir_info.Name;
1504+
dir.subdir = new List<OSFolder>();
1505+
1506+
foreach (DirectoryInfo info in dir_info.GetDirectories())
1507+
{
1508+
OSFolder subdir = new OSFolder();
1509+
subdir.full_path = info.FullName;
1510+
subdir.dir = info.Name;
1511+
dir.subdir.Add(subdir);
1512+
}
1513+
return dir;
1514+
}
1515+
1516+
/// <summary>
1517+
/// Return OSFolder object of directory that was given via
1518+
/// </summary>
1519+
/// <param name="folder"></param>
1520+
/// <returns></returns>
1521+
private object GetOSFolder(string folder)
1522+
{
1523+
OSFolder dir = this.Bind();
1524+
if (!String.IsNullOrEmpty(dir.full_path))
1525+
{
1526+
System.IO.DirectoryInfo dir_info = new DirectoryInfo(dir.full_path);
1527+
dir.dir = dir_info.Name;
1528+
dir.subdir = new List<OSFolder>();
1529+
1530+
foreach (DirectoryInfo info in dir_info.GetDirectories())
1531+
{
1532+
OSFolder subdir = new OSFolder();
1533+
subdir.full_path = info.FullName;
1534+
subdir.dir = info.Name;
1535+
dir.subdir.Add(subdir);
1536+
}
1537+
return dir;
1538+
}
1539+
else
1540+
{
1541+
return HttpStatusCode.BadRequest;
1542+
}
1543+
}
1544+
1545+
/// <summary>
1546+
/// Return OSFolder with subdirs as every driver on local system
1547+
/// </summary>
1548+
/// <returns></returns>
1549+
private object GetOSDrives()
1550+
{
1551+
string[] drives = System.IO.Directory.GetLogicalDrives();
1552+
OSFolder dir = new OSFolder();
1553+
dir.dir = "/";
1554+
dir.full_path = "/";
1555+
foreach (string str in drives)
1556+
{
1557+
OSFolder driver = new OSFolder();
1558+
driver.dir = str;
1559+
driver.full_path = str;
1560+
dir.subdir.Add(driver);
1561+
}
1562+
1563+
return dir;
1564+
}
1565+
1566+
#endregion
1567+
14881568
}
14891569
}

JMMServer/API/Model/OSFolder.cs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Collections.Generic;
2+
3+
namespace JMMServer.API.Model
4+
{
5+
public class OSFolder
6+
{
7+
public string dir { get; set; }
8+
public string full_path { get; set; }
9+
public List<OSFolder> subdir { get; set; }
10+
}
11+
}

JMMServer/JMMServer.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@
262262
<Compile Include="API\Model\Counter.cs" />
263263
<Compile Include="API\Model\Creditentials.cs" />
264264
<Compile Include="API\Model\Database.cs" />
265+
<Compile Include="API\Model\OSFolder.cs" />
265266
<Compile Include="API\Model\ImagePath.cs" />
266267
<Compile Include="API\Model\QueueInfo.cs" />
267268
<Compile Include="API\Model\RecentFile.cs" />

0 commit comments

Comments
 (0)