Esempio n. 1
0
        private String DoUploadTags(IList <String> files, String user, bool includeLog)
        {
            m_Monitor.SetIndeterminate(StringResources.UploadingTags);

            var proxy = System.Net.WebRequest.GetSystemWebProxy();

            // upload in chunks; otherwise request size gets too large
            const int     MAX_FILES_PER_REQUEST = 50;
            int           nrOfRequests          = (files.Count + MAX_FILES_PER_REQUEST - 1) / MAX_FILES_PER_REQUEST;
            StringBuilder logBuilder            = new StringBuilder();

            for (int i = 0; i < nrOfRequests; ++i)
            {
                List <String> filesInRequest = new List <string>();
                for (int j = i * MAX_FILES_PER_REQUEST; j < (i + 1) * MAX_FILES_PER_REQUEST; ++j)
                {
                    if (j >= files.Count)
                    {
                        break;
                    }
                    filesInRequest.Add(files[j]);
                }
                var exportedData = Ares.Tags.TagsModule.GetTagsDB().FilesInterface.ExportDatabaseForGlobalDB(filesInRequest);

                var request = new RestSharp.RestRequest(GlobalDb.UploadPath, RestSharp.Method.POST);
                request.RequestFormat = RestSharp.DataFormat.Json;
                String serializedTagsData = ServiceStack.Text.TypeSerializer.SerializeToString <Ares.Tags.TagsExportedData <Ares.Tags.FileIdentification> >(exportedData);
                request.AddParameter("TagsData", serializedTagsData);
                request.AddParameter("User", ObfuscateUser(user));
                request.AddParameter("IncludeLog", includeLog);
                if (Settings.Default.UseTestDB)
                {
                    request.AddParameter("Test", true);
                }
                var client = new RestSharp.RestClient();
                client.BaseUrl = GlobalDb.BaseUrl;
                client.Timeout = 20 * 1000;
                var response = client.Execute <UploadResponse>(request);

                m_Token.ThrowIfCancellationRequested();
                if (response.ErrorException != null)
                {
                    throw new GlobalDbException(response.ErrorException);
                }
                if (response.Data == null)
                {
                    throw new GlobalDbException(String.IsNullOrEmpty(response.ErrorMessage) ? "No data received" : response.ErrorMessage);
                }
                if (response.Data.Status != 0)
                {
                    throw new GlobalDbException(response.Data.ErrorMessage);
                }
                if (i > 0)
                {
                    logBuilder.AppendLine("---------------------------------------------------------");
                }
                logBuilder.Append(response.Data.Log);
            }
            return(logBuilder.ToString());
        }
Esempio n. 2
0
        private String DoDownloadTags(IList <String> files, out int nrOfFoundFiles, bool includeLog)
        {
            var proxy = System.Net.WebRequest.GetSystemWebProxy();

            nrOfFoundFiles = 0;
            m_Monitor.SetIndeterminate(StringResources.QueryingGlobalDB);
            IList <Ares.Tags.FileIdentification> ids       = Ares.Tags.TagsModule.GetTagsDB().ReadInterface.GetIdentificationForFiles(files);
            List <Ares.Tags.FileIdentification>  usableIds = new List <Tags.FileIdentification>();

            foreach (var id in ids)
            {
                if (!String.IsNullOrEmpty(id.AcoustId))
                {
                    usableIds.Add(id);
                }
                else if (!String.IsNullOrEmpty(id.Artist) && !String.IsNullOrEmpty(id.Title))
                {
                    usableIds.Add(id);
                }
            }
            // download in chunks; otherwise request size gets too large
            const int     MAX_FILES_PER_REQUEST = 50;
            int           nrOfRequests          = (usableIds.Count + MAX_FILES_PER_REQUEST - 1) / MAX_FILES_PER_REQUEST;
            StringBuilder logBuilder            = new StringBuilder();

            for (int i = 0; i < nrOfRequests; ++i)
            {
                m_Monitor.SetIndeterminate(StringResources.QueryingGlobalDB);
                List <Ares.Tags.FileIdentification> idsInRequest = new List <Tags.FileIdentification>();
                for (int j = i * MAX_FILES_PER_REQUEST; j < (i + 1) * MAX_FILES_PER_REQUEST; ++j)
                {
                    if (j >= usableIds.Count)
                    {
                        break;
                    }
                    idsInRequest.Add(usableIds[j]);
                }
                var request = new RestSharp.RestRequest(GlobalDb.DownloadPath, RestSharp.Method.POST);
                request.RequestFormat = RestSharp.DataFormat.Json;
                String serializedFileIds = ServiceStack.Text.TypeSerializer.SerializeToString <List <Ares.Tags.FileIdentification> >(idsInRequest);
                request.AddParameter("FileIdentification", serializedFileIds);
                if (Settings.Default.UseTestDB)
                {
                    request.AddParameter("Test", true);
                }
                var client = new RestSharp.RestClient();
                client.BaseUrl = GlobalDb.BaseUrl;
                client.Timeout = 20 * 1000;
                var response = client.Execute <DownloadResponse>(request);
                m_Token.ThrowIfCancellationRequested();
                if (response.ErrorException != null)
                {
                    throw new GlobalDbException(response.ErrorException);
                }
                if (response.Data == null)
                {
                    throw new GlobalDbException(String.IsNullOrEmpty(response.ErrorMessage) ? "No data received" : response.ErrorMessage);
                }
                if (response.Data.Status != 0)
                {
                    throw new GlobalDbException(response.Data.ErrorMessage);
                }
                if (response.Data.TagsData == null)
                {
                    throw new GlobalDbException("No data received");
                }

                nrOfFoundFiles += response.Data.NrOfFoundFiles;
                m_Monitor.SetIndeterminate(StringResources.AddingTags);
                using (System.IO.StringWriter writer = new System.IO.StringWriter())
                {
                    Ares.Tags.TagsModule.GetTagsDB().FilesInterface.ImportDataFromGlobalDB(response.Data.TagsData, files, writer);
                    if (includeLog)
                    {
                        if (i > 0)
                        {
                            logBuilder.AppendLine("-------------------------------------------------------");
                        }
                        logBuilder.Append(writer.ToString());
                    }
                }
            }
            return(logBuilder.ToString());
        }