├── .github ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── appstore-upload.yml │ ├── run_tests.yml │ ├── swiftlint.yml │ ├── testflight-beta.yml │ └── testflight-release.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Emitron ├── .swiftlint.yml ├── Emitron.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ ├── IDETemplateMacros.plist │ │ └── xcschemes │ │ └── Emitron.xcscheme ├── Emitron │ ├── App.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── App Icons │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── appstore1024.png │ │ │ │ ├── ipad152.png │ │ │ │ ├── ipad76.png │ │ │ │ ├── ipadNotification20.png │ │ │ │ ├── ipadNotification40.png │ │ │ │ ├── ipadPro167.png │ │ │ │ ├── ipadSettings29.png │ │ │ │ ├── ipadSettings58.png │ │ │ │ ├── ipadSpotlight40.png │ │ │ │ ├── ipadSpotlight80.png │ │ │ │ ├── iphone120.png │ │ │ │ ├── iphone180.png │ │ │ │ ├── mac1024.png │ │ │ │ ├── mac128.png │ │ │ │ ├── mac16.png │ │ │ │ ├── mac256.png │ │ │ │ ├── mac32.png │ │ │ │ ├── mac512.png │ │ │ │ ├── mac64.png │ │ │ │ ├── notification40.png │ │ │ │ ├── notification60.png │ │ │ │ ├── settings58.png │ │ │ │ ├── settings87.png │ │ │ │ ├── spotlight120.png │ │ │ │ └── spotlight80.png │ │ │ ├── AppIcon.beta.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── appstore1024.png │ │ │ │ ├── ipad152.png │ │ │ │ ├── ipad76.png │ │ │ │ ├── ipadNotification20.png │ │ │ │ ├── ipadNotification40.png │ │ │ │ ├── ipadPro167.png │ │ │ │ ├── ipadSettings29.png │ │ │ │ ├── ipadSettings58.png │ │ │ │ ├── ipadSpotlight40.png │ │ │ │ ├── ipadSpotlight80.png │ │ │ │ ├── iphone120.png │ │ │ │ ├── iphone180.png │ │ │ │ ├── mac1024.png │ │ │ │ ├── mac128.png │ │ │ │ ├── mac16.png │ │ │ │ ├── mac256.png │ │ │ │ ├── mac32.png │ │ │ │ ├── mac512.png │ │ │ │ ├── mac64.png │ │ │ │ ├── notification40.png │ │ │ │ ├── notification60.png │ │ │ │ ├── settings58.png │ │ │ │ ├── settings87.png │ │ │ │ ├── spotlight120.png │ │ │ │ └── spotlight80.png │ │ │ ├── AppIcon.dev.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── appstore1024.png │ │ │ │ ├── ipad152.png │ │ │ │ ├── ipad76.png │ │ │ │ ├── ipadNotification20.png │ │ │ │ ├── ipadNotification40.png │ │ │ │ ├── ipadPro167.png │ │ │ │ ├── ipadSettings29.png │ │ │ │ ├── ipadSettings58.png │ │ │ │ ├── ipadSpotlight40.png │ │ │ │ ├── ipadSpotlight80.png │ │ │ │ ├── iphone120.png │ │ │ │ ├── iphone180.png │ │ │ │ ├── mac1024.png │ │ │ │ ├── mac128.png │ │ │ │ ├── mac16.png │ │ │ │ ├── mac256.png │ │ │ │ ├── mac32.png │ │ │ │ ├── mac512.png │ │ │ │ ├── mac64.png │ │ │ │ ├── notification40.png │ │ │ │ ├── notification60.png │ │ │ │ ├── settings58.png │ │ │ │ ├── settings87.png │ │ │ │ ├── spotlight120.png │ │ │ │ └── spotlight80.png │ │ │ └── Contents.json │ │ ├── Colours │ │ │ ├── App Icons │ │ │ │ ├── Contents.json │ │ │ │ └── appIconBorder.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Backgrounds │ │ │ │ ├── Contents.json │ │ │ │ ├── backgroundColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── cardBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── listHeaderBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── modalBackgroundColor.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Button │ │ │ │ ├── Contents.json │ │ │ │ ├── destructiveButtonBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── iconButton.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── primaryButtonBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── secondaryButtonBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Checkmark │ │ │ │ ├── Contents.json │ │ │ │ ├── checkmarkBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── checkmarkBorder.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── checkmarkColor.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Download Button │ │ │ │ ├── Contents.json │ │ │ │ ├── downloadButtonDownloaded.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── downloadButtonDownloadingBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── downloadButtonDownloadingForeground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── downloadButtonNotDownloaded.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── downloadButtonWarning.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Filters │ │ │ │ ├── Contents.json │ │ │ │ └── filterHeaderBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Icons │ │ │ │ ├── Contents.json │ │ │ │ ├── activeIcon.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── inactiveIcon.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Search Field │ │ │ │ ├── Contents.json │ │ │ │ ├── searchFieldBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── searchFieldBorder.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── searchFieldIcon.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── searchFieldShadow.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── searchFieldText.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Snackbar │ │ │ │ ├── Contents.json │ │ │ │ ├── error.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── snackTagBg.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── snackText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── success.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── warning.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Tags │ │ │ │ ├── Contents.json │ │ │ │ ├── accentTagBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── accentTagForeground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagBorder.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagDestructiveBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagDestructiveBorder.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagDestructiveIcon.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagDestructiveText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagIcon.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── filterTagText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── tagBackground.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── tagForeground.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Text │ │ │ │ ├── Contents.json │ │ │ │ ├── buttonText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── contentText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── textButtonText.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── textButtonTextDisabled.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── titleText.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Toggle │ │ │ │ ├── Contents.json │ │ │ │ ├── toggleLineDeselected.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── toggleLineSelected.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── toggleTextDeselected.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── toggleTextSelected.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── accent.colorset │ │ │ │ ├── Contents 2.json │ │ │ │ └── Contents.json │ │ │ ├── alarm.colorset │ │ │ │ ├── Contents 2.json │ │ │ │ └── Contents.json │ │ │ ├── borderColor.colorset │ │ │ │ └── Contents.json │ │ │ └── separator.colorset │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Icons │ │ │ ├── Contents.json │ │ │ ├── bookmark.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconBookmark.png │ │ │ │ ├── materialIconBookmark@2x.png │ │ │ │ └── materialIconBookmark@3x.png │ │ │ ├── checkmark.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconCheckmark.png │ │ │ │ ├── materialIconCheckmark@2x.png │ │ │ │ └── materialIconCheckmark@3x.png │ │ │ ├── close.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconClose.png │ │ │ │ ├── materialIconClose@2x.png │ │ │ │ └── materialIconClose@3x.png │ │ │ ├── closeWhite.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconCloseWhite.png │ │ │ │ ├── materialIconCloseWhite@2x.png │ │ │ │ └── materialIconCloseWhite@3x.png │ │ │ ├── download.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconDownload.png │ │ │ │ ├── materialIconDownload@2x.png │ │ │ │ └── materialIconDownload@3x.png │ │ │ ├── filter.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── filter.png │ │ │ │ ├── filter@2x.png │ │ │ │ └── filter@3x.png │ │ │ ├── padlock.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconPadlockWhite.png │ │ │ │ ├── materialIconPadlockWhite@2x.png │ │ │ │ └── materialIconPadlockWhite@3x.png │ │ │ └── sort.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconSort.png │ │ │ │ ├── materialIconSort@2x.png │ │ │ │ └── materialIconSort@3x.png │ │ ├── Loading Images │ │ │ ├── Contents.json │ │ │ └── loading.imageset │ │ │ │ ├── ArtworkPlaceholder@1x.png │ │ │ │ ├── ArtworkPlaceholder@2x.png │ │ │ │ ├── ArtworkPlaceholder@3x.png │ │ │ │ └── Contents.json │ │ ├── Logo │ │ │ ├── Contents.json │ │ │ └── logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── kodeco-orange-any.svg │ │ │ │ ├── kodeco-orange-dark.svg │ │ │ │ └── kodeco-orange-light.svg │ │ ├── TabBar │ │ │ ├── Contents.json │ │ │ ├── downloadTabInactive.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconDownloadNavigation.png │ │ │ │ ├── materialIconDownloadNavigation@2x.png │ │ │ │ └── materialIconDownloadNavigation@3x.png │ │ │ ├── library.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconLibrary.png │ │ │ │ ├── materialIconLibrary@2x.png │ │ │ │ └── materialIconLibrary@3x.png │ │ │ ├── myTutorials.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── materialIconMyTutorials.png │ │ │ │ ├── materialIconMyTutorials@2x.png │ │ │ │ └── materialIconMyTutorials@3x.png │ │ │ └── settings.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── gear.png │ │ │ │ ├── gear@2x.png │ │ │ │ └── gear@3x.png │ │ └── Video Playback │ │ │ ├── Contents.json │ │ │ └── materialIconPlay.imageset │ │ │ ├── Contents.json │ │ │ ├── materialIconPlay.png │ │ │ ├── materialIconPlay@2x.png │ │ │ └── materialIconPlay@3x.png │ ├── Combine │ │ └── PublishedPrePostFacto.swift │ ├── Configuration │ │ ├── Configuration.swift │ │ └── secrets.template.xcconfig │ ├── Constants.swift │ ├── Data Synchronisation │ │ ├── ProgressEngine.swift │ │ ├── SyncAction.swift │ │ ├── SyncEngine.swift │ │ ├── SyncRequest+ProgressionUpdate.swift │ │ └── SyncRequest+WatchStat.swift │ ├── Data │ │ ├── ContentRepositories │ │ │ ├── BookmarkRepository.swift │ │ │ ├── CompletedRepository.swift │ │ │ ├── ContentRepository.swift │ │ │ ├── DownloadRepository.swift │ │ │ ├── InProgressRepository.swift │ │ │ └── LibraryRepository.swift │ │ ├── DataManager.swift │ │ ├── DataState.swift │ │ ├── Other Repositories │ │ │ ├── CategoryRepository.swift │ │ │ └── DomainRepository.swift │ │ ├── Repository.swift │ │ ├── Service Adapters │ │ │ ├── BookmarksService+ContentServiceAdapter.swift │ │ │ ├── ContentServiceAdapter.swift │ │ │ ├── ContentsService+ContentServiceAdapter.swift │ │ │ └── ProgressionsService+ContentServiceAdapter.swift │ │ ├── States │ │ │ ├── ChildContentsState.swift │ │ │ ├── ContentPersistableState.swift │ │ │ ├── ContentSummaryState.swift │ │ │ ├── DynamicContentState.swift │ │ │ └── VideoPlaybackState.swift │ │ └── ViewModels │ │ │ ├── ChildContentsViewModel.swift │ │ │ ├── ContentScreen.swift │ │ │ ├── DataCacheChildContentsViewModel.swift │ │ │ ├── DownloadDeletionConfirmation.swift │ │ │ ├── DynamicContentViewModel.swift │ │ │ ├── PersistenceStoreChildContentsViewModel.swift │ │ │ ├── TabViewModel.swift │ │ │ └── VideoPlaybackViewModel.swift │ ├── Displayable │ │ ├── Content+ChildContentListDisplayable.swift │ │ ├── ContentDisplayable.swift │ │ ├── ContentSummaryState+ContentListDisplayable.swift │ │ ├── DynamicContentDisplayable.swift │ │ └── Group+GroupDisplayable.swift │ ├── Downloads │ │ ├── DownloadAction.swift │ │ ├── DownloadProcessor.swift │ │ ├── DownloadQueueManager.swift │ │ └── DownloadService.swift │ ├── Extensions │ │ ├── Binding+Extensions.swift │ │ ├── Comparable+Clamped.swift │ │ ├── ContentDetailModel+Extensions.swift │ │ ├── Date+Extensions.swift │ │ ├── DateFormatter+Extensions.swift │ │ ├── FileManager+Extensions.swift │ │ ├── Optional+Extensions.swift │ │ ├── TimeInterval+Extensions.swift │ │ ├── UIApplication+DismissKeyboard.swift │ │ ├── UIViewController+Extensions.swift │ │ └── View+Extensions.swift │ ├── FOSS Licenses │ │ └── FossLicenses.json │ ├── Filters │ │ ├── Filter.swift │ │ ├── FilterGroup.swift │ │ ├── Filters.swift │ │ └── SortFilter.swift │ ├── Guardpost │ │ ├── Guardpost.swift │ │ ├── SSO │ │ │ ├── SingleSignOnRequest.swift │ │ │ └── SingleSignOnResponse.swift │ │ └── Utils │ │ │ ├── Data+Hex.swift │ │ │ ├── GuardpostConstants.swift │ │ │ ├── RandomString.swift │ │ │ └── String+Base64.swift │ ├── Logging │ │ └── Logger.swift │ ├── Models │ │ ├── Attachment.swift │ │ ├── Bookmark.swift │ │ ├── Category.swift │ │ ├── Content.swift │ │ ├── ContentCategory.swift │ │ ├── ContentDifficulty.swift │ │ ├── ContentDomain.swift │ │ ├── ContentSubscriptionPlan.swift │ │ ├── ContentType.swift │ │ ├── DataCache.swift │ │ ├── Domain.swift │ │ ├── Download.swift │ │ ├── FossLicense.swift │ │ ├── Group.swift │ │ ├── Icon.swift │ │ ├── Permission.swift │ │ ├── PlaybackSpeed.swift │ │ ├── Progression.swift │ │ ├── SettingsOption.swift │ │ ├── SyncRequest.swift │ │ └── User.swift │ ├── Networking │ │ ├── Adapters │ │ │ ├── DataCacheUpdate.swift │ │ │ ├── EntityAdapter.swift │ │ │ └── EntityAdapters │ │ │ │ ├── AttachmentAdapter.swift │ │ │ │ ├── BookmarkAdapter.swift │ │ │ │ ├── CategoryAdapter.swift │ │ │ │ ├── ContentAdapter.swift │ │ │ │ ├── ContentCategoryAdapter.swift │ │ │ │ ├── ContentDomainAdapter.swift │ │ │ │ ├── DomainAdapter.swift │ │ │ │ ├── GroupAdapter.swift │ │ │ │ ├── PermissionAdapter.swift │ │ │ │ └── ProgressionAdapter.swift │ │ ├── JSONAPI │ │ │ ├── JSONAPIDocument.swift │ │ │ ├── JSONAPIError.swift │ │ │ ├── JSONAPIErrorSource.swift │ │ │ ├── JSONAPIRelationship.swift │ │ │ └── JSONAPIResource.swift │ │ ├── Network │ │ │ ├── RWAPI.swift │ │ │ └── RWEnvironment.swift │ │ ├── Requests │ │ │ ├── BookmarkRequest.swift │ │ │ ├── CategoriesRequest.swift │ │ │ ├── ContentsRequest.swift │ │ │ ├── DomainsRequest.swift │ │ │ ├── Models │ │ │ │ ├── ContentDifficulty+Request.swift │ │ │ │ ├── ContentSubscriptionPlan+Request.swift │ │ │ │ └── ContentType+Request.swift │ │ │ ├── Parameters.swift │ │ │ ├── PermissionsRequest.swift │ │ │ ├── ProgressionsRequest.swift │ │ │ ├── Request.swift │ │ │ ├── VideosRequest.swift │ │ │ └── WatchStatsRequest.swift │ │ └── Services │ │ │ ├── BookmarksService.swift │ │ │ ├── CategoriesService.swift │ │ │ ├── ContentsService.swift │ │ │ ├── DomainsService.swift │ │ │ ├── PermissionsService.swift │ │ │ ├── ProgressionsService.swift │ │ │ ├── Service.swift │ │ │ ├── VideosService.swift │ │ │ └── WatchStatsService.swift │ ├── Ownable │ │ ├── Content+Ownable.swift │ │ └── Ownable.swift │ ├── Persistence │ │ ├── Emitron.xcdatamodeld │ │ │ └── Emitron.xcdatamodel │ │ │ │ └── contents │ │ ├── EmitronDatabase.swift │ │ ├── Models │ │ │ ├── Bookmark+Persistence.swift │ │ │ ├── Category+Persistence.swift │ │ │ ├── Content+Persistence.swift │ │ │ ├── ContentCategory+Persistence.swift │ │ │ ├── ContentDomain+Persistence.swift │ │ │ ├── Domain+Persistence.swift │ │ │ ├── Download+Persistence.swift │ │ │ ├── Group+Persistence.swift │ │ │ ├── Progression+Persistence.swift │ │ │ └── SyncRequest+Persistence.swift │ │ ├── PersistenceStore+Categories.swift │ │ ├── PersistenceStore+Domains.swift │ │ ├── PersistenceStore+Downloads.swift │ │ ├── PersistenceStore+Keychain.swift │ │ ├── PersistenceStore+Synchronisation.swift │ │ ├── PersistenceStore.swift │ │ └── States │ │ │ ├── ChildContentsState+Fetchable.swift │ │ │ └── ContentSummaryState+Fetchable.swift │ ├── Preview Content │ │ ├── Preview Assets.xcassets │ │ │ └── Contents.json │ │ └── sampleCardImage.png │ ├── Protocols │ │ ├── ContentPaginatable.swift │ │ └── Refreshable.swift │ ├── Sessions │ │ ├── SessionController+States.swift │ │ ├── SessionController.swift │ │ └── User+Backdoor.swift │ ├── Settings │ │ ├── SettingsKey.swift │ │ ├── SettingsManager.swift │ │ └── SettingsSelectable.swift │ ├── Styleguide │ │ ├── CGFloat+Dimensions.swift │ │ ├── Color+Extensions.swift │ │ ├── Font+Extensions.swift │ │ ├── Image+Extensions.swift │ │ ├── Relative │ │ │ ├── Relative-Bold.ttf │ │ │ └── Relative-Medium.ttf │ │ ├── UIColor+Extensions.swift │ │ └── UIFont+Extensions.swift │ ├── Support Files │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── UI │ │ ├── App Root │ │ │ ├── LoginView.swift │ │ │ ├── LogoutView.swift │ │ │ ├── MainView.swift │ │ │ ├── MessageBarView.swift │ │ │ ├── PermissionsLoadingView.swift │ │ │ ├── SnackbarView.swift │ │ │ └── TabView.swift │ │ ├── Downloads │ │ │ ├── DownloadDeletionConfirmation+Alert.swift │ │ │ └── DownloadsView.swift │ │ ├── Empty States │ │ │ ├── ErrorView.swift │ │ │ ├── LoadingView.swift │ │ │ ├── NoResultsView.swift │ │ │ └── OfflineView.swift │ │ ├── Generic │ │ │ ├── PagerView.swift │ │ │ └── PagingIndicatorView.swift │ │ ├── Library │ │ │ ├── Filtering │ │ │ │ ├── AppliedFilterTagButton.swift │ │ │ │ ├── FiltersHeaderView.swift │ │ │ │ ├── FiltersView.swift │ │ │ │ └── TitleCheckmarkView.swift │ │ │ ├── LibraryView.swift │ │ │ └── SearchFieldView.swift │ │ ├── My Tutorials │ │ │ ├── MyTutorialsView.swift │ │ │ └── ToggleControlView.swift │ │ ├── PortraitHostingController.swift │ │ ├── Settings │ │ │ ├── Licenses │ │ │ │ ├── LicenseDetailView.swift │ │ │ │ └── LicenseListView.swift │ │ │ ├── SettingsDisclosureRow.swift │ │ │ ├── SettingsList.swift │ │ │ ├── SettingsSelectionView.swift │ │ │ ├── SettingsToggleRow.swift │ │ │ └── SettingsView.swift │ │ ├── Shared │ │ │ ├── CheckmarkView.swift │ │ │ ├── Content Detail │ │ │ │ ├── Child Listing │ │ │ │ │ ├── CompletedIconView.swift │ │ │ │ │ ├── ContinueButtonView.swift │ │ │ │ │ ├── LockedIconView.swift │ │ │ │ │ ├── NumberIconView.swift │ │ │ │ │ ├── PlayButtonView.swift │ │ │ │ │ └── VideoOverlayButtonView.swift │ │ │ │ ├── ChildContentListingView.swift │ │ │ │ ├── ContentDetailView.swift │ │ │ │ ├── ContentSummaryView.swift │ │ │ │ ├── CourseHeaderView.swift │ │ │ │ ├── ProContentLockedOverlayView.swift │ │ │ │ ├── TextListItemView.swift │ │ │ │ └── VerticalFadeImageView.swift │ │ │ ├── Content List │ │ │ │ ├── CardView.swift │ │ │ │ └── ContentListView.swift │ │ │ ├── Download Icon │ │ │ │ ├── ArrowInCircleView.swift │ │ │ │ ├── CircleProgressBarView.swift │ │ │ │ ├── DownloadIcon.swift │ │ │ │ ├── DownloadWarningView.swift │ │ │ │ └── SpinningCircleView.swift │ │ │ ├── MainButtonView.swift │ │ │ ├── ProgressBarView.swift │ │ │ └── Tags │ │ │ │ ├── CompletedTag.swift │ │ │ │ └── TagView.swift │ │ ├── TabbedView.swift │ │ └── Video │ │ │ ├── FullScreenVideoPlayer.swift │ │ │ └── FullScreenVideoPlayerRepresentable.swift │ └── Utilities │ │ └── MessageBus.swift ├── Gemfile ├── Gemfile.lock ├── emitronScreenshots │ ├── EmitronScreenshots.swift │ ├── Info.plist │ └── SnapshotHelper.swift ├── emitronTests │ ├── Combine │ │ └── PublishedPrePostFactoTest.swift │ ├── Data Synchronisation │ │ └── SyncEngineTest.swift │ ├── Data │ │ ├── DataCacheTest.swift │ │ └── States │ │ │ └── ContentPersistableState+Mocks.swift │ ├── Downloads │ │ ├── DownloadQueueManagerTest.swift │ │ └── DownloadServiceTest.swift │ ├── Filters │ │ └── FilterGroupTest.swift │ ├── Info.plist │ ├── Model Controllers │ │ └── Mock │ │ │ └── UserMCMock.swift │ ├── Models │ │ ├── AttachmentTest+Mocks.swift │ │ ├── AttachmentTest.swift │ │ ├── ContentTest+Mocks.swift │ │ ├── Mocks │ │ │ ├── Attachment_Downloads.json │ │ │ ├── Attachment_Stream.json │ │ │ ├── BookmarksModelTest.json │ │ │ ├── Categories.json │ │ │ ├── Category+Mocks.swift │ │ │ ├── ContentDetailsModelTest.json │ │ │ ├── ContentDetails_Collection.json │ │ │ ├── ContentDetails_Screencast.json │ │ │ ├── Domain+Mocks.swift │ │ │ ├── Domains.json │ │ │ ├── Permissions+Mocks.swift │ │ │ ├── ProgressionsModelTest.json │ │ │ ├── User+Mocks.swift │ │ │ └── VideoModelTest.json │ │ └── UserTest.swift │ ├── Networking │ │ └── Adapters │ │ │ └── EntityAdapters │ │ │ ├── AttachmentAdapterTest.swift │ │ │ ├── BookmarkAdapterTest.swift │ │ │ ├── CategoryAdapterTest.swift │ │ │ ├── ContentAdapterTest.swift │ │ │ ├── ContentCategoryAdapterTest.swift │ │ │ ├── ContentDomainAdapterTest.swift │ │ │ ├── DomainAdapterTest.swift │ │ │ ├── GroupAdapterTest.swift │ │ │ ├── PermissionAdapterTest.swift │ │ │ └── ProgressionAdapterTest.swift │ ├── Persistence │ │ ├── EmitronDatabaseTest.swift │ │ ├── Models │ │ │ ├── ContentTest.swift │ │ │ ├── DownloadTest.swift │ │ │ └── PersistenceMocks.swift │ │ ├── PersistenceStore+DownloadsTest.swift │ │ ├── PersistenceStore+SynchronisationTest.swift │ │ └── PersistenceStore+UserKeychainTest.swift │ ├── Protocols │ │ └── RefreshableTestCase.swift │ ├── Services │ │ └── Mock │ │ │ └── VideosServiceMock.swift │ └── Settings │ │ └── SettingsManagerTest.swift └── fastlane │ ├── Appfile │ ├── Fastfile │ ├── Matchfile │ ├── README.md │ └── Snapfile ├── LICENCE ├── README.md ├── SECURITY.md ├── SUPPORT.md └── scripts ├── download_s3.sh └── generate_secrets.sh /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ### Steps to reproduce 7 | 8 | 9 | 10 | 11 | 12 | ### Expected behavior 13 | 14 | 15 | 16 | ### Actual behavior 17 | 18 | 19 | 20 | 21 | ### Environment 22 | 23 | 24 | 25 | * iOS Version: 26 | * kodeco.com App Version: 27 | * Device: 28 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/appstore-upload.yml: -------------------------------------------------------------------------------- 1 | name: Push to Testflight 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | 8 | jobs: 9 | build: 10 | runs-on: macos-12 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Switch to Xcode 14.2 14 | run: sudo xcode-select -s /Applications/Xcode_14.2.app 15 | - name: Update fastlane 16 | run: | 17 | cd Emitron 18 | bundle install 19 | bundle exec fastlane -v 20 | - name: Download secrets 21 | env: 22 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 23 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 24 | run: | 25 | scripts/download_s3.sh development > Emitron/Emitron/Configuration/secrets.development.xcconfig 26 | scripts/download_s3.sh beta > Emitron/Emitron/Configuration/secrets.beta.xcconfig 27 | scripts/download_s3.sh production > Emitron/Emitron/Configuration/secrets.production.xcconfig 28 | - name: Execute fastlane 29 | env: 30 | MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} 31 | MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} 32 | SLACK_URL: ${{ secrets.SLACK_URL }} 33 | APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} 34 | APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} 35 | APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} 36 | FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 37 | FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 38 | run: | 39 | cd Emitron 40 | bundle exec fastlane -v 41 | bundle exec fastlane ci_upload_release_appstore 42 | -------------------------------------------------------------------------------- /.github/workflows/run_tests.yml: -------------------------------------------------------------------------------- 1 | name: Run tests 2 | 3 | on: 4 | pull_request: 5 | branches: [ development ] 6 | 7 | jobs: 8 | build: 9 | runs-on: macos-12 10 | steps: 11 | - uses: actions/checkout@v1 12 | - name: Switch to Xcode 14.2 13 | run: sudo xcode-select -s /Applications/Xcode_14.2.app 14 | - name: Update fastlane 15 | run: | 16 | cd Emitron 17 | bundle install 18 | bundle exec fastlane -v 19 | - name: Generate secrets 20 | run: scripts/generate_secrets.sh 21 | - name: Execute fastlane 22 | env: 23 | FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 24 | FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 25 | run: | 26 | cd Emitron 27 | bundle exec fastlane -v 28 | bundle exec fastlane tests 29 | -------------------------------------------------------------------------------- /.github/workflows/swiftlint.yml: -------------------------------------------------------------------------------- 1 | name: SwiftLint 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - '.github/workflows/swiftlint.yml' 7 | - 'Emitron/.swiftlint.yml' 8 | - 'Emitron/**/*.swift' 9 | 10 | jobs: 11 | SwiftLint: 12 | runs-on: macos-12 13 | steps: 14 | - uses: actions/checkout@v1 15 | 16 | - name: Run Swiftlint 17 | run: swiftlint --config Emitron/.swiftlint.yml 18 | -------------------------------------------------------------------------------- /.github/workflows/testflight-beta.yml: -------------------------------------------------------------------------------- 1 | name: Push to Testflight 2 | 3 | on: 4 | push: 5 | branches: 6 | - development 7 | 8 | jobs: 9 | build: 10 | runs-on: macos-12 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Switch to Xcode 14.2 14 | run: sudo xcode-select -s /Applications/Xcode_14.2.app 15 | - name: Update fastlane 16 | run: | 17 | cd Emitron 18 | bundle install 19 | bundle exec fastlane -v 20 | - name: Download secrets 21 | env: 22 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 23 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 24 | run: | 25 | scripts/download_s3.sh development > Emitron/Emitron/Configuration/secrets.development.xcconfig 26 | scripts/download_s3.sh beta > Emitron/Emitron/Configuration/secrets.beta.xcconfig 27 | scripts/download_s3.sh production > Emitron/Emitron/Configuration/secrets.production.xcconfig 28 | - name: Execute fastlane 29 | env: 30 | MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} 31 | MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} 32 | SLACK_URL: ${{ secrets.SLACK_URL }} 33 | APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} 34 | APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} 35 | APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} 36 | FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 37 | FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 38 | run: | 39 | cd Emitron 40 | bundle exec fastlane -v 41 | bundle exec fastlane ci_upload_beta_testflight 42 | -------------------------------------------------------------------------------- /.github/workflows/testflight-release.yml: -------------------------------------------------------------------------------- 1 | name: Push to Testflight 2 | 3 | on: 4 | push: 5 | branches: 6 | - production 7 | 8 | jobs: 9 | build: 10 | runs-on: macos-12 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Switch to Xcode 14.2 14 | run: sudo xcode-select -s /Applications/Xcode_14.2.app 15 | - name: Update fastlane 16 | run: | 17 | cd Emitron 18 | bundle install 19 | bundle exec fastlane -v 20 | - name: Download secrets 21 | env: 22 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 23 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 24 | run: | 25 | scripts/download_s3.sh development > Emitron/Emitron/Configuration/secrets.development.xcconfig 26 | scripts/download_s3.sh beta > Emitron/Emitron/Configuration/secrets.beta.xcconfig 27 | scripts/download_s3.sh production > Emitron/Emitron/Configuration/secrets.production.xcconfig 28 | - name: Execute fastlane 29 | env: 30 | MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} 31 | MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} 32 | SLACK_URL: ${{ secrets.SLACK_URL }} 33 | APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} 34 | APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} 35 | APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} 36 | FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 5 37 | FASTLANE_XCODEBUILD_SETTINGS_RETRIES: 5 38 | run: | 39 | cd Emitron 40 | bundle exec fastlane -v 41 | bundle exec fastlane ci_upload_release_testflight 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | .DS_Store 20 | 21 | ## Other 22 | *.moved-aside 23 | *.xccheckout 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | ## Playgrounds 33 | timeline.xctimeline 34 | playground.xcworkspace 35 | 36 | # Swift Package Manager 37 | # 38 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 39 | # Packages/ 40 | # Package.pins 41 | Package.resolved 42 | .build/ 43 | 44 | # CocoaPods 45 | # 46 | # We recommend against adding the Pods directory to your .gitignore. However 47 | # you should judge for yourself, the pros and cons are mentioned at: 48 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 49 | # 50 | # Pods/ 51 | 52 | # Carthage 53 | # 54 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 55 | # Carthage/Checkouts 56 | 57 | Carthage/Build 58 | 59 | # fastlane 60 | # 61 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 62 | # screenshots whenever they are needed. 63 | # For more information about the recommended setup visit: 64 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 65 | 66 | **/fastlane/report.xml 67 | **/fastlane/Preview.html 68 | **/fastlane/screenshots/**/*.png 69 | **/fastlane/test_output 70 | **/GithubIgnore 71 | 72 | # Secrets 73 | secrets.*.xcconfig 74 | !secrets.template.xcconfig 75 | 76 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to emitron 2 | 3 | 👋 Welcome! Thanks for expressing an interest in contributing to the kodeco.com app. 4 | 5 | ## Testing 6 | 7 | Once you have the project open in Xcode, select the `Emitron` scheme and use `CMD+U` to run the tests. 8 | 9 | Don't forget to add tests for any new features you add or contribute to. 10 | 11 | If you are fixing a single GitHub issue in particular, please add a test named `testGH` to ensure that your fix is working. This will also help prevent regression. 12 | 13 | ## User Account 14 | 15 | In order to use __emitron__, you must currently be a video subscriber to kodeco.com. If you are keen to contribute to the project, but are unable to use features of the app due to a lack of a kodeco.com subscription, please contact emitron@kodeco.com noting which feature or area of the app you are interested in contributing to, and we should be able to set you up with appropriate access. 16 | 17 | ## Access Tokens 18 | 19 | As mentioned in the readme, __emitron__ requires two secret tokens. This repo contains a sample API token, that will allow you to interact with the API, allowing you to develop the app. 20 | 21 | However, it does not contain the token that will allow access to downloads. If you wish to work on the video downloads feature, please contact emitron@kodeco.com with the link to the development proposal in GitHub, and you will be provided with an appropriate token. 22 | 23 | ## API Documentation 24 | 25 | __emitron__ interfaces with the kodeco.com API to retrieve data. You can find API documentation here: 26 | 27 | https://raywenderlich.docs.apiary.io 28 | 29 | ## New Features 30 | 31 | If you would like to suggest new features, please open an issue for discussion, and include a development proposal. Although the app is open source, Kodeco reserves the right to direct new feature development, and to modify, request changes to, or reject feature proposals as it sees fit. 32 | 33 | Thanks! Your work on this app will help support our worldwide community of mobile developers as they strive to improve their skills in the industry. 34 | -------------------------------------------------------------------------------- /Emitron/Emitron.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Emitron/Emitron.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Emitron/Emitron.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Emitron/Emitron.xcodeproj/xcshareddata/IDETemplateMacros.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FILEHEADER 6 | Copyright (c) ___YEAR___ Kodeco Inc 7 | 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 20 | // distribute, sublicense, create a derivative work, and/or sell copies of the 21 | // Software in any work that is designed, intended, or marketed for pedagogical or 22 | // instructional purposes related to programming, coding, application development, 23 | // or information technology. Permission for such use, copying, modification, 24 | // merger, publication, distribution, sublicensing, creation of derivative works, 25 | // or sale is expressly withheld. 26 | // 27 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 28 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 29 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 30 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 31 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 32 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 33 | // THE SOFTWARE. 34 | 35 | 36 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/appstore1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/appstore1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipad152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipad152.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipad76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipad76.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadNotification20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadNotification20.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadNotification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadNotification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadPro167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadPro167.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSettings29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSettings29.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSettings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSettings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSpotlight40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSpotlight40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSpotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/ipadSpotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/iphone120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/iphone120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/iphone180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/iphone180.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac128.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac16.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac256.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac32.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac512.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/mac64.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/notification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/notification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/notification60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/notification60.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/settings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/settings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/settings87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/settings87.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/spotlight120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/spotlight120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/spotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.appiconset/spotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/appstore1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/appstore1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipad152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipad152.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipad76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipad76.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadNotification20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadNotification20.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadNotification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadNotification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadPro167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadPro167.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSettings29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSettings29.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSettings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSettings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSpotlight40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSpotlight40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSpotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/ipadSpotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/iphone120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/iphone120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/iphone180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/iphone180.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac128.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac16.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac256.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac32.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac512.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/mac64.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/notification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/notification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/notification60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/notification60.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/settings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/settings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/settings87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/settings87.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/spotlight120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/spotlight120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/spotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.beta.appiconset/spotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/appstore1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/appstore1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipad152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipad152.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipad76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipad76.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadNotification20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadNotification20.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadNotification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadNotification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadPro167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadPro167.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSettings29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSettings29.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSettings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSettings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSpotlight40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSpotlight40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSpotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/ipadSpotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/iphone120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/iphone120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/iphone180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/iphone180.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac1024.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac128.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac16.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac256.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac32.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac512.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/mac64.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/notification40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/notification40.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/notification60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/notification60.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/settings58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/settings58.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/settings87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/settings87.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/spotlight120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/spotlight120.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/spotlight80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/App Icons/AppIcon.dev.appiconset/spotlight80.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/App Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/App Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/App Icons/appIconBorder.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.843", 13 | "alpha" : "1.000", 14 | "blue" : "0.937", 15 | "green" : "0.878" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.843", 31 | "alpha" : "1.000", 32 | "blue" : "0.937", 33 | "green" : "0.878" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.231", 49 | "alpha" : "1.000", 50 | "blue" : "0.282", 51 | "green" : "0.251" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Backgrounds/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Backgrounds/backgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.980", 27 | "green" : "0.965", 28 | "red" : "0.949" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0x1E", 45 | "green" : "0x16", 46 | "red" : "0x14" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Backgrounds/cardBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0x1E", 45 | "green" : "0x16", 46 | "red" : "0x14" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Backgrounds/listHeaderBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "1.000", 31 | "alpha" : "1.000", 32 | "blue" : "1.000", 33 | "green" : "1.000" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.231", 49 | "alpha" : "1.000", 50 | "blue" : "0.282", 51 | "green" : "0.251" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Backgrounds/modalBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "1.000", 31 | "alpha" : "1.000", 32 | "blue" : "1.000", 33 | "green" : "1.000" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.110", 49 | "alpha" : "1.000", 50 | "blue" : "0.118", 51 | "green" : "0.110" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Button/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Button/destructiveButtonBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x2B", 9 | "green" : "0x39", 10 | "red" : "0xCF" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Button/iconButton.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0xD7", 9 | "green" : "0xD7", 10 | "red" : "0xD7" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Button/primaryButtonBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Button/secondaryButtonBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.231", 13 | "alpha" : "1.000", 14 | "blue" : "0.282", 15 | "green" : "0.251" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Checkmark/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Checkmark/checkmarkBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x7E", 9 | "green" : "0xB8", 10 | "red" : "0x00" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Checkmark/checkmarkBorder.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "167", 13 | "alpha" : "1.000", 14 | "blue" : "180", 15 | "green" : "173" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Checkmark/checkmarkColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/downloadButtonDownloaded.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/downloadButtonDownloadingBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.655", 13 | "alpha" : "1.000", 14 | "blue" : "0.706", 15 | "green" : "0.678" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "dark" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.655", 31 | "alpha" : "0.200", 32 | "blue" : "0.706", 33 | "green" : "0.678" 34 | } 35 | } 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/downloadButtonDownloadingForeground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/downloadButtonNotDownloaded.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.655", 13 | "alpha" : "1.000", 14 | "blue" : "0.706", 15 | "green" : "0.678" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Download Button/downloadButtonWarning.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1", 9 | "green" : "228", 10 | "red" : "253" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Filters/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Filters/filterHeaderBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0x1E", 45 | "green" : "0x16", 46 | "red" : "0x14" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Icons/activeIcon.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.655", 13 | "alpha" : "1.000", 14 | "blue" : "0.706", 15 | "green" : "0.678" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Icons/inactiveIcon.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/searchFieldBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0x1E", 45 | "green" : "0x16", 46 | "red" : "0x14" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/searchFieldBorder.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "0.000", 8 | "blue" : "0.000", 9 | "green" : "0.000", 10 | "red" : "0.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "238", 27 | "green" : "224", 28 | "red" : "216" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0xD7", 45 | "green" : "0xD7", 46 | "red" : "0xD7" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/searchFieldIcon.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "180", 9 | "green" : "173", 10 | "red" : "167" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "180", 27 | "green" : "173", 28 | "red" : "167" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0xD7", 45 | "green" : "0xD7", 46 | "red" : "0xD7" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/searchFieldShadow.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.000", 13 | "alpha" : "0.000", 14 | "blue" : "0.000", 15 | "green" : "0.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Search Field/searchFieldText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.706", 9 | "green" : "0.678", 10 | "red" : "0.655" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "180", 27 | "green" : "173", 28 | "red" : "167" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0xD7", 45 | "green" : "0xD7", 46 | "red" : "0xD7" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/error.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x1E", 9 | "green" : "0x16", 10 | "red" : "0x14" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/snackTagBg.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/snackText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/success.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x1E", 9 | "green" : "0x16", 10 | "red" : "0x14" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Snackbar/warning.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x00", 9 | "green" : "0x00", 10 | "red" : "0x00" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/accentTagBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x7E", 9 | "green" : "0xB8", 10 | "red" : "0x00" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/accentTagForeground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "1.000", 31 | "alpha" : "1.000", 32 | "blue" : "1.000", 33 | "green" : "1.000" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "59", 49 | "alpha" : "1.000", 50 | "blue" : "72", 51 | "green" : "64" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagBorder.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.847", 13 | "alpha" : "1.000", 14 | "blue" : "0.933", 15 | "green" : "0.878" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.847", 31 | "alpha" : "1.000", 32 | "blue" : "0.933", 33 | "green" : "0.878" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.847", 49 | "alpha" : "0.000", 50 | "blue" : "0.933", 51 | "green" : "0.878" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagDestructiveBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x2B", 9 | "green" : "0x3B", 10 | "red" : "0xCF" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagDestructiveBorder.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "0.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagDestructiveIcon.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagDestructiveText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagIcon.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.655", 13 | "alpha" : "1.000", 14 | "blue" : "0.706", 15 | "green" : "0.678" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.655", 31 | "alpha" : "1.000", 32 | "blue" : "0.706", 33 | "green" : "0.678" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "1.000", 49 | "alpha" : "1.000", 50 | "blue" : "1.000", 51 | "green" : "1.000" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/filterTagText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "51", 13 | "alpha" : "1.000", 14 | "blue" : "51", 15 | "green" : "51" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.200", 31 | "alpha" : "1.000", 32 | "blue" : "0.200", 33 | "green" : "0.200" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "1.000", 49 | "alpha" : "1.000", 50 | "blue" : "1.000", 51 | "green" : "1.000" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/tagBackground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.200", 13 | "alpha" : "1.000", 14 | "blue" : "0.200", 15 | "green" : "0.200" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.200", 31 | "alpha" : "1.000", 32 | "blue" : "0.200", 33 | "green" : "0.200" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "1.000", 49 | "alpha" : "1.000", 50 | "blue" : "1.000", 51 | "green" : "1.000" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Tags/tagForeground.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "1.000", 31 | "alpha" : "1.000", 32 | "blue" : "1.000", 33 | "green" : "1.000" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.231", 49 | "alpha" : "1.000", 50 | "blue" : "0.282", 51 | "green" : "0.251" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/buttonText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/contentText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.431", 13 | "alpha" : "1.000", 14 | "blue" : "0.529", 15 | "green" : "0.463" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.427", 31 | "alpha" : "1.000", 32 | "blue" : "0.525", 33 | "green" : "0.463" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "0.655", 49 | "alpha" : "1.000", 50 | "blue" : "0.706", 51 | "green" : "0.678" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/textButtonText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.431", 13 | "alpha" : "1.000", 14 | "blue" : "0.529", 15 | "green" : "0.463" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0.431", 31 | "alpha" : "1.000", 32 | "blue" : "0.529", 33 | "green" : "0.463" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "1.000", 49 | "alpha" : "1.000", 50 | "blue" : "1.000", 51 | "green" : "1.000" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/textButtonTextDisabled.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "display-p3", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "1.000", 9 | "green" : "1.000", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "1.000", 28 | "red" : "1.000" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Text/titleText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.200", 13 | "alpha" : "1.000", 14 | "blue" : "0.200", 15 | "green" : "0.200" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "0x33", 31 | "alpha" : "1.000", 32 | "blue" : "0x33", 33 | "green" : "0x33" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "1.000", 49 | "alpha" : "1.000", 50 | "blue" : "1.000", 51 | "green" : "1.000" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Toggle/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Toggle/toggleLineDeselected.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "0.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "1.000", 31 | "alpha" : "0.000", 32 | "blue" : "1.000", 33 | "green" : "1.000" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "59", 49 | "alpha" : "1.000", 50 | "blue" : "72", 51 | "green" : "64" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Toggle/toggleLineSelected.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "43", 27 | "green" : "102", 28 | "red" : "236" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "1.000", 45 | "green" : "1.000", 46 | "red" : "1.000" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Toggle/toggleTextDeselected.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.431", 13 | "alpha" : "1.000", 14 | "blue" : "0.529", 15 | "green" : "0.463" 16 | } 17 | } 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "appearances" : [ 22 | { 23 | "appearance" : "luminosity", 24 | "value" : "light" 25 | } 26 | ], 27 | "color" : { 28 | "color-space" : "srgb", 29 | "components" : { 30 | "red" : "110", 31 | "alpha" : "1.000", 32 | "blue" : "135", 33 | "green" : "118" 34 | } 35 | } 36 | }, 37 | { 38 | "idiom" : "universal", 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "color" : { 46 | "color-space" : "srgb", 47 | "components" : { 48 | "red" : "167", 49 | "alpha" : "1.000", 50 | "blue" : "180", 51 | "green" : "173" 52 | } 53 | } 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/Toggle/toggleTextSelected.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "43", 27 | "green" : "102", 28 | "red" : "236" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "255", 45 | "green" : "255", 46 | "red" : "255" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/accent.colorset/Contents 2.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.082", 13 | "alpha" : "1.000", 14 | "blue" : "0.263", 15 | "green" : "0.518" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/accent.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "43", 9 | "green" : "102", 10 | "red" : "236" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/alarm.colorset/Contents 2.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.812", 13 | "alpha" : "1.000", 14 | "blue" : "0.169", 15 | "green" : "0.227" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/alarm.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x2B", 9 | "green" : "0x39", 10 | "red" : "0xCF" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/borderColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.937", 9 | "green" : "0.878", 10 | "red" : "0.843" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.937", 27 | "green" : "0.878", 28 | "red" : "0.843" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0xFF", 45 | "green" : "0xFF", 46 | "red" : "0xFF" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Colours/separator.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.941", 9 | "green" : "0.906", 10 | "red" : "0.914" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "light" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "240", 27 | "green" : "231", 28 | "red" : "233" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | }, 33 | { 34 | "appearances" : [ 35 | { 36 | "appearance" : "luminosity", 37 | "value" : "dark" 38 | } 39 | ], 40 | "color" : { 41 | "color-space" : "srgb", 42 | "components" : { 43 | "alpha" : "1.000", 44 | "blue" : "0x47", 45 | "green" : "0x40", 46 | "red" : "0x3A" 47 | } 48 | }, 49 | "idiom" : "universal" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconBookmark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconBookmark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconBookmark@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/bookmark.imageset/materialIconBookmark@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconCheckmark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconCheckmark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconCheckmark@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/checkmark.imageset/materialIconCheckmark@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconClose.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconClose@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconClose@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/close.imageset/materialIconClose@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconCloseWhite.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconCloseWhite@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconCloseWhite@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/closeWhite.imageset/materialIconCloseWhite@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/download.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconDownload.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconDownload@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconDownload@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "compression-type" : "automatic", 25 | "template-rendering-intent" : "template", 26 | "preserves-vector-representation" : true 27 | } 28 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/download.imageset/materialIconDownload@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/filter.imageset/filter@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconPadlockWhite.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconPadlockWhite@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconPadlockWhite@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/padlock.imageset/materialIconPadlockWhite@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconSort.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconSort@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconSort@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Icons/sort.imageset/materialIconSort@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Loading Images/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@1x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/ArtworkPlaceholder@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Loading Images/loading.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ArtworkPlaceholder@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ArtworkPlaceholder@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ArtworkPlaceholder@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Logo/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Logo/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kodeco-orange-any.svg", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "light" 12 | } 13 | ], 14 | "filename" : "kodeco-orange-light.svg", 15 | "idiom" : "universal" 16 | }, 17 | { 18 | "appearances" : [ 19 | { 20 | "appearance" : "luminosity", 21 | "value" : "dark" 22 | } 23 | ], 24 | "filename" : "kodeco-orange-dark.svg", 25 | "idiom" : "universal" 26 | } 27 | ], 28 | "info" : { 29 | "author" : "xcode", 30 | "version" : 1 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconDownloadNavigation.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconDownloadNavigation@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconDownloadNavigation@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/downloadTabInactive.imageset/materialIconDownloadNavigation@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconLibrary.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconLibrary@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconLibrary@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/library.imageset/materialIconLibrary@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconMyTutorials.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconMyTutorials@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconMyTutorials@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 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/myTutorials.imageset/materialIconMyTutorials@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "gear.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "gear@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "gear@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/TabBar/settings.imageset/gear@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Video Playback/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "materialIconPlay.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "materialIconPlay@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "materialIconPlay@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay@2x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Assets.xcassets/Video Playback/materialIconPlay.imageset/materialIconPlay@3x.png -------------------------------------------------------------------------------- /Emitron/Emitron/Data Synchronisation/SyncRequest+WatchStat.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct Foundation.Date 31 | 32 | extension SyncRequest: WatchStat { 33 | var secondsWatched: Int { 34 | for case .time(let seconds) in attributes { 35 | return seconds 36 | } 37 | 38 | return 0 39 | } 40 | 41 | var dateWatched: Date { date } 42 | } 43 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/DataState.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | enum DataState { 31 | case initial 32 | case loading 33 | case loadingAdditional 34 | case hasData 35 | case failed 36 | case dirty 37 | } 38 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/Service Adapters/ContentServiceAdapter.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | typealias ContentServiceAdapterResponse = (contentIDs: [Int], cacheUpdate: DataCacheUpdate, totalResultCount: Int) 31 | 32 | protocol ContentServiceAdapter { 33 | func findContent(parameters: [Parameter]) async throws -> ContentServiceAdapterResponse 34 | } 35 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/States/ChildContentsState.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct ChildContentsState: Decodable, Equatable { 31 | let contents: [Content] 32 | let groups: [Group] 33 | } 34 | 35 | typealias CachedChildContentsState = ChildContentsState 36 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/States/DynamicContentState.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct CachedDynamicContentState: Equatable { 31 | var progression: Progression? 32 | var bookmark: Bookmark? 33 | } 34 | 35 | struct DynamicContentState: Codable, Equatable { 36 | var download: Download? 37 | var progression: Progression? 38 | var bookmark: Bookmark? 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/States/VideoPlaybackState.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct CachedVideoPlaybackState { 31 | let content: Content 32 | let progression: Progression? 33 | } 34 | 35 | struct VideoPlaybackState { 36 | let content: Content 37 | let progression: Progression? 38 | let download: Download? 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Data/ViewModels/DownloadDeletionConfirmation.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct DownloadDeletionConfirmation { 31 | let contentID: Int 32 | let title: String 33 | let message: String 34 | let confirm: () -> Void 35 | } 36 | -------------------------------------------------------------------------------- /Emitron/Emitron/Displayable/Content+ChildContentListDisplayable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension Content: ChildContentListDisplayable { } 31 | -------------------------------------------------------------------------------- /Emitron/Emitron/Displayable/DynamicContentDisplayable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | protocol DynamicContentDisplayable { 31 | var viewProgress: ContentViewProgressDisplayable { get } 32 | var downloadProgress: DownloadProgressDisplayable { get } 33 | var bookmarked: Bool { get } 34 | } 35 | -------------------------------------------------------------------------------- /Emitron/Emitron/Displayable/Group+GroupDisplayable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension Group: GroupDisplayable { } 31 | -------------------------------------------------------------------------------- /Emitron/Emitron/Extensions/Binding+Extensions.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct SwiftUI.Binding 31 | 32 | public extension Binding where Value == Bool { 33 | // swiftlint:disable:next operator_whitespace 34 | prefix static func !(binding: Self) -> Self { 35 | .init( 36 | get: { !binding.wrappedValue }, 37 | set: { binding.wrappedValue = !$0 } 38 | ) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Emitron/Emitron/Extensions/Comparable+Clamped.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension Comparable { 31 | func clamped(to limits: ClosedRange) -> Self { 32 | min(max(self, limits.lowerBound), limits.upperBound) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Emitron/Emitron/Extensions/UIApplication+DismissKeyboard.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import UIKit 31 | 32 | extension UIApplication { 33 | static func dismissKeyboard() { 34 | shared.dismissKeyboard() 35 | } 36 | 37 | private func dismissKeyboard() { 38 | sendAction( 39 | #selector(UIResponder.resignFirstResponder), 40 | to: nil, 41 | from: nil, 42 | for: nil 43 | ) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Emitron/Emitron/Extensions/UIViewController+Extensions.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import UIKit 31 | 32 | extension UIViewController { 33 | var sceneDelegate: UISceneDelegate? { 34 | view.window?.windowScene?.delegate 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Emitron/Emitron/Guardpost/Utils/Data+Hex.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct Foundation.Data 31 | 32 | // MARK: - Hex 33 | extension Data { 34 | func hexEncodedString() -> String { 35 | map { String(format: "%02hhx", $0) } 36 | .joined() 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Emitron/Emitron/Guardpost/Utils/GuardpostConstants.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension String { 31 | static let hmacToRemove: String = "HMAC with SHA256: " 32 | } 33 | -------------------------------------------------------------------------------- /Emitron/Emitron/Guardpost/Utils/String+Base64.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct Foundation.Data 31 | 32 | // MARK: - Base64 33 | extension String { 34 | func fromBase64() -> String? { 35 | Data(base64Encoded: self).flatMap { data in 36 | .init(data: data, encoding: .utf8) 37 | } 38 | } 39 | 40 | func toBase64() -> String { 41 | Data(utf8).base64EncodedString() 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Emitron/Emitron/Models/Category.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct Category: Equatable, Codable { 31 | var id: Int 32 | var name: String 33 | var uri: String 34 | var ordinal: Int 35 | } 36 | -------------------------------------------------------------------------------- /Emitron/Emitron/Models/ContentCategory.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct ContentCategory: Equatable, Codable { 31 | var id: Int64? 32 | var contentID: Int 33 | var categoryID: Int 34 | } 35 | -------------------------------------------------------------------------------- /Emitron/Emitron/Models/ContentDomain.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct ContentDomain: Equatable, Codable { 31 | var id: Int64? 32 | var contentID: Int 33 | var domainID: Int 34 | } 35 | -------------------------------------------------------------------------------- /Emitron/Emitron/Models/Group.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | struct Group: Equatable, Codable { 31 | var id: Int 32 | var name: String 33 | var description: String? 34 | var ordinal: Int 35 | var contentID: Int 36 | } 37 | -------------------------------------------------------------------------------- /Emitron/Emitron/Networking/Network/RWEnvironment.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct Foundation.URL 31 | 32 | struct RWEnvironment { 33 | // MARK: - Properties 34 | var baseURL: URL 35 | } 36 | 37 | extension RWEnvironment { 38 | static let prod = RWEnvironment(baseURL: URL(string: "https://api.kodeco.com/api")!) 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Networking/Requests/Models/ContentDifficulty+Request.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension ContentDifficulty { 31 | var requestValue: String { 32 | switch self { 33 | case .beginner: 34 | return "beginner" 35 | case .intermediate: 36 | return "intermediate" 37 | case .advanced: 38 | return "advanced" 39 | case .allLevels: 40 | return "" 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Emitron/Emitron/Networking/Requests/Models/ContentSubscriptionPlan+Request.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension ContentSubscriptionPlan { 31 | var requestValue: String { 32 | switch self { 33 | case .beginner: 34 | return "false" 35 | case .professional: 36 | return "true" 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Ownable/Content+Ownable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | extension Content: Ownable { } 31 | -------------------------------------------------------------------------------- /Emitron/Emitron/Ownable/Ownable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | protocol Ownable { 31 | var free: Bool { get } 32 | var professional: Bool { get } 33 | } 34 | -------------------------------------------------------------------------------- /Emitron/Emitron/Persistence/Models/Bookmark+Persistence.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import GRDB 31 | 32 | extension Bookmark: FetchableRecord, TableRecord, PersistableRecord { } 33 | 34 | extension Bookmark { 35 | static let content = belongsTo(Content.self) 36 | var content: QueryInterfaceRequest { 37 | request(for: Bookmark.content) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Persistence/Models/Progression+Persistence.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import GRDB 31 | 32 | extension Progression: FetchableRecord, TableRecord, PersistableRecord { } 33 | 34 | extension Progression { 35 | static let content = belongsTo(Content.self) 36 | var content: QueryInterfaceRequest { 37 | request(for: Progression.content) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Persistence/States/ChildContentsState+Fetchable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import GRDB 31 | 32 | extension ChildContentsState: FetchableRecord { } 33 | -------------------------------------------------------------------------------- /Emitron/Emitron/Persistence/States/ContentSummaryState+Fetchable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import GRDB 31 | 32 | extension ContentSummaryState: FetchableRecord { } 33 | -------------------------------------------------------------------------------- /Emitron/Emitron/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Emitron/Emitron/Preview Content/sampleCardImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Preview Content/sampleCardImage.png -------------------------------------------------------------------------------- /Emitron/Emitron/Settings/SettingsSelectable.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | protocol SettingsSelectable: Hashable { 31 | static var selectableCases: [Self] { get } 32 | var display: String { get } 33 | } 34 | 35 | extension SettingsSelectable { 36 | func hash(into hasher: inout Hasher) { 37 | hasher.combine(display) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/Styleguide/CGFloat+Dimensions.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import QuartzCore 31 | 32 | extension CGFloat { 33 | static let topPadding: CGFloat = 15 34 | static let sidePadding: CGFloat = 2 35 | } 36 | -------------------------------------------------------------------------------- /Emitron/Emitron/Styleguide/Relative/Relative-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Styleguide/Relative/Relative-Bold.ttf -------------------------------------------------------------------------------- /Emitron/Emitron/Styleguide/Relative/Relative-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/razeware/emitron-iOS/00a07223f8330acb90d6a8141c6c10e2ecf29d5d/Emitron/Emitron/Styleguide/Relative/Relative-Medium.ttf -------------------------------------------------------------------------------- /Emitron/Emitron/Styleguide/UIColor+Extensions.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import UIKit 31 | 32 | extension UIColor { 33 | static var backgroundColor: UIColor { 34 | UIColor(named: "backgroundColor")! 35 | } 36 | 37 | static var accent: UIColor { 38 | UIColor(red: 21.0 / 255.0, green: 132.0 / 255.0, blue: 67.0 / 255.0, alpha: 1.0) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Emitron/Emitron/Styleguide/UIFont+Extensions.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import UIKit 31 | 32 | extension UIFont { 33 | static var uiLargeTitle: UIFont { 34 | .init(name: "Relative Pro Bold", size: 34.0)! 35 | } 36 | static var uiHeadline: UIFont { 37 | .init(name: "Relative Pro Medium", size: 17.0)! 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Emitron/Emitron/UI/PortraitHostingController.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import SwiftUI 31 | 32 | final class PortraitHostingController: UIHostingController { 33 | override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 34 | // iPads can have any orientation. Everything else should be portrait only. 35 | UIDevice.current.userInterfaceIdiom == .pad ? .all : .portrait 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Emitron/Emitron/UI/TabbedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabbedView.swift 3 | // Emitron 4 | // 5 | // Created by Lea Marolt Sonnenschein on 6/29/19. 6 | // Copyright © 2019 Kodeco Inc. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct TabBar: View { 12 | var body: some View { 13 | TabbedView { 14 | BlueView() 15 | .tabItemLabel(Text("Blue")) 16 | .tag(0) 17 | OrangeView() 18 | .tabItemLabel(Text("Orange")) 19 | .tag(1) 20 | } 21 | } 22 | } 23 | 24 | #if DEBUG 25 | struct TabBar_Previews: PreviewProvider { 26 | static var previews: some View { 27 | TabBar() 28 | } 29 | } 30 | #endif 31 | -------------------------------------------------------------------------------- /Emitron/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'fastlane', '~> 2.205' 4 | -------------------------------------------------------------------------------- /Emitron/emitronScreenshots/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 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Data Synchronisation/SyncEngineTest.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import XCTest 31 | 32 | class SyncEngineTest: XCTestCase { 33 | } 34 | -------------------------------------------------------------------------------- /Emitron/emitronTests/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 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Models/AttachmentTest.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import XCTest 31 | 32 | class AttachmentTest: XCTestCase { 33 | 34 | override func setUp() { 35 | super.setUp() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Models/Mocks/Attachment_Downloads.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":[ 3 | { 4 | "id":"30195", 5 | "type":"attachments", 6 | "attributes":{ 7 | "url":"https://player.vimeo.com/external/332761683.hd.mp4?s=5a4f3bb437d05aa69aa2efc53ee37d9c02dd45af\u0026profile_id=174\u0026oauth2_token_id=897711146", 8 | "kind":"hd_video_file" 9 | } 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Models/Mocks/Attachment_Stream.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":{ 3 | "id":"30193", 4 | "type":"attachments", 5 | "attributes":{ 6 | "url":"https://player.vimeo.com/external/332761683.m3u8?s=3971a97ec7d470e8bdfd4729cbdedc18576fa331\u0026oauth2_token_id=897711146", 7 | "kind":"stream" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Models/Mocks/Permissions+Mocks.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import struct Foundation.Date 31 | @testable import Emitron 32 | 33 | extension Permission { 34 | static var downloadVideos: Permission { 35 | .init( 36 | id: 431, 37 | name: "Download Videos", 38 | tag: .download, 39 | createdAt: .now, 40 | updatedAt: .now 41 | ) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Models/Mocks/VideoModelTest.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":{ 3 | "id":"2789", 4 | "type":"videos", 5 | "attributes":{ 6 | "name":"PDFKit: Saving PDFs", 7 | "description":"You can display PDF files and you can even interact with them, but what about saving? You don't want your work to go to waste.", 8 | "released_at":"2019-05-16T13:00:00.000Z", 9 | "created_at":"2019-04-26T21:19:47.239Z", 10 | "updated_at":"2019-06-07T13:44:13.329Z", 11 | "free":false 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Emitron/emitronTests/Persistence/PersistenceStore+SynchronisationTest.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2022 Kodeco Inc 2 | 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // Notwithstanding the foregoing, you may not use, copy, modify, merge, publish, 15 | // distribute, sublicense, create a derivative work, and/or sell copies of the 16 | // Software in any work that is designed, intended, or marketed for pedagogical or 17 | // instructional purposes related to programming, coding, application development, 18 | // or information technology. Permission for such use, copying, modification, 19 | // merger, publication, distribution, sublicensing, creation of derivative works, 20 | // or sale is expressly withheld. 21 | // 22 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | // THE SOFTWARE. 29 | 30 | import XCTest 31 | 32 | class PersistenceStore_SynchronisationTest: XCTestCase { 33 | } 34 | -------------------------------------------------------------------------------- /Emitron/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier('com.razeware.emitron.ios') # The bundle identifier of your app 2 | apple_id('engineering@razeware.com') # Your Apple email address 3 | 4 | itc_team_id('279596') # App Store Connect Team ID 5 | team_id('KFCNEC27GU') # Developer Portal Team ID 6 | 7 | # For more information about the Appfile, see: 8 | # https://docs.fastlane.tools/advanced/#appfile 9 | 10 | 11 | for_lane :ci_beta do 12 | app_identifier('com.razeware.emitron.ios.beta') 13 | end 14 | -------------------------------------------------------------------------------- /Emitron/fastlane/Matchfile: -------------------------------------------------------------------------------- 1 | git_url('https://github.com/razeware/apple-certificates.git') 2 | 3 | storage_mode('git') 4 | 5 | type('appstore') # The default type, can be: appstore, adhoc, enterprise or development 6 | 7 | app_identifier(['com.razeware.emitron.ios', 'com.razeware.emitron.ios.beta']) 8 | username('engineering@razeware.com') # Your Apple Developer Portal username 9 | 10 | # For all available options run `fastlane match --help` 11 | # Remove the # in the beginning of the line to enable the other options 12 | 13 | # The docs are available on https://docs.fastlane.tools/actions/match 14 | -------------------------------------------------------------------------------- /Emitron/fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | Install _fastlane_ using 12 | ``` 13 | [sudo] gem install fastlane -NV 14 | ``` 15 | or alternatively using `brew cask install fastlane` 16 | 17 | # Available Actions 18 | ## iOS 19 | ### ios ci_beta 20 | ``` 21 | fastlane ios ci_beta 22 | ``` 23 | Push a new beta build to TestFlight 24 | ### ios tests 25 | ``` 26 | fastlane ios tests 27 | ``` 28 | 29 | 30 | ---- 31 | 32 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 33 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 34 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 35 | -------------------------------------------------------------------------------- /Emitron/fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | # Uncomment the lines below you want to change by removing the # in the beginning 2 | 3 | # A list of devices you want to take the screenshots from 4 | # devices([ 5 | # "iPhone 8", 6 | # "iPhone 8 Plus", 7 | # "iPhone SE", 8 | # "iPhone X", 9 | # "iPad Pro (12.9-inch)", 10 | # "iPad Pro (9.7-inch)", 11 | # "Apple TV 1080p" 12 | # ]) 13 | 14 | # languages([ 15 | # "en-US", 16 | # "de-DE", 17 | # "it-IT", 18 | # ["pt", "pt_BR"] # Portuguese with Brazilian locale 19 | # ]) 20 | 21 | # The name of the scheme which contains the UI Tests 22 | # scheme("SchemeName") 23 | 24 | # Where should the resulting screenshots be stored? 25 | # output_directory("./screenshots") 26 | 27 | # remove the '#' to clear all previously generated screenshots before creating new ones 28 | # clear_previous_screenshots(true) 29 | 30 | # Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments 31 | # launch_arguments(["-favColor red"]) 32 | 33 | # For more information about all available options run 34 | # fastlane action snapshot 35 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Reporting a Vulnerability 4 | 5 | If you come across a security vulnerability in __emitron__, or any of the kodeco.com infrastructure that it connects to, please do not file an 6 | issue on GitHub. 7 | 8 | Instead, please document your issue as fully as you can, and email your issue report directly to emitron@kodeco.com. 9 | 10 | We take security very seriously, and will assess any reports first before we embark upon getting them fixed as soon as possible. 11 | 12 | Thanks! 13 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # emitron Support 2 | 3 | If you need help or assistance with using __emitron__ (the kodeco.com app), please don't file an issue on the GitHub repo. 4 | 5 | Instead, check out [help.kodeco.com](https://help.kodeco.com/) for assistance, and in particular, [https://help.kodeco.com/faq](https://help.kodeco.com/faq) which has some details on the operation of __emitron__. 6 | 7 | Thanks! 8 | -------------------------------------------------------------------------------- /scripts/download_s3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # See https://esc.sh/blog/access-s3-gcs-curl/ 4 | 5 | req_path="/secrets/ios/secrets.${1}.xcconfig" 6 | 7 | # We need the current date to calculate the signature and also to pass to S3/GCS 8 | curr_date=`date +'%a, %d %b %Y %H:%M:%S %z'` 9 | 10 | # This is the name of your S3/GCS bucket 11 | bucket_name="emitron" 12 | string_to_sign="GET\n\n\n${curr_date}\n/${bucket_name}${req_path}" 13 | 14 | # Your S3 key 15 | s3_key=${AWS_ACCESS_KEY_ID} 16 | 17 | # Your secret 18 | secret=${AWS_SECRET_ACCESS_KEY} 19 | 20 | # We will now calculate the signature to be sent as a header. 21 | signature=$(echo -en "${string_to_sign}" | openssl sha1 -hmac "${secret}" -binary | base64) 22 | 23 | # That's all we need. Now we can make the request as follows. 24 | 25 | # S3 26 | curl -v -H "Host: ${bucket_name}.s3.amazonaws.com" \ 27 | -H "Date: $curr_date" \ 28 | -H "Authorization: AWS ${s3_key}:${signature}" \ 29 | "https://${bucket_name}.s3.amazonaws.com${req_path}" --compressed 30 | -------------------------------------------------------------------------------- /scripts/generate_secrets.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This will create a copy of the template xcconfig file required 4 | # to build the app. 5 | 6 | DIRECTORY="Emitron/Emitron/Configuration" 7 | STAGES=(development beta production) 8 | for STAGE in "${STAGES[@]}" 9 | do 10 | FILE="$DIRECTORY/secrets.$STAGE.xcconfig" 11 | echo $FILE 12 | if [ -f $FILE ]; then 13 | echo "$FILE already exists. Skipping." 14 | else 15 | echo "Creating $FILE..." 16 | cp $DIRECTORY/secrets.template.xcconfig $FILE 17 | fi 18 | done 19 | --------------------------------------------------------------------------------