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 (10)
......@@ -8,7 +8,7 @@ def shared_pods
pod 'CocoaHTTPServer', :git => 'https://code.videolan.org/fkuehne/CocoaHTTPServer.git', :commit => '08f9b818'
pod 'AFNetworking', :git => 'https://code.videolan.org/fkuehne/AFNetworking.git', :commit => 'ee51009a' # add visionOS support
pod 'VLCKit', '4.0.0a10'
pod 'VLCMediaLibraryKit', '0.13.0a10'
pod 'VLCMediaLibraryKit', '0.13.0a11'
end
target 'VLC-iOS' do
......
......@@ -73,7 +73,7 @@ PODS:
- SimulatorStatusMagic (2.7)
- SwiftLint (0.50.3)
- VLCKit (4.0.0a10)
- VLCMediaLibraryKit (0.13.0a10):
- VLCMediaLibraryKit (0.13.0a11):
- VLCKit (>= 4.0.0a10)
- XKKeychain (1.0.1)
......@@ -96,7 +96,7 @@ DEPENDENCIES:
- SimulatorStatusMagic
- SwiftLint (~> 0.50.3)
- VLCKit (= 4.0.0a10)
- VLCMediaLibraryKit (= 0.13.0a10)
- VLCMediaLibraryKit (= 0.13.0a11)
- XKKeychain (from `https://code.videolan.org/fkuehne/XKKeychain.git`, commit `40abb8f1`)
SPEC REPOS:
......@@ -200,9 +200,9 @@ SPEC CHECKSUMS:
SimulatorStatusMagic: 4e15e56530b367e90dcd3b94fd272e833e9d8a44
SwiftLint: 77f7cb2b9bb81ab4a12fcc86448ba3f11afa50c6
VLCKit: e21135aece10e3aa89e34020b7112b73d7cc98e6
VLCMediaLibraryKit: 59c58376b7592e9a1b14106dfc24c40d854bb740
VLCMediaLibraryKit: 5bbd1dd300e88b8df607077b2b01b6952c8d48fb
XKKeychain: 160ce5bfeff49e9fef091f7fc2b2fe5a5aa08e08
PODFILE CHECKSUM: 08c77786bb3b3cd075029e8f71fc44c305f3f101
PODFILE CHECKSUM: 65a7fa9ee482022fade614219df0522c6399aafe
COCOAPODS: 1.15.2
......@@ -135,11 +135,11 @@ Before creating an issue or ticket, please double check for duplicates!
Want to quickly get in touch with us for a question, or even just to talk?
You will always find someone from the VLC team on IRC, __#videolan__ channel on the freenode network.
You will always find someone from the VLC team on IRC, __#videolan__ channel on the Libera Chat network.
For VLC-iOS specific questions, you can find us on __#vlc-ios__.
If you don't have an IRC client, you can always use the [freenode webchat](https://webchat.freenode.net/).
If you don't have an IRC client, you can always use the [Libera Chat webchat](https://web.libera.chat/?channels=#videolan,%23vlc-ios).
## Code of Conduct
......
......@@ -432,6 +432,7 @@
"NB_ALBUM" = "Number of albums";
"LAST_PLAYBACK_DATE" = "Last playback date";
"TRACK_ID" = "Track ID";
"CUSTOM" = "Custom";
// MARK: - VLCNetworkLoginTVViewController
......@@ -544,7 +545,6 @@
"FORCE_RESCAN_MESSAGE" = "Do you want to force VLC to rescan your media library?\nIt could take some time.";
"FEEDBACK_EMAIL_TITLE" = "Feedback about VLC on iOS and iPad";
"FEEDBACK_EMAIL_BODY" = "Please enter your feedback above this line.\n\nAnonymous information:";
"FEEDBACK_EMAIL_NOT_POSSIBLE_TITLE" = "Mail account not configured";
"FEEDBACK_EMAIL_NOT_POSSIBLE_LONG" = "Contact us through %@ from another device.";
......
......@@ -166,7 +166,9 @@ class AboutController: UIViewController, MFMailComposeViewControllerDelegate, UI
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients([feedbackEmail])
mailComposerVC.setSubject(NSLocalizedString("FEEDBACK_EMAIL_TITLE", comment: ""))
mailComposerVC.setMessageBody(generateFeedbackEmailPrefill(), isHTML: false)
mailComposerVC.addAttachmentData(generateFeedbackEmailAttachment(),
mimeType: "application/json",
fileName: "details.json")
self.present(mailComposerVC, animated: true)
} else {
let alert = UIAlertController(title: NSLocalizedString("FEEDBACK_EMAIL_NOT_POSSIBLE_TITLE", comment: ""),
......@@ -178,26 +180,33 @@ class AboutController: UIViewController, MFMailComposeViewControllerDelegate, UI
}
}
func generateFeedbackEmailPrefill() -> String {
func generateFeedbackEmailAttachment() -> Data {
let bundleShortVersionString = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let device = UIDevice.current
let defaults = UserDefaults.standard
let locale = NSLocale.autoupdatingCurrent
let prefilledFeedback = String(format: "\n\n\n----------------------------------------\n%@\nDevice: %@\nOS: %@ - %@\nLocale: %@ (%@)\nVLC app version: %@\nlibvlc version: %@\nhardware decoding: %i\nnetwork caching level: %i\nskip loop filter: %i\nRTSP over TCP: %i\nAudio time stretching: %i",
NSLocalizedString("FEEDBACK_EMAIL_BODY", comment: ""),
generateDeviceIdentifier(),
device.systemName,
device.systemVersion,
locale.languageCode!,
locale.regionCode!,
bundleShortVersionString,
VLCLibrary.shared().changeset,
defaults.integer(forKey: kVLCSettingHardwareDecoding),
defaults.integer(forKey: kVLCSettingNetworkCaching),
defaults.integer(forKey: kVLCSettingSkipLoopFilter),
defaults.integer(forKey: kVLCSettingNetworkRTSPTCP),
defaults.integer(forKey: kVLCSettingStretchAudio))
return prefilledFeedback
let json: [String: Any] = [
"Device": generateDeviceIdentifier(),
"OS": "\(device.systemName) - \(device.systemVersion)",
"Locale": "\(locale.languageCode!) (\(locale.regionCode!))",
"VLC app version": bundleShortVersionString,
"libvlc version": VLCLibrary.shared().changeset,
"hardware decoding": defaults.integer(forKey: kVLCSettingHardwareDecoding),
"network caching level": defaults.integer(forKey: kVLCSettingNetworkCaching),
"skip loop filter": defaults.integer(forKey: kVLCSettingSkipLoopFilter),
"RTSP over TCP": defaults.integer(forKey: kVLCSettingNetworkRTSPTCP),
"Audio time stretching": defaults.integer(forKey: kVLCSettingStretchAudio)
]
do {
let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
return jsonData
} catch {
print("Error encoding JSON: \(error.localizedDescription)")
return Data()
}
}
func generateDeviceIdentifier() -> String {
......
......@@ -28,7 +28,7 @@
</p>
<p align="center">Copyright &copy; 2013-2025 VideoLAN and authors<br />
<br />Written by <a href="https://www.feepk.net">Felix Paul Kühne</a>, <a href="https://github.com/Mikanbu">Soomin Lee</a>, <a href="http://carolanitz.com">Carola Nitz</a>, <a href="http://github.com/toco">Tobias Conradi</a>, <a href="https://edgar.fouillet.eu">Edgar Fouillet</a>, <a href="http://twitter.com/iTarax">Pierre Sagaspe</a>, <a href="http://twitter.com/gpinigin">Gleb Pinigin</a>, <a href="https://code.videolan.org/diogo.simao-marques">Diogo Simao Marques</a>, Romain Goyet, <a href="http://deadbeef.me/"> Mike JS. Choi</a>, <a href="http://jbkempf.com">Jean-Baptiste Kempf</a>, <a href="http://taplightsoftware.com">Marc Etcheverry</a>, <br />with additions by David Cordero, Vincent L. Cone, David Loiret, Thomas Guillem, Benjamin Adolphi, Samuel Giddins, <a href="http://www.tamastimar.com">Tam&aacute;s T&iacute;m&aacute;r</a>, Shenghan Chen, Kevin Bentin, Victor Gama, Martin Storsjö, Richard Soderberg, Quentin Richard, Filipe Cabecinhas, Adrien Maglo, Alessio Pollero, Andrew Breckenridge, Christoph Miebach, Diego Fernando Nieto, Christopher Loessl, Fabio Ritrovato, Kevin Chromik, Robert Gordon, Alexis Aubry, Zhizhang Deng, Zev Eisenberg, Sylver Bruneau, David Fuhrmann, Ulrich Trampe, Ron Soffer, Riccardo Angius, Adam Viaud, Ahmad Harb, Dean Lee, Jörg Bleyel, Kai Neuwerth, Konstantin Pavlov, Hoàng Đức, Justin Anderson, Martin Cermak, Jonathan Harris, Luis Fernandes, Shai Shamir, Steven Kabbes, Tim Byrne, Cameron Mozie, Nishith Singh, Pavel Akhrameev, Mitch Cohen, Winston Weinert, Mathias Sauvestre, <a href="https://github.com/mfkl">Martin Finkel</a>, <a href="https://github.com/umxprime">Maxime Chapelet</a>, <a href="https://twitter.com/pdherbemont">Pierre d'Herbemont</a>, and Craig Reyenga
<br /><br />Web Interface by <a href="http://ailleurs.me">Jean-Romain Pr&eacute;vost</a>.</p>
<br /><br />Web Interface by Jean-Romain Pr&eacute;vost.</p>
<p align="center">Application Design by Louis Currie and <a href="http://erambert.me">Damien Erambert</a>
<p align="center">We would like to thank the following people for tests, ideas and translations:<br />
Андрій Бандура, Balázs Meskó, Dian Li, Sidney Doria, Sveinn í Felli, Jeremiah Njoroge, Phan Anh, Hsiu-Ming Chang, Helena Arndt, Andriy Bandura, Luca Barbato, Ana Coronel, Keiji Costantini, Ludovic Fauvet, Roberto Ferraro, David González, Marián Hikaník, Christian Kosim, Alexander Lakhin, Freya Lindhorst, Fumio Nakayama, Savvas Nesseris, Ilkka Ollakka, Alexandre Perraud, Vincenzo Reale, Anton Regnander, Thomas De Rocker, Mario Siegmann, Yaron Shahrabani, Michał Trzebiatowski, Kaya Zeren, Transifex VLC project team<br />
......@@ -53,7 +53,7 @@ Copyright &copy; 2011-2020 Alamofire Software Foundation - <a href="#mit">MIT Li
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/pCloud/pcloud-sdk-swift">P Cloud SDK</a><br />
Copyright &copy; 2022-2024, P Cloud. - <a href="#mit">MIT License</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/box/box-ios-sdk-v2">Box iOS SDK v2</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;Box iOS SDK v2<br />
Copyright &copy; 2014, Box, Inc. - <a href="#apache2">Apache 2 License</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/robbiehanson/CocoaHTTPServer">CocoaHTTPServer</a><br />
......@@ -65,7 +65,7 @@ Copyright &copy; 2015-2017 Dropbox Inc. - <a href="#mit">MIT License</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/google/google-api-objectivec-client-for-rest.git">Google APIs Client Library for Objective-C (REST)</a><br />
Copyright &copy; 2011-2022 Google Inc. - <a href="#apache2">Apache 2 License</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.inappsettingskit.com">InAppSettingsKit</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/futuretap/InAppSettingsKit">InAppSettingsKit</a><br />
Copyright &copy; 2009-2014 Luc Vandal, Edovia Inc., Ortwin Gentz, FutureTap GmbH - <a href="#bsd2clause">2-clause BSD License</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/cbpowell/MarqueeLabel">MarqueeLabel</a><br />
......@@ -155,7 +155,7 @@ Copyright &copy; 2002-2020 Steve Lhomme - <a href="#lgpl2">LGPLv2.1 or later</a>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://code.videolan.org/fkuehne/MetaDataFetcherKit">MetaDataFetcherKit</a><br />
Copyright &copy; 2015, 2019-2021 Felix Paul K&uuml;hne - <a href="#lgpl2">LGPLv2.1 or later</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://sourceforge.net/projects/libmodplug/">libmodplug</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;libmodplug<br />
Oliver Lapicque, Konstanty - Public domain<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://mpg123.de">mpg123</a><br />
......
......@@ -393,7 +393,9 @@ extension EditController: UICollectionViewDataSource {
if let cell = cell as? MediaCollectionViewCell {
cell.showCheckmark(true)
cell.disableScrollView()
if let collectionModel = model as? CollectionModel, collectionModel.mediaCollection is VLCMLPlaylist {
if let collectionModel = model as? CollectionModel,
collectionModel.mediaCollection is VLCMLPlaylist,
collectionModel.sortModel.currentSort == .default {
cell.dragIndicatorImageView.isHidden = false
} else if cell.media is VLCMLMediaGroup || cell.media is VLCMLPlaylist {
cell.dragIndicatorImageView.isHidden = true
......@@ -427,9 +429,12 @@ extension EditController: UICollectionViewDataSource {
}
func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
if let collectionModel = model as? CollectionModel, collectionModel.mediaCollection is VLCMLPlaylist {
if let collectionModel = model as? CollectionModel,
collectionModel.mediaCollection is VLCMLPlaylist,
collectionModel.sortModel.currentSort == .default {
return true
}
return false
}
......
......@@ -50,6 +50,11 @@ class CollectionModel: MLBaseModel {
}
self.medialibrary = mediaService
self.mediaCollection = mediaCollection
if mediaCollection is VLCMLPlaylist {
sortModel.sortingCriteria.append(.default)
}
self.sortModel = mediaCollection.sortModel() ?? self.sortModel
var sortingCriteria: VLCMLSortingCriteria = .default
......
......@@ -216,7 +216,7 @@ extension VLCMLPlaylist: MediaCollectionModel {
func files(with criteria: VLCMLSortingCriteria = .alpha,
desc: Bool = false) -> [VLCMLMedia]? {
return media
return media(with: criteria, desc: desc)
}
func title() -> String {
......
......@@ -71,7 +71,7 @@ extension VLCMLSortingCriteria: CustomStringConvertible {
case .trackID:
return NSLocalizedString("TRACK_ID", comment: "")
case .default:
return NSLocalizedString("DEFAULT", comment: "")
return NSLocalizedString("CUSTOM", comment: "")
@unknown default:
return NSLocalizedString("DEFAULT", comment: "")
}
......
......@@ -452,8 +452,12 @@ extension MediaViewController {
for (index, criterion) in sortModel.sortingCriteria.enumerated() {
let currentSort: Bool = index == currentSortIndex
let chevronImageName: String = sortModel.desc ? "chevron.down" : "chevron.up"
let actionImage: UIImage? = currentSort ?
UIImage(systemName: chevronImageName) : nil
var actionImage: UIImage? = currentSort ? UIImage(systemName: chevronImageName) : nil
// There is no need to display the desc image since it has no impact
if criterion == VLCMLSortingCriteria.default {
actionImage = nil
}
let action = UIAction(title: String(describing: criterion),
image: actionImage,
......@@ -513,11 +517,6 @@ extension MediaViewController {
var rightMenuItems: [UIMenuElement] = [selectAction]
if let model = mediaCategoryViewController.model as? CollectionModel,
model.mediaCollection is VLCMLPlaylist {
return UIMenu(options: .displayInline, children: rightMenuItems)
}
if let parentViewController = viewController?.parent,
parentViewController is VideoViewController || parentViewController is AudioViewController {
let historyMenu = generateHistoryMenu()
......@@ -527,6 +526,12 @@ extension MediaViewController {
let layoutSubMenu = generateLayoutMenu(with: mediaCategoryViewController)
let sortSubMenu = generateSortMenu(with: mediaCategoryViewController)
if let model = mediaCategoryViewController.model as? CollectionModel,
model.mediaCollection is VLCMLPlaylist {
rightMenuItems.append(sortSubMenu)
return UIMenu(options: .displayInline, children: rightMenuItems)
}
rightMenuItems.append(layoutSubMenu)
rightMenuItems.append(sortSubMenu)
......