Пример #1
0
        public static int GetAlternativeCode(Guid ListViewId, Guid DestinationViewId)
        {
            int key = ListViewId.GetHashCode();

            if (!cachelist.ContainsKey(key))
            {
                AlternativeView record = new AlternativeView();
                record.ListViewId        = ListViewId;
                record.DestinationViewId = DestinationViewId;
                record.Id      = key;
                cachelist[key] = record;
                return(key);
            }
            else
            {
                while (cachelist.ContainsKey(key))
                {
                    var result = cachelist[key];
                    if (result.ListViewId == ListViewId && result.DestinationViewId == DestinationViewId)
                    {
                        return(result.Id);
                    }
                    else
                    {
                        key = key.GetHashCode();
                    }
                }
                AlternativeView record = new AlternativeView();
                record.ListViewId        = ListViewId;
                record.DestinationViewId = DestinationViewId;
                record.Id      = key;
                cachelist[key] = record;
                return(key);
            }
        }
Пример #2
0
        private async Task <bool> ConvertToFileAsync(
            Connection api,
            string tmpInput,
            string outputExtension,
            string newFileName,
            FileModel fileModel,
            string arguments,
            string contentType
            )
        {
            string tmpOutput = null;

            if (!string.IsNullOrWhiteSpace(outputExtension))
            {
                tmpOutput = tmpInput + outputExtension;
            }

            if (!string.IsNullOrWhiteSpace(fileModel.Name) &&
                !string.IsNullOrWhiteSpace(newFileName))
            {
                UseVar(ref newFileName, "original", fileModel.Name);
            }

            if (FFMPEGExecute(tmpInput, tmpOutput, arguments))
            {
                if (!string.IsNullOrWhiteSpace(newFileName))
                {
                    Console.WriteLine($"Uploading {newFileName}");

                    var newFile = await api.File.FileModelFromLocalFileAsync(
                        tmpOutput, new FileIdentifier(fileModel.Identifier as FolderIdentifier, null));

                    newFile.Name     = newFileName;
                    newFile.MimeType = contentType;
                    newFile.Write(MetadataKeyConstants.HIDDEN, true);
                    newFile.Write(MetadataKeyConstants.CHILDOF, fileModel.Identifier);

                    newFile = await api.File.UploadLocalFileAsync(tmpOutput, newFile);

                    var alternativeView = new AlternativeView()
                    {
                        FileIdentifier = newFile.Identifier,
                        MimeType       = contentType,
                        Name           = "transcode"
                    };

                    await base.TagAlternativeView(fileModel.Identifier, newFile.Identifier, alternativeView);
                }
                return(true);
            }

            return(false);
        }
Пример #3
0
        protected override async Task Process()
        {
            var originalFileModel = await GetFileAsync();

            await base.DownloadAsync();

            var pdfFileName = Path.GetTempFileName();

            Logger.LogInformation("uploading to unoconv");

            using (var content = new MultipartFormDataContent(
                       "Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture))
                   )
                using (var fs = new FileStream(base.LocalFilePath, FileMode.Open))
                {
                    content.Add(new StreamContent(fs), "file", originalFileModel.Name);

                    using (var response = await Client.PostAsync(Configuration.UnoConvUri, content))
                    {
                        response.EnsureSuccessStatusCode();

                        using (var pdfStream = await response.Content.ReadAsStreamAsync())
                            using (var output = new FileStream(pdfFileName, FileMode.Open, FileAccess.Write))
                                await pdfStream.CopyToAsync(output);
                    }

                    var newFile = await API.File.FileModelFromLocalFileAsync(
                        pdfFileName,
                        new FileIdentifier(
                            originalFileModel.Identifier as FolderIdentifier,
                            null
                            )
                        );

                    newFile.Name     = Path.GetFileNameWithoutExtension(originalFileModel.Name) + ".pdf";
                    newFile.MimeType = "application/pdf";
                    newFile.Write(MetadataKeyConstants.HIDDEN, true);
                    newFile.Write(MetadataKeyConstants.CHILDOF, originalFileModel.Identifier);

                    newFile = await API.File.UploadLocalFileAsync(pdfFileName, newFile);

                    var alternativeView = new AlternativeView()
                    {
                        FileIdentifier = newFile.Identifier,
                        MimeType       = "application/pdf",
                        Name           = "pdf"
                    };

                    await base.TagAlternativeView(originalFileModel.Identifier, newFile.Identifier, alternativeView);
                }
        }
Пример #4
0
        private async Task UpdateAlternativeViewMetadata(FileModel original, FileModel newFile, Image <Rgba32> image, ImageGenMessage config)
        {
            var alternativeView = new AlternativeView()
            {
                FileIdentifier = newFile.Identifier,
                Height         = image.Height,
                Width          = image.Width,
                ImageFormat    = config.Format,
                IsGreyscale    = config.IsGreyscale,
                Quality        = config.Quality,
                MimeType       = config.AlternativeViewType,
                SizeType       = config.AlternativeViewSizeType
            };

            await base.TagAlternativeView(original.Identifier, newFile.Identifier, alternativeView);
        }
Пример #5
0
        protected async Task TagAlternativeView(FileIdentifier originalFileIdentifier, FileIdentifier newFileIdentifier, AlternativeView alternativeView)
        {
            await this.API.ConcurrencyRetryBlock(async() =>
            {
                var originalFile = await API.File.GetAsync(originalFileIdentifier);

                var views = originalFile.Read <List <AlternativeView> >(MetadataKeyConstants.ALTERNATIVE_VIEWS) ?? new List <AlternativeView>();
                views.Add(alternativeView);
                originalFile.Write(MetadataKeyConstants.ALTERNATIVE_VIEWS, views);

                await API.File.PutAsync(originalFile);
            });
        }