private Folder CreateGroupFolder(SerializationObject.Group group) { string gid = group.Id.ToString(); var curFolder = new Folder(group.Name); curFolder.Property.Add("gid", gid); Folder subFolder = new Folder("Аудиозаписи"); subFolder.Property.Add("type", "AudioApi.ExecuteGetAlbums"); subFolder.Property.Add("inStorage", "1"); subFolder.Property.Add("gid", gid); curFolder.ChildsAdd(subFolder); subFolder = new Folder("Фотографии", new Loader.VKontakte.Photos.GetAlbums(-group.Id)); curFolder.ChildsAdd(subFolder); subFolder = new Folder("Стена(beta)", new Loader.VKontakte.Wall.Get(-group.Id)); curFolder.ChildsAdd(subFolder); curFolder.ChildsAdd( new PlainText( "Открыть в браузере.url", PlainText.InternetShortcut("https://vk.com/club" + gid) ) ); curFolder.IsLoaded = true; return(curFolder); }
public override bool _LoadFile(Files.Folder file) { if (file.Property["type"] == "groups.get") { file.ChildsAdd(new Files.Settings("Добавить группу.lnk")); file.ChildsAdd( new Files.SettingsXls( "VKDirvePathData.xml", "Добавление группы", "Введите ссылку на группу или ее идентификатор. Например https://vk.com/club47348352", "Не удалось найти такую группу.", "Такая группа уже существует." )); JObject apiResult = (JObject) Vkapi.Instance.StartTaskSync(new ApiQuery("groups.get", new Dictionary <string, string> { { "extended", "1" } })); JArray items = (JArray)apiResult.GetValue("items"); List <int> gruopIds = new List <int>(); foreach (JObject item in items) { SerializationObject.Group group = item.ToObject <SerializationObject.Group>(); file.ChildsAdd(CreateGroupFolder(group)); gruopIds.Add(group.Id); } string gids = VkStorage.Get(StorageKey); if (gids.Length > 0) { JArray values = (JArray) Vkapi.Instance.StartTaskSync(new ApiQuery("groups.getById", new Dictionary <string, string> { { "group_ids", gids.Replace('\n', ',') } })); foreach (JObject item in items) { SerializationObject.Group group = item.ToObject <SerializationObject.Group>(); if (gruopIds.IndexOf(group.Id) > -1) { continue; } file.ChildsAdd(CreateGroupFolder(group)); } } } else if (file.Property["type"] == "AudioApi.ExecuteGetAlbums") { //// 15:Access denied: group audio is disabled try { AudioApi.ExecuteGetAlbums(new Dictionary <string, string>() { { "owner_id", "-" + file.Property["gid"] } }, file.Childs); } catch (Exception e) { if (e.Data.Contains("code") && e.Data["code"].ToString() == "15") { // 15:Access denied: group photos are disabled var readmePlainText = new PlainText("Аудиозаписи отключены.txt"); readmePlainText.SetText(PlainText.GetSubscript()); file.ChildsAdd(readmePlainText); return(true); } return(false); } } else if (file.Property["type"] == "audio.getInAlbum") { AudioApi.LoadMp3(new Dictionary <string, string>() { { "gid", file.Property["gid"] }, { "album_id", file.Property["album_id"] } }, file.Childs); } else if (file.Property["type"] == "wait") { // Он там грузится в паралельном потоке. Подождать нужно int i = 0; while (!file.IsLoaded && i < 20) // 2 сек максимум { i++; // todo сделать перехват фатала. System.Threading.Thread.Sleep(100); } // Подождать не вышло, выводим что есть } return(true); }
public override NtStatus CreateDirectory(Folder file, string filename, DokanFileInfo info) { // https://vk.com/club47348352 // https://vk.com/vkdriveapp // https://vkontakte.ru/club47348352 filename = Regex.Replace(filename, @"http(s|)://.*/", ""); // хавает любое занчение: 47348352, club47348352, vkdriveapp if (filename.Length == 0) { return(DokanResult.Error); } JArray items; try { items = (JArray) VKAPI.Vkapi.Instance.StartTaskSync(new VKAPI.ApiQuery("groups.getById", new Dictionary <string, string>() { { "group_id", filename } })); } catch (Exception e) { if (e.Data.Contains("code") && e.Data["code"].ToString() == "125") { Console.WriteLine(@"Invalid group id"); } return(DokanResult.Error); } ushort count = 0; foreach (JObject item in items) { SerializationObject.Group group = item.ToObject <SerializationObject.Group>(); string gid = group.Id.ToString(); bool isDooble = false; foreach (VFile curFile in file.Childs) { if (curFile.GetType() == typeof(Folder)) { // проверка вхождения ключа нужна при разделении на каталоги. В этом случае сложим группу в корень после перезагрузки все исправится if (((Folder)curFile).Property.ContainsKey("gid") && ((Folder)curFile).Property["gid"] == gid) { isDooble = true; break; } } } if (isDooble) { count++; continue; } if (group.Deactivated != null) { continue; } API.VkStorage.Join(StorageKey, gid); file.ChildsAdd(CreateGroupFolder(group)); count++; } if (count > 0) { return(DokanResult.Success); } return(DokanResult.Error); }