コード例 #1
0
        public async Task <bool> ProcessEntry(string url, string processId, PerformContext context)
        {
            var connection = new HubConnectionBuilder()
                             .WithUrl($"{_appSettings.RealtimeUrl}/publicupdates")
                             .Build();
            await connection.StartAsync();

            var fileName   = $"{processId}.mp3";
            var outputFile = Path.Combine(Path.GetTempPath(), fileName);

            var processResult = await _urlProcessService.DownloadAudioV2(processId, url, outputFile, (e) => {
                connection.InvokeAsync("SendMessage", processId, "processing", e);
                return(true);
            });

            if (!processResult || !File.Exists(outputFile))
            {
                return(false);
            }

            var info = await _downloader.GetInfo(url, string.Empty);

            var localImageFile = await HttpUtils.DownloadFile("https://cdn.podnoms.com/static/images/pn-back.jpg");

            _tagger.CreateTags(
                outputFile,
                localImageFile,
                _downloader.RawProperties?.Title ?? "Downloaded by PodNoms",
                "Downloaded by PodNoms",
                "Downloaded By PodNoms",
                "Downloaded By PodNoms",
                "Downloaded By PodNoms");


            var cdnFilename  = $"processed/{fileName}";
            var uploadResult = await _fileUploader.UploadFile(
                outputFile, "public", cdnFilename, "audio/mpeg",
                async (p, t) => {
                var progress = new ProcessingProgress(new TransferProgress {
                    Percentage = p,
                    TotalSize  = t.ToString()
                })
                {
                    Progress         = "Caching",
                    ProcessingStatus = ProcessingStatus.Uploading.ToString()
                };
                await connection.InvokeAsync("SendMessage", processId, "processing", progress);
            }
                );

            var message = new ProcessingProgress(null)
            {
                Payload          = Flurl.Url.Combine(_storageSettings.CdnUrl, "public", cdnFilename),
                Progress         = "Processed",
                ProcessingStatus = ProcessingStatus.Processed.ToString()
            };
            await connection.InvokeAsync("SendMessage", processId, "processing", message);

            return(true);
        }
コード例 #2
0
        // [MaximumConcurrentExecutions(1)]
        // [DisableConcurrentExecution(timeoutInSeconds: 60 * 60 * 2)]
        public async Task <bool> Execute(ParsedItemResult item, Guid playlistId, PerformContext context)
        {
            _setContext(context);
            if (item is null || string.IsNullOrEmpty(item.VideoType))
            {
                return(false);
            }

            Log($"Starting process item:\n\t{item.Id}\n\t{item.Title}\n\thttps://www.youtube.com/watch?v={item.Id}");

            var playlist = await _playlistRepository.GetAsync(playlistId);

            var url = item.VideoType.ToLower().Equals("youtube") ? $"https://www.youtube.com/watch?v={item.Id}" :
                      item.VideoType.Equals("mixcloud") ? $"https://mixcloud.com/{item.Id}" :
                      string.Empty;

            if (string.IsNullOrEmpty(url))
            {
                LogError($"Unknown video type for ParsedItem: {item.Id} - {playlist.Id}");
            }
            else
            {
                Log($"Getting info");
                var info = await _audioDownloader.GetInfo(url, playlist.Podcast.AppUserId);

                if (info != RemoteUrlType.Invalid)
                {
                    Log($"URL is valid");

                    var podcast = await _podcastRepository.GetAsync(playlist.PodcastId);

                    var uid = Guid.NewGuid();
                    Log($"Downloading audio");
                    var localFile = Path.Combine(Path.GetTempPath(), $"{System.Guid.NewGuid()}.mp3");
                    try {
                        var entry = new PodcastEntry {
                            SourceUrl        = url,
                            ProcessingStatus = ProcessingStatus.Uploading,
                            Playlist         = playlist,
                            Podcast          = podcast
                        };
                        await _processor.GetInformation(entry, podcast.AppUserId);

                        podcast.PodcastEntries.Add(entry);
                        await _unitOfWork.CompleteAsync();

                        var result = await _preProcessor.PreProcessEntry(podcast.AppUser, entry);

                        return(result == EntryProcessResult.Succeeded);
                    } catch (AudioDownloadException e) {
                        //TODO: we should mark this as failed
                        //so we don't continuously process it
                        LogError(e.Message);
                    }
                }
                else
                {
                    LogError($"Processing playlist item {item.Id} failed");
                    return(false);
                }
            }

            return(true);
        }