Пример #1
0
        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 + "]");
                }
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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("Спасибо :)");
        }