Skip to content

Commit

Permalink
Merge pull request #78 from PlexRipper/dev
Browse files Browse the repository at this point in the history
Release 0.8.6
  • Loading branch information
Plex Ripper committed Sep 28, 2021
2 parents e9a06c7 + c9fc3e3 commit 59c93ac
Show file tree
Hide file tree
Showing 103 changed files with 2,263 additions and 1,223 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/dev-test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: .NET
name: Execute Unit Tests

on:
workflow_dispatch:
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/master.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Publish Docker image on push 'master' branch

'on':
push:
branches:
Expand All @@ -15,3 +16,20 @@ jobs:
username: '${{ secrets.DOCKER_USERNAME }}'
password: '${{ secrets.DOCKER_PASSWORD }}'
tags: "latest"

PushContainerReadme:
runs-on: ubuntu-latest
name: Push README to Docker Hub
steps:
- name: git checkout
uses: actions/checkout@v2
- name: push README to Dockerhub
uses: christian-korneck/update-container-description-action@v1
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}'
DOCKER_PASS: '${{ secrets.DOCKER_PASSWORD }}'
with:
destination_container_repo: plexripper/plexripper
provider: dockerhub
short_description: 'my short description 😊'
readme_file: 'README.md'
247 changes: 28 additions & 219 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,222 +1,31 @@
## [0.7.0] - 2021-02-06
### Added
- Created generic v-treeview-table.
- Added keys (plexIds) to the downloadTask metadata

### Changed
- PlexMedia entities are now updated instead of "remove everything and re-add", this will preserve the Ids of media and allow for more reliance on that.
- DownloadTasks are now nested displayed on the download page
- Removed the MediaTypeIcon filter and replaced it with a component
- Added the TvShowId to the TvShowEpisode entity
- Updated NPM packages in the client
- The update settings now returns the current settings object

### Fixed
- Fixed the UnitTests of the createUpdateOrDelete functions for tvShows and movies.
- Fixed the outlines of plexButtons
- Fixed the download button not awaiting
- Fixed the selection of the MediaTable not working, will now also work when select all is pressed
- Fixed the plexServers and related data not being deleted when an account is removed that was the last one which had access.

### Optimized
- The data for the mediaTable that was converted in the client is now generated on the server, improving performance of the client.
- Merged the PlexMovieDTO, PlexTvShowDTO into 1 PlexMediaDTO
- The new VTreeViewTable is now used in the MediaTable
- Moved away from the vuex settings store and settings are now working with the observable store.
- Removed several dependancies on activeAccountId
- Completed refactor of the settings in the observable store
- Went through all subscriptions and ensured they are disposed properly
- Properly imported all lodash functions, no more "_"


## [0.6.3] - 2021-01-24
### Fixed
- Fixed the downloadPreview of the media not shown correctly based on the selection.
- Fixed the downloadTaskCreation progressbar freezing on 0% due to no updates.

## [0.6.2] - 2021-01-24
### Fixed
- Fixed the movie poster view not being able to download.
## [0.8.6]

## [0.6.1] - 2021-01-23
### Changed
- Moved several properties in the Downloadtask entity into it's metadata field.
### Fixed
- Fixed the downloadProcess not working due to major refactoring
- Fixed some warnings int he Controllers about fields in the baseController being overwritten


## [0.6.0] - 2021-01-21
### Added
- Added an Alphabet navigation to the tableView and posterView in the library navigation.

### Changed
- The download size is now shown in the downloadConfirmation dialog.
- The downloadButton will show to be loading in the tableview when a tvShow has not been retrieved yet.
- Polished the user interface of the downloadConfirmation window.
- PlexMedia derived entities now have a reference to the owning plexServer, this saves the trouble of retrieving the PlexLibrary first to get the server.

### Fixed
- Fixed the downloadButton being too small in tableMode when navigating a library.
- Fixed the movie fileSize not being shown correctly in tableViewMode.
- Fixed the selecting of tableRows in the tableview when viewing a library, this was giving incorrect results back.
- Fixed the movie media rows in the tableView wrongly retrieving season/episode data.
- Fixed the missing posters showing as if they were still loading, now the will show a default empty image.
- Fixed the unneeded health-ping to the back-end, this is now disabled.
- Fixed back-button and close-button of the media details overview.

### Optimized
- Removed unneeded data from PlexMedia entity that was stored in the database but never used.
- Optimized the image paths of PlexMedia entity, now they are generated instead of stored. Reduces database storage of image paths by 99%.
- Optimized the mapping of PlexMedia data coming from the external PlexServers.
- Optimized the retrieval of thumbnail and banner functionality.
- Refactored the generating of the downloadPreview shown in the downloadConfirmation dialog.
- Changed the requesting of thumbnails to a GET request.
- Removed unneeded values from the PlexMedia DTO's send to the front-end.
- Improved the mediaDetailScreen.
- ThumbnailUrl results are now shared and stored in the Store.
- The mediaTable now returns downloadCommands based on the type, and combines an entire season worth of episodes, into just the seasonId to be send.


## [0.5.0] - 2021-01-18
### Added
- Added a MediaController to request individual mediaData.
- Added more documentation in PlexLibrary.

### Changed
- Refactored the PlexApiClient and integrated Polly to have a more robust ApiClient.
- Refactored the ResultExtensions.Logging and added LogDebug and LogInformation to results.
- Added universal string <-> int conversion in AutoMapper.
- Refactored the RatingKey, Key etc in media, now it's just an int Key and removed the other non-sense.
- PlexTvShowSeason and PlexTvShowEpisoide now have a ParentKey, this is used to connect everything together when refreshing the library.
- Refactored the refreshing of a TvShow library, this is now way faster and does away with the individual season/episode requests. Now it only requires 3 API requests total and doesnt look like a DDOS when refreshing a library.
- Major performance improvements for showing the library contents in the front-end.
- Requesting of all episodes now happens in batches as not to overload the server.
- Moved certain PlexLibrary database fields into a json MetaData field and added ways to only calculate the metadata fields once in order to increase performance.
- Refreshing a library now doesn't return an updated plexLibrary anymore, in certain cases this would be done multiple times and wasting performance.
- Added a system to return only top-level media when navigating a Plex library in the front end, when a tvShow is expanded, only then will the full data be requested from the back-end. This was done to handle huge libraries which would slow down performance considerably.

### Fixed
- Fixed the refreshProgressbar in the mediaoverview hanging when failing to refresh a library.
- Fixed the episodes not downloading due to a missing TvShowTitle when creating downloadTasks.
- Fixed the default value for UI => Date And Time => TimeFormat not being correct.
- Fixed the updating of a PlexAccount which was always returning an error.
- Fixed the false "Could not be displayed" error when the library is still loading.


## [0.4.3] - 2020-12-28

### Fixed

- Possible build fix for IHttpClientFactory not being referenced.

## [0.4.2] - 2020-12-28

### Changed

- Enabled migrations for the database.
- Logging will now be written to file in `/config/logs`.
- Created a static class `FileSystemPaths` for OS paths.

## [0.4.1] - 2020-12-28

### Added

- Added Polly package to start integrating resilience

### Changed

- Changed download commands in the DownloadManager to async due to the async dependency of ClearWorkers.
- Refactored the dependency chain between DownloadManager, DownloadClient and DownloadWorker to be instantiated by Autofac
- HttpClients are now instantiated through IHttpClientFactory

### Fixed

- Fixed the LibrarySize not being shown in the front-end
- Fixed the DownloadTask creating invalid path if the media title contained invalid characters.

## [0.4.0] - 2020-12-28

### Added

- Downloads will now be temporally stored in a sub-folder based on media type.
- Multiple selected downloads in table view mode can now be downloaded in one go, making downloading multiple tvShows or movies a lot easier.

### Changed

- Lowered the maximal parallel api requests to refresh a tvShow library from 10 to 5 in order to not be blocked by the server.
- Added a sanitization function when creating download paths to prevent errors on invalid folder names.
- Major refactor on the download queue handling and fixed several bugs, greatly improving performance and error handling.
- Refactored the Stop and Clear download task commands from front to back.
- The footer of a downloadTable in the front-end is now hidden.
- The DownloadBar commands are now disabled when there is no selection.
- Cleaned-up the MediaOverviewComponent and VerticalButtonComponent.
- Fixed the width of the vertical buttons in the MediaOverviewBar such that they are equal width and distance now.
- The confirmation dialog with an overview of what will be downloaded is now much more efficient and works with whatever is selected.

### Fixed

- Fixed the download client not deleting downloadTasks from the front-end.
- Fixed the destination folder naming being wrong with tvShows without seasons, such as Anime.
- Fixed the downloadCreationProgress update to the front-end.
- Fixed the spacing that was in download speed, from "45Mb /s" to "45Mb/s".
- The download confirmation dialog now has the correct scrollbar styling.

### Removed

- Removed the singular delete function to delete a downloadTask.
- Deleted the MovieTable and TvShowTable components as they are obsolete.

## [0.3.0] - 2020-12-23

### Added

- Added media icons to the download confirmation dialog.
- Tv shows now show their media size in the MediaTableView.

### Changed

- Cleaned-up the default-layout code in the front-end.
- Moved the files related to path retrieval of the host system to the FileSystem project.

### Fixed

- Fixed the setup page not being scroll-able when viewing with limited viewport height.
- Fixed when going to a music library that nothing would happen, now a page will show that it is currently not supported.
- Fixed the UI for the path settings and DirectoryBrowser

## [0.2.0] - 2020-12-22

### Added

- Added CHANGELOG.md file
- Added PlexRipper version to the front-end in the home button.
- Added the FileSize.vue component and moved the PrettyBytes filter there.
- The total media size of a Plex library is now shown in the media bar on the library page.

### Changed

- Changed the dockerFile path for tvShows from "/series" to "/tvshows"
- Movies which are downloaded now include the year of release in their folder name.
- Refactored the config pipeline on front-end startup to work in both development and production.

### Fixed

- Fixed the CORS issue for SignalR due to missing "AllowCredentials".
- Fixed a bug in the refreshing of PlexLibraries which have the TvShow type.
It would not wait for the result of all media, leading to wrong return values

### Removed

- Removed the CorsMiddleware fix in the back-end as it was not needed anymore

## [0.1.1] - 2020-12-18

### Changed

- Updated packages front-end packages.
- Setup build pipeline in Github Actions and in DockerHub.

## [0.1.0] - 2020-12-18

- Initial pre-release of PlexRipper
- Added an improved Notification sidebar
- Added all text as translations keys to the language file to ensure everything can get translated.
- Added Language switcher under Settings => UI, only supported English and the to be translated French.

### Fixed

- Fixed the Letter navigation in Poster view not scrolling the page.
- Fixed the setup page not shown automatically on a new install.
- Fixed the percentage in download speed having too many decimals, namely in the Downloads page.
- Fixed where empty help buttons would show up next to options.
- Fixed the checkboxes in settings not working.
- Fixed the misalignment of the checkboxes in the settings page.
- Fixed an issue where statically generating the WebUI in development would return the wrong api url.
- Fixed an error when trying to add a Movie or TvShow destination folder under Settings => Paths, should now work correctly
- Fixed the "no downloads" message not always showing correctly when there are no downloads in progress.
- Fixed the setup page not showing the correct background and throwing an error when that happens
- Fixed the skip button during the setup wizard not appearing

### Changed

- Notifications can now be cleared with a click of a button
- Fixed the lang folder link in the README
- Added the French language file and language support (Still needs translations).
- Added the language option to the config file
- Rewritten how settings are saved, they should now work much better
- Added feedback section to the ReadMe
- Ensured the config/settings file is now better protected against corruption and invalid values
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ Tired of searching for media on different torrent websites or paying for Usenet

Let others collect media for you and then just download everything!

## Feedback

Any feedback, good or bad, is very much appreciated! You can create an [Github issue](https://github.com/PlexRipper/PlexRipper/issues) or send an e-mail to [PlexRipper@protonmail.com](mailto:PlexRipper@protonmail.com?subject=[GitHub]%20Feedback%20PlexRipper). If you like to stay up to date with the progress, then consider following the [project](https://github.com/PlexRipper) and giving it a star if you like it!

## Goals

- Be the best cross-platform Plex downloader there is!
Expand Down Expand Up @@ -56,6 +60,8 @@ Let others collect media for you and then just download everything!

### Unraid

Note: [Unraid support thread](https://forums.unraid.net/topic/114103-support-plexripper-the-best-cross-platform-plex-media-downloader-there-is/)

1. Ensure you have [Community Applications](https://unraid.net/community/apps?q=plexripper#r) installed.
2. Search for PlexRipper and click install.
3. A Docker Template will be shown, fill this in with the correct volume mounts
Expand Down Expand Up @@ -99,7 +105,7 @@ Make PlexRipper easier to use for everyone by translating it to your native lang
2. Create a Github issue explaining the language you would like to translate to.
- This is to avoid multiple people translating to the same language

3. Make a copy of [en-US.json](https://github.com/PlexRipper/PlexRipper/tree/master/src/WebUI/src/lang) into the "lang" folder.
3. Make a copy of [en-US.json](https://github.com/PlexRipper/PlexRipper/tree/master/src/WebAPI/ClientApp/src/lang) into the "lang" folder and rename it to your language. e.g. "fr.json, es.json".

4. Translate only the text after the ":"!

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@ public interface INotificationsService
Task<Result> HideNotification(int id);

Task<Result> SendResult(Result result);

Task<Result> ClearAllNotifications();
}
}
2 changes: 2 additions & 0 deletions src/Application/Common/Interfaces/Settings/ISettingsModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public interface ISettingsModel

public bool ShowRelativeDates { get; set; }

string Language { get; set; }

#endregion

#endregion
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using FluentResults;
using MediatR;

namespace PlexRipper.Application.Notifications
{
public class ClearAllNotificationsCommand : IRequest<Result>
{
public ClearAllNotificationsCommand() { }
}
}
5 changes: 5 additions & 0 deletions src/Application/Notifications/NotificationsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ public async Task<Result> HideNotification(int id)
return await _mediator.Send(new HideNotificationCommand(id));
}

public async Task<Result> ClearAllNotifications()
{
return await _mediator.Send(new ClearAllNotificationsCommand());
}

public async Task<Result> SendResult(Result result)
{
if (result.HasError<Error>())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using EFCore.BulkExtensions;
using FluentResults;
using FluentValidation;
using MediatR;
using Microsoft.EntityFrameworkCore;
using PlexRipper.Application.Notifications;
using PlexRipper.Data.Common;
using PlexRipper.Domain;

namespace PlexRipper.Data.CQRS
{
public class ClearAllNotificationsValidator : AbstractValidator<ClearAllNotificationsCommand>
{
public ClearAllNotificationsValidator() { }
}

public class ClearAllNotificationsHandler : BaseHandler, IRequestHandler<ClearAllNotificationsCommand, Result>
{
public ClearAllNotificationsHandler(PlexRipperDbContext dbContext) : base(dbContext) { }

public async Task<Result> Handle(ClearAllNotificationsCommand command, CancellationToken cancellationToken)
{
// Empty table
await _dbContext.TruncateAsync<Notification>();
await _dbContext.SaveChangesAsync();
return Result.Ok();
}
}
}

0 comments on commit 59c93ac

Please sign in to comment.