This commit is contained in:
overtake 2018-12-10 20:38:37 +04:00
commit 58cc641e2b
4 changed files with 246 additions and 22 deletions

13
.gitignore vendored
View File

@ -1,6 +1,6 @@
# Xcode
#
build/
fastlane/README.md
fastlane/report.xml
fastlane/test_output/*
*.pbxuser
!default.pbxuser
*.mode1v3
@ -11,9 +11,14 @@ build/
!default.perspectivev3
xcuserdata
*.xccheckout
*.xcscmblueprint
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
.DS_Store
*.dSYM
*.dSYM.zip
*.ipa
*/xcuserdata/*

View File

@ -959,6 +959,185 @@
};
name = "Release Hockeyapp";
};
D021D502219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = "Debug Fork";
};
D021D503219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
INFOPLIST_FILE = SSignalKit/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MACH_O_TYPE = staticlib;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/;
SKIP_INSTALL = YES;
};
name = "Debug Fork";
};
D021D504219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = SSignalKitTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-framework",
XCTest,
"-ObjC",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = "Debug Fork";
};
D021D505219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
ARCHS = "$(ARCHS_STANDARD)";
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_BITCODE = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = SwiftSignalKit/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_SWIFT_FLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = X834Q8SBVP/;
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_REFLECTION_METADATA_LEVEL = none;
SWIFT_VERSION = 4.0;
};
name = "Debug Fork";
};
D021D506219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = SwiftSignalKitTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "org.telegram.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = "Debug Fork";
};
D021D507219CB1D90064BEBA /* Debug Fork */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVES = YES;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
FRAMEWORK_VERSION = A;
INFOPLIST_FILE = SwiftSignalKitMac/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.10;
PRODUCT_BUNDLE_IDENTIFIER = org.telegram.Telegram.SwiftSignalKitMac;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
};
name = "Debug Fork";
};
D0445DEC1A7C2CA500267924 /* Debug Hockeyapp */ = {
isa = XCBuildConfiguration;
buildSettings = {
@ -2053,6 +2232,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0085B361B282B9800EAF753 /* Debug Hockeyapp */,
D021D505219CB1D90064BEBA /* Debug Fork */,
D0DB57B91E5C4B7A0071854C /* Debug AppStore */,
D0ADF931212B3AD400310BBC /* Debug AppStore LLC */,
D0085B371B282B9800EAF753 /* Release Hockeyapp */,
@ -2067,6 +2247,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0085B391B282B9800EAF753 /* Debug Hockeyapp */,
D021D506219CB1D90064BEBA /* Debug Fork */,
D0DB57BA1E5C4B7A0071854C /* Debug AppStore */,
D0ADF932212B3AD400310BBC /* Debug AppStore LLC */,
D0085B3A1B282B9800EAF753 /* Release Hockeyapp */,
@ -2081,6 +2262,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0445DEC1A7C2CA500267924 /* Debug Hockeyapp */,
D021D502219CB1D90064BEBA /* Debug Fork */,
D0DB57B61E5C4B7A0071854C /* Debug AppStore */,
D0ADF92E212B3AD400310BBC /* Debug AppStore LLC */,
D0445DED1A7C2CA500267924 /* Release Hockeyapp */,
@ -2095,6 +2277,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0445DEF1A7C2CA500267924 /* Debug Hockeyapp */,
D021D503219CB1D90064BEBA /* Debug Fork */,
D0DB57B71E5C4B7A0071854C /* Debug AppStore */,
D0ADF92F212B3AD400310BBC /* Debug AppStore LLC */,
D0445DF01A7C2CA500267924 /* Release Hockeyapp */,
@ -2109,6 +2292,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0445DF21A7C2CA500267924 /* Debug Hockeyapp */,
D021D504219CB1D90064BEBA /* Debug Fork */,
D0DB57B81E5C4B7A0071854C /* Debug AppStore */,
D0ADF930212B3AD400310BBC /* Debug AppStore LLC */,
D0445DF31A7C2CA500267924 /* Release Hockeyapp */,
@ -2123,6 +2307,7 @@
isa = XCConfigurationList;
buildConfigurations = (
D0B417F31D7DFA63004562A4 /* Debug Hockeyapp */,
D021D507219CB1D90064BEBA /* Debug Fork */,
D0DB57BB1E5C4B7A0071854C /* Debug AppStore */,
D0ADF933212B3AD400310BBC /* Debug AppStore LLC */,
D0B417F41D7DFA63004562A4 /* Release Hockeyapp */,

View File

@ -28,6 +28,36 @@ public func take<T, E>(_ count: Int) -> (Signal<T, E>) -> Signal<T, E> {
}
}
public struct SignalTakeAction {
public let passthrough: Bool
public let complete: Bool
public init(passthrough: Bool, complete: Bool) {
self.passthrough = passthrough
self.complete = complete
}
}
public func take<T, E>(until: @escaping (T) -> SignalTakeAction) -> (Signal<T, E>) -> Signal<T, E> {
return { signal in
return Signal { subscriber in
return signal.start(next: { next in
let action = until(next)
if action.passthrough {
subscriber.putNext(next)
}
if action.complete {
subscriber.putCompletion()
}
}, error: { error in
subscriber.putError(error)
}, completed: {
subscriber.putCompletion()
})
}
}
}
public func last<T, E>(signal: Signal<T, E>) -> Signal<T?, E> {
return Signal { subscriber in
let value = Atomic<T?>(value: nil)

View File

@ -54,26 +54,30 @@ public func suspendAwareDelay<T, E>(_ timeout: Double, granularity: Double = 4.0
timer.start()
}
var invalidateImpl: (() -> Void)?
let timer = Timer(timeout: granularity, repeat: true, completion: {
let currentTimestamp = CFAbsoluteTimeGetCurrent()
if beginTimestamp + timeout - granularity * 1.1 <= currentTimestamp {
if timeout <= granularity * 1.1 {
startFinalTimer()
} else {
var invalidateImpl: (() -> Void)?
let timer = Timer(timeout: granularity, repeat: true, completion: {
let currentTimestamp = CFAbsoluteTimeGetCurrent()
if beginTimestamp + timeout - granularity * 1.1 <= currentTimestamp {
invalidateImpl?()
startFinalTimer()
}
}, queue: queue)
invalidateImpl = {
queue.async {
timer.invalidate()
}
}
disposable.set(ActionDisposable {
invalidateImpl?()
startFinalTimer()
}
}, queue: queue)
invalidateImpl = {
queue.async {
timer.invalidate()
}
})
timer.start()
}
disposable.set(ActionDisposable {
invalidateImpl?()
})
timer.start()
}
return disposable
}