├── .github ├── FUNDING.yml └── issue_template.md ├── .gitignore ├── .swiftlint.yml ├── .travis.yml ├── Brewfile ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ConfUIFoundation ├── ConfUIFoundation.h ├── Info.plist ├── Resources │ └── ConfUIFoundation.xcassets │ │ ├── Colors │ │ ├── Contents.json │ │ ├── contentBackgroundColor.colorset │ │ │ └── Contents.json │ │ ├── fallbackAccentColor.colorset │ │ │ └── Contents.json │ │ └── roundedCellBackgroundColor.colorset │ │ │ └── Contents.json │ │ └── Contents.json └── Source │ ├── ConfUIFoundation.swift │ ├── Definitions │ ├── Colors.swift │ └── Fonts.swift │ ├── Headers │ └── NSColor+Accent.h │ └── Util │ ├── BackForwardSkipDuration.swift │ ├── CALayer+Asset.swift │ ├── NSColor+Hex.swift │ ├── PreviewSupport.swift │ └── UILog.swift ├── Design ├── Theme │ ├── WWDC-Art │ │ ├── Checkbox-Regular.sketch │ │ ├── Checkbox-Regular │ │ │ ├── Active_Disabled_Mixed.png │ │ │ ├── Active_Disabled_Off.png │ │ │ ├── Active_Disabled_On.png │ │ │ ├── Active_Normal_Mixed.png │ │ │ ├── Active_Normal_Off.png │ │ │ ├── Active_Normal_On.png │ │ │ ├── Active_Pressed_Mixed.png │ │ │ ├── Active_Pressed_Off.png │ │ │ ├── Active_Pressed_On.png │ │ │ ├── Inactive_Disabled_Mixed.png │ │ │ ├── Inactive_Disabled_Off.png │ │ │ ├── Inactive_Disabled_On.png │ │ │ ├── Inactive_Normal_Mixed.png │ │ │ ├── Inactive_Normal_Off.png │ │ │ ├── Inactive_Normal_On.png │ │ │ ├── Inactive_Pressed_Mixed.png │ │ │ ├── Inactive_Pressed_Off.png │ │ │ └── Inactive_Pressed_On.png │ │ ├── Checkbox-Regular@2x.sketch │ │ └── Checkbox-Regular@2x │ │ │ ├── Active_Disabled_Mixed.png │ │ │ ├── Active_Disabled_Off.png │ │ │ ├── Active_Disabled_On.png │ │ │ ├── Active_Normal_Mixed.png │ │ │ ├── Active_Normal_Off.png │ │ │ ├── Active_Normal_On.png │ │ │ ├── Active_Pressed_Mixed.png │ │ │ ├── Active_Pressed_Off.png │ │ │ ├── Active_Pressed_On.png │ │ │ ├── Inactive_Disabled_Mixed.png │ │ │ ├── Inactive_Disabled_Off.png │ │ │ ├── Inactive_Disabled_On.png │ │ │ ├── Inactive_Normal_Mixed.png │ │ │ ├── Inactive_Normal_Off.png │ │ │ ├── Inactive_Normal_On.png │ │ │ ├── Inactive_Pressed_Mixed.png │ │ │ ├── Inactive_Pressed_Off.png │ │ │ └── Inactive_Pressed_On.png │ ├── WWDC-Artwork │ │ └── Controls │ │ │ ├── Check Box │ │ │ ├── CheckBox_CheckBoxAnimation_Mini.psd │ │ │ ├── CheckBox_CheckBoxAnimation_Mini@2x.psd │ │ │ ├── CheckBox_CheckBoxAnimation_Regular.psd │ │ │ ├── CheckBox_CheckBoxAnimation_Regular@2x.psd │ │ │ ├── CheckBox_CheckBoxAnimation_Small.psd │ │ │ ├── CheckBox_CheckBoxAnimation_Small@2x.psd │ │ │ ├── CheckBox_CheckBox_Mini.psd │ │ │ ├── CheckBox_CheckBox_Mini@2x.psd │ │ │ ├── CheckBox_CheckBox_Regular.psd │ │ │ ├── CheckBox_CheckBox_Regular@2x.psd │ │ │ ├── CheckBox_CheckBox_Small.psd │ │ │ └── CheckBox_CheckBox_Small@2x.psd │ │ │ └── Progress Indicator Circular │ │ │ ├── ProgressIndicatorCircular_Determinate_Regular.psd │ │ │ ├── ProgressIndicatorCircular_Determinate_Regular@2x.psd │ │ │ ├── ProgressIndicatorCircular_Determinate_Small.psd │ │ │ ├── ProgressIndicatorCircular_Determinate_Small@2x.psd │ │ │ ├── ProgressIndicatorCircular_Indeterminate_Regular.psd │ │ │ ├── ProgressIndicatorCircular_Indeterminate_Regular@2x.psd │ │ │ ├── ProgressIndicatorCircular_Indeterminate_Small.psd │ │ │ └── ProgressIndicatorCircular_Indeterminate_Small@2x.psd │ └── WWDC.tdd ├── WWDC Resources.sketch └── WhiteSpinner.car ├── Fixtures ├── WWDC.paw ├── json_2018 │ ├── contents.json │ └── videos_live.json ├── json_2020 │ ├── config.json │ ├── contents.json │ ├── discover.json │ ├── event.json │ ├── layout.json │ ├── transcript-manifest-eng.json │ ├── videos_live.json │ ├── wwdc2019-103-transcript-eng.json │ └── wwdc2019-104-transcript-eng.json ├── json_2020b │ ├── config.json │ ├── contents.json │ ├── layout.json │ └── videos_live.json ├── json_before_event │ ├── contents.json │ └── videos_live.json ├── testserver.sh ├── testserver_2018.sh ├── testserver_2020.sh └── testserver_before_event.sh ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Packages ├── ConfCore │ ├── .swiftpm │ │ └── xcode │ │ │ └── package.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── ConfCore │ │ ├── AppleAPIClient.swift │ │ ├── Bookmark+ConflictResolution.swift │ │ ├── Bookmark.swift │ │ ├── BookmarkSyncObject.swift │ │ ├── CKRecord+SystemFields.swift │ │ ├── CloudKitHelper.swift │ │ ├── ConditionallyDecodable.swift │ │ ├── ConditionallyDecodableCollection.swift │ │ ├── ConfCoreCapabilities.swift │ │ ├── ConfCoreExports.swift │ │ ├── ConfigResponse.swift │ │ ├── ContentsResponse.swift │ │ ├── ContributorsFetcher.swift │ │ ├── Data+CloudKit.swift │ │ ├── DateFormatter+ConfCoreFormat.swift │ │ ├── DecodingContainer+ReturnTypeInference.swift │ │ ├── Download.swift │ │ ├── Environment.swift │ │ ├── Error+CloudKit.swift │ │ ├── Event.swift │ │ ├── EventHero.swift │ │ ├── Favorite+ConflictResolution.swift │ │ ├── Favorite.swift │ │ ├── FavoriteSyncObject.swift │ │ ├── FeaturedAuthor.swift │ │ ├── FeaturedContent.swift │ │ ├── FeaturedSection.swift │ │ ├── Focus.swift │ │ ├── Keyword.swift │ │ ├── Logging.swift │ │ ├── NSCodingExtensions.swift │ │ ├── NewsItem.swift │ │ ├── Photo.swift │ │ ├── PhotoRepresentation.swift │ │ ├── RealmCollection+ShallowChangesetPublisher.swift │ │ ├── RealmCollection+toArray.swift │ │ ├── RelatedResource.swift │ │ ├── Resource+Error.swift │ │ ├── Room.swift │ │ ├── ScheduleSection.swift │ │ ├── Session+Children.swift │ │ ├── Session.swift │ │ ├── SessionAsset.swift │ │ ├── SessionInstance.swift │ │ ├── SessionProgress+ConflictResolution.swift │ │ ├── SessionProgress.swift │ │ ├── SessionProgressSyncObject.swift │ │ ├── SessionsResponse.swift │ │ ├── Storage.swift │ │ ├── StorageMigrator.swift │ │ ├── SyncEngine.swift │ │ ├── Track.swift │ │ ├── Transcript.swift │ │ ├── TranscriptAnnotation.swift │ │ ├── TranscriptIndexer.swift │ │ ├── TranscriptIndexingClient.swift │ │ ├── TranscriptIndexingClientProtocol.swift │ │ ├── TranscriptIndexingService.swift │ │ ├── TranscriptIndexingServiceProtocol.swift │ │ ├── TranscriptLanguagesProvider.swift │ │ ├── UserDataSyncEngine.swift │ │ └── UserDataSyncProtocols.swift │ ├── ConfCoreTests │ │ ├── DecodingTests.swift │ │ ├── StorageTests.swift │ │ └── Util │ │ │ ├── Realm+InMemory.swift │ │ │ └── TestUtilities.swift │ ├── Package.resolved │ └── Package.swift └── Transcripts │ ├── Package.swift │ ├── Transcripts │ ├── Coalescer.swift │ ├── Loader.swift │ ├── TranscriptContent.swift │ ├── TranscriptDownloader.swift │ ├── TranscriptManifest.swift │ ├── TranscriptStorage.swift │ ├── Transcripts.swift │ └── URLSessionLoader.swift │ └── TranscriptsTests │ ├── Fixtures │ ├── transcript-manifest-eng.json │ ├── wwdc2019-103-transcript-eng.json │ ├── wwdc2019-104-transcript-eng.json │ └── wwdc2019-202-transcript-eng.json │ └── Sources │ ├── Bundle+LoadJSON.swift │ ├── DecodingTests.swift │ ├── FakeStorage.swift │ ├── FixtureLoader.swift │ └── TranscriptDownloaderTests.swift ├── PlayerUI ├── .swiftlint.yml ├── Controllers │ ├── PUIAnnotationWindowController.swift │ └── PUIDetachedPlaybackStatusViewController.swift ├── Definitions │ ├── Colors.swift │ ├── Images.swift │ └── Speeds.swift ├── Info.plist ├── MediaPlayer Support │ ├── PUINowPlayingInfo.swift │ ├── PUINowPlayingInfoCoordinator.swift │ └── PUIRemoteCommandCoordinator.swift ├── PlayerUI.h ├── Protocols │ ├── PUIPlayerViewDelegates.swift │ ├── PUITimelineAnnotation.swift │ └── PUITimelineDelegate.swift ├── Resources │ ├── Media.xcassets │ │ ├── Annotation.dataset │ │ │ ├── Bookmark.caar │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── TimeBubble.dataset │ │ │ ├── Contents.json │ │ │ └── TimeBubble.caar │ │ ├── airplay.imageset │ │ │ ├── Contents.json │ │ │ ├── airplay.png │ │ │ ├── airplay@2x.png │ │ │ └── airplay@3x.png │ │ ├── back15s.imageset │ │ │ ├── Contents.json │ │ │ ├── back15s.png │ │ │ ├── back15s@2x.png │ │ │ └── back15s@3x.png │ │ ├── back30s.imageset │ │ │ ├── Contents.json │ │ │ ├── back30s.png │ │ │ ├── back30s@2x.png │ │ │ └── back30s@3x.png │ │ ├── bookmark.imageset │ │ │ ├── Contents.json │ │ │ ├── bookmark.png │ │ │ ├── bookmark@2x.png │ │ │ └── bookmark@3x.png │ │ ├── forward15s.imageset │ │ │ ├── Contents.json │ │ │ ├── forward15s.png │ │ │ ├── forward15s@2x.png │ │ │ └── forward15s@3x.png │ │ ├── forward30s.imageset │ │ │ ├── Contents.json │ │ │ ├── forward30s.png │ │ │ ├── forward30s@2x.png │ │ │ └── forward30s@3x.png │ │ ├── fullscreen.imageset │ │ │ ├── Contents.json │ │ │ ├── fullscreen.png │ │ │ ├── fullscreen@2x.png │ │ │ └── fullscreen@3x.png │ │ ├── fullscreenExit.imageset │ │ │ ├── Contents.json │ │ │ ├── fullscreenExit.png │ │ │ ├── fullscreenExit@2x.png │ │ │ └── fullscreenExit@3x.png │ │ ├── nextbookmark.imageset │ │ │ ├── Contents.json │ │ │ ├── nextbookmark.png │ │ │ ├── nextbookmark@2x.png │ │ │ └── nextbookmark@3x.png │ │ ├── nosound.imageset │ │ │ ├── Contents.json │ │ │ ├── nosound.png │ │ │ ├── nosound@2x.png │ │ │ └── nosound@3x.png │ │ ├── pause.imageset │ │ │ ├── Contents.json │ │ │ ├── pause.png │ │ │ ├── pause@2x.png │ │ │ └── pause@3x.png │ │ ├── pip-big.imageset │ │ │ ├── Contents.json │ │ │ ├── pip-big.png │ │ │ ├── pip-big@2x.png │ │ │ └── pip-big@3x.png │ │ ├── pip.imageset │ │ │ ├── Contents.json │ │ │ ├── pip.png │ │ │ ├── pip@2x.png │ │ │ └── pip@3x.png │ │ ├── pipExit.imageset │ │ │ ├── Contents.json │ │ │ ├── pipExit.png │ │ │ ├── pipExit@2x.png │ │ │ └── pipExit@3x.png │ │ ├── play.imageset │ │ │ ├── Contents.json │ │ │ ├── play.png │ │ │ ├── play@2x.png │ │ │ └── play@3x.png │ │ ├── prevbookmark.imageset │ │ │ ├── Contents.json │ │ │ ├── prevbookmark.png │ │ │ ├── prevbookmark@2x.png │ │ │ └── prevbookmark@3x.png │ │ ├── speed-1.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-1.png │ │ │ ├── speed-1@2x.png │ │ │ └── speed-1@3x.png │ │ ├── speed-125.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-125.png │ │ │ ├── speed-125@2x.png │ │ │ └── speed-125@3x.png │ │ ├── speed-15.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-15.png │ │ │ ├── speed-15@2x.png │ │ │ └── speed-15@3x.png │ │ ├── speed-175.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-175.png │ │ │ ├── speed-175@2x.png │ │ │ └── speed-175@3x.png │ │ ├── speed-2.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-2.png │ │ │ ├── speed-2@2x.png │ │ │ └── speed-2@3x.png │ │ ├── speed-h.imageset │ │ │ ├── Contents.json │ │ │ ├── speed-h.png │ │ │ ├── speed-h@2x.png │ │ │ └── speed-h@3x.png │ │ ├── subtitles.imageset │ │ │ ├── Contents.json │ │ │ ├── subtitles.png │ │ │ ├── subtitles@2x.png │ │ │ └── subtitles@3x.png │ │ └── volume.imageset │ │ │ ├── Contents.json │ │ │ ├── volume.png │ │ │ ├── volume@2x.png │ │ │ └── volume@3x.png │ └── WhiteSpinner.car ├── Touch Bar Support │ ├── PUITouchBarController.swift │ └── PUITouchBarItems.swift ├── Util │ ├── AVAsset+AsyncHelpers.swift │ ├── AVPlayer+Layout.swift │ ├── AVPlayer+Validation.swift │ ├── NSEvent+ForceTouch.swift │ ├── NSWindow+Snapshot.swift │ ├── NumericContentTransition.swift │ ├── PUISettings.swift │ └── String+CMTime.swift └── Views │ ├── PUIAnnotationLayer.swift │ ├── PUIAnnotationWindow.swift │ ├── PUIBoringLayer.swift │ ├── PUIBufferLayer.swift │ ├── PUIButton.swift │ ├── PUIPlaybackSpeedToggle.swift │ ├── PUIPlayerView.swift │ ├── PUIPlayerWindow.swift │ ├── PUIScrimView.swift │ ├── PUITimelineFloatingLayer.swift │ ├── PUITimelineView.swift │ └── PUIVibrantBackgroundButton.swift ├── README.md ├── Releases ├── WWDC_latest.zip ├── appcast.xml └── appcast_v5.xml ├── Resources ├── bookmarks.pdf ├── news.pdf ├── schedule.pdf └── videos.pdf ├── TranscriptIndexingService ├── Info.plist ├── Source │ └── main.swift └── TranscriptIndexingService.entitlements ├── WWDC.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ ├── WWDC.xcscheme │ └── WWDC_iCloud.xcscheme ├── WWDC ├── AboutWindowController.swift ├── ActionLabel.swift ├── AppCommandsReceiver.swift ├── AppCoordinator+Bookmarks.swift ├── AppCoordinator+RelatedSessions.swift ├── AppCoordinator+SessionActions.swift ├── AppCoordinator+SessionTableViewContextMenuActions.swift ├── AppCoordinator+Shelf.swift ├── AppCoordinator+UserActivity.swift ├── AppCoordinator.swift ├── AppDelegate.swift ├── Arguments.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── icon_128.png │ │ ├── icon_128@2x.png │ │ ├── icon_16.png │ │ ├── icon_16@2x.png │ │ ├── icon_256.png │ │ ├── icon_256@2x.png │ │ ├── icon_32.png │ │ ├── icon_32@2x.png │ │ ├── icon_512.png │ │ └── icon_512@2x.png │ ├── ClipTemplate.dataset │ │ ├── ClipTemplate.caar │ │ └── Contents.json │ ├── Contents.json │ ├── VariableBlur-Top.dataset │ │ ├── Contents.json │ │ └── VariableBlur-Top.caar │ ├── account.imageset │ │ ├── Contents.json │ │ ├── account.png │ │ ├── account@2x.png │ │ └── account@3x.png │ ├── avatar.imageset │ │ ├── Contents.json │ │ ├── avatar.png │ │ ├── avatar@2x.png │ │ └── avatar@3x.png │ ├── bookmarks.imageset │ │ ├── Contents.json │ │ ├── bookmarks.png │ │ ├── bookmarks@2x.png │ │ └── bookmarks@3x.png │ ├── calendar.imageset │ │ ├── Contents.json │ │ ├── calendar.png │ │ └── calendar@2x.png │ ├── chromecast-large.imageset │ │ ├── Contents.json │ │ ├── chromecast-large.png │ │ ├── chromecast-large@2x.png │ │ └── chromecast-large@3x.png │ ├── chromecast.imageset │ │ ├── Contents.json │ │ ├── chromecast.png │ │ ├── chromecast@2x.png │ │ └── chromecast@3x.png │ ├── clip.imageset │ │ ├── Contents.json │ │ └── clip.png │ ├── copy.imageset │ │ ├── Contents.json │ │ └── copy.pdf │ ├── download-small.imageset │ │ ├── Contents.json │ │ ├── down-arrow.png │ │ ├── down-arrow@2x.png │ │ └── down-arrow@3x.png │ ├── download.imageset │ │ ├── Contents.json │ │ └── download-1.png │ ├── favorite-filled.imageset │ │ ├── Contents.json │ │ └── favorite-filled.png │ ├── favorite.imageset │ │ ├── Contents.json │ │ └── favorite.png │ ├── featured-placeholder.imageset │ │ ├── Contents.json │ │ └── featured-placeholder.png │ ├── featured.imageset │ │ ├── Contents.json │ │ ├── featured.png │ │ ├── featured@2x.png │ │ └── featured@3x.png │ ├── filter.imageset │ │ ├── Contents.json │ │ ├── filter.png │ │ ├── filter@2x.png │ │ └── filter@3x.png │ ├── general.imageset │ │ ├── Contents.json │ │ ├── general.png │ │ ├── general@2x.png │ │ └── general@3x.png │ ├── get-together.imageset │ │ ├── Contents.json │ │ └── special.pdf │ ├── lab-indicator.imageset │ │ ├── Contents.json │ │ └── lab-indicator.pdf │ ├── live-indicator.imageset │ │ ├── Contents.json │ │ └── live-indicator.pdf │ ├── news.imageset │ │ ├── Contents.json │ │ ├── news.png │ │ ├── news@2x.png │ │ └── news@3x.png │ ├── noimage.imageset │ │ ├── Contents.json │ │ └── noimage.pdf │ ├── reveal-in-finder.imageset │ │ ├── Contents.json │ │ └── reveal-in-finder.pdf │ ├── schedule.imageset │ │ ├── Contents.json │ │ ├── schedule.png │ │ ├── schedule@2x.png │ │ └── schedule@3x.png │ ├── share-vector.dataset │ │ ├── Contents.json │ │ └── Share.caar │ ├── share.imageset │ │ ├── Contents.json │ │ └── share.png │ ├── slides.imageset │ │ ├── Contents.json │ │ └── slides.png │ ├── special.imageset │ │ ├── Contents.json │ │ └── special.pdf │ ├── star-small.imageset │ │ ├── Contents.json │ │ ├── star.png │ │ ├── star@2x.png │ │ └── star@3x.png │ ├── trash.imageset │ │ ├── Contents.json │ │ ├── trash.png │ │ ├── trash@2x.png │ │ └── trash@3x.png │ ├── videos.imageset │ │ ├── Contents.json │ │ ├── videos.png │ │ ├── videos@2x.png │ │ └── videos@3x.png │ └── window.imageset │ │ ├── Contents.json │ │ └── window.png ├── Base.lproj │ ├── AboutWindowController.xib │ └── Main.storyboard ├── BookmarkViewController.swift ├── Boot.swift ├── ClipComposition.swift ├── ClipRenderer.swift ├── ClipSharingViewController.swift ├── Combine+UI.swift ├── CombineLatestMany.swift ├── CompositionalLayoutBackgroundSwizzler.h ├── CompositionalLayoutBackgroundSwizzler.m ├── Constants.swift ├── DTFolderMonitor.h ├── DTFolderMonitor.m ├── DateProvider.swift ├── DeepLink.swift ├── DownloadManager+SupportingTypesAndExtensions.swift ├── DownloadManager.swift ├── DownloadManagerView.swift ├── DownloadViewModel.swift ├── DownloadsManagementTableCellView.swift ├── DownloadsManagementTableRowView.swift ├── DownloadsManagementTableView.swift ├── DownloadsManagementViewController.swift ├── DownloadsStatusButton.swift ├── EventHeroViewController.swift ├── ExploreTabContent.swift ├── ExploreTabItemView.swift ├── ExploreTabProvider.swift ├── ExploreTabRootView.swift ├── ExploreViewController.swift ├── FilterState.swift ├── FilterType.swift ├── FlippedClipView.swift ├── FullBleedImageView.swift ├── GeneralPreferencesViewController.swift ├── ImageDownloadCenter.swift ├── Info.plist ├── LiveObserver.swift ├── LiveStreamOverlay.swift ├── Main.xcconfig ├── MainWindowController.swift ├── MediaDownload │ ├── Engines │ │ ├── AVAssetMediaDownloadEngine.swift │ │ ├── SimulatedMediaDownloadEngine.swift │ │ └── URLSessionMediaDownloadEngine.swift │ ├── FSMediaDownloadMetadataStore.swift │ ├── Integration │ │ ├── DownloadedContentMonitor.swift │ │ └── Session+Download.swift │ ├── MediaDownload.swift │ ├── MediaDownloadManager+.swift │ ├── MediaDownloadManager.swift │ ├── MediaDownloadProtocols.swift │ └── Support │ │ ├── Bundle+URLSessionID.swift │ │ ├── MediaDownload+Sorting.swift │ │ ├── PreviewAndTestingSupport.swift │ │ ├── String+Error.swift │ │ ├── URL+FileHelpers.swift │ │ └── URLSessionTask+Media.swift ├── ModalLoadingView.swift ├── MultipleChoiceFilter.swift ├── NSImage+Compression.swift ├── NSImage+Thumbnail.swift ├── NSToolbarItemViewer+Overrides.m ├── OffsetObservingScrollView.swift ├── OpenSource.xcconfig ├── OptionalToggleFilter.swift ├── PathUtil.swift ├── PlaybackPreferencesViewController.swift ├── PlaybackViewModel.swift ├── Preferences.storyboard ├── Preferences.swift ├── PreferencesCoordinator.swift ├── PreferencesWindowController.swift ├── PreviewAssets.xcassets │ ├── Contents.json │ ├── ExploreTab-Live-Current.dataset │ │ ├── Contents.json │ │ └── ExploreTab-Live-Current.json │ ├── ExploreTab-Live.dataset │ │ ├── Contents.json │ │ └── ExploreTab-Live.json │ └── ExploreTab.dataset │ │ ├── Contents.json │ │ └── ExploreTab.json ├── Realm+Combine.swift ├── RelatedSessionsViewController.swift ├── RemoteGlyph.swift ├── RemoteImage.swift ├── ScheduleContainerViewController.swift ├── SearchCoordinator.swift ├── SearchFiltersViewController.swift ├── Sequence+GroupedBy.swift ├── SessionActionsViewController.swift ├── SessionCellView.swift ├── SessionCollectionViewItem.swift ├── SessionDetailsViewController.swift ├── SessionRow.swift ├── SessionRowProvider.swift ├── SessionSummaryViewController.swift ├── SessionTableCellView.swift ├── SessionTranscriptViewController.swift ├── SessionTranscriptWindowController.swift ├── SessionViewModel.swift ├── SessionsSplitViewController.swift ├── SessionsTableViewController+SupportingTypesAndExtensions.swift ├── SessionsTableViewController.swift ├── SharePlayManager.swift ├── SharePlayStatusView.swift ├── ShelfView.swift ├── ShelfViewController.swift ├── SlowMigrationView.swift ├── TabItemView.swift ├── TextualFilter.swift ├── TitleBarBlurFadeView.swift ├── TitleBarButtonsViewController.swift ├── TitleBarViewController.swift ├── TitleTableCellView.swift ├── ToggleFilter.swift ├── TopicHeaderRow.swift ├── TrackColorView.swift ├── TranscriptSearchController.swift ├── TranscriptTableCellView.swift ├── UIDebugger.h ├── UIDebugger.m ├── UserActivityRepresentable.swift ├── VibrantButton.swift ├── VideoPlayer.swift ├── VideoPlayerViewController.swift ├── VideoPlayerWindowController.swift ├── VisualEffectDebugger.m ├── WWDC-Bridging-Header.h ├── WWDC-ForRamboBuildsOnly.entitlements ├── WWDC.entitlements ├── WWDCAgentRemover.swift ├── WWDCAlert.swift ├── WWDCAppCommand.swift ├── WWDCBottomBorderView.swift ├── WWDCDebug_iCloud.entitlements ├── WWDCHorizontalScrollView.swift ├── WWDCImageView.swift ├── WWDCLayer.swift ├── WWDCProgressIndicator.swift ├── WWDCRelease_iCloud.entitlements ├── WWDCSegmentedControl.swift ├── WWDCTabViewController.swift ├── WWDCTabViewControllerTabBar.swift ├── WWDCTableRowView.swift ├── WWDCTableView.swift ├── WWDCTextButton.swift ├── WWDCTextField.swift ├── WWDCWindow.swift ├── WWDCWindowContentViewController.swift ├── WWDCWindowController.swift ├── WatchWWDCActivity.swift ├── main.m └── schedule-placeholder.png ├── bootstrap.sh ├── cleardata.sh ├── cleardebugdata.sh ├── img ├── MacStadiumOSS.png ├── indentation.png └── v7 │ ├── BuildTarget.webp │ ├── ClipSharing.webp │ ├── Transcript.webp │ └── Video-Bookmark.webp ├── resetSync.sh └── teamid.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: insidegui 2 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ### Before opening your issue, please make sure you answer YES to all of the questions below. 2 | 3 | - Are you running the latest version of the app? 4 | - Are you running a release, stable version of macOS? 5 | - Have you looked at previous issues to see if you're having an issue that's already being worked on? 6 | - If your issue is about compilation or project setup, have you followed the instructions from the readme? 7 | - Have you read the Code of Conduct, and will you uphold it's values? 8 | 9 | ### If you answered YES to all of the questions, please provide as much information as possible about your issue. 10 | 11 | - Version of macOS 12 | - Version of the app 13 | - What were you trying to do when the issue happened 14 | - Any particular hardware/software configuration you have that might be affecting the app 15 | - If it is a crash, please provide the crash log 16 | - If it is a hang (beach ball), please provide a process sample 17 | - If it is a wrong behavior, list all steps required to reproduce it 18 | - Please add screenshots if you think they might help us diagnose the issue 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | __MACOSX 3 | *.pbxuser 4 | !default.pbxuser 5 | *.mode1v3 6 | !default.mode1v3 7 | *.mode2v3 8 | !default.mode2v3 9 | *.perspectivev3 10 | !default.perspectivev3 11 | xcuserdata 12 | profile 13 | *.moved-aside 14 | DerivedData 15 | .idea/ 16 | generatechangelog.sh 17 | Pods/ 18 | Carthage 19 | Provisioning 20 | TeamID.xcconfig 21 | -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - line_length 3 | - function_body_length 4 | - file_length 5 | - type_body_length 6 | - identifier_name 7 | - todo 8 | - function_parameter_count 9 | - unused_closure_parameter 10 | - nesting 11 | - trailing_whitespace 12 | - multiple_closures_with_trailing_closure 13 | - large_tuple 14 | - implicit_getter 15 | - for_where 16 | - opening_brace 17 | - vertical_parameter_alignment 18 | 19 | opt_in_rules: 20 | - redundant_nil_coalescing 21 | 22 | excluded: 23 | - Carthage 24 | 25 | force_cast: 26 | severity: warning 27 | force_try: 28 | severity: warning 29 | 30 | custom_rules: 31 | os_log_over_all: 32 | name: "Logging" 33 | regex: '(print|NSLog)\(' 34 | message: "Project convention favours os_log for logging." 35 | match_kinds: 36 | - identifier 37 | severity: warning 38 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: osx 2 | osx_image: xcode11 3 | before_install: 4 | - brew update 5 | - brew outdated swiftlint || brew upgrade swiftlint 6 | before_script: 7 | - xcodebuild -version 8 | - carthage version 9 | - swiftlint version 10 | - "./bootstrap.sh" 11 | script: 12 | - set -o pipefail && env "NSUnbufferedIO=YES" xcodebuild test -scheme WWDC -project WWDC.xcodeproj | xcpretty -f `xcpretty-travis-formatter` 13 | -------------------------------------------------------------------------------- /Brewfile: -------------------------------------------------------------------------------- 1 | brew "swiftlint" 2 | -------------------------------------------------------------------------------- /ConfUIFoundation/ConfUIFoundation.h: -------------------------------------------------------------------------------- 1 | // 2 | // ConfUIFoundation.h 3 | // ConfUIFoundation 4 | // 5 | // Created by Guilherme Rambo on 03/06/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ConfUIFoundation. 12 | FOUNDATION_EXPORT double ConfUIFoundationVersionNumber; 13 | 14 | //! Project version string for ConfUIFoundation. 15 | FOUNDATION_EXPORT const unsigned char ConfUIFoundationVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | #import 20 | -------------------------------------------------------------------------------- /ConfUIFoundation/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | $(COPYRIGHT) 23 | 24 | 25 | -------------------------------------------------------------------------------- /ConfUIFoundation/Resources/ConfUIFoundation.xcassets/Colors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ConfUIFoundation/Resources/ConfUIFoundation.xcassets/Colors/contentBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "display-p3", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.137", 9 | "green" : "0.129", 10 | "red" : "0.125" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ConfUIFoundation/Resources/ConfUIFoundation.xcassets/Colors/fallbackAccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "display-p3", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.561", 9 | "green" : "0.431", 10 | "red" : "0.353" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ConfUIFoundation/Resources/ConfUIFoundation.xcassets/Colors/roundedCellBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "display-p3", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.102", 9 | "green" : "0.102", 10 | "red" : "0.102" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ConfUIFoundation/Resources/ConfUIFoundation.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ConfUIFoundation/Source/ConfUIFoundation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConfUIFoundation.swift 3 | // ConfUIFoundation 4 | // 5 | // Created by Guilherme Rambo on 03/06/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | @_exported import Cocoa 10 | @_exported import MacPreviewUtils 11 | 12 | private final class _StubForBundleInit { } 13 | 14 | extension Bundle { 15 | static let confUIFoundation = Bundle(for: _StubForBundleInit.self) 16 | } 17 | 18 | let kConfUIFoundationSubsystem = "io.wwdc.ConfUIFoundation" 19 | -------------------------------------------------------------------------------- /ConfUIFoundation/Source/Headers/NSColor+Accent.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor+Accent.h 3 | // ConfUIFoundation 4 | // 5 | // Created by Guilherme Rambo on 29/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #define kGraphiteAccentColor -1 10 | 11 | extern NSInteger NSColorGetUserAccentColor(void); 12 | -------------------------------------------------------------------------------- /ConfUIFoundation/Source/Util/BackForwardSkipDuration.swift: -------------------------------------------------------------------------------- 1 | /// Represents one of several durations for skipping backwards and forwards. 2 | public enum BackForwardSkipDuration: TimeInterval { 3 | case fiveSeconds = 5 4 | case tenSeconds = 10 5 | case fifteenSeconds = 15 6 | case thirtySeconds = 30 7 | 8 | public init(seconds: TimeInterval) { 9 | switch seconds { 10 | case 5: 11 | self = .fiveSeconds 12 | case 10: 13 | self = .tenSeconds 14 | case 15: 15 | self = .fifteenSeconds 16 | case 30: 17 | self = .thirtySeconds 18 | default: 19 | assertionFailure("Expected a duration of `BackForwardSkipDuration`; received \(seconds)") 20 | self = .thirtySeconds 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ConfUIFoundation/Source/Util/PreviewSupport.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | public extension NSApplication { 4 | var isPreview: Bool { 5 | #if DEBUG 6 | return ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" 7 | #else 8 | return false 9 | #endif 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ConfUIFoundation/Source/Util/UILog.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public let UILogDisabled = UserDefaults.standard.bool(forKey: "WWDCDisableUILog") 4 | 5 | /// Can be used to log things in previews and whatnot, only useful in debug builds. 6 | @inlinable 7 | public func UILog(_ value: @autoclosure () -> Any) { 8 | #if DEBUG 9 | guard !UILogDisabled else { return } 10 | // swiftlint:disable:next os_log_over_all 11 | print("💎 \(String(describing: value()))") 12 | #endif 13 | } 14 | -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular.sketch -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Disabled_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Normal_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Active_Pressed_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Disabled_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Normal_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular/Inactive_Pressed_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x.sketch -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Disabled_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Normal_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Active_Pressed_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Disabled_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Normal_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_Mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_Mixed.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_Off.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Art/Checkbox-Regular@2x/Inactive_Pressed_On.png -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Mini.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Mini.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Mini@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Mini@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Regular.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Regular.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Regular@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Regular@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Small.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Small@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBoxAnimation_Small@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Mini.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Mini.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Mini@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Mini@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Regular.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Regular.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Regular@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Regular@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Small.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Small@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Check Box/CheckBox_CheckBox_Small@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Regular.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Regular.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Regular@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Regular@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Small.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Small@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Determinate_Small@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Regular.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Regular.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Regular@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Regular@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Small.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Small.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Small@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC-Artwork/Controls/Progress Indicator Circular/ProgressIndicatorCircular_Indeterminate_Small@2x.psd -------------------------------------------------------------------------------- /Design/Theme/WWDC.tdd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/Theme/WWDC.tdd -------------------------------------------------------------------------------- /Design/WWDC Resources.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/WWDC Resources.sketch -------------------------------------------------------------------------------- /Design/WhiteSpinner.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Design/WhiteSpinner.car -------------------------------------------------------------------------------- /Fixtures/WWDC.paw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Fixtures/WWDC.paw -------------------------------------------------------------------------------- /Fixtures/json_2020/transcript-manifest-eng.json: -------------------------------------------------------------------------------- 1 | {"updated":"2020-05-24T14:32:04+00:00","digest":{"etag":"\"3de45a13f3b668d93f8b646bedfa2704\"","url":"https://devimages-cdn.apple.com/wwdc-services/transcripts/digests/transcript-digest-eng.json"},"individual":{"wwdc2019-103":{"etag":"\"ea551e731dca2e07093c5c4e0dabc0b2\"","url":"http://localhost:9042/wwdc2019-103-transcript-eng.json"},"wwdc2019-104":{"etag":"\"47f84c64e9757a4658628243d793141a\"","url":"http://localhost:9042/wwdc2019-104-transcript-eng.json"}}} -------------------------------------------------------------------------------- /Fixtures/json_2020/videos_live.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated": "2020-06-22T09:45:00-07:00", 3 | "live_sessions": { 4 | "101": { 5 | "iosUrl": "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8", 6 | "tvosUrl": "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8", 7 | "actualEndDate": "", 8 | "images": { 9 | "shelf": "http://devstreaming.apple.com/videos/wwdc/2016/201h1g4asm31ti2l9n1/201/images/201_734x413.jpg" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /Fixtures/json_2020b/videos_live.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated": "2020-06-14T18:05:17-07:00", 3 | "live_sessions": {} 4 | } -------------------------------------------------------------------------------- /Fixtures/json_before_event/videos_live.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated": "2018-06-04T09:00:00-07:00", 3 | "live_sessions": {} 4 | } -------------------------------------------------------------------------------- /Fixtures/testserver.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if ! type "npm" > /dev/null; then 4 | echo "NPM is not installed, installing...\n" 5 | curl -L https://www.npmjs.com/install.sh | sh 6 | fi 7 | 8 | if ! type "http-server" > /dev/null; then 9 | echo "http-server module is not installed, installing...\n" 10 | npm install http-server -g 11 | fi 12 | 13 | http-server -p 9042 ./json -------------------------------------------------------------------------------- /Fixtures/testserver_2018.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if ! type "npm" > /dev/null; then 4 | echo "NPM is not installed, installing...\n" 5 | curl -L https://www.npmjs.com/install.sh | sh 6 | fi 7 | 8 | if ! type "http-server" > /dev/null; then 9 | echo "http-server module is not installed, installing...\n" 10 | npm install http-server -g 11 | fi 12 | 13 | http-server -p 9042 ./json_2018 -------------------------------------------------------------------------------- /Fixtures/testserver_2020.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if ! type "npm" > /dev/null; then 4 | echo "NPM is not installed, installing...\n" 5 | curl -L https://www.npmjs.com/install.sh | sh 6 | fi 7 | 8 | if ! type "http-server" > /dev/null; then 9 | echo "http-server module is not installed, installing...\n" 10 | npm install http-server -g 11 | fi 12 | 13 | http-server -p 9042 ./json_2020 -------------------------------------------------------------------------------- /Fixtures/testserver_before_event.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if ! type "npm" > /dev/null; then 4 | echo "NPM is not installed, installing...\n" 5 | curl -L https://www.npmjs.com/install.sh | sh 6 | fi 7 | 8 | if ! type "http-server" > /dev/null; then 9 | echo "http-server module is not installed, installing...\n" 10 | npm install http-server -g 11 | fi 12 | 13 | http-server -p 9042 ./json_before_event -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | 5 | git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } 6 | 7 | # gem "rails" 8 | gem "xcpretty" 9 | gem "xcpretty-travis-formatter" -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | rouge (2.0.7) 5 | xcpretty (0.2.8) 6 | rouge (~> 2.0.7) 7 | xcpretty-travis-formatter (1.0.0) 8 | xcpretty (~> 0.2, >= 0.0.7) 9 | 10 | PLATFORMS 11 | ruby 12 | 13 | DEPENDENCIES 14 | xcpretty 15 | xcpretty-travis-formatter 16 | 17 | BUNDLED WITH 18 | 1.16.1 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Guilherme Rambo 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | - Redistributions of source code must retain the above copyright notice, this 7 | list of conditions and the following disclaimer. 8 | 9 | - Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 14 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 17 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 19 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 20 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 21 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /Packages/ConfCore/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Bookmark+ConflictResolution.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bookmark+ConflictResolution.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 25/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CloudKit 11 | import OSLog 12 | 13 | extension Bookmark { 14 | 15 | public static func resolveConflict(clientRecord: CKRecord, serverRecord: CKRecord) -> CKRecord? { 16 | // Client record always wins 17 | serverRecord["isDeleted"] = clientRecord["isDeleted"] 18 | serverRecord["body"] = clientRecord["body"] 19 | serverRecord["attributedBody"] = clientRecord["attributedBody"] 20 | 21 | return serverRecord 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/CKRecord+SystemFields.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CKRecord+SystemFields.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 24/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CloudKit 11 | 12 | extension CKRecord { 13 | 14 | var encodedSystemFields: Data { 15 | let coder = NSKeyedArchiver(requiringSecureCoding: true) 16 | encodeSystemFields(with: coder) 17 | coder.finishEncoding() 18 | 19 | return coder.encodedData 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/CloudKitHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CloudKitHelper.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 27/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import CloudKit 11 | 12 | public final class CloudKitHelper { 13 | 14 | public static func subscriptionExists(with name: String, in database: CKDatabase, completion: @escaping (Bool) -> Void) { 15 | let fetchSubscriptionOperation = CKFetchSubscriptionsOperation(subscriptionIDs: [name]) 16 | 17 | fetchSubscriptionOperation.fetchSubscriptionCompletionBlock = { subscriptions, error in 18 | if error is CKError { 19 | DispatchQueue.main.async { completion(false) } 20 | 21 | return 22 | } 23 | 24 | guard let subscriptions = subscriptions else { 25 | return 26 | } 27 | 28 | if !subscriptions.keys.contains(name) { 29 | DispatchQueue.main.async { completion(false) } 30 | } 31 | } 32 | 33 | database.add(fetchSubscriptionOperation) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/ConditionallyDecodable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConditionallyDecodable.swift 3 | // ConfCore 4 | // 5 | // Created by Allen Humphreys on 3/24/19. 6 | // Copyright © 2019 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum ConditionallyDecodableError: Error { 12 | case unsupported 13 | case missingKey(DecodingError) 14 | } 15 | 16 | protocol ConditionallyDecodable: Decodable { 17 | init?(conditionallyFrom decoder: Decoder) throws 18 | } 19 | 20 | extension ConditionallyDecodable { 21 | public init?(conditionallyFrom decoder: Decoder) throws { 22 | do { 23 | try self.init(from: decoder) 24 | } catch is ConditionallyDecodableError { 25 | return nil 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/ConfCoreCapabilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Guilherme Rambo on 02/12/20. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ConfCoreCapabilities { 11 | /// Set this to `true` to enable CloudKit-based features (requires entitlements). 12 | public static var isCloudKitEnabled = false 13 | } 14 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/ConfCoreExports.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConfCoreExports.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 02/12/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | @_exported import Foundation 10 | @_exported import Siesta 11 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/ConfigResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConfigResponse.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public struct ConfigResponse: Hashable, Codable { 12 | 13 | public static let fallbackFeedLanguage = "en" 14 | 15 | public struct FeedManifest: Hashable, Codable { 16 | public struct Feed: Hashable, Codable { 17 | public let url: URL 18 | public let etag: String? 19 | } 20 | 21 | public let contents: Feed 22 | public let articles: Feed? 23 | public let layout: Feed? 24 | public let maps: Feed? 25 | public let liveVideos: Feed? 26 | public let discover: Feed? 27 | public let event: Feed? 28 | public let transcripts: Feed? 29 | } 30 | 31 | /// Maps from language ID (such as "en", "zho", etc) to feed manifests. 32 | public let feeds: [String: FeedManifest] 33 | 34 | /// Depiction of the current event for when the schedule is not available. 35 | public let eventHero: EventHero? 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Data+CloudKit.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data+CloudKit.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 24/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Data { 12 | 13 | func writeToTempLocationForCloudKitUpload() throws -> URL { 14 | let url = URL(fileURLWithPath: NSTemporaryDirectory() + "/WWDC_CKTemp_\(UUID().uuidString)") 15 | 16 | try write(to: url) 17 | 18 | return url 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/DateFormatter+ConfCoreFormat.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateFormatter+ConfCoreFormat.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 07/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public let confCoreDateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 12 | 13 | extension DateFormatter { 14 | 15 | static let confCoreFormatter: DateFormatter = { 16 | let formatter = DateFormatter() 17 | formatter.dateFormat = confCoreDateFormat 18 | formatter.locale = Locale(identifier: "en-US") 19 | formatter.timeZone = TimeZone.current 20 | 21 | return formatter 22 | }() 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/DecodingContainer+ReturnTypeInference.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DecodingContainer+ReturnTypeInference.swift 3 | // ConfCore 4 | // 5 | // Created by Allen Humphreys on 3/24/19. 6 | // Copyright © 2019 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension KeyedDecodingContainer { 12 | 13 | func decode(key: KeyedDecodingContainer.Key) throws -> T { 14 | return try decode(T.self, forKey: key) 15 | } 16 | 17 | func decodeIfPresent(key: KeyedDecodingContainer.Key) throws -> T? { 18 | return try decodeIfPresent(T.self, forKey: key) 19 | } 20 | } 21 | 22 | extension SingleValueDecodingContainer { 23 | 24 | public func decode() throws -> T { 25 | return try decode(T.self) 26 | } 27 | } 28 | 29 | extension UnkeyedDecodingContainer { 30 | 31 | public mutating func decode() throws -> T { 32 | return try decode(T.self) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Favorite+ConflictResolution.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Favorite+ConflictResolution.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 25/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CloudKit 11 | import OSLog 12 | 13 | extension Favorite { 14 | 15 | public static func resolveConflict(clientRecord: CKRecord, serverRecord: CKRecord) -> CKRecord? { 16 | // Client record always wins, take server record and update isDeleted (only property that matters for favorites) 17 | serverRecord["isDeleted"] = clientRecord["isDeleted"] 18 | 19 | return serverRecord 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Favorite.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Favorite.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | /// Defines the user action of adding a session as favorite 13 | public final class Favorite: Object, HasCloudKitFields, SoftDeletable { 14 | 15 | /// CloudKit system data 16 | @objc public dynamic var ckFields = Data() 17 | 18 | /// Unique identifier 19 | @objc public dynamic var identifier = UUID().uuidString 20 | 21 | /// When the favorite was created 22 | @objc public dynamic var createdAt = Date() 23 | 24 | /// Soft delete (for syncing) 25 | @objc public dynamic var isDeleted: Bool = false 26 | 27 | /// The session this favorite is associated with 28 | public let session = LinkingObjects(fromType: Session.self, property: "favorites") 29 | 30 | public override static func primaryKey() -> String? { 31 | return "identifier" 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/FeaturedAuthor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FeaturedAuthor.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 26/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RealmSwift 11 | 12 | /// Specifies an author for a curated playlist 13 | public class FeaturedAuthor: Object, Decodable { 14 | 15 | @objc public dynamic var name: String = "" 16 | @objc public dynamic var bio: String = "" 17 | @objc public dynamic var avatar: String = "" 18 | @objc public dynamic var url: String = "" 19 | 20 | public override static func primaryKey() -> String? { 21 | return "name" 22 | } 23 | 24 | // MARK: - Codable 25 | 26 | enum CodingKeys: String, CodingKey { 27 | case name, bio, avatar, url 28 | } 29 | 30 | public required convenience init(from decoder: Decoder) throws { 31 | self.init() 32 | 33 | let container = try decoder.container(keyedBy: CodingKeys.self) 34 | 35 | name = try container.decode(key: .name) 36 | bio = try container.decode(key: .bio) 37 | avatar = try container.decode(key: .avatar) 38 | url = try container.decode(key: .url) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Focus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Focus.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | /// Focuses are basically platform names (ex: "macOS", "iOS") 13 | public class Focus: Object, Decodable { 14 | 15 | /// The name of the focus area 16 | @objc public dynamic var name = "" 17 | 18 | /// Sessions containing this focus 19 | public let sessions = LinkingObjects(fromType: Session.self, property: "focuses") 20 | 21 | public override class func primaryKey() -> String? { 22 | return "name" 23 | } 24 | 25 | // MARK: - Decodable 26 | 27 | public convenience required init(from decoder: Decoder) throws { 28 | self.init() 29 | 30 | name = try decoder.singleValueContainer().decode() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Keyword.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Keyword.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | /// Keywords used when searching sessions 13 | public class Keyword: Object, Decodable { 14 | 15 | /// The keyword 16 | @objc public dynamic var name = "" 17 | 18 | public override class func primaryKey() -> String? { 19 | return "name" 20 | } 21 | 22 | // MARK: Decodable 23 | 24 | public convenience required init(from decoder: Decoder) throws { 25 | self.init() 26 | 27 | name = try decoder.singleValueContainer().decode() 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/NSCodingExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSCodingExtensions.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 18/07/19. 6 | // Copyright © 2019 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import QuartzCore 11 | import OSLog 12 | 13 | private let _log = makeLogger(subsystem: "ConfCore", category: "NSCodingExtensions") 14 | 15 | public extension NSKeyedArchiver { 16 | 17 | static func archiveData(with rootObject: Any, secure: Bool) -> Data { 18 | do { 19 | return try NSKeyedArchiver.archivedData(withRootObject: rootObject, requiringSecureCoding: secure) 20 | } catch { 21 | assertionFailure("Failed to archive object: \(error)") 22 | 23 | return Data() 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/PhotoRepresentation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PhotoRepresentation.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | public enum PhotoRepresentationSize: Int { 13 | case mini = 256 14 | case small = 512 15 | case medium = 1024 16 | case large = 2048 17 | 18 | static let all: [PhotoRepresentationSize] = [ 19 | .mini, 20 | .small, 21 | .medium, 22 | .large 23 | ] 24 | } 25 | 26 | /// Photo representations are assets for photos specifying widths and URLs for different photo sizes 27 | public class PhotoRepresentation: Object { 28 | 29 | /// The path for the photo 30 | @objc public dynamic var remotePath = "" 31 | 32 | /// The width of the photo 33 | @objc public dynamic var width = 0 34 | 35 | /// The photo object this representation is associated with 36 | public let photo = LinkingObjects(fromType: Photo.self, property: "representations") 37 | 38 | public override class func primaryKey() -> String? { 39 | return "remotePath" 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/RealmCollection+toArray.swift: -------------------------------------------------------------------------------- 1 | import RealmSwift 2 | 3 | extension List { 4 | public func toArray() -> [Element] { Array(self) } 5 | } 6 | 7 | extension Results { 8 | public func toArray() -> [Element] { Array(self) } 9 | } 10 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/ScheduleSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleSection.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 13/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | /// A section from the schedule, representing a time slot of the conference 13 | public final class ScheduleSection: Object { 14 | 15 | @objc public dynamic var identifier: String = "" 16 | @objc public dynamic var eventIdentifier: String = "" 17 | @objc public dynamic var representedDate: Date = .distantPast 18 | public let instances = List() 19 | 20 | public override static func primaryKey() -> String { 21 | return "identifier" 22 | } 23 | 24 | internal static var identifierFormatter: DateFormatter { 25 | let f = DateFormatter() 26 | 27 | f.dateFormat = "MM-dd-yyyy'@'HH:mm" 28 | 29 | return f 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/Session+Children.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Session+Children.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 25/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RealmSwift 11 | 12 | extension Session { 13 | 14 | func addChild(object: Object) { 15 | if let favorite = object as? Favorite { 16 | guard !favorites.contains(favorite) else { return } 17 | favorites.append(favorite) 18 | } else if let bookmark = object as? Bookmark { 19 | guard !bookmarks.contains(bookmark) else { return } 20 | bookmarks.append(bookmark) 21 | } else if let progress = object as? SessionProgress { 22 | guard !progresses.contains(progress) else { return } 23 | progresses.append(progress) 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/SessionProgress+ConflictResolution.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionProgress+ConflictResolution.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 26/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CloudKit 11 | import OSLog 12 | 13 | extension SessionProgress { 14 | 15 | public static func resolveConflict(clientRecord: CKRecord, serverRecord: CKRecord) -> CKRecord? { 16 | // Client record always wins 17 | serverRecord["currentPosition"] = clientRecord["currentPosition"] 18 | serverRecord["relativePosition"] = clientRecord["relativePosition"] 19 | serverRecord["updatedAt"] = clientRecord["updatedAt"] 20 | 21 | return serverRecord 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/TranscriptAnnotation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TranscriptAnnotation.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/02/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | /// TranscriptAnnotation is a line within an ASCIIWWDC transcript, with its associated timestamp within the session's video 13 | public class TranscriptAnnotation: Object { 14 | 15 | /// The time this annotation occurs within the video 16 | @objc public dynamic var timecode = 0.0 17 | 18 | /// The annotation's text 19 | @objc public dynamic var body = "" 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/TranscriptIndexingClientProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TranscriptIndexingClientProtocol.swift 3 | // ConfCore 4 | // 5 | // Created by Guilherme Rambo on 27/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | @objc public protocol TranscriptIndexingClientProtocol: NSObjectProtocol { 12 | 13 | func transcriptIndexingStarted() 14 | func transcriptIndexingProgressDidChange(_ progress: Float) 15 | func transcriptIndexingStopped() 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCore/TranscriptIndexingServiceProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TranscriptIndexingServiceProtocol.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 28/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | @objc public protocol TranscriptIndexingServiceProtocol: NSObjectProtocol { 12 | 13 | func indexTranscriptsIfNeeded(manifestURL: URL, ignoringCache: Bool, storageURL: URL, schemaVersion: UInt64) 14 | 15 | } 16 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCoreTests/Util/Realm+InMemory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Realm+InMemory.swift 3 | // ConfCoreTests 4 | // 5 | // Created by Anton Selyanin on 14/10/2017. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RealmSwift 11 | 12 | extension Realm { 13 | static func makeInMemoryConfiguration() -> Realm.Configuration { 14 | return Realm.Configuration(inMemoryIdentifier: UUID().uuidString) 15 | } 16 | 17 | static func makeInMemory() -> Realm { 18 | return tryOrXCTFail(try Realm(configuration: makeInMemoryConfiguration())) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Packages/ConfCore/ConfCoreTests/Util/TestUtilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestUtilities.swift 3 | // ConfCoreTests 4 | // 5 | // Created by Allen Humphreys on 8/3/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | func tryOrXCTFail(_ thingToTry: @autoclosure () throws -> T, line: Int = #line) -> T { 12 | do { 13 | return try thingToTry() 14 | } catch { 15 | XCTFail("\(#function) called at line \(line) failed to produce type <\(T.self)> with error: \(error)") 16 | fatalError() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Packages/ConfCore/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.8 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "ConfCore", 7 | platforms: [ 8 | .macOS(.v12) 9 | ], 10 | products: [ 11 | .library( 12 | name: "ConfCore", 13 | type: .dynamic, 14 | targets: ["ConfCore"]) 15 | ], 16 | dependencies: [ 17 | .package(url: "https://github.com/apple/swift-collections.git", from: "1.0.4"), 18 | .package(url: "https://github.com/bustoutsolutions/siesta", from: "1.5.2"), 19 | .package(url: "https://github.com/realm/realm-swift", from: "10.0.0"), 20 | .package(url: "https://github.com/insidegui/CloudKitCodable", branch: "spm"), 21 | .package(path: "../Transcripts") 22 | ], 23 | targets: [ 24 | .target( 25 | name: "ConfCore", 26 | dependencies: [ 27 | .product(name: "Collections", package: "swift-collections"), 28 | "CloudKitCodable", 29 | .product(name: "RealmSwift", package: "realm-swift"), 30 | .product(name: "Siesta", package: "siesta"), 31 | "Transcripts" 32 | ], 33 | path: "ConfCore/") 34 | ] 35 | ) 36 | -------------------------------------------------------------------------------- /Packages/Transcripts/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.8 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "Transcripts", 7 | platforms: [ 8 | .macOS(.v12) 9 | ], 10 | products: [ 11 | .library( 12 | name: "Transcripts", 13 | targets: ["Transcripts"]) 14 | ], 15 | dependencies: [ ], 16 | targets: [ 17 | .target( 18 | name: "Transcripts", 19 | dependencies: [ ], 20 | path: "Transcripts/") 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /Packages/Transcripts/Transcripts/Coalescer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Coalescer.swift 3 | // Transcripts 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class Coalescer { 12 | 13 | let delay: TimeInterval 14 | 15 | init(delay: TimeInterval) { 16 | self.delay = delay 17 | } 18 | 19 | private let serialQueue = DispatchQueue(label: "Coalescer") 20 | 21 | private var buffer: [T] = [] 22 | 23 | private var workItem: DispatchWorkItem? 24 | 25 | func run(for contents: [T], queue: DispatchQueue, callback: @escaping ([T]) -> Void) { 26 | workItem?.cancel() 27 | workItem = nil 28 | 29 | serialQueue.sync { [weak self] in 30 | self?.buffer += contents 31 | } 32 | 33 | workItem = DispatchWorkItem { [weak self] in 34 | guard let self = self else { return } 35 | 36 | let buf = self.serialQueue.sync { return self.buffer } 37 | callback(buf) 38 | 39 | self.serialQueue.sync { self.buffer.removeAll() } 40 | 41 | self.workItem = nil 42 | } 43 | 44 | queue.asyncAfter(deadline: .now() + delay, execute: workItem!) 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /Packages/Transcripts/Transcripts/Loader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Loader.swift 3 | // Transcripts 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol Loader { 12 | func load(from url: URL, decoder: @escaping (Data) throws -> T, completion: @escaping (Result) -> Void) 13 | } 14 | 15 | public struct LoaderError: LocalizedError { 16 | public var localizedDescription: String 17 | 18 | public static func http(_ code: Int) -> LoaderError { 19 | LoaderError(localizedDescription: "HTTP error \(code)") 20 | } 21 | 22 | public static func networking(_ error: Error) -> LoaderError { 23 | if let suggestion = (error as NSError).localizedRecoverySuggestion { 24 | return LoaderError(localizedDescription: "A networking error occurred.\n\(suggestion)") 25 | } else { 26 | return LoaderError(localizedDescription: error.localizedDescription) 27 | } 28 | } 29 | 30 | public static func serialization(_ error: Error) -> LoaderError { 31 | return LoaderError(localizedDescription: error.localizedDescription) 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Packages/Transcripts/Transcripts/TranscriptManifest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TranscriptManifest.swift 3 | // Transcripts 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public struct TranscriptManifest: Hashable, Codable { 12 | public struct Feed: Hashable, Codable { 13 | public let url: URL 14 | public let etag: String 15 | } 16 | 17 | /// Session ID -> feed. 18 | public let individual: [String: Feed] 19 | } 20 | -------------------------------------------------------------------------------- /Packages/Transcripts/Transcripts/TranscriptStorage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TranscriptStorage.swift 3 | // Transcripts 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol TranscriptStorage: AnyObject { 12 | 13 | func previousEtag(for identifier: String) -> String? 14 | func store(_ transcripts: [TranscriptContent], manifest: TranscriptManifest) 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Packages/Transcripts/Transcripts/Transcripts.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Transcripts.swift 3 | // Transcripts 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Transcripts { 12 | static let subsystemName = "io.WWDC.lib.Transcripts" 13 | } 14 | -------------------------------------------------------------------------------- /Packages/Transcripts/TranscriptsTests/Fixtures/transcript-manifest-eng.json: -------------------------------------------------------------------------------- 1 | { 2 | "updated": "2020-05-24T14:32:04+00:00", 3 | "digest": { 4 | "etag": "\"3de45a13f3b668d93f8b646bedfa2704\"", 5 | "url": "https://devimages-cdn.apple.com/wwdc-services/transcripts/digests/transcript-digest-eng.json" 6 | }, 7 | "individual": { 8 | "wwdc2019-103": { 9 | "etag": "\"ea551e731dca2e07093c5c4e0dabc0b2\"", 10 | "url": "http://localhost:9042/wwdc2019-103-transcript-eng.json" 11 | }, 12 | "wwdc2019-104": { 13 | "etag": "\"47f84c64e9757a4658628243d793141a\"", 14 | "url": "http://localhost:9042/wwdc2019-104-transcript-eng.json" 15 | }, 16 | "wwdc2019-202": { 17 | "etag": "\"22b1002ee9f7b1757af9097f80a4b5e8\"", 18 | "url": "http://localhost:9042/wwdc2019-202-transcript-eng.json" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Packages/Transcripts/TranscriptsTests/Sources/Bundle+LoadJSON.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bundle+LoadJSON.swift 3 | // TranscriptsTests 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Bundle { 12 | func loadJSON(from resource: String) throws -> T { 13 | guard let url = self.url(forResource: resource, withExtension: "json") else { 14 | fatalError("Missing \(resource) from testing bundle") 15 | } 16 | 17 | let data = try Data(contentsOf: url) 18 | 19 | return try JSONDecoder().decode(T.self, from: data) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Packages/Transcripts/TranscriptsTests/Sources/FakeStorage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FakeStorage.swift 3 | // TranscriptsTests 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | @testable import Transcripts 11 | 12 | final class FakeStorage: TranscriptStorage { 13 | 14 | /// Mapping from identifier to etag for faking presence of cached transcript during tests. 15 | var fakeEtags: [String: String] = [:] 16 | 17 | func previousEtag(for identifier: String) -> String? { fakeEtags[identifier] } 18 | 19 | func store(_ transcripts: [TranscriptContent], manifest: TranscriptManifest) { 20 | storeCalledHandler(transcripts) 21 | } 22 | 23 | var storeCalledHandler: ([TranscriptContent]) -> Void = { _ in } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Packages/Transcripts/TranscriptsTests/Sources/FixtureLoader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FixtureLoader.swift 3 | // TranscriptsTests 4 | // 5 | // Created by Guilherme Rambo on 25/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | @testable import Transcripts 11 | 12 | final class FixtureLoader: Loader { 13 | 14 | func load(from url: URL, decoder: @escaping (Data) throws -> T, completion: @escaping (Result) -> Void) where T: Decodable { 15 | let filename = url.deletingPathExtension().lastPathComponent 16 | // swiftlint:disable:next force_try 17 | let result: T = try! Bundle(for: Self.self).loadJSON(from: filename) 18 | completion(.success(result)) 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /PlayerUI/.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: 2 | - cyclomatic_complexity 3 | - block_based_kvo 4 | -------------------------------------------------------------------------------- /PlayerUI/Definitions/Colors.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Colors.swift 3 | // PlayerProto 4 | // 5 | // Created by Guilherme Rambo on 28/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | @_exported import ConfUIFoundation 11 | 12 | extension NSColor { 13 | 14 | static var timeLabel = NSColor.labelColor 15 | 16 | static let playerBorder = NSColor.quaternaryLabelColor 17 | 18 | static var highlightedPlayerBorder = NSColor.tertiaryLabelColor 19 | 20 | static let bufferProgress = NSColor.tertiaryLabelColor 21 | 22 | static var playerProgress = NSColor.secondaryLabelColor 23 | 24 | static var seekProgress = NSColor.labelColor 25 | 26 | static var playerHighlight: NSColor { .primary } 27 | 28 | static var buttonColor: NSColor { 29 | return NSColor(calibratedRed: 1.00, green: 1.00, blue: 1.00, alpha: 1.00) 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /PlayerUI/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | $(COPYRIGHT) 23 | 24 | 25 | -------------------------------------------------------------------------------- /PlayerUI/PlayerUI.h: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerUI.h 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 29/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for PlayerUI. 12 | FOUNDATION_EXPORT double PlayerUIVersionNumber; 13 | 14 | //! Project version string for PlayerUI. 15 | FOUNDATION_EXPORT const unsigned char PlayerUIVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | -------------------------------------------------------------------------------- /PlayerUI/Protocols/PUITimelineAnnotation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PUITimelineAnnotation.swift 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 01/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | public protocol PUITimelineAnnotation { 12 | var identifier: String { get } 13 | var timestamp: Double { get } 14 | var isValid: Bool { get } 15 | var isEmpty: Bool { get } 16 | } 17 | -------------------------------------------------------------------------------- /PlayerUI/Protocols/PUITimelineDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PUITimelineDelegate.swift 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 01/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | public protocol PUITimelineDelegate: AnyObject { 12 | 13 | func viewControllerForTimelineAnnotation(_ annotation: PUITimelineAnnotation) -> NSViewController? 14 | func timelineDidHighlightAnnotation(_ annotation: PUITimelineAnnotation?) 15 | func timelineDidSelectAnnotation(_ annotation: PUITimelineAnnotation?) 16 | 17 | func timelineCanDeleteAnnotation(_ annotation: PUITimelineAnnotation) -> Bool 18 | func timelineCanMoveAnnotation(_ annotation: PUITimelineAnnotation) -> Bool 19 | 20 | func timelineDidMoveAnnotation(_ annotation: PUITimelineAnnotation, to timestamp: Double) 21 | func timelineDidDeleteAnnotation(_ annotation: PUITimelineAnnotation) 22 | 23 | } 24 | -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/Annotation.dataset/Bookmark.caar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/Annotation.dataset/Bookmark.caar -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/Annotation.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "Bookmark.caar", 5 | "idiom" : "universal", 6 | "universal-type-identifier" : "com.apple.coreanimation-archive" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/TimeBubble.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "TimeBubble.caar", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/TimeBubble.dataset/TimeBubble.caar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/TimeBubble.dataset/TimeBubble.caar -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/airplay.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "airplay.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "airplay@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "airplay@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/airplay.imageset/airplay@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back15s.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "back15s.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "back15s@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "back15s@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back15s.imageset/back15s@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back30s.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "back30s.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "back30s@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "back30s@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/back30s.imageset/back30s@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/bookmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bookmark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "bookmark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "bookmark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/bookmark.imageset/bookmark@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward15s.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "forward15s.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "forward15s@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "forward15s@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward15s.imageset/forward15s@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward30s.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "forward30s.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "forward30s@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "forward30s@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/forward30s.imageset/forward30s@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fullscreen.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "fullscreen@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "fullscreen@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreen.imageset/fullscreen@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fullscreenExit.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "fullscreenExit@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "fullscreenExit@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/fullscreenExit.imageset/fullscreenExit@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "nextbookmark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "nextbookmark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "nextbookmark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nextbookmark.imageset/nextbookmark@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nosound.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "nosound.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "nosound@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "nosound@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/nosound.imageset/nosound@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pause.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "pause@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "pause@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pause.imageset/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pause.imageset/pause.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pause.imageset/pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pause.imageset/pause@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pause.imageset/pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pause.imageset/pause@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip-big.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pip-big.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "pip-big@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "pip-big@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip-big.imageset/pip-big@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pip.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "pip@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "pip@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip.imageset/pip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip.imageset/pip.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip.imageset/pip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip.imageset/pip@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pip.imageset/pip@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pip.imageset/pip@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pipExit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pipExit.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "pipExit@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "pipExit@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/pipExit.imageset/pipExit@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "play.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "play@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "play@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/play.imageset/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/play.imageset/play.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/play.imageset/play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/play.imageset/play@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/play.imageset/play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/play.imageset/play@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "prevbookmark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "prevbookmark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "prevbookmark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/prevbookmark.imageset/prevbookmark@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "speed-1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "speed-1@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "speed-1@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-1.imageset/speed-1@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-125.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "speed-125.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "speed-125@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "speed-125@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-125.imageset/speed-125@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-15.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "speed-15.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "speed-15@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "speed-15@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-15.imageset/speed-15@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-175.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "speed-175.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "speed-175@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "speed-175@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-175.imageset/speed-175@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "speed-2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "speed-2@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "speed-2@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-2.imageset/speed-2@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-h.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "speed-h.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "speed-h@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "speed-h@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/speed-h.imageset/speed-h@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/subtitles.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "subtitles.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "subtitles@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "subtitles@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/subtitles.imageset/subtitles@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/volume.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "volume.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "volume@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "volume@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/volume.imageset/volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/volume.imageset/volume.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/volume.imageset/volume@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/volume.imageset/volume@2x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/Media.xcassets/volume.imageset/volume@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/Media.xcassets/volume.imageset/volume@3x.png -------------------------------------------------------------------------------- /PlayerUI/Resources/WhiteSpinner.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/PlayerUI/Resources/WhiteSpinner.car -------------------------------------------------------------------------------- /PlayerUI/Touch Bar Support/PUITouchBarItems.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PUITouchBarItems.swift 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 28/04/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSTouchBar.CustomizationIdentifier { 12 | static let player = NSTouchBar.CustomizationIdentifier("Player") 13 | } 14 | 15 | extension NSTouchBarItem.Identifier { 16 | static let playPauseButton = NSTouchBarItem.Identifier("Play/Pause") 17 | static let scrubber = NSTouchBarItem.Identifier("Scrubber") 18 | static let goBackInTime = NSTouchBarItem.Identifier("Back") 19 | static let goForwardInTime = NSTouchBarItem.Identifier("Forward") 20 | static let previousAnnotation = NSTouchBarItem.Identifier("Previous Annotation") 21 | static let nextAnnotation = NSTouchBarItem.Identifier("Next Annotation") 22 | static let speed = NSTouchBarItem.Identifier("Playback Speed") 23 | static let addAnnotation = NSTouchBarItem.Identifier("Add Annotation") 24 | static let togglePictureInPicture = NSTouchBarItem.Identifier("Toggle PiP") 25 | static let toggleFullscreen = NSTouchBarItem.Identifier("Toggle Fullscreen") 26 | static let exitFullscreen = NSTouchBarItem.Identifier("Exit Fullscreen") 27 | } 28 | -------------------------------------------------------------------------------- /PlayerUI/Util/AVAsset+AsyncHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AVAsset+AsyncHelpers.swift 3 | // PlayerUI 4 | // 5 | // Created by Allen Humphreys on 25/6/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import AVFoundation 10 | 11 | extension AVAsset { 12 | 13 | public var durationIfLoaded: CMTime? { 14 | 15 | let error: NSErrorPointer = nil 16 | let durationStatus = statusOfValue(forKey: "duration", error: error) 17 | 18 | guard durationStatus == .loaded, error?.pointee == nil else { return nil } 19 | 20 | return duration 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /PlayerUI/Util/AVPlayer+Validation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AVPlayer+Validation.swift 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 30/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import AVFoundation 11 | 12 | extension AVPlayer { 13 | 14 | // MARK: - Static Functions 15 | 16 | static func validateMediaDurationWithSeconds(_ duration: Double) -> Bool { 17 | return !duration.isNaN && !duration.isInfinite && !duration.isZero 18 | } 19 | 20 | static func validateMediaDuration(_ duration: CMTime) -> Bool { 21 | return validateMediaDurationWithSeconds(Double(CMTimeGetSeconds(duration))) 22 | } 23 | 24 | // MARK: - Public Properties 25 | 26 | var hasValidMediaDuration: Bool { 27 | guard let duration = currentItem?.asset.durationIfLoaded else { return false } 28 | 29 | return AVPlayer.validateMediaDuration(duration) 30 | } 31 | 32 | var hasFinishedPlaying: Bool { 33 | let currentTimeSeconds = currentTime().seconds 34 | guard let durationSeconds = currentItem?.asset.durationIfLoaded?.seconds else { return false } 35 | 36 | return abs(currentTimeSeconds - durationSeconds) < 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /PlayerUI/Util/NSEvent+ForceTouch.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSEvent+ForceTouch.swift 3 | // PlayerProto 4 | // 5 | // Created by Guilherme Rambo on 29/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | enum PUITouchForce: Int { 12 | case reserved = -1 13 | case none = 0 14 | case normal = 1 15 | case forceTouch = 2 16 | case reserved2 = 3 17 | } 18 | 19 | extension NSEvent { 20 | 21 | var touchForce: PUITouchForce { 22 | return PUITouchForce(rawValue: synthesizedStage)! 23 | } 24 | 25 | private var synthesizedStage: Int { 26 | switch type { 27 | case .tabletPoint: 28 | if pressure > 0.5 { 29 | return 2 30 | } else { 31 | return 1 32 | } 33 | case .pressure: 34 | return stage 35 | default: 36 | return 1 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /PlayerUI/Util/NSWindow+Snapshot.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSWindow+Snapshot.swift 3 | // PlayerUI 4 | // 5 | // Created by Guilherme Rambo on 13/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSWindow { 12 | 13 | var snapshot: NSImage? { 14 | guard windowNumber != -1 else { return nil } 15 | 16 | guard let cgImage = CGWindowListCreateImage(.null, .optionIncludingWindow, CGWindowID(windowNumber), .boundsIgnoreFraming) else { 17 | return nil 18 | } 19 | 20 | let image = NSImage(cgImage: cgImage, size: frame.size) 21 | 22 | image.cacheMode = .never 23 | 24 | return image 25 | } 26 | 27 | func snapshot(in rect: NSRect) -> NSImage? { 28 | guard let fullImage = snapshot else { return nil } 29 | 30 | let croppedImage = NSImage(size: rect.size) 31 | croppedImage.cacheMode = .never 32 | 33 | croppedImage.lockFocus() 34 | fullImage.draw(in: NSRect(x: 0, y: 0, width: rect.size.width, height: rect.size.height), from: rect, operation: .sourceOver, fraction: 1) 35 | croppedImage.unlockFocus() 36 | 37 | return croppedImage 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /PlayerUI/Util/NumericContentTransition.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | public extension View { 4 | @ViewBuilder 5 | func numericContentTransition(value: Double? = nil, countsDown: Bool = false) -> some View { 6 | if let value, #available(macOS 14.0, iOS 17.0, *) { 7 | contentTransition(.numericText(value: value)) 8 | } else if #available(macOS 13.0, iOS 16.0, *) { 9 | contentTransition(.numericText(countsDown: countsDown)) 10 | } else { 11 | self 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /PlayerUI/Util/PUISettings.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | final class PUISettings: ObservableObject { 4 | @AppStorage("trailingLabelDisplaysDuration") 5 | var trailingLabelDisplaysDuration = false 6 | 7 | @AppStorage("playerVolume") 8 | var playerVolume: Double = 1 9 | 10 | @AppStorage("playbackRate") 11 | var playbackRate: Double = Double(PUIPlaybackSpeed.normal.rawValue) 12 | } 13 | -------------------------------------------------------------------------------- /PlayerUI/Views/PUIAnnotationWindow.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PUIAnnotationWindow.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 28/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class PUIAnnotationWindow: NSWindow { 12 | 13 | override var canBecomeKey: Bool { 14 | return true 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /Releases/WWDC_latest.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Releases/WWDC_latest.zip -------------------------------------------------------------------------------- /Resources/bookmarks.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Resources/bookmarks.pdf -------------------------------------------------------------------------------- /Resources/news.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Resources/news.pdf -------------------------------------------------------------------------------- /Resources/schedule.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Resources/schedule.pdf -------------------------------------------------------------------------------- /Resources/videos.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/Resources/videos.pdf -------------------------------------------------------------------------------- /TranscriptIndexingService/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | TranscriptIndexingService 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | $(COPYRIGHT) 25 | XPCService 26 | 27 | ServiceType 28 | Application 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /TranscriptIndexingService/Source/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // TranscriptIndexingService 4 | // 5 | // Created by Guilherme Rambo on 27/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ConfCore 11 | 12 | let service = TranscriptIndexingService() 13 | service.resume() 14 | -------------------------------------------------------------------------------- /TranscriptIndexingService/TranscriptIndexingService.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /WWDC.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WWDC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /WWDC/ActionLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ActionLabel.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 28/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | final class ActionLabel: NSTextField { 12 | 13 | private var cursorTrackingArea: NSTrackingArea! 14 | 15 | override func updateTrackingAreas() { 16 | super.updateTrackingAreas() 17 | 18 | if cursorTrackingArea != nil { 19 | removeTrackingArea(cursorTrackingArea) 20 | } 21 | 22 | cursorTrackingArea = NSTrackingArea(rect: bounds, 23 | options: [.cursorUpdate, .inVisibleRect, .activeInActiveApp], 24 | owner: self, 25 | userInfo: nil) 26 | addTrackingArea(cursorTrackingArea) 27 | } 28 | 29 | override func cursorUpdate(with event: NSEvent) { 30 | if event.trackingArea == cursorTrackingArea { 31 | NSCursor.pointingHand.push() 32 | } else { 33 | super.cursorUpdate(with: event) 34 | } 35 | } 36 | 37 | override func mouseDown(with event: NSEvent) { 38 | if let action = action { 39 | NSApp.sendAction(action, to: target, from: self) 40 | } 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /WWDC/AppCoordinator+RelatedSessions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCoordinator+RelatedSessions.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 17/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import ConfCore 11 | 12 | extension AppCoordinator: RelatedSessionsViewControllerDelegate { 13 | 14 | func relatedSessionsViewController(_ controller: RelatedSessionsViewController, didSelectSession viewModel: SessionViewModel) { 15 | selectSessionOnAppropriateTab(with: viewModel) 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /WWDC/AppCoordinator+UserActivity.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppCoordinator+UserActivity.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | import ConfCore 12 | import PlayerUI 13 | 14 | extension AppCoordinator { 15 | 16 | func updateCurrentActivity(with item: UserActivityRepresentable?) { 17 | guard let item = item else { 18 | currentActivity?.invalidate() 19 | currentActivity = nil 20 | return 21 | } 22 | 23 | let activity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb) 24 | 25 | activity.title = item.title 26 | activity.webpageURL = item.webUrl?.replacingAppleDeveloperHostWithNativeHost 27 | 28 | activity.becomeCurrent() 29 | 30 | currentActivity = activity 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /WWDC/Arguments.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Arguments.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 13/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Arguments { 12 | 13 | private static var args: [String] { 14 | return ProcessInfo.processInfo.arguments 15 | } 16 | 17 | static var skipMigration: Bool { 18 | return args.contains("--skip-migration") 19 | } 20 | 21 | static var useTestVideo: Bool { 22 | return args.contains("--use-test-video") 23 | } 24 | 25 | static var showPreferences: Bool { 26 | return args.contains("--prefs") 27 | } 28 | 29 | static var deloreanDate: String? { 30 | guard let deloreanIndex = args.firstIndex(of: "--delorean") else { return nil } 31 | // An example value: 2017-06-07'T'12:00:00-06:00 32 | // - see: `DateProvider` 33 | 34 | guard args.count > deloreanIndex + 1 else { return nil } 35 | 36 | return args[deloreanIndex + 1] 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_128.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_128@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_16.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_16@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_256.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_256@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_32.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_32@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_512.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/AppIcon.appiconset/icon_512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/AppIcon.appiconset/icon_512@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/ClipTemplate.dataset/ClipTemplate.caar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/ClipTemplate.dataset/ClipTemplate.caar -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/ClipTemplate.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "ClipTemplate.caar", 5 | "idiom" : "universal", 6 | "universal-type-identifier" : "com.apple.coreanimation-archive" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/VariableBlur-Top.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "VariableBlur-Top.caar", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/VariableBlur-Top.dataset/VariableBlur-Top.caar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/VariableBlur-Top.dataset/VariableBlur-Top.caar -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/account.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "account.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "account@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "account@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/account.imageset/account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/account.imageset/account.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/account.imageset/account@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/account.imageset/account@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/account.imageset/account@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/account.imageset/account@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "avatar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "avatar@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/avatar.imageset/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/avatar.imageset/avatar.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/avatar.imageset/avatar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/avatar.imageset/avatar@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/avatar.imageset/avatar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/avatar.imageset/avatar@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/bookmarks.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "bookmarks.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "bookmarks@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "bookmarks@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/bookmarks.imageset/bookmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/bookmarks.imageset/bookmarks.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/bookmarks.imageset/bookmarks@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/bookmarks.imageset/bookmarks@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/bookmarks.imageset/bookmarks@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/bookmarks.imageset/bookmarks@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/calendar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "filename" : "calendar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "filename" : "calendar@2x.png", 11 | "scale" : "2x" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | }, 18 | "properties" : { 19 | "template-rendering-intent" : "template" 20 | } 21 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/calendar.imageset/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/calendar.imageset/calendar.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/calendar.imageset/calendar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/calendar.imageset/calendar@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast-large.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "chromecast-large.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "chromecast-large@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "chromecast-large@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast-large.imageset/chromecast-large@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "chromecast.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "chromecast@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "chromecast@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast.imageset/chromecast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast.imageset/chromecast.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast.imageset/chromecast@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast.imageset/chromecast@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/chromecast.imageset/chromecast@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/chromecast.imageset/chromecast@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/clip.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "clip.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/clip.imageset/clip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/clip.imageset/clip.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/copy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "copy.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "template" 14 | } 15 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/copy.imageset/copy.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/copy.imageset/copy.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download-small.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "down-arrow.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "down-arrow@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "down-arrow@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download-small.imageset/down-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/download-small.imageset/down-arrow.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download-small.imageset/down-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/download-small.imageset/down-arrow@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download-small.imageset/down-arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/download-small.imageset/down-arrow@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "download-1.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/download.imageset/download-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/download.imageset/download-1.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/favorite-filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "favorite-filled.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/favorite-filled.imageset/favorite-filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/favorite-filled.imageset/favorite-filled.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/favorite.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "favorite.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/favorite.imageset/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/favorite.imageset/favorite.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured-placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "featured-placeholder.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "template-rendering-intent" : "original" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured-placeholder.imageset/featured-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/featured-placeholder.imageset/featured-placeholder.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "featured.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "featured@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "featured@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured.imageset/featured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/featured.imageset/featured.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured.imageset/featured@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/featured.imageset/featured@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/featured.imageset/featured@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/featured.imageset/featured@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/filter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "filter.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "filter@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "filter@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/filter.imageset/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/filter.imageset/filter.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/filter.imageset/filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/filter.imageset/filter@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/filter.imageset/filter@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/filter.imageset/filter@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/general.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "general.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "general@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "general@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/general.imageset/general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/general.imageset/general.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/general.imageset/general@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/general.imageset/general@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/general.imageset/general@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/general.imageset/general@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/get-together.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "special.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/get-together.imageset/special.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/get-together.imageset/special.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/lab-indicator.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "lab-indicator.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/lab-indicator.imageset/lab-indicator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/lab-indicator.imageset/lab-indicator.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/live-indicator.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "live-indicator.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/live-indicator.imageset/live-indicator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/live-indicator.imageset/live-indicator.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/news.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "news.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "news@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "news@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/news.imageset/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/news.imageset/news.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/news.imageset/news@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/news.imageset/news@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/news.imageset/news@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/news.imageset/news@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/noimage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "noimage.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/noimage.imageset/noimage.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/noimage.imageset/noimage.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/reveal-in-finder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "reveal-in-finder.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/reveal-in-finder.imageset/reveal-in-finder.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/reveal-in-finder.imageset/reveal-in-finder.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/schedule.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "schedule.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "schedule@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "schedule@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/schedule.imageset/schedule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/schedule.imageset/schedule.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/schedule.imageset/schedule@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/schedule.imageset/schedule@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/schedule.imageset/schedule@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/schedule.imageset/schedule@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/share-vector.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "Share.caar", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/share-vector.dataset/Share.caar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/share-vector.dataset/Share.caar -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "share.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/share.imageset/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/share.imageset/share.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/slides.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "slides.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/slides.imageset/slides.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/slides.imageset/slides.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/special.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "special.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/special.imageset/special.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/special.imageset/special.pdf -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/star-small.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "star.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "star@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "star@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/star-small.imageset/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/star-small.imageset/star.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/star-small.imageset/star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/star-small.imageset/star@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/star-small.imageset/star@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/star-small.imageset/star@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/trash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "trash.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "trash@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "trash@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/trash.imageset/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/trash.imageset/trash.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/trash.imageset/trash@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/trash.imageset/trash@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/trash.imageset/trash@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/trash.imageset/trash@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/videos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "videos.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "videos@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "videos@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/videos.imageset/videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/videos.imageset/videos.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/videos.imageset/videos@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/videos.imageset/videos@2x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/videos.imageset/videos@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/videos.imageset/videos@3x.png -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/window.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "window.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/Assets.xcassets/window.imageset/window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/Assets.xcassets/window.imageset/window.png -------------------------------------------------------------------------------- /WWDC/CompositionalLayoutBackgroundSwizzler.h: -------------------------------------------------------------------------------- 1 | // 2 | // CompositionalLayoutBackgroundSwizzler.h 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 31/05/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CompositionalLayoutBackgroundSwizzler : NSObject 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /WWDC/DateProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateProvider.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 13/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ConfCore 11 | 12 | typealias DateProvider = () -> Date 13 | 14 | let today: DateProvider = { 15 | if let fakeDate = Arguments.deloreanDate { 16 | let formatter = DateFormatter() 17 | formatter.dateFormat = confCoreDateFormat 18 | return formatter.date(from: fakeDate)! 19 | } else { 20 | return Date() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WWDC/DownloadManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DownloadManager.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import Combine 11 | import ConfCore 12 | import RealmSwift 13 | import OSLog 14 | 15 | extension MediaDownloadManager { 16 | static let shared = MediaDownloadManager( 17 | directoryURL: Preferences.shared.localVideoStorageURL, 18 | engines: [URLSessionMediaDownloadEngine.self, AVAssetMediaDownloadEngine.self], 19 | metadataStorage: FSMediaDownloadMetadataStore(directoryURL: Preferences.shared.downloadMetadataStorageURL) 20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /WWDC/DownloadViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DownloadViewModel.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 10/21/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import ConfCore 10 | import Combine 11 | 12 | final class DownloadViewModel { 13 | let download: MediaDownload 14 | let status: AnyPublisher 15 | let session: Session 16 | 17 | init(download: MediaDownload, status: AnyPublisher, session: Session) { 18 | self.download = download 19 | self.status = status 20 | self.session = session 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WWDC/DownloadsManagementTableRowView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DownloadsManagementTableRowView.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 10/22/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class DownloadsManagementTableRowView: NSTableRowView { 12 | 13 | var isLastRow: Bool = false { 14 | didSet { 15 | guard isLastRow != oldValue else { return } 16 | setNeedsDisplay(bounds) 17 | } 18 | } 19 | 20 | override func drawSeparator(in dirtyRect: NSRect) { 21 | if isLastRow { 22 | NSColor.clear.setFill() 23 | dirtyRect.fill() 24 | } else { 25 | super.drawSeparator(in: dirtyRect) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WWDC/DownloadsManagementTableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DownloadsManagementTableView.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 10/22/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class DownloadsManagementTableView: WWDCTableView { 12 | 13 | // This allows the detached window to be movable 14 | // by grabbing anywhere in the table 15 | override var mouseDownCanMoveWindow: Bool { 16 | return true 17 | } 18 | 19 | // This allows the popover to be detached by grabbing 20 | // anywhere in the table 21 | override func mouseDown(with event: NSEvent) { 22 | superview?.mouseDown(with: event) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WWDC/DownloadsStatusButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DownloadsStatusButton.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 17/7/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class DownloadsStatusButton: NSButton { 12 | 13 | init(target: AnyObject?, action: Selector?) { 14 | super.init(frame: .zero) 15 | setButtonType(.momentaryLight) 16 | 17 | bezelStyle = .texturedRounded 18 | imageScaling = .scaleProportionallyDown 19 | image = NSImage(named: "NSTransferDownload") 20 | self.target = target 21 | self.action = action 22 | } 23 | 24 | required init?(coder: NSCoder) { 25 | fatalError("init(coder:) has not been implemented") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WWDC/FilterType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilterType.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 25/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum FilterIdentifier: String { 12 | case text 13 | case event 14 | case focus 15 | case track 16 | case isFavorite 17 | case isDownloaded 18 | case isUnwatched 19 | case hasBookmarks 20 | } 21 | 22 | protocol FilterType { 23 | 24 | var identifier: FilterIdentifier { get set } 25 | var isEmpty: Bool { get } 26 | var predicate: NSPredicate? { get } 27 | mutating func reset() 28 | 29 | } 30 | 31 | extension Array where Element == FilterType { 32 | func find(_ type: T.Type = T.self, byID identifier: FilterIdentifier) -> T? { 33 | let result = self.first { (filter) -> Bool in 34 | return filter.identifier == identifier && filter is T 35 | } 36 | 37 | return result as? T 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /WWDC/FlippedClipView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FlippedClipView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 26/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class FlippedClipView: NSClipView { 12 | 13 | override var isFlipped: Bool { 14 | return true 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /WWDC/Main.xcconfig: -------------------------------------------------------------------------------- 1 | // If you see this error: "could not find included file 'TeamID.xcconfig' in search paths" 2 | // Make sure you have run the bootstrap script from the project's root directory to set up signing for your team ID. 3 | #include "TeamID.xcconfig" 4 | 5 | MARKETING_VERSION = 7.5 6 | CURRENT_PROJECT_VERSION = 1044 7 | 8 | MACOSX_DEPLOYMENT_TARGET = 12.0 9 | 10 | VERSIONING_SYSTEM = apple-generic 11 | 12 | COPYRIGHT=© 2017-2023 Buddy Software LTD 13 | 14 | CODE_SIGN_STYLE = Automatic 15 | 16 | // This setting slows down debug builds significantly and has no tangible benefit 17 | ENABLE_MODULE_VERIFIER = NO 18 | -------------------------------------------------------------------------------- /WWDC/MediaDownload/Support/Bundle+URLSessionID.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension Bundle { 4 | func backgroundURLSessionIdentifier(suffix: String) -> String { 5 | let prefix = bundleIdentifier ?? bundleURL.lastPathComponent 6 | return "\(prefix).\(suffix)" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /WWDC/MediaDownload/Support/MediaDownload+Sorting.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension MediaDownload { 4 | static func sortingFunction(lhs: MediaDownload, rhs: MediaDownload) -> Bool { 5 | switch (lhs.state, rhs.state) { 6 | case (.paused, .paused): 7 | break 8 | case (.paused, _): 9 | return true 10 | case (_, .paused): 11 | return false 12 | case (.downloading, .downloading): 13 | break 14 | case (.downloading, _): 15 | return false 16 | case (_, .downloading): 17 | return true 18 | default: 19 | break 20 | } 21 | 22 | /// Each "section" is sorted by identifier 23 | return rhs.id < lhs.id 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /WWDC/MediaDownload/Support/String+Error.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension String: @retroactive LocalizedError { 4 | public var errorDescription: String? { self } 5 | } 6 | -------------------------------------------------------------------------------- /WWDC/MediaDownload/Support/URL+FileHelpers.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension URL { 4 | var exists: Bool { FileManager.default.fileExists(atPath: path) } 5 | 6 | func createIfNeeded() throws { 7 | guard !exists else { return } 8 | 9 | try FileManager.default.createDirectory(at: self, withIntermediateDirectories: true) 10 | } 11 | 12 | func creatingIfNeeded() throws -> URL { 13 | try createIfNeeded() 14 | 15 | return self 16 | } 17 | 18 | func deletingIfNeeded(allowDirectory: Bool = false) throws -> URL { 19 | var isDir = ObjCBool(false) 20 | guard FileManager.default.fileExists(atPath: path, isDirectory: &isDir) else { return self } 21 | 22 | guard allowDirectory || !isDir.boolValue else { 23 | throw "Refusing to delete existing directory at \(path)" 24 | } 25 | 26 | try FileManager.default.removeItem(at: self) 27 | 28 | return self 29 | } 30 | 31 | func moveToTemporaryLocation() throws -> URL { 32 | let newTempLocation = URL(fileURLWithPath: NSTemporaryDirectory()) 33 | .appendingPathComponent(lastPathComponent) 34 | 35 | try FileManager.default.moveItem(at: self, to: newTempLocation) 36 | 37 | return newTempLocation 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /WWDC/MediaDownload/Support/URLSessionTask+Media.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension URLSessionTask: MediaDownloadTask { 4 | public func mediaDownloadID() throws -> MediaDownload.ID { 5 | guard let taskDescription else { throw "Media download task is missing a task description." } 6 | return taskDescription 7 | } 8 | 9 | public func setMediaDownloadID(_ id: MediaDownload.ID) { 10 | taskDescription = id 11 | } 12 | 13 | var debugDownloadID: String { taskDescription ?? "" } 14 | } 15 | -------------------------------------------------------------------------------- /WWDC/NSImage+Compression.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+Compression.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 24/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSImage { 12 | 13 | private func compressedJPEG(with factor: Double) -> Data? { 14 | guard let tiff = tiffRepresentation else { return nil } 15 | guard let imageRep = NSBitmapImageRep(data: tiff) else { return nil } 16 | 17 | let options: [NSBitmapImageRep.PropertyKey: Any] = [ 18 | .compressionFactor: factor 19 | ] 20 | 21 | return imageRep.representation(using: .jpeg, properties: options) 22 | } 23 | 24 | var compressedJPEGRepresentation: Data? { 25 | return compressedJPEG(with: 0.35) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /WWDC/NSToolbarItemViewer+Overrides.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSToolbarItemViewer+Overrides.m 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 15/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | @import Cocoa; 10 | 11 | @interface NSToolbarItemViewer: NSView 12 | @end 13 | 14 | @implementation NSToolbarItemViewer (Overrides) 15 | 16 | //- (BOOL)_shouldDrawSelectionIndicator 17 | //{ 18 | // return NO; 19 | //} 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /WWDC/OpenSource.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Main.xcconfig" 2 | 3 | // Once you set your project's development team, 4 | // you'll have a unique bundle identifier. This is because the bundle identifier 5 | // is derived based on the 'SAMPLE_CODE_DISAMBIGUATOR' value. 6 | SAMPLE_CODE_DISAMBIGUATOR=${DEVELOPMENT_TEAM} 7 | -------------------------------------------------------------------------------- /WWDC/OptionalToggleFilter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OptionalToggleFilter.swift 3 | // WWDC 4 | // 5 | // Created by Dave DeLong on 6/11/24. 6 | // Copyright © 2024 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct OptionalToggleFilter: FilterType { 12 | 13 | var identifier: FilterIdentifier 14 | var isOn: Bool? 15 | 16 | var onPredicate: NSPredicate 17 | var offPredicate: NSPredicate 18 | 19 | init(id identifier: FilterIdentifier, onPredicate: NSPredicate, offPredicate: NSPredicate) { 20 | self.identifier = identifier 21 | self.onPredicate = onPredicate 22 | self.offPredicate = offPredicate 23 | } 24 | 25 | var isEmpty: Bool { 26 | return isOn == nil 27 | } 28 | 29 | var predicate: NSPredicate? { 30 | switch isOn { 31 | case true: 32 | return onPredicate 33 | case false: 34 | return offPredicate 35 | default: 36 | return nil 37 | } 38 | } 39 | 40 | mutating func reset() { 41 | isOn = nil 42 | } 43 | 44 | var state: State { 45 | State(isOn: isOn) 46 | } 47 | 48 | struct State: Codable { 49 | let isOn: Bool? 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /WWDC/PreferencesWindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreferencesWindowController.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 20/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class PreferencesWindowController: WWDCWindowController { 12 | 13 | static var defaultRect: NSRect { 14 | return NSRect(x: 0, y: 0, width: 650, height: 500) 15 | } 16 | 17 | override func loadWindow() { 18 | let mask: NSWindow.StyleMask = [.titled, .closable, .fullSizeContentView] 19 | let window = WWDCWindow(contentRect: PreferencesWindowController.defaultRect, styleMask: mask, backing: .buffered, defer: false) 20 | 21 | window.title = "Preferences" 22 | 23 | window.center() 24 | 25 | window.identifier = NSUserInterfaceItemIdentifier(rawValue: "preferences") 26 | window.minSize = PreferencesWindowController.defaultRect.size 27 | 28 | window.animationBehavior = .alertPanel 29 | 30 | window.backgroundColor = .auxWindowBackground 31 | 32 | self.window = window 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /WWDC/PreviewAssets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WWDC/PreviewAssets.xcassets/ExploreTab-Live-Current.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "ExploreTab-Live-Current.json", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WWDC/PreviewAssets.xcassets/ExploreTab-Live.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "ExploreTab-Live.json", 5 | "idiom" : "universal", 6 | "universal-type-identifier" : "public.json" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WWDC/PreviewAssets.xcassets/ExploreTab.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "ExploreTab.json", 5 | "idiom" : "universal", 6 | "universal-type-identifier" : "public.json" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WWDC/Realm+Combine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Realm+Combine.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 6/9/23. 6 | // Copyright © 2023 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Combine 10 | import RealmSwift 11 | 12 | extension RealmSubscribable where Self: Object { 13 | func valuePublisher(share: Bool = true, includeInitialValue: Bool = true, keyPaths: [String]? = nil) -> some Publisher { 14 | var initialValue: some Publisher { Just(self).setFailureType(to: Error.self) } 15 | var valuePublisher: some Publisher { RealmSwift.valuePublisher(self, keyPaths: keyPaths) } 16 | 17 | switch (share, includeInitialValue) { 18 | case (true, true): 19 | return Publishers.Concatenate(prefix: initialValue, suffix: valuePublisher.share()).eraseToAnyPublisher() 20 | case (false, true): 21 | return Publishers.Concatenate(prefix: initialValue, suffix: valuePublisher).eraseToAnyPublisher() 22 | case (true, false): 23 | return valuePublisher.share().eraseToAnyPublisher() 24 | case (false, false): 25 | return valuePublisher.eraseToAnyPublisher() 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WWDC/Sequence+GroupedBy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sequence+GroupedBy.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 6/28/23. 6 | // Copyright © 2023 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Sequence { 12 | @inline(__always) 13 | func grouped(by keyForValue: (Element) -> Key) -> [Key: [Element]] { 14 | Dictionary(grouping: self, by: keyForValue) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WWDC/SessionTableCellView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionTableCellView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 22/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | final class SessionTableCellView: NSTableCellView { 12 | 13 | override init(frame frameRect: NSRect) { 14 | super.init(frame: frameRect) 15 | 16 | setup() 17 | } 18 | 19 | var viewModel: SessionViewModel? { 20 | get { 21 | return cellView.viewModel 22 | } 23 | set { 24 | cellView.viewModel = newValue 25 | } 26 | } 27 | 28 | required init?(coder decoder: NSCoder) { 29 | fatalError() 30 | } 31 | 32 | private lazy var cellView: SessionCellView = { 33 | return SessionCellView(frame: bounds) 34 | }() 35 | 36 | private func setup() { 37 | cellView.autoresizingMask = [.width, .height] 38 | addSubview(cellView) 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /WWDC/ShelfView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShelfView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 22/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | final class ShelfView: NSView { 12 | 13 | var image: NSImage? { 14 | didSet { 15 | imageLayer.contents = image 16 | } 17 | } 18 | 19 | private var imageLayer: CALayer! 20 | 21 | override init(frame frameRect: NSRect) { 22 | super.init(frame: frameRect) 23 | 24 | wantsLayer = true 25 | layer = CALayer() 26 | clipsToBounds = true 27 | 28 | imageLayer = CALayer() 29 | imageLayer.contentsGravity = .resizeAspectFill 30 | imageLayer.autoresizingMask = [.layerHeightSizable, .layerWidthSizable] 31 | imageLayer.frame = bounds 32 | 33 | layer?.addSublayer(imageLayer) 34 | } 35 | 36 | required init?(coder: NSCoder) { 37 | fatalError("init(coder:) has not been implemented") 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /WWDC/SlowMigrationView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SlowMigrationView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 18/07/20. 6 | // Copyright © 2020 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct SlowMigrationView: View { 12 | var body: some View { 13 | VStack { 14 | Text("Migration in progress") 15 | .font(.system(size: 18, weight: .semibold, design: .rounded)) 16 | .padding(.bottom) 17 | Text("WWDC is running a one-time update of your local database. This may take several seconds.") 18 | .multilineTextAlignment(.center) 19 | .lineLimit(nil) 20 | } 21 | .frame(width: 300, height: 100) 22 | .padding([.leading, .trailing, .bottom]) 23 | .offset(x: 0, y: -8) 24 | } 25 | } 26 | 27 | struct SlowMigrationView_Previews: PreviewProvider { 28 | static var previews: some View { 29 | SlowMigrationView() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /WWDC/TextualFilter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TextualFilter.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 27/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ConfCore 11 | 12 | struct TextualFilter: FilterType { 13 | 14 | var identifier: FilterIdentifier 15 | var value: String? 16 | var predicateBuilder: (String?) -> NSPredicate? 17 | 18 | var isEmpty: Bool { 19 | return predicate == nil 20 | } 21 | 22 | var predicate: NSPredicate? { 23 | return predicateBuilder(value) 24 | } 25 | 26 | mutating func reset() { 27 | value = nil 28 | } 29 | 30 | var state: State { 31 | State(value: value) 32 | } 33 | 34 | struct State: Codable { 35 | let value: String? 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WWDC/TitleBarBlurFadeView.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | final class TitleBarBlurFadeView: NSView { 4 | 5 | static var isSupported: Bool { 6 | #if arch(arm64) 7 | return true 8 | #else 9 | return false 10 | #endif 11 | } 12 | 13 | override var intrinsicContentSize: NSSize { NSSize(width: NSView.noIntrinsicMetric, height: 100) } 14 | 15 | override init(frame frameRect: NSRect) { 16 | super.init(frame: frameRect) 17 | 18 | setup() 19 | } 20 | 21 | required init?(coder: NSCoder) { 22 | fatalError() 23 | } 24 | 25 | private func setup() { 26 | guard Self.isSupported else { return } 27 | 28 | guard let blurLayer = CALayer.load(assetNamed: "VariableBlur-Top") else { 29 | assertionFailure("Failed to load VariableBlur-Top layer asset") 30 | return 31 | } 32 | 33 | wantsLayer = true 34 | layer = blurLayer 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /WWDC/ToggleFilter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ToggleFilter.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 27/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct ToggleFilter: FilterType { 12 | 13 | init(id identifier: FilterIdentifier, predicate: NSPredicate?) { 14 | self.identifier = identifier 15 | self.customPredicate = predicate 16 | } 17 | 18 | var identifier: FilterIdentifier 19 | var isOn: Bool = false 20 | 21 | var customPredicate: NSPredicate? 22 | 23 | var isEmpty: Bool { 24 | return !isOn 25 | } 26 | 27 | var predicate: NSPredicate? { 28 | guard isOn else { return nil } 29 | 30 | return customPredicate 31 | } 32 | 33 | mutating func reset() { 34 | isOn = false 35 | } 36 | 37 | var state: State { 38 | State(isOn: isOn) 39 | } 40 | 41 | struct State: Codable { 42 | let isOn: Bool 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /WWDC/UIDebugger.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIDebugger.h 3 | // UIDebugger 4 | // 5 | // Created by Guilherme Rambo on 25/03/16. 6 | // Copyright © 2016 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | @import Cocoa; 10 | 11 | @interface UIDebugger : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /WWDC/UserActivityRepresentable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserActivityRepresentable.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 23/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol UserActivityRepresentable { 12 | var title: String { get } 13 | var webUrl: URL? { get } 14 | } 15 | -------------------------------------------------------------------------------- /WWDC/VideoPlayer.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | import AVFoundation 3 | import AVKit 4 | 5 | struct VideoPlayer: NSViewRepresentable { 6 | var url: URL 7 | private var player: AVPlayer 8 | 9 | init(url: URL) { 10 | self.url = url 11 | self.player = AVPlayer(url: url) 12 | } 13 | 14 | typealias NSViewType = AVPlayerView 15 | 16 | func makeNSView(context: Context) -> AVPlayerView { 17 | let v = AVPlayerView() 18 | v.player = player 19 | v.allowsPictureInPicturePlayback = true 20 | v.showsFullScreenToggleButton = true 21 | v.controlsStyle = .floating 22 | player.play() 23 | return v 24 | } 25 | 26 | func updateNSView(_ nsView: AVPlayerView, context: Context) { 27 | 28 | } 29 | } 30 | 31 | #if DEBUG 32 | struct VideoPlayer_Previews: PreviewProvider { 33 | static var previews: some View { 34 | VideoPlayer(url: URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8")!) 35 | } 36 | } 37 | #endif 38 | -------------------------------------------------------------------------------- /WWDC/WWDC-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "DTFolderMonitor.h" 6 | #import "NSColor+Accent.h" 7 | -------------------------------------------------------------------------------- /WWDC/WWDC-ForRamboBuildsOnly.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.aps-environment 6 | development 7 | com.apple.developer.associated-domains 8 | 9 | com.apple.developer.icloud-container-identifiers 10 | 11 | iCloud.$(CFBundleIdentifier) 12 | 13 | com.apple.developer.icloud-services 14 | 15 | CloudKit 16 | 17 | com.apple.developer.ubiquity-kvstore-identifier 18 | $(TeamIdentifierPrefix)$(CFBundleIdentifier) 19 | com.apple.security.personal-information.calendars 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /WWDC/WWDC.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.aps-environment 6 | development 7 | com.apple.developer.icloud-container-identifiers 8 | 9 | iCloud.$(CFBundleIdentifier) 10 | 11 | com.apple.developer.icloud-services 12 | 13 | CloudKit 14 | 15 | com.apple.developer.ubiquity-kvstore-identifier 16 | $(TeamIdentifierPrefix)$(CFBundleIdentifier) 17 | com.apple.security.personal-information.calendars 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /WWDC/WWDCAlert.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCAlert.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 23/04/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | final class WWDCAlert { 12 | 13 | static func show(with error: Error) { 14 | let alert = NSAlert(error: error) 15 | 16 | alert.runModal() 17 | } 18 | 19 | static func create() -> NSAlert { 20 | NSAlert() 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /WWDC/WWDCBottomBorderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCBottomBorderView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 28/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class WWDCBottomBorderView: NSView { 12 | 13 | override func draw(_ dirtyRect: NSRect) { 14 | super.draw(dirtyRect) 15 | 16 | let borderRect = NSRect(x: 0, y: 0, width: bounds.width, height: 0.5) 17 | NSColor.separatorColor.setFill() 18 | borderRect.fill() 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /WWDC/WWDCDebug_iCloud.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.aps-environment 6 | development 7 | com.apple.developer.associated-domains 8 | 9 | applinks:wwdc.io 10 | activitycontinuation:wwdc.io 11 | 12 | com.apple.developer.group-session 13 | 14 | com.apple.developer.icloud-container-identifiers 15 | 16 | iCloud.$(CFBundleIdentifier) 17 | 18 | com.apple.developer.icloud-services 19 | 20 | CloudKit 21 | 22 | com.apple.developer.ubiquity-kvstore-identifier 23 | $(TeamIdentifierPrefix)$(CFBundleIdentifier) 24 | com.apple.security.personal-information.calendars 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /WWDC/WWDCHorizontalScrollView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCHorizontalScrollView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 26/05/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class WWDCHorizontalScrollView: NSScrollView { 12 | 13 | private var isScrollingHorizontally = false 14 | 15 | override func scrollWheel(with event: NSEvent) { 16 | if event.phase == .mayBegin { 17 | super.scrollWheel(with: event) 18 | nextResponder?.scrollWheel(with: event) 19 | return 20 | } 21 | 22 | if event.phase == .began || (event.phase == .none && event.momentumPhase == .none) { 23 | isScrollingHorizontally = abs(event.scrollingDeltaX) > abs(event.scrollingDeltaY) 24 | } 25 | 26 | if isScrollingHorizontally { 27 | super.scrollWheel(with: event) 28 | } else { 29 | nextResponder?.scrollWheel(with: event) 30 | } 31 | } 32 | 33 | } 34 | 35 | extension NSEvent.Phase { 36 | static let none: NSEvent.Phase = [] 37 | } 38 | -------------------------------------------------------------------------------- /WWDC/WWDCLayer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCLayer.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 14/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import QuartzCore 10 | 11 | final class WWDCLayer: CALayer { 12 | 13 | override func action(forKey event: String) -> CAAction? { 14 | return nil 15 | } 16 | 17 | } 18 | 19 | final class WWDCShapeLayer: CAShapeLayer { 20 | 21 | override func action(forKey event: String) -> CAAction? { 22 | return nil 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /WWDC/WWDCRelease_iCloud.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.aps-environment 6 | development 7 | com.apple.developer.associated-domains 8 | 9 | applinks:wwdc.io 10 | activitycontinuation:wwdc.io 11 | 12 | com.apple.developer.group-session 13 | 14 | com.apple.developer.icloud-container-identifiers 15 | 16 | iCloud.$(CFBundleIdentifier) 17 | 18 | com.apple.developer.icloud-services 19 | 20 | CloudKit 21 | 22 | com.apple.developer.ubiquity-kvstore-identifier 23 | $(TeamIdentifierPrefix)$(CFBundleIdentifier) 24 | com.apple.security.personal-information.calendars 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /WWDC/WWDCTabViewControllerTabBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCTabViewControllerTabBar.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 7/23/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class WWDCTabViewControllerTabBar: NSView { 12 | 13 | private(set) var items = [TabItemView]() 14 | 15 | private lazy var stackView: NSStackView = { 16 | let stackView = NSStackView() 17 | stackView.frame = bounds 18 | stackView.autoresizingMask = [.width, .height] 19 | self.addSubview(stackView) 20 | 21 | return stackView 22 | }() 23 | 24 | func addItem(_ item: TabItemView) { 25 | stackView.addView(item, in: .center) 26 | items.append(item) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WWDC/WWDCTableRowView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCTableRowView.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 06/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | final class WWDCTableRowView: NSTableRowView { 12 | 13 | override func drawSelection(in dirtyRect: NSRect) { 14 | if window?.isKeyWindow == false || NSApp.isActive == false { 15 | super.drawSelection(in: dirtyRect) 16 | } else { 17 | NSColor.selection.set() 18 | dirtyRect.fill() 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /WWDC/WWDCWindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WWDCWindowController.swift 3 | // WWDC 4 | // 5 | // Created by Allen Humphreys on 18/7/18. 6 | // Copyright © 2018 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class WWDCWindowController: NSWindowController { 12 | 13 | var titleBarViewController = TitleBarViewController() 14 | 15 | override var windowNibName: NSNib.Name? { 16 | // Triggers `loadWindow` to be called so we can override it 17 | return NSNib.Name("") 18 | } 19 | 20 | init() { 21 | super.init(window: nil) 22 | } 23 | 24 | required init?(coder: NSCoder) { 25 | fatalError("init(coder:) has not been implemented") 26 | } 27 | 28 | override func loadWindow() { 29 | fatalError("loadWindow must be overriden by subclasses") 30 | } 31 | 32 | override func windowDidLoad() { 33 | super.windowDidLoad() 34 | 35 | window?.addTitlebarAccessoryViewController(titleBarViewController) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WWDC/WatchWWDCActivity.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WatchWWDCActivity.swift 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 11/06/21. 6 | // Copyright © 2021 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import GroupActivities 11 | import ConfCore 12 | 13 | struct WatchWWDCActivity: GroupActivity { 14 | 15 | let sessionID: String 16 | var metadata: GroupActivityMetadata 17 | 18 | init(with session: Session) { 19 | var meta = GroupActivityMetadata() 20 | 21 | meta.title = "Watch WWDC session \"\(session.title)\"" 22 | 23 | if let imageURLStr = session.asset(ofType: .image)?.remoteURL, 24 | let imageURL = URL(string: imageURLStr), 25 | let image = ImageDownloadCenter.shared.cachedThumbnail(from: imageURL) { 26 | meta.previewImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil) 27 | } 28 | 29 | self.sessionID = session.identifier 30 | self.metadata = meta 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /WWDC/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // WWDC 4 | // 5 | // Created by Guilherme Rambo on 14/05/17. 6 | // Copyright © 2017 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | @import Cocoa; 10 | 11 | int main(int argc, const char **argv) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | -------------------------------------------------------------------------------- /WWDC/schedule-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/WWDC/schedule-placeholder.png -------------------------------------------------------------------------------- /cleardata.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "" 4 | echo "WARNING: this will remove all local data for both release and debug configurations, and reset all preferences" 5 | echo "" 6 | echo "Press any key to continue, Ctrl+C to cancel..." 7 | read 8 | 9 | rm -Rfv ~/Library/Application\ Support/io.wwdc.app* 10 | defaults delete io.wwdc.app 2>/dev/null 11 | -------------------------------------------------------------------------------- /cleardebugdata.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "" 4 | 5 | DEBUG_FOLDER_PATH="$HOME/Library/Application Support/io.wwdc.app.debug" 6 | 7 | if [ ! -d "$DEBUG_FOLDER_PATH" ]; then 8 | echo "Debug data folder doesn't exist at $DEBUG_FOLDER_PATH" 9 | echo "Nothing to be done, all good!" 10 | echo "" 11 | exit 0 12 | fi 13 | 14 | echo "Removing DEBUG data folder at $DEBUG_FOLDER_PATH" 15 | 16 | rm -R "$DEBUG_FOLDER_PATH" || { echo "Failed to remove :("; exit 1; } 17 | 18 | echo "All good!" 19 | echo "" -------------------------------------------------------------------------------- /img/MacStadiumOSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/MacStadiumOSS.png -------------------------------------------------------------------------------- /img/indentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/indentation.png -------------------------------------------------------------------------------- /img/v7/BuildTarget.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/v7/BuildTarget.webp -------------------------------------------------------------------------------- /img/v7/ClipSharing.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/v7/ClipSharing.webp -------------------------------------------------------------------------------- /img/v7/Transcript.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/v7/Transcript.webp -------------------------------------------------------------------------------- /img/v7/Video-Bookmark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/insidegui/WWDC/d86a9a9bd2ce1f77a64eec252bd11b911275bd96/img/v7/Video-Bookmark.webp -------------------------------------------------------------------------------- /resetSync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | defaults delete io.wwdc.app privateChangeToken 4 | defaults delete io.wwdc.app tombstoneRecords --------------------------------------------------------------------------------