public async Task Create(string sid) { ResetSessionData(); if (_CheckInputSID(sid)) { Sid = sid; try { await App.Net.Get("http://spaces.ru/settings/?sid=" + sid); var temp = App.Net.GetCookieValueByName("user_id"); if (temp != string.Empty) { UserId = temp; Valid = true; UserName = await MixxerApi.GetUserNameById(UserId); App.MaxFileSize = int.Parse(await MixxerApi.GetMaxUploadSize(sid)) * 1048576; } } catch (Exception e) { App.Err.SetError(Error.Codes.TryCommonFail, ToString(), "Session __constr err [e: " + e.Message + "]"); } } }
private async void CChangeFileDir(object sender) { CLock(); VLockControl(sender); var dirId = ListViewDirs.SelectedItems[0].Text; var dict = await MixxerApi.GetMusicDirs(App.Session.UserName, dirId); dict.Insert(0, new KeyValuePair <string, string>("0", "< корневая папка >")); CShowErrorIfNeeded(); VUploadDirsSet(dict); VUnlockControl(sender); CUnlock(); }
private static async Task UploadMusic(IReadOnlyList <string> files, IProgress <int> progressTotal, IProgress <HttpProgressEventArgs> progressCurrent, IProgress <string> currentWork, IProgress <string> log, string dirId, CancellationToken ct) { const int maxErrCount = 3; EventHandler <HttpProgressEventArgs> currnetProgressHandler = (s, e) => { progressCurrent.Report(e); }; // Fix spaces root dir if (dirId == "0") { dirId = "-" + App.Session.UserId; } // Init GUI progressbars progressTotal.Report(0); App.Net.ProgressHandler.HttpSendProgress += currnetProgressHandler; log.Report("Запуск..."); // Init app int i = 0, errorsCount = 0; while (i < files.Count && errorsCount < maxErrCount) { ct.ThrowIfCancellationRequested(); VProgressBarTaskBarSetState(TaskbarProgress.TaskbarStates.Normal); log.Report("__________________________"); try { var f = new FileInfo(files[i]); log.Report("Файл #" + (i + 1) + ": " + f.Name); currentWork.Report("Получаем URL загрузки..."); progressCurrent.Report(new HttpProgressEventArgs(0, null, 0, 0)); var url = await MixxerApi.GetUploadUrl(App.Session.Sid + "_" + i); if (url == string.Empty || App.Err.LastErrorCode == Error.Codes.WrongParseData) { log.Report("[Ошибка " + errorsCount + "] Ссылка не получена..."); errorsCount++; continue; } log.Report("Ссылка для файла получена..."); var keys = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("add", "1"), new KeyValuePair <string, string>("dir", dirId), new KeyValuePair <string, string>("sid", App.Session.Sid), new KeyValuePair <string, string>("file", "1"), new KeyValuePair <string, string>("name", App.Session.UserName), new KeyValuePair <string, string>("p", "1"), new KeyValuePair <string, string>("LT", "") }; // need for void error "too fast" from spaces await Task.Delay(2500, ct); currentWork.Report("Загружаем " + f.Name + "..."); log.Report("Начало загрузки..."); var opCode = await App.Net.PostMultipart(url, keys, new KeyValuePair <string, string>("myFile", f.ToString())); log.Report("Загрузка заврешена (" + App.Net.LastCodeAnswer + ")"); log.Report("Результат: " + Error.GetMessage(opCode)); if (opCode == Error.Codes.NoError) { progressTotal.Report(i + 1); i++; VProgressBarTaskBarSetValue(i, files.Count); } else { log.Report("Пробуем ещё раз... (всего ошибок: " + errorsCount + ")"); errorsCount++; } await Task.Delay(2500, ct); } catch (OperationCanceledException) { log.Report("Выполняется отмена операции..."); break; } catch (Exception e) { log.Report("Ошибка при загрузке (" + e.Message + ") от (" + e.Source + ")" + e.HResult); errorsCount++; } } if (errorsCount == maxErrCount) { log.Report("Загрузка остановлена из-за большого количества ошибок...\n" + "(результат: " + i + "/" + files.Count + ")"); } else { log.Report("Загрузка завершена без ошибок"); } VProgressBarTaskBarSetState(TaskbarProgress.TaskbarStates.NoProgress); App.Net.ProgressHandler.HttpReceiveProgress -= currnetProgressHandler; currentWork.Report("Завершено..."); log.Report("Спасибо :)"); }