Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do faster hashing #1462

Closed
wants to merge 5 commits into from
Closed

Do faster hashing #1462

wants to merge 5 commits into from

Conversation

SubJunk
Copy link
Member

@SubJunk SubJunk commented Mar 23, 2018

No description provided.

@Nadahar
Copy link
Contributor

Nadahar commented Mar 24, 2018

@SubJunk Although mapped files are much faster for things like this, I understand that they have a somewhat high cost to establish. Mapped files can consume some memory, and it will probably break at 32 bit OS'es. The memory they consume is outside the Java heap, so it won't be visible there.

32 bit processes has a limited virtual address space, so mapping 5-6 GB files simply isn't possible because of the limited address space. That's why I've stayed away from mapped files this far. I've been thinking that if we ever implement it, we'd need to implement an alternative solution for 32 bit.

The ideal solution was if there was a way to read the first 64k and then actually jump to the last 64k. Could RandomAccessFile be a better solution, where you simply move the cursor? I know it's kind of "old school", but that's the way we used to work with files "back in the days" and I think this has filesystem support so that no data has to be read when you move the cursor. The cursor is 64 bit/long, so it should be able to address huge files.

This obviously won't work for streams either, only for files on disk.

@SubJunk
Copy link
Member Author

SubJunk commented Mar 24, 2018

I compared the speed before and after and unfortunately it wasn't as much of a bottleneck as I anticipated, taking only around 30ms per file. It still adds up over thousands of files but I doubt this was the cause of the problem.
Yes the RandomAccessFile solution seems promising. Can you commit it to this branch and I can benchmark it the same way?

@Nadahar
Copy link
Contributor

Nadahar commented Mar 24, 2018

@SubJunk I don't know how you benchmark this, but be aware that this is something that can be really tricky to get right. It obviously depends on speed and type of harddrive, but there are also multiple cache mechanisms involved. Many harddrives will read ahead and cache what it anticipates that will be read next for example. I guess you need to do this from many threads at once to really see the consequence, on traditional harddrives (not SSDs) this leads to the read head having to jump around a lot. This is when you see the speed drop drastically, compare sequential read versus random access found in benchmarks.

I don't know the size of your test files either, but a typical modern harddrive read speed is somewhere in the range 140-180 MB/s. I can't understand how a 4 GB file can be hashed in 30 ms if the file actually has to be read through.

I can implement random access, but I'm in the middle of rewriting the XML parsing, so it will have to wait until I'm done with that commit.

@valib
Copy link
Contributor

valib commented Mar 24, 2018

Agree with @Nadahar that testing it is a little bit tricky. I tried to implement the RandomAccessFile but the result seems the same like this current implementation.

@SubJunk
Copy link
Member Author

SubJunk commented Mar 25, 2018

I tested it by restarting the computer and logging how long the hashing took to happen on a folder with files ranging from 700MB up to 21GB. I mostly paid attention to the biggest files, there were heaps of them over 10GB each and the drive is slower than normal, it's a WD Green so spins a bit slower than the regular 7200k ones, which makes me like it for testing. However you're right that I didn't make sure it wasn't serving from its cache. I did however run it subsequent times and confirmed it takes about 1ms to hash files after the first time they're read, and obviously it's very unlikely that the 128MB cache on my 3TB hard drive is even holding relevant data from both ends of the 21GB file, let alone the entire folder which is over 1TB alone. Very tricky like everyone has said!

@Nadahar
Copy link
Contributor

Nadahar commented Mar 25, 2018

@SubJunk @valib I've pushed a "benchmark" commit where I've added all the different hashing variants to ImdbUtil. Don't run UMS, run net.pms.Benchmark instead.

The parameters are set in the code itself:

  • folder - Hardcoded path to the folder whose files to hash
  • method - Which hashing method to use:
    • 1 = ImdbUtil.computeHashFileChannel(File)
    • 2 = ImdbUtil.computeHashFileChannel(Path)
    • 3 = ImdbUtil.computeHashInputStream(file)
    • 4 = ImdbUtil.computeHashRandomAccessFile(file)
  • numThreads - The number of concurrent threads.
  • multiply - Set the number of times to repeat scanning of the files in the folder. I made this because I don't have enough files in any folder to make it work for any amount of time. It might not be necessary for really large folders.

By setting the number of threads to a high value, performance will decrease (for me at least). This is probably because the read head will have to jump around a lot, but it might also have to do with overhead related to threading itself. I suspect this is part of the problem in #1372, there is no upper limit to the number of threads spawned and the hashing will be triggered for every call to getDisplayName() until it is written to InfoDb - which means many times for each file.

I think the "real problem" is the many calls to the prettifier (via getDisplayName) that will trigger hashing until it is written in InfoDb. This is simply bad design, it shouldn't start a new hash for the same file if one is already in progress, but since InfoDb has been removed in 7.0.0 there's hardly any point in fixing this. The question is if 7.0.0 handles this any better though.

The way it was handled until I moved the hashing out of synchronize was that only one file could be hashed at any one time. Reverting back to this might be the easiest "quick fix", although this is far from ideal. The best solution would be if threads requesting the IMDB info for files that have already been resolved would get an answer without blocking, while those requesting one that isn't resolved would have to wait, ideally services by a thread pool with a limited number of threads (5-10 or whatever gives the average best performance).

That said, I can't really get my computer to "lock up" no matter what parameters I try. I hope that you @SubJunk can by using a large number of files and many threads on your "green" disk.

@Nadahar
Copy link
Contributor

Nadahar commented Mar 25, 2018

By the way, by looking at the code I've discovered that none of the methods actually read through the files. That would have been extremely slow. The reason is that FileInputStream.skip() actually uses file system "seek" under the hood, so even this method jumps over most of the file. Using memory mapped files on 32 bit systems shouldn't be a worry either, since only the 64 kB chunks to be hashed are mapped - not the whole file.

I though that memory mapping was too expensive to be beneficial for such small mappings, but from my tests memory mapping performs slightly better than the others. That might vary with hardware though. It seems to me that using File is slightly faster than using Path (which is a bit surprising to me), and that using RandomAccessFile is slightly faster than using FileInputStream.

The advantage of using InputStream is that it can also handle other sources than files, like network streams. I am however skeptical if that supports "seeking" or if skip() will actually result in reading through the whole stream. If so, doing this would be increadibly slow meaning you'd have to download the whole file to hash it.

@valib
Copy link
Contributor

valib commented Mar 25, 2018

@Nadahar I have no idea how to run net.pms.Benchmark

EDIT: Oh I found it

@Nadahar
Copy link
Contributor

Nadahar commented Mar 30, 2018

@SubJunk @valib How am I to interpret the lack of feedback? Was the "benchmark" I made useless, don't you get any results? Was it to much hard to use, or is there another reason there's no feedback?

Time is ticking, and I've soon forgotten the details.

@valib
Copy link
Contributor

valib commented Mar 30, 2018

@Nadahar sorry I forgot to give the result. The difference is minimal but it seems that methods 2 or 1 are the best.
Here is the result in order 1 to 4 methods:

Benchmarking of hashing 138000 files using 1 threads took 21589 ms (156446 ns average per file)
Benchmarking of hashing 138000 files using 100 threads took 10310 ms (74714 ns average per file)

Benchmarking of hashing 138000 files using 1 threads took 17042 ms (123495 ns average per file)
Benchmarking of hashing 138000 files using 100 threads took 10488 ms (76003 ns average per file)

Benchmarking of hashing 138000 files using 1 threads took 22675 ms (164314 ns average per file)
Benchmarking of hashing 138000 files using 100 threads took 14584 ms (105683 ns average per file)

Benchmarking of hashing 138000 files using 1 threads took 30252 ms (219222 ns average per file)
Benchmarking of hashing 138000 files using 100 threads took 14149 ms (102535 ns average per file)

@SubJunk
Copy link
Member Author

SubJunk commented Apr 2, 2018

Benchmarking of hashing 152000 files using 1 threads took 57277 ms (376824 ns average per file)
Benchmarking of hashing 152000 files using 100 threads took 20130 ms (132437 ns average per file)

Benchmarking of hashing 152000 files using 1 threads took 56675 ms (372867 ns average per file)
Benchmarking of hashing 152000 files using 100 threads took 21373 ms (140615 ns average per file)

Benchmarking of hashing 152000 files using 1 threads took 75716 ms (498133 ns average per file)
Benchmarking of hashing 152000 files using 100 threads took 330825 ms (2176486 ns average per file)

Benchmarking of hashing 152000 files using 1 threads took 51090 ms (336121 ns average per file)
Benchmarking of hashing 152000 files using 100 threads took 326446 ms (2147671 ns average per file)

Similar results to @valib where the second method is the fastest, but wow the final two with lots of threads really ran slow for me. This was on a folder with mostly big files and my slower than normal hard drive which explains the extreme results:

image

I think based on these results we should merge the second method, and I will be interested to test the subtitles branch after that's synchronized too

@SubJunk SubJunk closed this Apr 3, 2018
SubJunk added a commit that referenced this pull request Apr 7, 2018
Nadahar pushed a commit that referenced this pull request Apr 7, 2018
valib pushed a commit that referenced this pull request Apr 10, 2018
valib pushed a commit that referenced this pull request Apr 15, 2018
valib pushed a commit that referenced this pull request Apr 19, 2018
valib pushed a commit that referenced this pull request May 13, 2018
@SubJunk SubJunk deleted the faster_hashing branch September 17, 2018 23:24
@SubJunk SubJunk restored the faster_hashing branch September 17, 2018 23:24
SubJunk added a commit that referenced this pull request Dec 20, 2018
* Refactored Iso639:
  - Implemented correction of commonly misspelled language names
  - Created Iso639Entry for holding all information for a given ISO 639 entry
  - Created isValid() to check validity also for English language names
  - Created get() to get the complete Iso639Entry for a language
  - Unified the lookups/getters to use the same basic lookup, all handling "loc", different case, 2 or 3 letter ISO 639 codes, English language names, common misspellings and search/contains option for English language name.
  - Renamed getLanguage() to getName()
  - Refactored internal structure and initialization
  - Corrected "loc" logic to handle BCP 47 codes even when they include locale or variant.
  - JavaDocs
  - Formatting

* Reversed bug introduced in 8abd818

* - Iso639:
  - Updated the list of ISO 639 English language names and codes to the latest definition
  - Implemented support for multiple English language names
  - Created equals(), hashCode() and toString() in Iso639Entry
- StringUtil:
  - Expanded createReadableCombinedString() to be able to quote the elements
  - Fixed a bug in createReadableCombinedString()

* Removed "wireshark" in DLNAResource.getDidlString() since the DIDL-Lite is already logged

* Minor formatting and tweaks to Playlist, RootFolder, SubtitleType and UMSUtils

* Created CollectionUtils class with methods for comparing the contents of two collections

* Minor refactoring of FileUtil:
- Formatting
- Some JavaDocs fixes
- Added isSeparator() and getIndexOfLastSeparator() that is OS aware but also accepts forward slash on Windows
- Fixed a bug in getExtension() and replaceExtension() if a folder has a dot in its name
- Added a try-with-resource

* Refactored DLNAMediaSubtitle:
- Formatting
- JavaDocs
- Removed some deprecated methods
- Added getName()
- Changed the logic for setting language in setExternalFile()
- Made externalFile absolute to avoid having to convert it all over the place
- Updated references accordingly

* - Changed the check for external subtitles to use isExternal() instead of checking getExternalFile != null
- Implemented handling for cases where getExternalFile == null for external subtitles
- Fixed a couple of bugs in AviSynth encoders
- Fixed a bug in Request/RequestV2 where streaming subtitles headers was sent for internal/embedded subtitles
- Fixed a couple of bugs in SubtitleUtils

* Refactored subtitles handling:
- Removed externalSubsExist, externalSubsParsed and hasSubtitles() from DLNAMediaInfo
- Moved external subtitles resolution from being scattered around the code to DLNAResource.syncResolve()
- DLNAResource:
  - Implemented new thread-safe external subtitles resolution states hasExternalSubtitles, hasSubtitles and isExternalSubtitlesParsed
  - Refactored subtitles logic in ResolvePlayer()
  - Removed duplicated code in getDlnaOrgPnFlags()
  - Fixed a subtitles bug and improved logging in getDidlString()
  - Removed some deprecated subtitles related methods
  - Created new method registerExternalSubtitles() and automatic registration if subtitles states are read
  - Created new method resolveAudioStream() based on the former Player.setAudioOutputParameters()
  - Created new method resolveSubtitlesStream() based on the former Player.setSubtitleOutputParameters()
- Player:
  - Refactored setAudioAndSubs() to use the new DLNAResource methods for resolving audio and subtitles
  - Removed methods setAudioOutputParameters() and setSubtitleOutputParameters()
- Removed deprecated and no longer needed subtitles related methods from FileUtil: doesSubtitlesExists(), isSubtitlesExists() and browseFolderForSubtitles()
- SubtitleUtils:
  - Fixed some bugs
  - Created new inner class CacheFolder
  - Created new concurrent subtitles folder cache logic that allows multiple folders to be scanned at once
  - Created new method registerExternalSubtitles() that does a similar task as the former FileUtil.browseFolderForSubtitles()
  - Created new "helper" methods: isSubtitlesFolder(), isSubtitlesFile(), registerExternalSubtitlesFile(), setExternalSubtitlesParsed() and findPrioritizedSubtitles()

* Fixed database caching of subtitles

* Add Hindi (Indian) and Brazilian Portuguese flags.

* Update subs recognition

Fixed bugs to cast integral division result to double or float

* Created BufferedImageFilter and BufferedImageFilterChain:
  - Created abstract "helper" class NonGeometricBufferedImageOp
  - Implemented BufferedImageFilter in ImagesUtil.transcodeImage()
  - Created static thumbnail RenderingHints in DLNAResource
  - Created DLNAResource.addFlagFilters() and removed all "flag" logic from DLNAResource.getThumbnailInputStream()
  - Created weak caching for "flag" BufferedImages and a way to retrieve them in ImagesUtil.getLanguageFlag()
  - Implemented AudioFlagFilter and SubtitlesFlagFilter in ImagesUtil
  - Refactored FullyPlayed to generate a BufferedImageFilter instead of applying the overlay
  - Implemented filter chains in Request, RequestV2 and RemoteWeb
- Improved JavaDocs
- Formatting
- Fixed an NPE in DLNAResource
- Refactored MapFile.toString()

* Replaced undetermined "flag"

* Update the languages recognition with MediaInfo

* Refactored DLNAResource.getDisplayName() to try to make it sane

* - Set minimum subtitle "flag" resolution
- Adjust subtitle "flag" scaling

* Cleaned up TempFileMgr:
- Added logging
- Handled Exception
- Improved iteration performance
- Added character set handling

* Refactored/extended StringUtil.prettifyXML()

* - Fixed NPE in WinUtils.getShortPathNameW()
- Fixed NPE and expanded ProcessUtil.getShortFileNameIfWideChars()
- Refactored ProcessUtil.dbgWashCmds()

* Refactored FullyPlayed text prefix handling

* Improved TextAreaFIFO line removal performance

* Created WinUtils.getOEMCharset()

* Created some methods in FileUtil:
- Created new overloads for getExtension()
- Created new overloads for getFileNameWithoutExtension() and fixed NPE
- Fixed NPE and improved robustness of convertLowerCaseStringToTitleCase()
- Created new overloads for replaceExtension()

* - Refactored/rewrote ImdbUtil:
  - Switched to using java.nio instead of java.io
  - Removed cleanName()
  - Replaced extractImdb() with extractImdbId() which can also scan relevant .nfo files for IMDB ID
  - Fixed NPE in ensureTT()
  - Created removeTT()
  - Replaced extract() with extractFromFileName()
  - Created extractImdbIdFromNfo()
- Created new methods FileUtil.detectCharset()

* Refactored FileTranscodeVirtualFolder:
- Implemented working thumbnail support for FileTranscodeVirtualFolder
- Fixed subtitles for TRANSCODE folders that's children of LIVE SUBTITLES folders

* Reimplemented OpenSubtitles/Live subtitles support:
- Configuration:
  - Removed "live_subtitles_timeout" setting
  - Made "live_subtitles_keep" and "live_subtitles_limit" configurable from the GUI under transcoding/subtitles
- DLNAMediaSubtitle subclasses:
  - Created class DLNAMediaOnDemandSubtitle which implements support for other "on-demand" subtitles sources in the future
  - Created class DLNAMediaOpenSubtitle which handles everything related to subtitles from OpenSubtitles
  - Removed lived subtitles handling from DLNAMediaSubtitle
- DLNAResource:
  - Removed unused class PlaySub
  - Removed no longer used "superthumb" functionality from RealFile
  - Refactored SubSelFile to use new logic for discovery, prority, sorting and filtering/limiting
- Created new class DeadNodeList for more efficient XML parsing
- Rewrote OpenSubtitle class almost completely, only getInfo() which isn't used for subtitles handling ise the old logic

* - Created VideoClassification for classifying a video as movie, series, TV program etc
- Created FileNamePrettifier that is similar to FileUtil.getFileNamePrettified() but keeps the parsed details for later use and doesn't use OpenSubtitles

* Right-aligned numeric fields in TranscodingTab/Subtitle Settings for consistency

* - Added new setting "show_subs_info" replacing old setting "hide_subs_info"
- Added description for new setting to UMS.conf
- Rearranged NavigationShareTab for the net setting:
  - Added new setting
  - Switched functionality and texts for "hide engine names" to "show engine names"
  - Moved settings around to be more logical

* - Reduced contention in InfoDb
- Fixed generics errors in FileDb and InfoDb

* Removed streaming MicroDVD and VobSub support for Kodi

* Changed the DLNAMediaSubtitle.id() logic so it's only used for internal/embedded subtitles. External subtitles are recognized using isExternal() instead of id > 100

* Update the Web https setting. Based on the
http://www.universalmediaserver.com/forum/viewtopic.php?f=4&t=12156
Not related to this PR but could be merged with this.

* Use more efficient StringBuilder instead of "String +" in the

convertLowerCaseStringToTitleCase method.
Fix NPE in reformating the media name.

* SubtitlesInfoLevel to be rebased

NPE fix

Fixed potential NPE

* Implemented minimum similarity threshold for IMDB guesses

- Fixed several comparison bugs in SubSelFile
- Fixed NPE in OpenSubtitle

NPE fix

* Extended FileNamePrettifier with more constructors

* - Made string similarity case insensitive
- Extended guessImdbIdByFileName() with overload for filename instead of DLNAResource

* Faster OpenSubtitles hashing (from #1462 and #1469)

* Implemented new XML-RPC parser

Removed up old XML-RPC implementation

* Removed redundant qualifiers

* Cache prettified name

* Removed the copy of the original resource from the TRANSCODE folder

Fixed rebasing
Formatting

* Added more language flags

- ALB is Albanian
- ARM is Armenian
- BOS is Bosnian
- BUR is Burmese
- CNR is Montenegrin
- DZO is Dzongkha
- FIJ is Fijian
- FIL is Filipino
- GEO is Georgian
- GLE is Irish
- HRV is Croatian
- IND is Indonesian
- KAL is Kalaallisut
- KAZ is Kazakh
- KHM is Khmer
- LAO is Lao
- LTZ is Letzeburgesch
- MAC is Macedonian
- MAY is Malay
- MLG is Malagasy
- MLT is Maltese
- NAU is Nauru
- NEP is Nepali
- PAU is Palauan
- SRP is Serbian
- TIB is Tibetan
- TKL is Tokelau
- TLH is Klingon
- TON is Tonga
- TUK is Turkmen
- TVL is Tuvalu
- UZB is Usbekisch

* Updated plugins

commons-lang3 to 3.7,
maven-javadoc-plugin to 3.0.0
git-commit-id-plugin to 2.2.4

* - Updated com.rometools:rome to 1.9.0
- Removed maven-nsis-plugin

Fixed previous Cherry-Pick

* Slightly improved web interface HTTPS configuration

based on DMS
Fixed typo

* Update to match with DMS
Fixed typo

* Updated the org.apache.commons.text version to latest 1.3

* Update the database version.

To the table SUBTRACKS were added columns EXTERNALFILE and CHARSET

* Update rebasing to the master branch.

* Formatting

* Fix unsupported displayNameOverride to show propper item name.

* Removed not used import

* Fix implementation of the "displayNameOverride"

to work only in the MediaLibraryFolder. Thanks @Nadahar for the
recommendation.
Simplify the commit 9ae1a2f

* Better split of metadata extraction and OpenSubs lookup logic

Formatting

Removed unused function

* Fixed GUI
Fixed wrong GUI implementation

* Fixed transcode folder population

* Database updater

* fix

* Removed Oravle JDK 7 test from Travis CI build

It seems that Travis CI is finally decommissioning their Ubuntu Precise containers, which were the last to support Oracle JDK 7.

* Fix database append

* Fixed database updating

* Update database fix

* Do not update database with version lower that 11

* Update database initialisation

* Final database updating

* db updates

* Default to empty string in creation too (feels hacky)

* Delete some old entries for subtracks

* Rescan subtitles to be sure if they changed

* Update description

* Register external subs only when needed.

* Remove unused import

* Clean subtitles when disabled in general configuration

* Delete record in the database when external subs file do not exist

* Let DLNAResource to resolve subs in the syncResolve

* Implement the XXE processing disabled for the UMS XML implementation

* Remove unused import

* Replaced deprecated import

* Disable XXE in XMLInputFactory

* Make enablig XML External Entity configurable

* Avoid not necessary checking if the Logger trace mode is enabled.

It is done automatically using Logger.trace() method.

* Bump database version

* Fix deprecated StringEscapeUtils from org.apache.commons.lang3

* Fix merging

* Update twelvemonkeys imageio to the latest version

* Add back the isAddGlobally stuff

* Post-merge fixes

* Keep version ahead of master

* Fixed Live Subtitles

* Fixed burning picture subtitles when other filters are also used in
FFmpeg (#1650)

Conflicts:
	src/main/java/net/pms/encoders/FFMpegVideo.java

* Removed dependency on plexus StringUtils (#1625)

* Updated junrar to 1.0.1

This fixes CVE-2018-12418

* Fixed merge

* Rollback commons-text to support Java 7

* Rollback lang3 to match words

* Bump junrar

Conflicts:
	pom.xml
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/OpenSubtitle.java
	src/main/java/net/pms/util/TempFileMgr.java

* Remote control navigation support in webgui (#1637)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Update STYLEGUIDE.md

* Update CONTRIBUTING.md

* Mark FFmpeg as GPU acceleration ready

* Update Cling and Seamless to resolve security issue (#1609)

Fixes #1522

* Tests for metadata extraction from filename (#1632)

* Tests for metadata extraction from filename

Adds a new test function that checks the metadata
extracted from the filename.
Amends one of the testcases so that they correctly
reflect the current working of the extraction code.

* Remove id from testcase

Remove manual increment from the JSON files that
define the metadata extraction testcases.

* Added TODO tests in metadata extraction

While working on the metadata extraction patterns, new tests
that specify what needs to be covered and is currently not,
 are expected to fail. This commit makes it possible to mark
these new tests so that they do not cause an assertion error,
but only log a warning.

* Corrections in filename metadata extraction tests

Correct use of assertThat.
Correction in one of the test cases, where the expected value was wrong.
Correction in an episode number comparison, as episode numbers are
strings and not ints.

* Codestyle improvement

* Codestyle: strictly one statement per line

* Codestyle: fewer line breaks

* Updated build instructions for macOS

* Fixed bug reported in #1655 (#1656)

Fix thumbnails not persisting to db unless TRACE is enabled

* Bumped version to 7.6.0 and updated changelog

* Formatting

* Handling the "Album Artist" field present in the audio files.  (#1657)

* Handling the "Album Artist" field present in the audio files. There is
an excellent guide about the purpose of this field and I think UMS
should support this feature:
https://www.blisshq.com/music-library-management-blog/2010/10/12/how-to-use-album_artist/

* typo

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

* not needed

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaDatabase.java
	src/main/java/net/pms/dlna/LibMediaInfoParser.java

* Pick up executables on the path in Linux (#1644)

DMS 9de2f2cea6b70c69aaea4de86e25cf809c7f88c8

* - Replaced ProgramPaths interface with PlatformProgramPaths and child
classes

- Implemented support for executable types (Bundled, Installed, Custom)
- Refactored Windows registry lookup to use JNA
- Implemented PlayerID for Player identification
- Created UniqueList List implementation
- Detached the SystemUtils singleton instance from PMS
- Implemented system PATH tools in FileUtil
- Created ExecutableInfo (immutable, builder pattern) to hold
information about executable files
- Implemented support for using bundled executable from their
development location
- Implemented automatic system PATH search for transcoding engines
- Created ExecutableErrorType
- Moved transcoding engine tests from PlayerFactory to the individual
Player classes
- Created NTStatus to map typical Windows return codes to more
meaningful errors

* Rollback unnecessary change to test

* Backwards compatibility for engine names

* Removed outdated comment

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaInfo.java
	src/main/java/net/pms/encoders/FFMpegVideo.java
	src/main/java/net/pms/encoders/Player.java
	src/main/java/net/pms/io/WinUtils.java
	src/main/java/net/pms/newgui/TranscodingTab.java
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/ProcessUtil.java
	src/main/resources/i18n/messages.properties

* Fix merging

* WIP Java 10 crash fix (#1497)

* WIP Java 10 crash fix

* Messy WIP

* Update to use Java 10 features

* Make it compatible with Java 1.7

* Attempt to maintain support for unicode fonts

* Formatting

* Formatting

* Fix to some web interface navigation issues (#1660)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* Rephrasing to fit text better

* Enable Samsung built-in resume functionality (#1662)

* feat: add support for samsung built-in resume

Closes #665

* feat(bookmark): restrict 'set bookmark' to samsung devices

Closes #665

* feat(bookmark): code cleanup

#665

* feat(bookmark): code cleanup

#665

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* - Moved Player executable getters from PmsConfiguration to the Player
instances (#1669)

- Implemented reuse of Player instances
- Implemented support for multiple executables when registering/testing
Player objects
From DMS af05744a843866cf94903a22d032f08f66d80bbc
Fixes #1668

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* TODO to fix merging

* Revert "TODO to fix merging"

This reverts commit 5e7bcc7.

* refactor(requestv2): extract "createResponse" method (#1667)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* Updated changelog

* Minor formatting and scan speed improvement (#1672)

* Sync translations with Crowdin

* Updated changelog

* 7.6.1

* Remove snapshot text

* Enabled automatic updating to 7.6.1 on Windows

* refactor(requestv2): extract request handler methods  (#1689)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Support for Samsung Q9 series (#1697)

*  refactor(requestv2): inputStream as local variable (#1691)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* Clean status line when scan finished (#1698)

* Added config for Samsung Q6 Series TVs (#1699)

* Philips PUS8503 (#1692)

* WIP

* Fixed transcoding

* Update

* Detection tests

* Fix XVID recognition

* refactor(requestv2): extract dlna stream handler (#1700)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Fix XVID recognition (#1705)

* Fix XVID recognition

* Do not stream subtitles for when they are transcoding

* Rename getFormat to setFormat in LibMediaInfoParser

and make some preliminary test

* Formatting

* Formatting

* Fix subtitles streaming logic

* Update Samsung subtitles logic

* Simplify the logic

* Removed depreated method

Conflicts:
	src/main/java/net/pms/dlna/LibMediaInfoParser.java
	src/main/java/net/pms/network/RequestV2.java

* Update the .conf (#1707)

* #1664 image fix (#1709)

* fix(image): fix image load

#1664

* fix(image): improve log message

#1664

* refactor(RequestV2): small code improvements (#1713)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

* refactor(requestv2): rename `argument` to `uri`

#1664

* refactor(requestv2): use HttpMethod instead of string

#1664

* refactor(requestv2): use local nettyRequest

#1664

Conflicts:
	src/main/java/net/pms/network/RequestHandlerV2.java

* Solving issue #1674 (#1711)

Solving issue #1674 (correct language passed to MediaInfoLib and avoiding incorrect genre labels)

*  Fixed issue #1706, Web interface broken hover effect on Firefox. (#1717)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* -Fixed header area not displaying focus element, due to css class removal. (remoteui.css)
-Fixed error while navigating in header if there were no media displayed in root directory. Gear menu not navigating properly. (keycontroller.js)
-Fixed keyboard not having focus when changes from letter to numbers. (jQKeyboard.js)
-Removed unused code in keyboard main file. (jQKeyboard.js)

* Fixed issue #1706, Web interface broken hover effect on Firefox.
Removed effect off transform translate in css, for media browsing, trying to find workaround, meanwhile, removed.

* Use H.264 in Chrome web interface (#1702)

* Use H.264 in Chrome web interface

* Removed old option

* Same on Firefox

* Formatting and only scale resolution when using libvorbis

* Removed unused config

* Fix merging

* Update merging

* Formatting

* Merge fixes

* More merge fixes + formatting

* !fixup
SubJunk added a commit that referenced this pull request Mar 23, 2019
* GUI for web streams/feeds management (#1603)

* WIP GUI idea for managing web stuff

* More WIP

* GUI update and translatable

* Remove unnecessary class

* Removed not used imports

* Implemented editing

* New button

* Fixed button sizes

* Change the layout of the web content adding/editing panel

* New tooltips

* Merge cleanup

* Fixed size of web content panel

* Formatting

* Fix subs recognition squishy (#1728)

* Refactored Iso639:
  - Implemented correction of commonly misspelled language names
  - Created Iso639Entry for holding all information for a given ISO 639 entry
  - Created isValid() to check validity also for English language names
  - Created get() to get the complete Iso639Entry for a language
  - Unified the lookups/getters to use the same basic lookup, all handling "loc", different case, 2 or 3 letter ISO 639 codes, English language names, common misspellings and search/contains option for English language name.
  - Renamed getLanguage() to getName()
  - Refactored internal structure and initialization
  - Corrected "loc" logic to handle BCP 47 codes even when they include locale or variant.
  - JavaDocs
  - Formatting

* Reversed bug introduced in 8abd818

* - Iso639:
  - Updated the list of ISO 639 English language names and codes to the latest definition
  - Implemented support for multiple English language names
  - Created equals(), hashCode() and toString() in Iso639Entry
- StringUtil:
  - Expanded createReadableCombinedString() to be able to quote the elements
  - Fixed a bug in createReadableCombinedString()

* Removed "wireshark" in DLNAResource.getDidlString() since the DIDL-Lite is already logged

* Minor formatting and tweaks to Playlist, RootFolder, SubtitleType and UMSUtils

* Created CollectionUtils class with methods for comparing the contents of two collections

* Minor refactoring of FileUtil:
- Formatting
- Some JavaDocs fixes
- Added isSeparator() and getIndexOfLastSeparator() that is OS aware but also accepts forward slash on Windows
- Fixed a bug in getExtension() and replaceExtension() if a folder has a dot in its name
- Added a try-with-resource

* Refactored DLNAMediaSubtitle:
- Formatting
- JavaDocs
- Removed some deprecated methods
- Added getName()
- Changed the logic for setting language in setExternalFile()
- Made externalFile absolute to avoid having to convert it all over the place
- Updated references accordingly

* - Changed the check for external subtitles to use isExternal() instead of checking getExternalFile != null
- Implemented handling for cases where getExternalFile == null for external subtitles
- Fixed a couple of bugs in AviSynth encoders
- Fixed a bug in Request/RequestV2 where streaming subtitles headers was sent for internal/embedded subtitles
- Fixed a couple of bugs in SubtitleUtils

* Refactored subtitles handling:
- Removed externalSubsExist, externalSubsParsed and hasSubtitles() from DLNAMediaInfo
- Moved external subtitles resolution from being scattered around the code to DLNAResource.syncResolve()
- DLNAResource:
  - Implemented new thread-safe external subtitles resolution states hasExternalSubtitles, hasSubtitles and isExternalSubtitlesParsed
  - Refactored subtitles logic in ResolvePlayer()
  - Removed duplicated code in getDlnaOrgPnFlags()
  - Fixed a subtitles bug and improved logging in getDidlString()
  - Removed some deprecated subtitles related methods
  - Created new method registerExternalSubtitles() and automatic registration if subtitles states are read
  - Created new method resolveAudioStream() based on the former Player.setAudioOutputParameters()
  - Created new method resolveSubtitlesStream() based on the former Player.setSubtitleOutputParameters()
- Player:
  - Refactored setAudioAndSubs() to use the new DLNAResource methods for resolving audio and subtitles
  - Removed methods setAudioOutputParameters() and setSubtitleOutputParameters()
- Removed deprecated and no longer needed subtitles related methods from FileUtil: doesSubtitlesExists(), isSubtitlesExists() and browseFolderForSubtitles()
- SubtitleUtils:
  - Fixed some bugs
  - Created new inner class CacheFolder
  - Created new concurrent subtitles folder cache logic that allows multiple folders to be scanned at once
  - Created new method registerExternalSubtitles() that does a similar task as the former FileUtil.browseFolderForSubtitles()
  - Created new "helper" methods: isSubtitlesFolder(), isSubtitlesFile(), registerExternalSubtitlesFile(), setExternalSubtitlesParsed() and findPrioritizedSubtitles()

* Fixed database caching of subtitles

* Add Hindi (Indian) and Brazilian Portuguese flags.

* Update subs recognition

Fixed bugs to cast integral division result to double or float

* Created BufferedImageFilter and BufferedImageFilterChain:
  - Created abstract "helper" class NonGeometricBufferedImageOp
  - Implemented BufferedImageFilter in ImagesUtil.transcodeImage()
  - Created static thumbnail RenderingHints in DLNAResource
  - Created DLNAResource.addFlagFilters() and removed all "flag" logic from DLNAResource.getThumbnailInputStream()
  - Created weak caching for "flag" BufferedImages and a way to retrieve them in ImagesUtil.getLanguageFlag()
  - Implemented AudioFlagFilter and SubtitlesFlagFilter in ImagesUtil
  - Refactored FullyPlayed to generate a BufferedImageFilter instead of applying the overlay
  - Implemented filter chains in Request, RequestV2 and RemoteWeb
- Improved JavaDocs
- Formatting
- Fixed an NPE in DLNAResource
- Refactored MapFile.toString()

* Replaced undetermined "flag"

* Update the languages recognition with MediaInfo

* Refactored DLNAResource.getDisplayName() to try to make it sane

* - Set minimum subtitle "flag" resolution
- Adjust subtitle "flag" scaling

* Cleaned up TempFileMgr:
- Added logging
- Handled Exception
- Improved iteration performance
- Added character set handling

* Refactored/extended StringUtil.prettifyXML()

* - Fixed NPE in WinUtils.getShortPathNameW()
- Fixed NPE and expanded ProcessUtil.getShortFileNameIfWideChars()
- Refactored ProcessUtil.dbgWashCmds()

* Refactored FullyPlayed text prefix handling

* Improved TextAreaFIFO line removal performance

* Created WinUtils.getOEMCharset()

* Created some methods in FileUtil:
- Created new overloads for getExtension()
- Created new overloads for getFileNameWithoutExtension() and fixed NPE
- Fixed NPE and improved robustness of convertLowerCaseStringToTitleCase()
- Created new overloads for replaceExtension()

* - Refactored/rewrote ImdbUtil:
  - Switched to using java.nio instead of java.io
  - Removed cleanName()
  - Replaced extractImdb() with extractImdbId() which can also scan relevant .nfo files for IMDB ID
  - Fixed NPE in ensureTT()
  - Created removeTT()
  - Replaced extract() with extractFromFileName()
  - Created extractImdbIdFromNfo()
- Created new methods FileUtil.detectCharset()

* Refactored FileTranscodeVirtualFolder:
- Implemented working thumbnail support for FileTranscodeVirtualFolder
- Fixed subtitles for TRANSCODE folders that's children of LIVE SUBTITLES folders

* Reimplemented OpenSubtitles/Live subtitles support:
- Configuration:
  - Removed "live_subtitles_timeout" setting
  - Made "live_subtitles_keep" and "live_subtitles_limit" configurable from the GUI under transcoding/subtitles
- DLNAMediaSubtitle subclasses:
  - Created class DLNAMediaOnDemandSubtitle which implements support for other "on-demand" subtitles sources in the future
  - Created class DLNAMediaOpenSubtitle which handles everything related to subtitles from OpenSubtitles
  - Removed lived subtitles handling from DLNAMediaSubtitle
- DLNAResource:
  - Removed unused class PlaySub
  - Removed no longer used "superthumb" functionality from RealFile
  - Refactored SubSelFile to use new logic for discovery, prority, sorting and filtering/limiting
- Created new class DeadNodeList for more efficient XML parsing
- Rewrote OpenSubtitle class almost completely, only getInfo() which isn't used for subtitles handling ise the old logic

* - Created VideoClassification for classifying a video as movie, series, TV program etc
- Created FileNamePrettifier that is similar to FileUtil.getFileNamePrettified() but keeps the parsed details for later use and doesn't use OpenSubtitles

* Right-aligned numeric fields in TranscodingTab/Subtitle Settings for consistency

* - Added new setting "show_subs_info" replacing old setting "hide_subs_info"
- Added description for new setting to UMS.conf
- Rearranged NavigationShareTab for the net setting:
  - Added new setting
  - Switched functionality and texts for "hide engine names" to "show engine names"
  - Moved settings around to be more logical

* - Reduced contention in InfoDb
- Fixed generics errors in FileDb and InfoDb

* Removed streaming MicroDVD and VobSub support for Kodi

* Changed the DLNAMediaSubtitle.id() logic so it's only used for internal/embedded subtitles. External subtitles are recognized using isExternal() instead of id > 100

* Update the Web https setting. Based on the
http://www.universalmediaserver.com/forum/viewtopic.php?f=4&t=12156
Not related to this PR but could be merged with this.

* Use more efficient StringBuilder instead of "String +" in the

convertLowerCaseStringToTitleCase method.
Fix NPE in reformating the media name.

* SubtitlesInfoLevel to be rebased

NPE fix

Fixed potential NPE

* Implemented minimum similarity threshold for IMDB guesses

- Fixed several comparison bugs in SubSelFile
- Fixed NPE in OpenSubtitle

NPE fix

* Extended FileNamePrettifier with more constructors

* - Made string similarity case insensitive
- Extended guessImdbIdByFileName() with overload for filename instead of DLNAResource

* Faster OpenSubtitles hashing (from #1462 and #1469)

* Implemented new XML-RPC parser

Removed up old XML-RPC implementation

* Removed redundant qualifiers

* Cache prettified name

* Removed the copy of the original resource from the TRANSCODE folder

Fixed rebasing
Formatting

* Added more language flags

- ALB is Albanian
- ARM is Armenian
- BOS is Bosnian
- BUR is Burmese
- CNR is Montenegrin
- DZO is Dzongkha
- FIJ is Fijian
- FIL is Filipino
- GEO is Georgian
- GLE is Irish
- HRV is Croatian
- IND is Indonesian
- KAL is Kalaallisut
- KAZ is Kazakh
- KHM is Khmer
- LAO is Lao
- LTZ is Letzeburgesch
- MAC is Macedonian
- MAY is Malay
- MLG is Malagasy
- MLT is Maltese
- NAU is Nauru
- NEP is Nepali
- PAU is Palauan
- SRP is Serbian
- TIB is Tibetan
- TKL is Tokelau
- TLH is Klingon
- TON is Tonga
- TUK is Turkmen
- TVL is Tuvalu
- UZB is Usbekisch

* Updated plugins

commons-lang3 to 3.7,
maven-javadoc-plugin to 3.0.0
git-commit-id-plugin to 2.2.4

* - Updated com.rometools:rome to 1.9.0
- Removed maven-nsis-plugin

Fixed previous Cherry-Pick

* Slightly improved web interface HTTPS configuration

based on DMS
Fixed typo

* Update to match with DMS
Fixed typo

* Updated the org.apache.commons.text version to latest 1.3

* Update the database version.

To the table SUBTRACKS were added columns EXTERNALFILE and CHARSET

* Update rebasing to the master branch.

* Formatting

* Fix unsupported displayNameOverride to show propper item name.

* Removed not used import

* Fix implementation of the "displayNameOverride"

to work only in the MediaLibraryFolder. Thanks @Nadahar for the
recommendation.
Simplify the commit 9ae1a2f

* Better split of metadata extraction and OpenSubs lookup logic

Formatting

Removed unused function

* Fixed GUI
Fixed wrong GUI implementation

* Fixed transcode folder population

* Database updater

* fix

* Removed Oravle JDK 7 test from Travis CI build

It seems that Travis CI is finally decommissioning their Ubuntu Precise containers, which were the last to support Oracle JDK 7.

* Fix database append

* Fixed database updating

* Update database fix

* Do not update database with version lower that 11

* Update database initialisation

* Final database updating

* db updates

* Default to empty string in creation too (feels hacky)

* Delete some old entries for subtracks

* Rescan subtitles to be sure if they changed

* Update description

* Register external subs only when needed.

* Remove unused import

* Clean subtitles when disabled in general configuration

* Delete record in the database when external subs file do not exist

* Let DLNAResource to resolve subs in the syncResolve

* Implement the XXE processing disabled for the UMS XML implementation

* Remove unused import

* Replaced deprecated import

* Disable XXE in XMLInputFactory

* Make enablig XML External Entity configurable

* Avoid not necessary checking if the Logger trace mode is enabled.

It is done automatically using Logger.trace() method.

* Bump database version

* Fix deprecated StringEscapeUtils from org.apache.commons.lang3

* Fix merging

* Update twelvemonkeys imageio to the latest version

* Add back the isAddGlobally stuff

* Post-merge fixes

* Keep version ahead of master

* Fixed Live Subtitles

* Fixed burning picture subtitles when other filters are also used in
FFmpeg (#1650)

Conflicts:
	src/main/java/net/pms/encoders/FFMpegVideo.java

* Removed dependency on plexus StringUtils (#1625)

* Updated junrar to 1.0.1

This fixes CVE-2018-12418

* Fixed merge

* Rollback commons-text to support Java 7

* Rollback lang3 to match words

* Bump junrar

Conflicts:
	pom.xml
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/OpenSubtitle.java
	src/main/java/net/pms/util/TempFileMgr.java

* Remote control navigation support in webgui (#1637)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Update STYLEGUIDE.md

* Update CONTRIBUTING.md

* Mark FFmpeg as GPU acceleration ready

* Update Cling and Seamless to resolve security issue (#1609)

Fixes #1522

* Tests for metadata extraction from filename (#1632)

* Tests for metadata extraction from filename

Adds a new test function that checks the metadata
extracted from the filename.
Amends one of the testcases so that they correctly
reflect the current working of the extraction code.

* Remove id from testcase

Remove manual increment from the JSON files that
define the metadata extraction testcases.

* Added TODO tests in metadata extraction

While working on the metadata extraction patterns, new tests
that specify what needs to be covered and is currently not,
 are expected to fail. This commit makes it possible to mark
these new tests so that they do not cause an assertion error,
but only log a warning.

* Corrections in filename metadata extraction tests

Correct use of assertThat.
Correction in one of the test cases, where the expected value was wrong.
Correction in an episode number comparison, as episode numbers are
strings and not ints.

* Codestyle improvement

* Codestyle: strictly one statement per line

* Codestyle: fewer line breaks

* Updated build instructions for macOS

* Fixed bug reported in #1655 (#1656)

Fix thumbnails not persisting to db unless TRACE is enabled

* Bumped version to 7.6.0 and updated changelog

* Formatting

* Handling the "Album Artist" field present in the audio files.  (#1657)

* Handling the "Album Artist" field present in the audio files. There is
an excellent guide about the purpose of this field and I think UMS
should support this feature:
https://www.blisshq.com/music-library-management-blog/2010/10/12/how-to-use-album_artist/

* typo

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

* not needed

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaDatabase.java
	src/main/java/net/pms/dlna/LibMediaInfoParser.java

* Pick up executables on the path in Linux (#1644)

DMS 9de2f2cea6b70c69aaea4de86e25cf809c7f88c8

* - Replaced ProgramPaths interface with PlatformProgramPaths and child
classes

- Implemented support for executable types (Bundled, Installed, Custom)
- Refactored Windows registry lookup to use JNA
- Implemented PlayerID for Player identification
- Created UniqueList List implementation
- Detached the SystemUtils singleton instance from PMS
- Implemented system PATH tools in FileUtil
- Created ExecutableInfo (immutable, builder pattern) to hold
information about executable files
- Implemented support for using bundled executable from their
development location
- Implemented automatic system PATH search for transcoding engines
- Created ExecutableErrorType
- Moved transcoding engine tests from PlayerFactory to the individual
Player classes
- Created NTStatus to map typical Windows return codes to more
meaningful errors

* Rollback unnecessary change to test

* Backwards compatibility for engine names

* Removed outdated comment

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaInfo.java
	src/main/java/net/pms/encoders/FFMpegVideo.java
	src/main/java/net/pms/encoders/Player.java
	src/main/java/net/pms/io/WinUtils.java
	src/main/java/net/pms/newgui/TranscodingTab.java
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/ProcessUtil.java
	src/main/resources/i18n/messages.properties

* Fix merging

* WIP Java 10 crash fix (#1497)

* WIP Java 10 crash fix

* Messy WIP

* Update to use Java 10 features

* Make it compatible with Java 1.7

* Attempt to maintain support for unicode fonts

* Formatting

* Formatting

* Fix to some web interface navigation issues (#1660)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* Rephrasing to fit text better

* Enable Samsung built-in resume functionality (#1662)

* feat: add support for samsung built-in resume

Closes #665

* feat(bookmark): restrict 'set bookmark' to samsung devices

Closes #665

* feat(bookmark): code cleanup

#665

* feat(bookmark): code cleanup

#665

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* - Moved Player executable getters from PmsConfiguration to the Player
instances (#1669)

- Implemented reuse of Player instances
- Implemented support for multiple executables when registering/testing
Player objects
From DMS af05744a843866cf94903a22d032f08f66d80bbc
Fixes #1668

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* TODO to fix merging

* Revert "TODO to fix merging"

This reverts commit 5e7bcc7.

* refactor(requestv2): extract "createResponse" method (#1667)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* Updated changelog

* Minor formatting and scan speed improvement (#1672)

* Sync translations with Crowdin

* Updated changelog

* 7.6.1

* Remove snapshot text

* Enabled automatic updating to 7.6.1 on Windows

* refactor(requestv2): extract request handler methods  (#1689)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Support for Samsung Q9 series (#1697)

*  refactor(requestv2): inputStream as local variable (#1691)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* Clean status line when scan finished (#1698)

* Added config for Samsung Q6 Series TVs (#1699)

* Philips PUS8503 (#1692)

* WIP

* Fixed transcoding

* Update

* Detection tests

* Fix XVID recognition

* refactor(requestv2): extract dlna stream handler (#1700)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Fix XVID recognition (#1705)

* Fix XVID recognition

* Do not stream subtitles for when they are transcoding

* Rename getFormat to setFormat in LibMediaInfoParser

and make some preliminary test

* Formatting

* Formatting

* Fix subtitles streaming logic

* Update Samsung subtitles logic

* Simplify the logic

* Removed depreated method

Conflicts:
	src/main/java/net/pms/dlna/LibMediaInfoParser.java
	src/main/java/net/pms/network/RequestV2.java

* Update the .conf (#1707)

* #1664 image fix (#1709)

* fix(image): fix image load

#1664

* fix(image): improve log message

#1664

* refactor(RequestV2): small code improvements (#1713)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

* refactor(requestv2): rename `argument` to `uri`

#1664

* refactor(requestv2): use HttpMethod instead of string

#1664

* refactor(requestv2): use local nettyRequest

#1664

Conflicts:
	src/main/java/net/pms/network/RequestHandlerV2.java

* Solving issue #1674 (#1711)

Solving issue #1674 (correct language passed to MediaInfoLib and avoiding incorrect genre labels)

*  Fixed issue #1706, Web interface broken hover effect on Firefox. (#1717)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* -Fixed header area not displaying focus element, due to css class removal. (remoteui.css)
-Fixed error while navigating in header if there were no media displayed in root directory. Gear menu not navigating properly. (keycontroller.js)
-Fixed keyboard not having focus when changes from letter to numbers. (jQKeyboard.js)
-Removed unused code in keyboard main file. (jQKeyboard.js)

* Fixed issue #1706, Web interface broken hover effect on Firefox.
Removed effect off transform translate in css, for media browsing, trying to find workaround, meanwhile, removed.

* Use H.264 in Chrome web interface (#1702)

* Use H.264 in Chrome web interface

* Removed old option

* Same on Firefox

* Formatting and only scale resolution when using libvorbis

* Removed unused config

* Fix merging

* Update merging

* Formatting

* Merge fixes

* More merge fixes + formatting

* !fixup

* Weak squishy (#1729)

* GlobalIdRepo: use weak references

* Synchronize lock in GlobalIdRepo.replace

* Add DLNAList.add()

* Fixed mismatched locks

* Formatting

* Formatting

* Replaced defaults for web content (#1730)

Fixes #1448

* 8.0.0-a1

* Bumped MediaInfo to 18.12

* Latest changes from the rebased_fixed_subs_recognition branch

* Bump to 8.0.0-a2

* Updated changelog

* 8.0.0-a2

* Fixed not respecting the "off" audio/subs language option

* Bump

* Fix NPE on loading web conf because of race condition in loading

Fixes #1739

* Bump version to b1

I think we can stop adding features to this release and just focus on fixing bugs, so it's in beta now

* Changes:

 - Fixed #1739
 - Fixed text when adding web content
 - Formatting and log level

* Fixed setting clash on the subtitles settings tab

* Fixed missing translation on the first time language chooser

* Minor formatting/safety

* Updated changelog

* Add option to disable FFMpeg GPU acceleration

* Fixed merge

* Fixed merge

* 8.0.0-b1

* Updated changelog

* Formatting

* Database cleanup removes files that are no longer shared

* 8.0.0-RC1

* ID and web interface fixes (#1765)

* Made "Back" button in web interface go to the parent

Fixes the bug where it looks for the ID that no longer exists (which is a symptom of another bug)

* Refactored crazy code

* Fixed "Season" not displaying on subsequent visits

* Formatting

* Renamed variables for clarity

* Stop doing redundant loops

* Made discoverChildren call doRefreshChildren since they were already doing the same thing

* Added logic to isRefreshNeeded

* Bump version to 7.9.1-SNAPSHOT

* Fix some Media Library queries

* Fixed music info (artist, album, genre, album artist, and year) not being saved to the resource or database
SubJunk added a commit that referenced this pull request Jan 5, 2020
* Try to implement subs recognition to the renderer .conf

* Fixed merging

* Fix rebasing and update description

* pokus

* Add subs recognition test and fix subs recognition

* Add Cling.conf for testing

* TODO change the logic for isExternalSubtitlesFormatSupported

* Subtitles matching test

* Update the subs logic

* GUI for web streams/feeds management (#1603)

* WIP GUI idea for managing web stuff

* More WIP

* GUI update and translatable

* Remove unnecessary class

* Removed not used imports

* Implemented editing

* New button

* Fixed button sizes

* Change the layout of the web content adding/editing panel

* New tooltips

* Fixed bug

* Fixed wrong merging

* Update Javadoc comment

* Minor formatting and scanning performance improvement

* Fix NPE

* Default renderer formatting

* Update the NPE fix

* Update descriptions

* Remove the Cling.conf

* Merge cleanup

* Fixed size of web content panel

* Formatting

* Fix subs recognition squishy (#1728)

* Refactored Iso639:
  - Implemented correction of commonly misspelled language names
  - Created Iso639Entry for holding all information for a given ISO 639 entry
  - Created isValid() to check validity also for English language names
  - Created get() to get the complete Iso639Entry for a language
  - Unified the lookups/getters to use the same basic lookup, all handling "loc", different case, 2 or 3 letter ISO 639 codes, English language names, common misspellings and search/contains option for English language name.
  - Renamed getLanguage() to getName()
  - Refactored internal structure and initialization
  - Corrected "loc" logic to handle BCP 47 codes even when they include locale or variant.
  - JavaDocs
  - Formatting

* Reversed bug introduced in 8abd818

* - Iso639:
  - Updated the list of ISO 639 English language names and codes to the latest definition
  - Implemented support for multiple English language names
  - Created equals(), hashCode() and toString() in Iso639Entry
- StringUtil:
  - Expanded createReadableCombinedString() to be able to quote the elements
  - Fixed a bug in createReadableCombinedString()

* Removed "wireshark" in DLNAResource.getDidlString() since the DIDL-Lite is already logged

* Minor formatting and tweaks to Playlist, RootFolder, SubtitleType and UMSUtils

* Created CollectionUtils class with methods for comparing the contents of two collections

* Minor refactoring of FileUtil:
- Formatting
- Some JavaDocs fixes
- Added isSeparator() and getIndexOfLastSeparator() that is OS aware but also accepts forward slash on Windows
- Fixed a bug in getExtension() and replaceExtension() if a folder has a dot in its name
- Added a try-with-resource

* Refactored DLNAMediaSubtitle:
- Formatting
- JavaDocs
- Removed some deprecated methods
- Added getName()
- Changed the logic for setting language in setExternalFile()
- Made externalFile absolute to avoid having to convert it all over the place
- Updated references accordingly

* - Changed the check for external subtitles to use isExternal() instead of checking getExternalFile != null
- Implemented handling for cases where getExternalFile == null for external subtitles
- Fixed a couple of bugs in AviSynth encoders
- Fixed a bug in Request/RequestV2 where streaming subtitles headers was sent for internal/embedded subtitles
- Fixed a couple of bugs in SubtitleUtils

* Refactored subtitles handling:
- Removed externalSubsExist, externalSubsParsed and hasSubtitles() from DLNAMediaInfo
- Moved external subtitles resolution from being scattered around the code to DLNAResource.syncResolve()
- DLNAResource:
  - Implemented new thread-safe external subtitles resolution states hasExternalSubtitles, hasSubtitles and isExternalSubtitlesParsed
  - Refactored subtitles logic in ResolvePlayer()
  - Removed duplicated code in getDlnaOrgPnFlags()
  - Fixed a subtitles bug and improved logging in getDidlString()
  - Removed some deprecated subtitles related methods
  - Created new method registerExternalSubtitles() and automatic registration if subtitles states are read
  - Created new method resolveAudioStream() based on the former Player.setAudioOutputParameters()
  - Created new method resolveSubtitlesStream() based on the former Player.setSubtitleOutputParameters()
- Player:
  - Refactored setAudioAndSubs() to use the new DLNAResource methods for resolving audio and subtitles
  - Removed methods setAudioOutputParameters() and setSubtitleOutputParameters()
- Removed deprecated and no longer needed subtitles related methods from FileUtil: doesSubtitlesExists(), isSubtitlesExists() and browseFolderForSubtitles()
- SubtitleUtils:
  - Fixed some bugs
  - Created new inner class CacheFolder
  - Created new concurrent subtitles folder cache logic that allows multiple folders to be scanned at once
  - Created new method registerExternalSubtitles() that does a similar task as the former FileUtil.browseFolderForSubtitles()
  - Created new "helper" methods: isSubtitlesFolder(), isSubtitlesFile(), registerExternalSubtitlesFile(), setExternalSubtitlesParsed() and findPrioritizedSubtitles()

* Fixed database caching of subtitles

* Add Hindi (Indian) and Brazilian Portuguese flags.

* Update subs recognition

Fixed bugs to cast integral division result to double or float

* Created BufferedImageFilter and BufferedImageFilterChain:
  - Created abstract "helper" class NonGeometricBufferedImageOp
  - Implemented BufferedImageFilter in ImagesUtil.transcodeImage()
  - Created static thumbnail RenderingHints in DLNAResource
  - Created DLNAResource.addFlagFilters() and removed all "flag" logic from DLNAResource.getThumbnailInputStream()
  - Created weak caching for "flag" BufferedImages and a way to retrieve them in ImagesUtil.getLanguageFlag()
  - Implemented AudioFlagFilter and SubtitlesFlagFilter in ImagesUtil
  - Refactored FullyPlayed to generate a BufferedImageFilter instead of applying the overlay
  - Implemented filter chains in Request, RequestV2 and RemoteWeb
- Improved JavaDocs
- Formatting
- Fixed an NPE in DLNAResource
- Refactored MapFile.toString()

* Replaced undetermined "flag"

* Update the languages recognition with MediaInfo

* Refactored DLNAResource.getDisplayName() to try to make it sane

* - Set minimum subtitle "flag" resolution
- Adjust subtitle "flag" scaling

* Cleaned up TempFileMgr:
- Added logging
- Handled Exception
- Improved iteration performance
- Added character set handling

* Refactored/extended StringUtil.prettifyXML()

* - Fixed NPE in WinUtils.getShortPathNameW()
- Fixed NPE and expanded ProcessUtil.getShortFileNameIfWideChars()
- Refactored ProcessUtil.dbgWashCmds()

* Refactored FullyPlayed text prefix handling

* Improved TextAreaFIFO line removal performance

* Created WinUtils.getOEMCharset()

* Created some methods in FileUtil:
- Created new overloads for getExtension()
- Created new overloads for getFileNameWithoutExtension() and fixed NPE
- Fixed NPE and improved robustness of convertLowerCaseStringToTitleCase()
- Created new overloads for replaceExtension()

* - Refactored/rewrote ImdbUtil:
  - Switched to using java.nio instead of java.io
  - Removed cleanName()
  - Replaced extractImdb() with extractImdbId() which can also scan relevant .nfo files for IMDB ID
  - Fixed NPE in ensureTT()
  - Created removeTT()
  - Replaced extract() with extractFromFileName()
  - Created extractImdbIdFromNfo()
- Created new methods FileUtil.detectCharset()

* Refactored FileTranscodeVirtualFolder:
- Implemented working thumbnail support for FileTranscodeVirtualFolder
- Fixed subtitles for TRANSCODE folders that's children of LIVE SUBTITLES folders

* Reimplemented OpenSubtitles/Live subtitles support:
- Configuration:
  - Removed "live_subtitles_timeout" setting
  - Made "live_subtitles_keep" and "live_subtitles_limit" configurable from the GUI under transcoding/subtitles
- DLNAMediaSubtitle subclasses:
  - Created class DLNAMediaOnDemandSubtitle which implements support for other "on-demand" subtitles sources in the future
  - Created class DLNAMediaOpenSubtitle which handles everything related to subtitles from OpenSubtitles
  - Removed lived subtitles handling from DLNAMediaSubtitle
- DLNAResource:
  - Removed unused class PlaySub
  - Removed no longer used "superthumb" functionality from RealFile
  - Refactored SubSelFile to use new logic for discovery, prority, sorting and filtering/limiting
- Created new class DeadNodeList for more efficient XML parsing
- Rewrote OpenSubtitle class almost completely, only getInfo() which isn't used for subtitles handling ise the old logic

* - Created VideoClassification for classifying a video as movie, series, TV program etc
- Created FileNamePrettifier that is similar to FileUtil.getFileNamePrettified() but keeps the parsed details for later use and doesn't use OpenSubtitles

* Right-aligned numeric fields in TranscodingTab/Subtitle Settings for consistency

* - Added new setting "show_subs_info" replacing old setting "hide_subs_info"
- Added description for new setting to UMS.conf
- Rearranged NavigationShareTab for the net setting:
  - Added new setting
  - Switched functionality and texts for "hide engine names" to "show engine names"
  - Moved settings around to be more logical

* - Reduced contention in InfoDb
- Fixed generics errors in FileDb and InfoDb

* Removed streaming MicroDVD and VobSub support for Kodi

* Changed the DLNAMediaSubtitle.id() logic so it's only used for internal/embedded subtitles. External subtitles are recognized using isExternal() instead of id > 100

* Update the Web https setting. Based on the
http://www.universalmediaserver.com/forum/viewtopic.php?f=4&t=12156
Not related to this PR but could be merged with this.

* Use more efficient StringBuilder instead of "String +" in the

convertLowerCaseStringToTitleCase method.
Fix NPE in reformating the media name.

* SubtitlesInfoLevel to be rebased

NPE fix

Fixed potential NPE

* Implemented minimum similarity threshold for IMDB guesses

- Fixed several comparison bugs in SubSelFile
- Fixed NPE in OpenSubtitle

NPE fix

* Extended FileNamePrettifier with more constructors

* - Made string similarity case insensitive
- Extended guessImdbIdByFileName() with overload for filename instead of DLNAResource

* Faster OpenSubtitles hashing (from #1462 and #1469)

* Implemented new XML-RPC parser

Removed up old XML-RPC implementation

* Removed redundant qualifiers

* Cache prettified name

* Removed the copy of the original resource from the TRANSCODE folder

Fixed rebasing
Formatting

* Added more language flags

- ALB is Albanian
- ARM is Armenian
- BOS is Bosnian
- BUR is Burmese
- CNR is Montenegrin
- DZO is Dzongkha
- FIJ is Fijian
- FIL is Filipino
- GEO is Georgian
- GLE is Irish
- HRV is Croatian
- IND is Indonesian
- KAL is Kalaallisut
- KAZ is Kazakh
- KHM is Khmer
- LAO is Lao
- LTZ is Letzeburgesch
- MAC is Macedonian
- MAY is Malay
- MLG is Malagasy
- MLT is Maltese
- NAU is Nauru
- NEP is Nepali
- PAU is Palauan
- SRP is Serbian
- TIB is Tibetan
- TKL is Tokelau
- TLH is Klingon
- TON is Tonga
- TUK is Turkmen
- TVL is Tuvalu
- UZB is Usbekisch

* Updated plugins

commons-lang3 to 3.7,
maven-javadoc-plugin to 3.0.0
git-commit-id-plugin to 2.2.4

* - Updated com.rometools:rome to 1.9.0
- Removed maven-nsis-plugin

Fixed previous Cherry-Pick

* Slightly improved web interface HTTPS configuration

based on DMS
Fixed typo

* Update to match with DMS
Fixed typo

* Updated the org.apache.commons.text version to latest 1.3

* Update the database version.

To the table SUBTRACKS were added columns EXTERNALFILE and CHARSET

* Update rebasing to the master branch.

* Formatting

* Fix unsupported displayNameOverride to show propper item name.

* Removed not used import

* Fix implementation of the "displayNameOverride"

to work only in the MediaLibraryFolder. Thanks @Nadahar for the
recommendation.
Simplify the commit 9ae1a2f

* Better split of metadata extraction and OpenSubs lookup logic

Formatting

Removed unused function

* Fixed GUI
Fixed wrong GUI implementation

* Fixed transcode folder population

* Database updater

* fix

* Removed Oravle JDK 7 test from Travis CI build

It seems that Travis CI is finally decommissioning their Ubuntu Precise containers, which were the last to support Oracle JDK 7.

* Fix database append

* Fixed database updating

* Update database fix

* Do not update database with version lower that 11

* Update database initialisation

* Final database updating

* db updates

* Default to empty string in creation too (feels hacky)

* Delete some old entries for subtracks

* Rescan subtitles to be sure if they changed

* Update description

* Register external subs only when needed.

* Remove unused import

* Clean subtitles when disabled in general configuration

* Delete record in the database when external subs file do not exist

* Let DLNAResource to resolve subs in the syncResolve

* Implement the XXE processing disabled for the UMS XML implementation

* Remove unused import

* Replaced deprecated import

* Disable XXE in XMLInputFactory

* Make enablig XML External Entity configurable

* Avoid not necessary checking if the Logger trace mode is enabled.

It is done automatically using Logger.trace() method.

* Bump database version

* Fix deprecated StringEscapeUtils from org.apache.commons.lang3

* Fix merging

* Update twelvemonkeys imageio to the latest version

* Add back the isAddGlobally stuff

* Post-merge fixes

* Keep version ahead of master

* Fixed Live Subtitles

* Fixed burning picture subtitles when other filters are also used in
FFmpeg (#1650)

Conflicts:
	src/main/java/net/pms/encoders/FFMpegVideo.java

* Removed dependency on plexus StringUtils (#1625)

* Updated junrar to 1.0.1

This fixes CVE-2018-12418

* Fixed merge

* Rollback commons-text to support Java 7

* Rollback lang3 to match words

* Bump junrar

Conflicts:
	pom.xml
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/OpenSubtitle.java
	src/main/java/net/pms/util/TempFileMgr.java

* Remote control navigation support in webgui (#1637)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Update STYLEGUIDE.md

* Update CONTRIBUTING.md

* Mark FFmpeg as GPU acceleration ready

* Update Cling and Seamless to resolve security issue (#1609)

Fixes #1522

* Tests for metadata extraction from filename (#1632)

* Tests for metadata extraction from filename

Adds a new test function that checks the metadata
extracted from the filename.
Amends one of the testcases so that they correctly
reflect the current working of the extraction code.

* Remove id from testcase

Remove manual increment from the JSON files that
define the metadata extraction testcases.

* Added TODO tests in metadata extraction

While working on the metadata extraction patterns, new tests
that specify what needs to be covered and is currently not,
 are expected to fail. This commit makes it possible to mark
these new tests so that they do not cause an assertion error,
but only log a warning.

* Corrections in filename metadata extraction tests

Correct use of assertThat.
Correction in one of the test cases, where the expected value was wrong.
Correction in an episode number comparison, as episode numbers are
strings and not ints.

* Codestyle improvement

* Codestyle: strictly one statement per line

* Codestyle: fewer line breaks

* Updated build instructions for macOS

* Fixed bug reported in #1655 (#1656)

Fix thumbnails not persisting to db unless TRACE is enabled

* Bumped version to 7.6.0 and updated changelog

* Formatting

* Handling the "Album Artist" field present in the audio files.  (#1657)

* Handling the "Album Artist" field present in the audio files. There is
an excellent guide about the purpose of this field and I think UMS
should support this feature:
https://www.blisshq.com/music-library-management-blog/2010/10/12/how-to-use-album_artist/

* typo

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

* not needed

Co-Authored-By: maciekberry
<44756987+maciekberry@users.noreply.github.com>

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaDatabase.java
	src/main/java/net/pms/dlna/LibMediaInfoParser.java

* Pick up executables on the path in Linux (#1644)

DMS 9de2f2cea6b70c69aaea4de86e25cf809c7f88c8

* - Replaced ProgramPaths interface with PlatformProgramPaths and child
classes

- Implemented support for executable types (Bundled, Installed, Custom)
- Refactored Windows registry lookup to use JNA
- Implemented PlayerID for Player identification
- Created UniqueList List implementation
- Detached the SystemUtils singleton instance from PMS
- Implemented system PATH tools in FileUtil
- Created ExecutableInfo (immutable, builder pattern) to hold
information about executable files
- Implemented support for using bundled executable from their
development location
- Implemented automatic system PATH search for transcoding engines
- Created ExecutableErrorType
- Moved transcoding engine tests from PlayerFactory to the individual
Player classes
- Created NTStatus to map typical Windows return codes to more
meaningful errors

* Rollback unnecessary change to test

* Backwards compatibility for engine names

* Removed outdated comment

Conflicts:
	src/main/java/net/pms/dlna/DLNAMediaInfo.java
	src/main/java/net/pms/encoders/FFMpegVideo.java
	src/main/java/net/pms/encoders/Player.java
	src/main/java/net/pms/io/WinUtils.java
	src/main/java/net/pms/newgui/TranscodingTab.java
	src/main/java/net/pms/util/FileUtil.java
	src/main/java/net/pms/util/ProcessUtil.java
	src/main/resources/i18n/messages.properties

* Fix merging

* WIP Java 10 crash fix (#1497)

* WIP Java 10 crash fix

* Messy WIP

* Update to use Java 10 features

* Make it compatible with Java 1.7

* Attempt to maintain support for unicode fonts

* Formatting

* Formatting

* Fix to some web interface navigation issues (#1660)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* Rephrasing to fit text better

* Enable Samsung built-in resume functionality (#1662)

* feat: add support for samsung built-in resume

Closes #665

* feat(bookmark): restrict 'set bookmark' to samsung devices

Closes #665

* feat(bookmark): code cleanup

#665

* feat(bookmark): code cleanup

#665

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* - Moved Player executable getters from PmsConfiguration to the Player
instances (#1669)

- Implemented reuse of Player instances
- Implemented support for multiple executables when registering/testing
Player objects
From DMS af05744a843866cf94903a22d032f08f66d80bbc
Fixes #1668

Conflicts:
	src/main/java/net/pms/dlna/DLNAResource.java

* TODO to fix merging

* Revert "TODO to fix merging"

This reverts commit 5e7bcc7.

* refactor(requestv2): extract "createResponse" method (#1667)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* Updated changelog

* Minor formatting and scan speed improvement (#1672)

* Sync translations with Crowdin

* Updated changelog

* 7.6.1

* Remove snapshot text

* Enabled automatic updating to 7.6.1 on Windows

* refactor(requestv2): extract request handler methods  (#1689)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Support for Samsung Q9 series (#1697)

*  refactor(requestv2): inputStream as local variable (#1691)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* Clean status line when scan finished (#1698)

* Added config for Samsung Q6 Series TVs (#1699)

* Philips PUS8503 (#1692)

* WIP

* Fixed transcoding

* Update

* Detection tests

* Fix XVID recognition

* refactor(requestv2): extract dlna stream handler (#1700)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

Conflicts:
	src/main/java/net/pms/network/RequestV2.java

* Fix XVID recognition (#1705)

* Fix XVID recognition

* Do not stream subtitles for when they are transcoding

* Rename getFormat to setFormat in LibMediaInfoParser

and make some preliminary test

* Formatting

* Formatting

* Fix subtitles streaming logic

* Update Samsung subtitles logic

* Simplify the logic

* Removed depreated method

Conflicts:
	src/main/java/net/pms/dlna/LibMediaInfoParser.java
	src/main/java/net/pms/network/RequestV2.java

* Update the .conf (#1707)

* #1664 image fix (#1709)

* fix(image): fix image load

#1664

* fix(image): improve log message

#1664

* refactor(RequestV2): small code improvements (#1713)

* refactor(requestv2): extract `creteResponse` method

#1664

* refactor(requestv2): chain CRLF

#1664

* refactor(requestv2): remove duplicated CRLF

#1664

* refactor(requestv2): extract `searchHandler`

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): restore code indentation

#1664

* refactor(requestv2): extract request handlers

#1664

* refactor(requestv2): extract request handlers

#1664

* restore "compilerArgument" in pom.xml

#1664

* refactor(requestv2): inputStream as local variable

#1664

* refactor(requestv2): rename pms to ums

#1664

* refactor(requestv2): extract dlnaFileHandler

#1664

* refactor(requestv2): extract dlnaFileHandler

removed unused methods, placed variable declarations
in the scope where they belongs

#1664

* refactor(requestv2): code cleanup

#1664

* refactor(requestv2): fix image response

added missing `content-length` header for images and thumbnails

#1664

* refactor(requestv2): rename `argument` to `uri`

#1664

* refactor(requestv2): use HttpMethod instead of string

#1664

* refactor(requestv2): use local nettyRequest

#1664

Conflicts:
	src/main/java/net/pms/network/RequestHandlerV2.java

* Solving issue #1674 (#1711)

Solving issue #1674 (correct language passed to MediaInfoLib and avoiding incorrect genre labels)

*  Fixed issue #1706, Web interface broken hover effect on Firefox. (#1717)

* After merge, update my files.

* Merged changes to pom.
Removed spirton.com site references

* keycontroller.js:	fixed error loading jquery functions, due to line supporting new jquery version.
remoteui.css:		fixed web frontpage button alignment.
					fixed different folder list padding when changed to lower resolutions
					added custom scrollbar to webgui

* Change-Id: Ib40cbec3a42c8eeb751f7ac725c1ddf18bffe790
Added scroll with keys in folder list (for remote navigation)
Using some material design to list.

* Change-Id: I686d10e9cfae6d26e9789448b96202ee5627449d
Changed style to rounded edges cards

* Change-Id: Ibe93deb0bb85e0859c5bcbb8fe837d008ef43ed4
Important changes in web interface.
Added virtual keyboard for remote use.
Modified the way search is done.

* Change-Id: Ib392207540a48bdb3d6105fbc0092a9cafed02cb
fixed Frontpage background in css
fixed folder menu didn't display well in small resolutions
fixed remote navigation in play screen
added extra buttons to player toolbar for remote use
Added remote control toggle for fullscreen mode using button and exit
using OK key, with variants.
Fixed some style in bump affected by bootstrap css.

* Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

fixed media cards top padding not displaying well when window width is
lower than 1080px.
fixed folder list background color not the same when window width is
lower than 1080px.
added keyboard navigation to virtual keyboard close button and corrected
display css, display image removed, used webfont instead.
other minor adjustments and updated to master branch changes.

Change-Id: I92ff018c9318b74457ebfc67a2c9f5271787ca54

* Change-Id: Ibff3251c57fa5e8a6378287584a47f2e953b3b5e
Formatting and removing things that weren't implemented.

* Change-Id: I4a8eaac529b0e2a64081bc303d9eb8f7df8182b4
Fixed flickering effect while hover in add to playlist button due to
overlap.

* -Fixed header area not displaying focus element, due to css class removal. (remoteui.css)
-Fixed error while navigating in header if there were no media displayed in root directory. Gear menu not navigating properly. (keycontroller.js)
-Fixed keyboard not having focus when changes from letter to numbers. (jQKeyboard.js)
-Removed unused code in keyboard main file. (jQKeyboard.js)

* Fixed issue #1706, Web interface broken hover effect on Firefox.
Removed effect off transform translate in css, for media browsing, trying to find workaround, meanwhile, removed.

* Use H.264 in Chrome web interface (#1702)

* Use H.264 in Chrome web interface

* Removed old option

* Same on Firefox

* Formatting and only scale resolution when using libvorbis

* Removed unused config

* Fix merging

* Update merging

* Formatting

* Merge fixes

* More merge fixes + formatting

* !fixup

* Weak squishy (#1729)

* GlobalIdRepo: use weak references

* Synchronize lock in GlobalIdRepo.replace

* Add DLNAList.add()

* Fixed mismatched locks

* Formatting

* Formatting

* Replaced defaults for web content (#1730)

Fixes #1448

* 8.0.0-a1

* Bumped MediaInfo to 18.12

* Latest changes from the rebased_fixed_subs_recognition branch

* Bump to 8.0.0-a2

* Updated changelog

* 8.0.0-a2

* Fixed not respecting the "off" audio/subs language option

* Bump

* Fix NPE on loading web conf because of race condition in loading

Fixes #1739

* Bump version to b1

I think we can stop adding features to this release and just focus on fixing bugs, so it's in beta now

* Changes:

 - Fixed #1739
 - Fixed text when adding web content
 - Formatting and log level

* Fixed setting clash on the subtitles settings tab

* Fixed missing translation on the first time language chooser

* Minor formatting/safety

* Updated changelog

* Add option to disable FFMpeg GPU acceleration

* Fixed merge

* Fixed merge

* 8.0.0-b1

* Updated changelog

* Formatting

* Database cleanup removes files that are no longer shared

* 8.0.0-RC1

* ID and web interface fixes (#1765)

* Made "Back" button in web interface go to the parent

Fixes the bug where it looks for the ID that no longer exists (which is a symptom of another bug)

* Refactored crazy code

* Fixed "Season" not displaying on subsequent visits

* Formatting

* Renamed variables for clarity

* Stop doing redundant loops

* Made discoverChildren call doRefreshChildren since they were already doing the same thing

* Added logic to isRefreshNeeded

* Bump version to 7.9.1-SNAPSHOT

* Fix some Media Library queries

* Fixed music info (artist, album, genre, album artist, and year) not being saved to the resource or database

* Updated parsing support line logic, added trace logging

* Update parsing logic

* Fixed message in the format recognition subs test

* Update the FormatRecognitionTest

* Fixed wrong description for asserting

* Simplify the FormatRecognitionTest, update format testing

* Removed unused import

* Update the match() description

* Updated the forceTranscode logic

* Update the "match" media information logic

* Update Samsung Q9 conf

* Update FormatRecognitionTest

* Simplify the test

* Update Samsung Q9.conf

* Formatting

* Removed not used code

Co-authored-by: SubJunk <SubJunk@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants