Aurora.Music
Aurora.Music copied to clipboard
支持 OneDrive Files On-Demand
I'm submitting a...
- Feature request
Current behavior
只有已经位于本地的文件能够被索引。
Expected behavior
对存放于 OneDrive 上的文件建立索引,进行播放时按需获取文件。
Minimal reproduction of the problem with instructions
Environment
App Version(s):
Windows 10 Build Number:
- [ ] Fall Creators Update (16299)
- [ ] Spring Creators Update (17133)
- [ ] Insider Build (build number: )
Device form factor:
- [ ] Desktop
- [ ] Mobile
- [ ] Xbox
- [ ] Surface Hub
- [ ] IoT
参考 https://docs.microsoft.com/en-us/windows/uwpcommunitytoolkit/services/onedrive
using Microsoft.Toolkit.Services.OneDrive;
OneDriveService.ServicePlatformInitializer = new Microsoft.Toolkit.Uwp.Services.OneDrive.Platform.OneDriveServicePlatformInitializer();
OneDriveService.Instance.Initialize("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", new[] { Microsoft.Toolkit.Services.Services.MicrosoftGraph.MicrosoftGraphScope.FilesReadAll });
await OneDriveService.Instance.LoginAsync();
var rf = await OneDriveService.Instance.RootFolderAsync();
var mf = await rf.GetFolderAsync("Music");
var files = await getFile(mf);
var musicPropertis = files.Select(f => f.OneDriveItem.Audio);
async Task<List<OneDriveStorageFile>> getFile(OneDriveStorageFolder folder)
{
var items = await folder.GetItemsAsync(1000);
var list = new List<OneDriveStorageFile>(items.Count);
var getFolder = new List<Task<List<OneDriveStorageFile>>>();
foreach (var item in items)
{
if (item.IsFile())
list.Add((OneDriveStorageFile)item);
else if (item.IsFolder())
getFolder.Add(getFile((OneDriveStorageFolder)item));
else
continue;// IsOneNote
}
foreach (var item in getFolder)
{
list.AddRange(await item);
}
return list;
}
试了一下,这样获取了我 OneDrive 里 500 多首歌花了 7.5 s
其实系统里面有一个 wrapper 来着,就是 OneDrive 如果有音乐文件夹的话会包含到音乐库中,去遍历音乐库的时候就能找到这些 StorageFile
, 这些文件如果只检索属性就不会下载下来,打开文件就会自动下载,当然程序里面都一视同仁是 StorageFile
.
所以我想只要包含了这个云端库就可以了,使用 Onedrive Service 反而会过度设计。像 Groove 就是这么做的。
并不能获取到属性。。。
我的音乐库就包含了Onedrive
啊我搞错了搞错了,只能遍历到有这个文件,其他的什么都获取不到,那我就加上 Onedrive Service 吧
Groove 就是用的 Mircosoft Graph Api 不仅如此,他播放OneDrive文件以后还是缓存在自己的文件夹底下的
我正在写
Thanks for implementing this. I enabled it, signed in to OneDrive and then nothing else happened. What am I supposed to see or how does this feature work? I'd love to stream from OneDrive, just like Groove.
@domcote Folders should be included in the system library or in the app library, just the same as local files.
This feature only requests metadata from OneDrive api when a file that is marked as a OneDrive file placeholder, is found. No changes to file search logic.