Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc-ios
  • gsoc/GSoC2018/bubu/vlc-ios
  • bubu/vlc-ios
  • chamander/vlc-ios
  • fkuehne/vlc-ios
  • Yakuzzza/vlc-ios
  • nishiths23/vlc-ios
  • alexkusssha/vlc-ios
  • jay18001/vlc-ios
  • hoangduc67/vlc-ios
  • gsoc/gsoc2019/robwayne/vlc-ios
  • groschoppsteven/vlc-ios
  • tguillem/vlc-ios
  • ePirat/vlc-ios
  • cerezo074/vlc-ios
  • edrflt/vlc-ios
  • Zirkovskij/vlc-ios
  • bakroistvan/vlc-ios
  • heidlerjustin/vlc-ios
  • W1ns/vlc-ios
  • karpun.ksv122454/vlc-ios
  • adtrevor/vlc-ios
  • rrangel3584/vlc-ios
  • Ggjgg/vlc-ios
  • tanenyi/vlc-ios
  • tmsblgh/vlc-ios
  • gale4004/vlc-ios
  • abytom/vlc-ios
  • rubendelapena/vlc-ios
  • DanielaRocha6/vlc-ios
  • kuznetsov-m/vlc-ios
  • dcodesuport/vlc-ios
  • gsoc/gsoc2020/swapnanildholg/vlc-ios
  • alexandre-janniaux/vlc-ios
  • zhkzte/vlc-ios
  • elbrujo1987/vlc-ios
  • PJStation/vlc-ios
  • diogo.simao-marques/vlc-ios
  • lalo-azamar/vlc-ios
  • dnicolson/vlc-ios
  • megan30/vlc-ios
  • yreifschneider/vlc-ios
  • pushpinderpalsingh/vlc-ios
  • jfarmer/vlc-ios
  • malekBarkaoui/vlc-ios
  • m/vlc-ios
  • zuzuweasly/vlc-ios
  • beingsparsh/vlc-ios
  • anubhavsingh19/vlc-ios
  • SnailMS/vlc-ios
  • dariustancode/vlc-ios
  • chandan.309kr/vlc-ios
  • umxprime/vlc-ios
  • vlcone/vlc-ios
  • bsidhom/vlc-ios
  • DeveshBisen/vlc-ios
  • denissparrow12/vlc-ios
  • antonianemi/vlc-ios
  • fieldsmonroe433/vlc-ios
  • antonviljoen9/vlc-ios
  • greenscgea/vlc-ios
  • keyseltmelanie/vlc-ios
  • collectionbylawrencejason/vlc-ios
  • aofsurachet1983/vlc-ios
  • archi.fahim/vlc-ios
  • XuanTung95/vlc-ios
  • nasirhemed/vlc-ios
  • ke994780/vlc-ios
  • kiwiren6666/vlc-ios
  • walikelas90/vlc-ios
  • ikeuzochukwu6/vlc-ios
  • NOTAG/vlc-ios
  • tatoonorth418/vlc-ios
  • deutschkiller72/vlc-ios
  • alexnwayne/vlc-ios
  • kiku.masa.mune00/vlc-ios
  • onfire4g05/vlc-ios
  • ass1ngl33y/vlc-ios
  • berrylcm/vlc-ios
  • ugotmjke46/vlc-ios
  • lehmacdj/vlc-ios
  • Prabal/vlc-ios
  • protechq88/vlc-ios
  • KDOT2EAZY/vlc-ios
  • king7532/vlc-ios
  • uniqueunicorn333/vlc-ios
  • Againreallly/vlc-ios
  • mztea928/vlc-ios
  • pabloluna.bella/vlc-ios
  • EshanSingh-ES/vlc-ios
  • arditx02/vlc-ios
  • tomas23prenosil/vlc-ios
  • yonat/vlc-ios
  • whatsupmf09/vlc-ios
  • Perklone/vlc-ios
  • vettrecompetitive/vlc-ios
  • ojaidi.905/vlc-ios
  • reubot/vlc-ios
  • loegue1910/vlc-ios
  • jeffmarshall/vlc-ios
  • pup.ragnarok.1984/vlc-ios
  • aviwad/vlc-ios
  • ashishami2002/vlc-ios
  • Sumou/vlc-ios
  • iampratik/vlc-ios
  • Sliem/vlc-ios
  • Apeng/vlc-ios
  • ibrahimcetin/vlc-ios
  • Aperence/vlc-ios
  • Truls/vlc-ios
  • Nilsjoberl/vlc-ios
  • Naruyoko/vlc-ios
  • borisgolovnev/vlc-ios
  • christianbilodeau/vlc-ios
  • liamjwang/vlc-ios
  • surajeet310/vlc-ios
  • craig_r/vlc-ios
  • labala/vlc-ios
  • arthurnorat/vlc-ios
  • 0xfee1de4d/vlc-ios
  • harlanhaskins/vlc-ios
  • rae/vlc-ios
  • gremlinflat/vlc-ios
  • robbiedeane/vlc-ios
124 results
Show changes
Commits on Source (8)
Showing
with 236 additions and 77 deletions
......@@ -22,8 +22,8 @@ target 'VLC-iOS' do
pod 'InAppSettingsKit', :git => 'git://github.com/fkuehne/InAppSettingsKit.git', :commit => '415ea6bb' #tvOS fix
pod 'PAPasscode', '~>1.0'
pod 'GoogleAPIClientForREST/Drive'
pod 'MobileVLCKit', '3.3.6'
pod 'VLCMediaLibraryKit', '0.6.1'
pod 'MobileVLCKit', '3.3.7'
pod 'VLCMediaLibraryKit', '0.6.2'
pod 'MediaLibraryKit-prod'
pod 'GTMAppAuth', '0.7.1'
pod 'OneDriveSDK'
......
......@@ -49,7 +49,7 @@ PODS:
- MetaDataFetcherKit (0.3.1):
- AFNetworking (= 3.1.0)
- OROpenSubtitleDownloader
- MobileVLCKit (3.3.6)
- MobileVLCKit (3.3.7)
- "NSData+Base64 (1.0.0)"
- ObjectiveDropboxOfficial (1.1)
- OBSlider (1.1.0)
......@@ -81,7 +81,7 @@ PODS:
- TVVLCKit (3.3.6)
- upnpx (1.4.1)
- VLC-WhiteRaccoon (1.0.0)
- VLCMediaLibraryKit (0.6.1):
- VLCMediaLibraryKit (0.6.2):
- MobileVLCKit
- XKKeychain (1.0.1)
- xmlrpc (2.3.4):
......@@ -97,7 +97,7 @@ DEPENDENCIES:
- InAppSettingsKit (from `git://github.com/fkuehne/InAppSettingsKit.git`, commit `415ea6bb`)
- MediaLibraryKit-prod
- MetaDataFetcherKit (~> 0.3.1)
- MobileVLCKit (= 3.3.6)
- MobileVLCKit (= 3.3.7)
- ObjectiveDropboxOfficial (from `git://github.com/Mikanbu/dropbox-sdk-obj-c.git`)
- OBSlider (= 1.1.0)
- OneDriveSDK
......@@ -108,7 +108,7 @@ DEPENDENCIES:
- TVVLCKit (= 3.3.6)
- upnpx (~> 1.4.0)
- VLC-WhiteRaccoon
- VLCMediaLibraryKit (= 0.6.1)
- VLCMediaLibraryKit (= 0.6.2)
- XKKeychain (~> 1.0)
SPEC REPOS:
......@@ -184,7 +184,7 @@ SPEC CHECKSUMS:
InAppSettingsKit: 76d5cfbaa3e3f8aa53fe3628516da7eb1aa6a5cb
MediaLibraryKit-prod: 718b52b55cb40b479eeae29fb5cc0cfbbbce0191
MetaDataFetcherKit: d1d61b061bf74268aaffb6bf08a70396672163df
MobileVLCKit: ac619632d83dd1691e9eedb40f5efdf3c2e6d67c
MobileVLCKit: ce2e96b708d90b6d03997bd7be79ecfc413a6ed4
"NSData+Base64": 4e84902c4db907a15673474677e57763ef3903e4
ObjectiveDropboxOfficial: b9e95d98e3ff2baa0cd86aea7c8322a712f356d6
OBSlider: 490f108007bfdd5414a38650b211fe403a95b8a0
......@@ -196,10 +196,10 @@ SPEC CHECKSUMS:
TVVLCKit: c568ead8117ed607f837f1e9579500abe5fb4ed0
upnpx: f2a1b44c095b90e0a017ec0394e367053e78c31f
VLC-WhiteRaccoon: 1e7e59b0568959135a89d09c416d1e11a5d9a986
VLCMediaLibraryKit: aebe63267f4d75cdd40d6ef10fd84aa91a0ec7a4
VLCMediaLibraryKit: 37bb14b691994a49bcba40873c610c521e76122c
XKKeychain: 852ef663c56a7194c73d3c68e8d9d4f07b121d4f
xmlrpc: 109bb21d15ed6d108b2c1ac5973a6a223a50f5f4
PODFILE CHECKSUM: 91706def71a9f548457a86dcf93ef302f3bfdd4f
PODFILE CHECKSUM: fcee9d421bcf0fa0369868aaf4810cfd6a7f09de
COCOAPODS: 1.8.3
......@@ -290,7 +290,8 @@
"DELETE_ITEM_HINT" = "Press %@ to Delete"; /* Insert %@ where play-pause-glyph should be placed */
"DELETE_MESSAGE" = "Confirm the deletion of the selection";
"DELETE_MESSAGE_PLAYLIST" = "Confirm the deletion of the selection from the playlist\nMedia items are not deleted";
"DELETE_MESSAGE_PLAYLIST" = "Are you sure to delete the selected playlist?\nAssociated media files won't be deleted.";
"DELETE_MESSAGE_PLAYLIST_CONTENT" = "Are you sure to remove the selected media from the playlist?\nThey won't be deleted from the disk.";
"DELETE_TITLE" = "Delete Selection";
//Drag and Drop
......@@ -395,3 +396,10 @@
/* Settings - Force rescan alert */
"FORCE_RESCAN_TITLE" = "Force media library rescan";
"FORCE_RESCAN_MESSAGE" = "Do you want to force VLC to rescan your media library?\nIt could take some time.";
// Local Network
"SMBV1_WARN_TITLE" = "SMBv1 Connection Warning";
"SMBV1_WARN_DESCRIPTION" = "We detected an old protocol (SMBv1).\nAre you really sure to continue with SMBv1?\nWe advise upgrading or changing your server settings.";
"SMBV1_CONTINUE" = "Continue with SMBv1";
"SMBV1_NEXT_PROTOCOL" = "Try SMBv2/v3";
......@@ -13,6 +13,7 @@
@objc(VLCCustomDialogRendererHandlerCompletionType)
enum CustomDialogRendererHandlerCompletionType: Int {
case cancel
case stop
case error
case complete
}
......@@ -31,26 +32,39 @@ class CustomDialogRendererHandler: NSObject {
}
}
// MARK: - VLCCustomDialogRendererProtocol
// MARK: - Private helpers
extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol {
func showError(withTitle error: String, message: String) {
completionHandler?(.error)
}
private extension CustomDialogRendererHandler {
private func handleSMBv1(completionHandler: @escaping (Bool) -> Void) {
let alertController = UIAlertController(title: NSLocalizedString("SMBV1_WARN_TITLE", comment: ""),
message: NSLocalizedString("SMBV1_WARN_DESCRIPTION", comment: ""),
preferredStyle: .alert)
func showProgress(withTitle title: String, message: String,
isIndeterminate: Bool, position: Float, cancel cancelString: String?,
withReference reference: NSValue) {
// noop
}
alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_CONTINUE", comment:""),
style: .destructive, handler: {
action in
completionHandler(true)
}))
func updateProgress(withReference reference: NSValue, message: String?, position: Float) {
// noop
alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_NEXT_PROTOCOL", comment:""),
style: .default, handler: {
action in
completionHandler(false)
}))
if let rootViewController = UIApplication.shared.delegate?.window??.rootViewController {
let presentingController = rootViewController.presentedViewController ?? rootViewController
presentingController.present(alertController, animated: true, completion: nil)
}
}
func showLogin(withTitle title: String, message: String,
defaultUsername username: String?, askingForStorage: Bool, withReference reference: NSValue) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
private func handleLoginAlert(with title: String, message: String,
username: String?, askingForStorage: Bool,
withReference reference: NSValue,
shouldIgnoreNextDialog: Bool) {
let alertController = UIAlertController(title: title, message: message,
preferredStyle: .alert)
var usernameField: UITextField?
var passwordField: UITextField?
......@@ -85,8 +99,12 @@ extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol {
alertController.addAction(UIAlertAction(title: NSLocalizedString("BUTTON_CANCEL", comment:""),
style: .cancel, handler: {
[weak self] action in
self?.dialogProvider.dismissDialog(withReference: reference)
self?.completionHandler?(.cancel)
if shouldIgnoreNextDialog {
self?.completionHandler?(.stop)
} else {
self?.completionHandler?(.cancel)
self?.dialogProvider.dismissDialog(withReference: reference)
}
}))
if askingForStorage {
alertController.addAction(UIAlertAction(title: NSLocalizedString("BUTTON_SAVE", comment:""), style: .default,
......@@ -105,7 +123,48 @@ extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol {
let presentingController = rootViewController.presentedViewController ?? rootViewController
presentingController.present(alertController, animated: true, completion: nil)
}
}
}
// MARK: - VLCCustomDialogRendererProtocol
extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol {
func showError(withTitle error: String, message: String) {
completionHandler?(.error)
}
func showProgress(withTitle title: String, message: String,
isIndeterminate: Bool, position: Float, cancel cancelString: String?,
withReference reference: NSValue) {
// noop
}
func updateProgress(withReference reference: NSValue, message: String?, position: Float) {
// noop
}
func showLogin(withTitle title: String, message: String,
defaultUsername username: String?, askingForStorage: Bool,
withReference reference: NSValue) {
if title.contains("SMBv1") {
handleSMBv1() {
[weak self] isSMBv1 in
if isSMBv1 {
self?.handleLoginAlert(with: title, message: message,
username: username,
askingForStorage: askingForStorage,
withReference: reference, shouldIgnoreNextDialog: true)
} else {
self?.dialogProvider.dismissDialog(withReference: reference)
}
}
} else {
handleLoginAlert(with: title, message: message,
username: username,
askingForStorage: askingForStorage,
withReference: reference, shouldIgnoreNextDialog: false)
}
}
func showQuestion(withTitle title: String, message: String,
......
......@@ -98,6 +98,10 @@ extension AlbumModel: MediaLibraryObserver {
}
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
extension VLCMLAlbum: MediaCollectionModel {
......
......@@ -83,6 +83,9 @@ extension ArtistModel: MediaLibraryObserver {
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
extension VLCMLArtist: MediaCollectionModel {
......
......@@ -93,5 +93,9 @@ extension CollectionModel: MediaLibraryObserver {
files = mediaCollection.files() ?? []
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
......@@ -65,6 +65,9 @@ extension GenreModel: MediaLibraryObserver {
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
// MARK: - Sort
......
......@@ -40,10 +40,19 @@ class PlaylistModel: MLBaseModel {
}
func delete(_ items: [VLCMLObject]) {
for playlist in items where playlist is VLCMLPlaylist {
for case let playlist as VLCMLPlaylist in items {
if !(medialibrary.deletePlaylist(with: playlist.identifier())) {
assertionFailure("PlaylistModel: Failed to delete playlist: \(playlist.identifier())")
}
if playlist.isReadOnly {
do {
if let path = playlist.mrl?.path, !path.isEmpty {
try FileManager.default.removeItem(atPath: path)
}
} catch let error as NSError {
assertionFailure("PlaylistModel: Delete failed: \(error.localizedDescription)")
}
}
}
// Update directly the UI without waiting the delegate to avoid showing 'ghost' items
......@@ -111,6 +120,10 @@ extension PlaylistModel: MediaLibraryObserver {
}
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
// MARK: - Helpers
......
......@@ -53,4 +53,8 @@ extension ShowEpisodeModel: MediaLibraryObserver {
showEpisodes.forEach({ append($0) })
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
......@@ -69,4 +69,8 @@ extension TrackModel: MediaLibraryObserver {
}
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
......@@ -78,4 +78,8 @@ extension VideoModel: MediaLibraryObserver {
}
updateView?()
}
func medialibraryDidStartRescan() {
files.removeAll()
}
}
......@@ -92,6 +92,9 @@ extension NSNotification {
@objc optional func medialibrary(_ medialibrary: MediaLibraryService,
didDeletePlaylistsWithIds playlistsIds: [NSNumber])
// Force Rescan
@objc func medialibraryDidStartRescan()
}
// MARK: -
......@@ -662,3 +665,28 @@ extension MediaLibraryService {
}
}
}
// MARK: - VLCMediaLibraryDelegate - Exception handling
extension MediaLibraryService {
func medialibrary(_ medialibrary: VLCMediaLibrary,
unhandledExceptionWithContext context: String,
errorMessage: String, clearSuggested: Bool) -> Bool {
if clearSuggested {
medialib.clearDatabase(restorePlaylists: true)
setupMediaLibrary()
return true
}
return false
}
}
// MARK: - VLCMLMediaLibraryDelegate - Force rescan
extension MediaLibraryService {
func medialibraryDidStartRescan(_ medialibrary: VLCMediaLibrary) {
for observer in observers {
observer.value.observer?.medialibraryDidStartRescan()
}
}
}
......@@ -38,6 +38,7 @@
_mediaList = [[VLCMediaList alloc] init];
_rootMedia = media;
_rootMedia.delegate = self;
[media addOption:kVLCForceSMBV1];
// Set timeout to 0 in order to avoid getting interrupted in dialogs for timeout reasons
[media parseWithOptions:VLCMediaParseNetwork|VLCMediaDoInteract timeout:0];
_mediaListUnfiltered = [_rootMedia subitems];
......@@ -50,11 +51,24 @@
_dialogProvider = [[VLCDialogProvider alloc] initWithLibrary:[VLCLibrary sharedLibrary] customUI:YES];
_customDialogHandler = [[VLCCustomDialogRendererHandler alloc]
initWithDialogProvider:_dialogProvider];
__weak typeof(self) weakSelf = self;
_customDialogHandler.completionHandler = ^(VLCCustomDialogRendererHandlerCompletionType status)
{
[weakSelf customDialogCompletionHandlerWithStatus:status];
};
_dialogProvider.customRenderer = _customDialogHandler;
}
return self;
}
- (void)customDialogCompletionHandlerWithStatus:(VLCCustomDialogRendererHandlerCompletionType)status
{
if (status == VLCCustomDialogRendererHandlerCompletionTypeStop) {
[_rootMedia parseStop];
}
}
- (BOOL)shouldFilterMedia:(VLCMedia *)media
{
NSString *absoluteString = media.url.absoluteString;
......
......@@ -195,11 +195,10 @@ extension EditController: EditToolbarDelegate {
var message = NSLocalizedString("DELETE_MESSAGE", comment: "")
// Check if we are deleting media inside a playlist
if let collectionModel = model as? CollectionModel {
if collectionModel.mediaCollection is VLCMLPlaylist {
message = NSLocalizedString("DELETE_MESSAGE_PLAYLIST", comment: "")
}
if model is PlaylistModel {
message = NSLocalizedString("DELETE_MESSAGE_PLAYLIST", comment: "")
} else if (model as? CollectionModel)?.mediaCollection is VLCMLPlaylist {
message = NSLocalizedString("DELETE_MESSAGE_PLAYLIST_CONTENT", comment: "")
}
let cancelButton = VLCAlertButton(title: NSLocalizedString("BUTTON_CANCEL", comment: ""),
......
......@@ -20,68 +20,76 @@
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bhw-Aa-3Q7">
<rect key="frame" x="0.0" y="0.0" width="480" height="80"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="jwA-4O-tgL">
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="eJj-AH-F3E">
<rect key="frame" x="0.0" y="0.0" width="480" height="80"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="249" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="DpW-xo-rll" userLabel="Thumbnail">
<rect key="frame" x="0.0" y="12" width="56" height="56"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="249" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="Uhx-qs-Aow">
<rect key="frame" x="0.0" y="28" width="24" height="24"/>
<constraints>
<constraint firstAttribute="width" secondItem="DpW-xo-rll" secondAttribute="height" multiplier="1:1" id="K1w-Z8-Rbn"/>
<constraint firstAttribute="width" constant="56" id="vgz-Bg-lit"/>
<constraint firstAttribute="width" constant="24" id="mjC-Gz-Bsh"/>
<constraint firstAttribute="height" constant="24" id="tJy-jX-8lt"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="HHK-jR-WLx">
<rect key="frame" x="64" y="12" width="416" height="56.5"/>
<stackView opaque="NO" contentMode="scaleToFill" horizontalCompressionResistancePriority="752" alignment="center" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="jwA-4O-tgL">
<rect key="frame" x="4" y="12" width="476" height="56.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="new" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Klo-Bq-5nI" userLabel="NewLabel">
<rect key="frame" x="0.0" y="0.0" width="416" height="12"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="10"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="252" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zkn-vN-SN4" userLabel="Titlelabel">
<rect key="frame" x="0.0" y="16" width="416" height="20.5"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5N8-js-t0W" userLabel="descriptionLabel">
<rect key="frame" x="0.0" y="40.5" width="416" height="16"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="249" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="DpW-xo-rll" userLabel="Thumbnail">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" secondItem="DpW-xo-rll" secondAttribute="height" multiplier="1:1" id="K1w-Z8-Rbn"/>
<constraint firstAttribute="width" constant="56" id="vgz-Bg-lit"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="HHK-jR-WLx">
<rect key="frame" x="64" y="0.0" width="412" height="56.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="new" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Klo-Bq-5nI" userLabel="NewLabel">
<rect key="frame" x="0.0" y="0.0" width="412" height="12"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="10"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="252" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zkn-vN-SN4" userLabel="Titlelabel">
<rect key="frame" x="0.0" y="16" width="412" height="20.5"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5N8-js-t0W" userLabel="descriptionLabel">
<rect key="frame" x="0.0" y="40.5" width="412" height="16"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="13"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list" translatesAutoresizingMaskIntoConstraints="NO" id="f9J-sb-sdM">
<rect key="frame" x="476" y="16" width="24" height="24"/>
<color key="tintColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="Cdn-hR-SHJ"/>
<constraint firstAttribute="height" constant="24" id="EaV-Ae-GP2"/>
</constraints>
</imageView>
</subviews>
</stackView>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list" translatesAutoresizingMaskIntoConstraints="NO" id="f9J-sb-sdM">
<rect key="frame" x="480" y="28" width="24" height="24"/>
<color key="tintColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="Cdn-hR-SHJ"/>
<constraint firstAttribute="height" constant="24" id="EaV-Ae-GP2"/>
</constraints>
</imageView>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="4" bottom="0.0" right="0.0"/>
</stackView>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vQV-tE-gv0">
<rect key="frame" x="0.0" y="0.0" width="480" height="80"/>
<color key="backgroundColor" red="0.94509803920000002" green="0.49019607840000001" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="Uhx-qs-Aow">
<rect key="frame" x="16" y="28" width="24" height="24"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="eJj-AH-F3E" secondAttribute="bottom" id="1re-cC-4xs"/>
<constraint firstItem="vQV-tE-gv0" firstAttribute="width" secondItem="bhw-Aa-3Q7" secondAttribute="width" id="Dqf-E3-sXZ"/>
<constraint firstItem="Uhx-qs-Aow" firstAttribute="centerY" secondItem="DpW-xo-rll" secondAttribute="centerY" id="Nii-BJ-jmJ"/>
<constraint firstItem="Uhx-qs-Aow" firstAttribute="centerX" secondItem="DpW-xo-rll" secondAttribute="centerX" id="Pid-97-YyF"/>
<constraint firstItem="jwA-4O-tgL" firstAttribute="leading" secondItem="bhw-Aa-3Q7" secondAttribute="leading" id="YQR-FC-YG0"/>
<constraint firstAttribute="bottom" secondItem="jwA-4O-tgL" secondAttribute="bottom" id="cPv-gK-orc"/>
<constraint firstItem="jwA-4O-tgL" firstAttribute="top" secondItem="bhw-Aa-3Q7" secondAttribute="top" id="gXu-Td-kve"/>
<constraint firstAttribute="trailing" secondItem="eJj-AH-F3E" secondAttribute="trailing" id="au8-zQ-pfA"/>
<constraint firstItem="eJj-AH-F3E" firstAttribute="leading" secondItem="bhw-Aa-3Q7" secondAttribute="leading" id="jqw-81-Khq"/>
<constraint firstItem="vQV-tE-gv0" firstAttribute="height" secondItem="bhw-Aa-3Q7" secondAttribute="height" id="m5l-X4-Pqt"/>
<constraint firstAttribute="trailing" secondItem="jwA-4O-tgL" secondAttribute="trailing" id="mtd-yR-U0o"/>
<constraint firstItem="eJj-AH-F3E" firstAttribute="top" secondItem="bhw-Aa-3Q7" secondAttribute="top" id="osX-uS-f9J"/>
<constraint firstItem="vQV-tE-gv0" firstAttribute="centerY" secondItem="bhw-Aa-3Q7" secondAttribute="centerY" id="pcz-sz-DBh"/>
<constraint firstItem="vQV-tE-gv0" firstAttribute="centerX" secondItem="bhw-Aa-3Q7" secondAttribute="centerX" id="xBV-Z6-LrT"/>
</constraints>
......
......@@ -78,6 +78,8 @@
#define kVLCSettingShowArtworks @"ShowArtworks"
#define kVLCSettingShowArtworksDefaultValue @YES
#define kVLCForceSMBV1 @"smb-force-v1"
#define kVLCSettingsMediaLibraryVideoGroupPrefixLength @"VideoGroupPrefixLength"
#define kVLCSettingsMediaLibraryVideoGroupPrefixLengthDefaultValue @"6"
......
......@@ -1273,7 +1273,9 @@ NSString *const VLCPlaybackServicePlaybackPositionUpdated = @"VLCPlaybackService
kVLCSettingStretchAudio : [[defaults objectForKey:kVLCSettingStretchAudio] boolValue] ? kVLCSettingStretchAudioOnValue : kVLCSettingStretchAudioOffValue,
kVLCSettingTextEncoding : [defaults objectForKey:kVLCSettingTextEncoding],
kVLCSettingSkipLoopFilter : [defaults objectForKey:kVLCSettingSkipLoopFilter],
kVLCSettingHardwareDecoding : [defaults objectForKey:kVLCSettingHardwareDecoding]};
kVLCSettingHardwareDecoding : [defaults objectForKey:kVLCSettingHardwareDecoding],
kVLCForceSMBV1 : [NSNull null]
};
}
#pragma mark - Renderer
......