Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Commit

Permalink
Merge pull request #453 from razeware/development
Browse files Browse the repository at this point in the history
v1.0.3: Giant 🐼
  • Loading branch information
sammyd authored Apr 7, 2020
2 parents 4141d0e + 9aa3612 commit f9d63ab
Show file tree
Hide file tree
Showing 28 changed files with 386 additions and 295 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/appstore-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:

steps:
- uses: actions/checkout@v1
- name: Switch to Xcode 11.3
run: sudo xcode-select --switch /Applications/Xcode_11.3.app
- name: Switch to Xcode 11.4
run: sudo xcode-select --switch /Applications/Xcode_11.4.app
- name: Update fastlane
run: |
cd Emitron
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:

steps:
- uses: actions/checkout@v1
- name: Switch to Xcode 11.3
run: sudo xcode-select --switch /Applications/Xcode_11.3.app
- name: Switch to Xcode 11.4
run: sudo xcode-select --switch /Applications/Xcode_11.4.app
- name: Update fastlane
run: |
cd Emitron
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/testflight-beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:

steps:
- uses: actions/checkout@v1
- name: Switch to Xcode 11.3
run: sudo xcode-select --switch /Applications/Xcode_11.3.app
- name: Switch to Xcode 11.4
run: sudo xcode-select --switch /Applications/Xcode_11.4.app
- name: Update fastlane
run: |
cd Emitron
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/testflight-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:

steps:
- uses: actions/checkout@v1
- name: Switch to Xcode 11.3
run: sudo xcode-select --switch /Applications/Xcode_11.3.app
- name: Switch to Xcode 11.4
run: sudo xcode-select --switch /Applications/Xcode_11.4.app
- name: Update fastlane
run: |
cd Emitron
Expand Down
38 changes: 20 additions & 18 deletions Emitron/Emitron.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,9 @@
22C3F125241A2655002812CB /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 22C3F11F241A2654002812CB /* [email protected] */; };
22C3F126241A2655002812CB /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 22C3F120241A2654002812CB /* [email protected] */; };
22C3F127241A2655002812CB /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 22C3F121241A2655002812CB /* [email protected] */; };
22C3F155242795A1002812CB /* PortraitHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C3F154242795A1002812CB /* PortraitHostingController.swift */; };
22C3F15724279692002812CB /* FullScreenVideoPlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C3F15624279692002812CB /* FullScreenVideoPlayerViewController.swift */; };
22C3F159242796EC002812CB /* FullScreenVideoPlayerRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C3F158242796EC002812CB /* FullScreenVideoPlayerRepresentable.swift */; };
22C4EADB23DB8A5A001A3FDA /* WatchStatsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C4EADA23DB8A5A001A3FDA /* WatchStatsService.swift */; };
22C4EADD23DB8B33001A3FDA /* WatchStatsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C4EADC23DB8B33001A3FDA /* WatchStatsRequest.swift */; };
22C4EADF23DC4338001A3FDA /* SyncRequest+WatchStat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C4EADE23DC4338001A3FDA /* SyncRequest+WatchStat.swift */; };
Expand Down Expand Up @@ -324,7 +327,6 @@
B6FC15AE22CB529E0078CEDB /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15AD22CB529E0078CEDB /* SettingsView.swift */; };
B6FC15B122CB53220078CEDB /* TextListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15B022CB53220078CEDB /* TextListItemView.swift */; };
B6FC15B522CB53730078CEDB /* ContentDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15B422CB53730078CEDB /* ContentDetailView.swift */; };
B6FC15BB22CB55160078CEDB /* VideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15BA22CB55160078CEDB /* VideoView.swift */; };
B6FC15C122CB55C40078CEDB /* JSONAPIResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15C022CB55C40078CEDB /* JSONAPIResource.swift */; };
B6FC15C322CB55CC0078CEDB /* JSONAPIRelationship.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15C222CB55CC0078CEDB /* JSONAPIRelationship.swift */; };
B6FC15C522CB55D30078CEDB /* JSONAPIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FC15C422CB55D30078CEDB /* JSONAPIError.swift */; };
Expand Down Expand Up @@ -531,6 +533,9 @@
22C3F11F241A2654002812CB /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
22C3F120241A2654002812CB /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
22C3F121241A2655002812CB /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
22C3F154242795A1002812CB /* PortraitHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortraitHostingController.swift; sourceTree = "<group>"; };
22C3F15624279692002812CB /* FullScreenVideoPlayerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenVideoPlayerViewController.swift; sourceTree = "<group>"; };
22C3F158242796EC002812CB /* FullScreenVideoPlayerRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenVideoPlayerRepresentable.swift; sourceTree = "<group>"; };
22C4EADA23DB8A5A001A3FDA /* WatchStatsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchStatsService.swift; sourceTree = "<group>"; };
22C4EADC23DB8B33001A3FDA /* WatchStatsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchStatsRequest.swift; sourceTree = "<group>"; };
22C4EADE23DC4338001A3FDA /* SyncRequest+WatchStat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SyncRequest+WatchStat.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -672,7 +677,6 @@
B6FC15AD22CB529E0078CEDB /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
B6FC15B022CB53220078CEDB /* TextListItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextListItemView.swift; sourceTree = "<group>"; };
B6FC15B422CB53730078CEDB /* ContentDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentDetailView.swift; sourceTree = "<group>"; };
B6FC15BA22CB55160078CEDB /* VideoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoView.swift; sourceTree = "<group>"; };
B6FC15C022CB55C40078CEDB /* JSONAPIResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONAPIResource.swift; sourceTree = "<group>"; };
B6FC15C222CB55CC0078CEDB /* JSONAPIRelationship.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONAPIRelationship.swift; sourceTree = "<group>"; };
B6FC15C422CB55D30078CEDB /* JSONAPIError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONAPIError.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1036,7 +1040,8 @@
229F0AC323BB29230004DD4F /* Video */ = {
isa = PBXGroup;
children = (
B6FC15BA22CB55160078CEDB /* VideoView.swift */,
22C3F15624279692002812CB /* FullScreenVideoPlayerViewController.swift */,
22C3F158242796EC002812CB /* FullScreenVideoPlayerRepresentable.swift */,
);
path = Video;
sourceTree = "<group>";
Expand Down Expand Up @@ -1524,6 +1529,7 @@
B6D7DC5622C7B4A0006DD325 /* UI */ = {
isa = PBXGroup;
children = (
22C3F154242795A1002812CB /* PortraitHostingController.swift */,
B6D7DC3022C79743006DD325 /* SceneDelegate.swift */,
B62B9A7C22DF764900122CE8 /* App Root */,
B6FC15AA22CB52430078CEDB /* Downloads */,
Expand Down Expand Up @@ -1660,14 +1666,14 @@
B6FC15AC22CB52570078CEDB /* Shared */ = {
isa = PBXGroup;
children = (
22C6410923FA904500CBFDE5 /* Tags */,
22C6410423F893CB00CBFDE5 /* Download Icon */,
B6C4F3D122E6ECA40087ED10 /* CheckmarkView.swift */,
B595654323130E4C00A3FF44 /* CustomToggleView.swift */,
B66778AB2305D2D4003EEBAB /* MainButtonView.swift */,
8B283DEE23169A1E001F1B17 /* ProgressBarView.swift */,
229F0AC223BB27820004DD4F /* Content Detail */,
229F0AC123BB27790004DD4F /* Content List */,
22C6410423F893CB00CBFDE5 /* Download Icon */,
22C6410923FA904500CBFDE5 /* Tags */,
);
path = Shared;
sourceTree = "<group>";
Expand Down Expand Up @@ -2019,6 +2025,7 @@
8BFC74C32364A9BE001979F1 /* ContentScreen.swift in Sources */,
B6C0F0CF22D5D3EE00012839 /* TabNavView.swift in Sources */,
B6DF2F9122CA00820081A3A3 /* Request.swift in Sources */,
22C3F15724279692002812CB /* FullScreenVideoPlayerViewController.swift in Sources */,
B62B9A8022DF76A500122CE8 /* MainView.swift in Sources */,
B66778AC2305D2D4003EEBAB /* MainButtonView.swift in Sources */,
B6D7DC3122C79743006DD325 /* SceneDelegate.swift in Sources */,
Expand Down Expand Up @@ -2075,7 +2082,6 @@
22BE654F23F1F66E00717369 /* Comparable+Clamped.swift in Sources */,
B6C4F3D222E6ECA50087ED10 /* CheckmarkView.swift in Sources */,
22B8265D23AF37FE00D4BA23 /* ProgressionAdapter.swift in Sources */,
B6FC15BB22CB55160078CEDB /* VideoView.swift in Sources */,
222C0AB023DF554E00D65EBD /* SettingsOption.swift in Sources */,
2278AE50240A74C400855221 /* UIApplication+DismissKeyboard.swift in Sources */,
B6C0F0DD22D5FA1C00012839 /* ContentDetailModel+Extensions.swift in Sources */,
Expand All @@ -2101,6 +2107,7 @@
22C4EAEF23DEF91D001A3FDA /* SettingsKey.swift in Sources */,
B6DF2FC022CA861C0081A3A3 /* RandomString.swift in Sources */,
B629AB4C22E60BD70037F4D8 /* CourseHeaderView.swift in Sources */,
22C3F159242796EC002812CB /* FullScreenVideoPlayerRepresentable.swift in Sources */,
22BFE75523D9905500495BA9 /* SnackbarView.swift in Sources */,
223D77DF23B6515A005BE95D /* ContentRepository.swift in Sources */,
2228E40723B999D500E103AA /* CategoryRepository.swift in Sources */,
Expand Down Expand Up @@ -2163,6 +2170,7 @@
22B8265923AF109800D4BA23 /* EntityAdapter.swift in Sources */,
B6C4F3DF22E710640087ED10 /* PersistenceStore.swift in Sources */,
22C0513423A4FB8E004D1223 /* Bookmark+Persistence.swift in Sources */,
22C3F155242795A1002812CB /* PortraitHostingController.swift in Sources */,
22B8266A23AF608A00D4BA23 /* DataCacheUpdate.swift in Sources */,
B6C4F3CB22E6E44A0087ED10 /* TitleCheckmarkView.swift in Sources */,
2213195623EB7A7800F15816 /* CompletedIconView.swift in Sources */,
Expand Down Expand Up @@ -2255,7 +2263,6 @@
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = KFCNEC27GU;
INFOPLIST_FILE = emitronScreenshots/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand All @@ -2275,7 +2282,6 @@
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = KFCNEC27GU;
INFOPLIST_FILE = emitronScreenshots/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand All @@ -2295,7 +2301,6 @@
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = KFCNEC27GU;
INFOPLIST_FILE = emitronScreenshots/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down Expand Up @@ -2354,7 +2359,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
Expand All @@ -2376,12 +2381,11 @@
DEVELOPMENT_TEAM = KFCNEC27GU;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Emitron/Support Files/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = "com.razeware.emitron.ios$(BUNDLE_ID_SUFFIX)";
PRODUCT_MODULE_NAME = Emitron;
PRODUCT_NAME = raywenderlich;
Expand Down Expand Up @@ -2502,7 +2506,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -2557,7 +2561,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
Expand All @@ -2580,12 +2584,11 @@
DEVELOPMENT_TEAM = KFCNEC27GU;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Emitron/Support Files/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = "com.razeware.emitron.ios$(BUNDLE_ID_SUFFIX)";
PRODUCT_MODULE_NAME = Emitron;
PRODUCT_NAME = raywenderlich;
Expand All @@ -2607,12 +2610,11 @@
DEVELOPMENT_TEAM = KFCNEC27GU;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Emitron/Support Files/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = "com.razeware.emitron.ios$(BUNDLE_ID_SUFFIX)";
PRODUCT_MODULE_NAME = Emitron;
PRODUCT_NAME = raywenderlich;
Expand Down
12 changes: 0 additions & 12 deletions Emitron/Emitron/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,18 +100,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}

// handle orientation for the device
func application (_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
guard let viewController = (window?.rootViewController?.presentedViewController) else {
return .portrait
}
if viewController.isKind(of: NSClassFromString("AVFullScreenViewController")!) {
return .allButUpsideDown
} else {
return .portrait
}
}

// For dealing with downloading of videos in the background
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
assert(identifier == DownloadProcessor.sessionIdentifier, "Unknown Background URLSession. Unable to handle these events.")
Expand Down
8 changes: 4 additions & 4 deletions Emitron/Emitron/Data Synchronisation/ProgressEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ final class ProgressEngine {

private let contentsService: ContentsService
private let repository: Repository
private let syncAction: SyncAction
private weak var syncAction: SyncAction?
private var mode: Mode = .offline
private let networkMonitor = NWPathMonitor()

private var playbackToken: String?

init(contentsService: ContentsService, repository: Repository, syncAction: SyncAction) {
init(contentsService: ContentsService, repository: Repository, syncAction: SyncAction?) {
self.contentsService = contentsService
self.repository = repository
self.syncAction = syncAction
Expand Down Expand Up @@ -101,8 +101,8 @@ final class ProgressEngine {
switch mode {
case .offline:
do {
try syncAction.updateProgress(for: contentId, progress: progress)
try syncAction.recordWatchStats(for: contentId, secondsWatched: Constants.videoPlaybackProgressTrackingInterval)
try syncAction?.updateProgress(for: contentId, progress: progress)
try syncAction?.recordWatchStats(for: contentId, secondsWatched: Constants.videoPlaybackProgressTrackingInterval)

return Future { promise in
promise(.success(progression))
Expand Down
2 changes: 1 addition & 1 deletion Emitron/Emitron/Data Synchronisation/SyncAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

import Foundation

protocol SyncAction {
protocol SyncAction: AnyObject {
func createBookmark(for contentId: Int) throws
func deleteBookmark(for contentId: Int) throws

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class ContentRepository: ObservableObject, ContentPaginatable {
let repository: Repository
let contentsService: ContentsService
let downloadAction: DownloadAction
let syncAction: SyncAction
weak var syncAction: SyncAction?
let serviceAdapter: ContentServiceAdapter!

private (set) var currentPage: Int = 1
Expand Down
29 changes: 11 additions & 18 deletions Emitron/Emitron/Data/DataCache.swift
Original file line number Diff line number Diff line change
Expand Up @@ -321,26 +321,19 @@ extension DataCache {
guard !contentList.isEmpty else { throw DataCacheError.cacheMiss }

// We'll assume that the contents is already ordered. It is if it comes from child/sibling contents
let orderedProgressions = contentList.compactMap { progressions[$0.id] }
let orderedProgressions = contentList.map { progressions[$0.id] }

// No child progressions—let's start with the first item of content
if orderedProgressions.isEmpty {
return contentList.first!
// Find the first index where there's a missing or incomplete progression
guard let incompleteOrNotStartedIndex = orderedProgressions.firstIndex(where: { progression in
guard let progression = progression else { return true }

return !progression.finished
}) else {
// If we didn't find one, start at the beginning
return contentList[0]
}

// The last progression is the furthest through the content
guard let lastProgression = orderedProgressions.last,
let lastContentIndex = contentList.firstIndex(where: { $0.id == lastProgression.contentId })
else { return contentList[0] }
// If it's not finished, then we're part way through it—return this item of content
if !lastProgression.finished {
return contentList[lastContentIndex]
}
// Need the next one—does it exist?
if lastContentIndex + 1 < contentList.endIndex {
return contentList[lastContentIndex + 1]
}
// Must have completed the final episode. Let's start at the beginning again.
return contentList[0]
// Otherwise, we've found the one we need
return contentList[incompleteOrNotStartedIndex]
}
}
4 changes: 2 additions & 2 deletions Emitron/Emitron/Data/ViewModels/ChildContentsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import Combine
class ChildContentsViewModel: ObservableObject {
let parentContentId: Int
let downloadAction: DownloadAction
let syncAction: SyncAction
weak var syncAction: SyncAction?
let repository: Repository

var state: DataState = .initial
Expand All @@ -43,7 +43,7 @@ class ChildContentsViewModel: ObservableObject {

init(parentContentId: Int,
downloadAction: DownloadAction,
syncAction: SyncAction,
syncAction: SyncAction?,
repository: Repository) {
self.parentContentId = parentContentId
self.downloadAction = downloadAction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ final class DataCacheChildContentsViewModel: ChildContentsViewModel {

init(parentContentId: Int,
downloadAction: DownloadAction,
syncAction: SyncAction,
syncAction: SyncAction?,
repository: Repository,
service: ContentsService) {
self.service = service
Expand Down
Loading

0 comments on commit f9d63ab

Please sign in to comment.