Bazel build updates

This commit is contained in:
Ali 2020-10-27 16:53:29 +04:00
parent eafbe0dc23
commit a0fa8132ea
9 changed files with 194 additions and 29 deletions

View File

@ -416,6 +416,34 @@ bazel_app_arm64:
--output_groups=+dsyms \
--verbose_failures
bazel_app_armv7:
APP_VERSION="${APP_VERSION}" \
BAZEL_CACHE_DIR="${BAZEL_CACHE_DIR}" \
build-system/prepare-build.sh Telegram distribution
"${BAZEL}" build Telegram/Telegram ${BAZEL_CACHE_FLAGS} ${BAZEL_COMMON_FLAGS} ${BAZEL_OPT_FLAGS} \
-c opt \
--ios_multi_cpus=armv7 \
--watchos_cpus=armv7k,arm64_32 \
--objc_enable_binary_stripping=true \
--features=dead_strip \
--apple_generate_dsym \
--output_groups=+dsyms \
--verbose_failures
bazel_app:
APP_VERSION="${APP_VERSION}" \
BAZEL_CACHE_DIR="${BAZEL_CACHE_DIR}" \
build-system/prepare-build.sh Telegram distribution
"${BAZEL}" build Telegram/Telegram ${BAZEL_CACHE_FLAGS} ${BAZEL_COMMON_FLAGS} ${BAZEL_OPT_FLAGS} \
-c opt \
--ios_multi_cpus=armv7,arm64 \
--watchos_cpus=armv7k,arm64_32 \
--objc_enable_binary_stripping=true \
--features=dead_strip \
--apple_generate_dsym \
--output_groups=+dsyms \
--verbose_failures
bazel_prepare_development_build:
APP_VERSION="${APP_VERSION}" \
BAZEL_CACHE_DIR="${BAZEL_CACHE_DIR}" \

View File

@ -1628,13 +1628,8 @@ ios_application(
":AdditionalInfoPlist",
":TelegramInfoIconsPlist",
],
#app_icons = [
# ":DefaultAppIcon",
#],
resources = [
":AdditionalIcons",
#":DefaultAppIcon",
#":AppIcons",
],
frameworks = [
":MtProtoKitFramework",
@ -1652,10 +1647,10 @@ ios_application(
],
extensions = [
":ShareExtension",
":WidgetExtension",
":NotificationContentExtension",
":NotificationServiceExtension",
":IntentsExtension",
":WidgetExtension",
],
watch_application = ":TelegramWatchApp",
deps = [

View File

@ -52,43 +52,98 @@ extension PeersWidgetData {
static let previewData = PeersWidgetData.placeholder
}
struct AvatarItemView: View {
var accountPeerId: Int64
var peer: WidgetDataPeer
var itemSize: CGFloat
var body: some View {
return ZStack {
Image(uiImage: avatarImage(accountPeerId: accountPeerId, peer: peer, size: CGSize(width: itemSize, height: itemSize)))
if let badge = peer.badge, badge.count > 0 {
Text("\(badge.count)")
.font(Font.system(size: 16.0))
.multilineTextAlignment(.center)
.foregroundColor(.white)
.padding(.horizontal, 4.0)
.background(
RoundedRectangle(cornerRadius: 10)
.fill(badge.isMuted ? Color.gray : Color.red)
.frame(minWidth: 20, idealWidth: 20, maxWidth: .infinity, minHeight: 20, idealHeight: 20, maxHeight: 20.0, alignment: .center)
)
.position(x: floor(0.84 * itemSize), y: floor(0.16 * itemSize))
}
}
}
}
struct WidgetView: View {
@Environment(\.widgetFamily) private var widgetFamily
let data: PeersWidgetData
func placeholder(geometry: GeometryProxy) -> some View {
let defaultItemSize: CGFloat = 60.0
let defaultPaddingFraction: CGFloat = 0.36
let rowCount = Int(round(geometry.size.width / (defaultItemSize * (1.0 + defaultPaddingFraction))))
let itemSize = floor(geometry.size.width / (CGFloat(rowCount) + defaultPaddingFraction * CGFloat(rowCount - 1)))
let columnCount = Int(round(geometry.size.width / (defaultItemSize * (1.0 + defaultPaddingFraction))))
let itemSize = floor(geometry.size.width / (CGFloat(columnCount) + defaultPaddingFraction * CGFloat(columnCount - 1)))
let firstRowY = itemSize / 2.0
let secondRowY = itemSize / 2.0 + geometry.size.height - itemSize
return ZStack {
ForEach(0 ..< rowCount * 2, content: { i in
return Circle().frame(width: itemSize, height: itemSize).position(x: itemSize / 2.0 + floor(CGFloat(i % rowCount) * itemSize * (1.0 + defaultPaddingFraction)), y: i / rowCount == 0 ? firstRowY : secondRowY).foregroundColor(.gray)
ForEach(0 ..< columnCount * 2, content: { i in
return Circle().frame(width: itemSize, height: itemSize).position(x: itemSize / 2.0 + floor(CGFloat(i % columnCount) * itemSize * (1.0 + defaultPaddingFraction)), y: i / columnCount == 0 ? firstRowY : secondRowY).foregroundColor(.gray)
})
}
}
private func linkForPeer(id: Int64) -> String {
switch self.widgetFamily {
case .systemSmall:
return "\(buildConfig.appSpecificUrlScheme)://"
default:
return "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(id)"
}
}
func peersView(geometry: GeometryProxy, peers: WidgetDataPeers) -> some View {
let defaultItemSize: CGFloat = 60.0
let defaultPaddingFraction: CGFloat = 0.36
let rowCount = Int(round(geometry.size.width / (defaultItemSize * (1.0 + defaultPaddingFraction))))
let itemSize = floor(geometry.size.width / (CGFloat(rowCount) + defaultPaddingFraction * CGFloat(rowCount - 1)))
let rowCount: Int
let rowHeight: CGFloat
let topOffset: CGFloat
switch self.widgetFamily {
case .systemLarge:
rowCount = 4
rowHeight = 88.0
topOffset = 12.0
default:
rowCount = 2
rowHeight = 76.0
topOffset = 0.0
}
let columnCount = Int(round(geometry.size.width / (defaultItemSize * (1.0 + defaultPaddingFraction))))
let itemSize = floor(geometry.size.width / (CGFloat(columnCount) + defaultPaddingFraction * CGFloat(columnCount - 1)))
let firstRowY = itemSize / 2.0
let secondRowY = itemSize / 2.0 + geometry.size.height - itemSize
let rowOffset: [CGFloat] = [
topOffset + itemSize / 2.0,
topOffset + itemSize / 2.0 + rowHeight,
topOffset + itemSize / 2.0 + rowHeight * 2,
topOffset + itemSize / 2.0 + rowHeight * 3,
]
return ZStack {
ForEach(0 ..< min(peers.peers.count, rowCount * 2), content: { i in
Link(destination: URL(string: "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(peers.peers[i].id)")!, label: {
Image(uiImage: avatarImage(accountPeerId: peers.accountPeerId, peer: peers.peers[i], size: CGSize(width: itemSize, height: itemSize)))
.frame(width: itemSize, height: itemSize)
ForEach(0 ..< min(peers.peers.count, columnCount * rowCount), content: { i in
Link(destination: URL(string: linkForPeer(id: peers.peers[i].id))!, label: {
AvatarItemView(
accountPeerId: peers.accountPeerId,
peer: peers.peers[i],
itemSize: itemSize
).frame(width: itemSize, height: itemSize)
}).frame(width: itemSize, height: itemSize)
.position(x: itemSize / 2.0 + floor(CGFloat(i % rowCount) * itemSize * (1.0 + defaultPaddingFraction)), y: i / rowCount == 0 ? firstRowY : secondRowY)
.position(x: itemSize / 2.0 + floor(CGFloat(i % columnCount) * itemSize * (1.0 + defaultPaddingFraction)), y: rowOffset[i / columnCount])
})
}
}
@ -214,7 +269,7 @@ struct Static_Widget: Widget {
WidgetView(data: getWidgetData())
}
)
.supportedFamilies([.systemMedium])
.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
.configurationDisplayName(presentationData.widgetGalleryTitle)
.description(presentationData.widgetGalleryDescription)
}

View File

@ -1 +1 @@
3.4.1
3.7.0

View File

@ -23,12 +23,62 @@ final class WidgetDataContext {
guard let account = account else {
return .single(.notAuthorized)
}
return recentPeers(account: account)
enum RecentPeers {
struct Unread {
var count: Int32
var isMuted: Bool
}
case disabled
case peers(peers: [Peer], unread: [PeerId: Unread])
}
let recent: Signal<RecentPeers, NoError> = recentPeers(account: account)
|> mapToSignal { recent -> Signal<RecentPeers, NoError> in
switch recent {
case .disabled:
return .single(.disabled)
case let .peers(peers):
return combineLatest(queue: .mainQueue(), peers.filter { !$0.isDeleted }.map { account.postbox.peerView(id: $0.id)}) |> mapToSignal { peerViews -> Signal<RecentPeers, NoError> in
return account.postbox.unreadMessageCountsView(items: peerViews.map {
.peer($0.peerId)
})
|> map { values -> RecentPeers in
var peers: [Peer] = []
var unread: [PeerId: RecentPeers.Unread] = [:]
for peerView in peerViews {
if let peer = peerViewMainPeer(peerView) {
var isMuted: Bool = false
if let notificationSettings = peerView.notificationSettings as? TelegramPeerNotificationSettings {
switch notificationSettings.muteState {
case .muted:
isMuted = true
default:
break
}
}
let unreadCount = values.count(for: .peer(peerView.peerId))
if let unreadCount = unreadCount, unreadCount > 0 {
unread[peerView.peerId] = RecentPeers.Unread(count: Int32(unreadCount), isMuted: isMuted)
}
peers.append(peer)
}
}
return .peers(peers: peers, unread: unread)
}
}
}
}
return recent
|> map { result -> WidgetData in
switch result {
case .disabled:
return .disabled
case let .peers(peers):
case let .peers(peers, unread):
return .peers(WidgetDataPeers(accountPeerId: account.peerId.toInt64(), peers: peers.compactMap { peer -> WidgetDataPeer? in
guard let user = peer as? TelegramUser else {
return nil
@ -46,12 +96,21 @@ final class WidgetDataContext {
name = phone
}
var badge: WidgetDataPeer.Badge?
if let unreadValue = unread[peer.id], unreadValue.count > 0 {
badge = WidgetDataPeer.Badge(
count: Int(unreadValue.count),
isMuted: unreadValue.isMuted
)
}
return WidgetDataPeer(id: user.id.toInt64(), name: name, lastName: lastName, letters: user.displayLetters, avatarPath: smallestImageRepresentation(user.photo).flatMap { representation in
return account.postbox.mediaBox.resourcePath(representation.resource)
})
}, badge: badge)
}))
}
}
|> distinctUntilChanged
}).start(next: { widgetData in
let path = basePath + "/widget-data"
if let data = try? JSONEncoder().encode(widgetData) {

View File

@ -5,18 +5,30 @@ public enum WidgetCodingError: Error {
}
public struct WidgetDataPeer: Codable, Equatable {
public struct Badge: Codable, Equatable {
public var count: Int
public var isMuted: Bool
public init(count: Int, isMuted: Bool) {
self.count = count
self.isMuted = isMuted
}
}
public var id: Int64
public var name: String
public var lastName: String?
public var letters: [String]
public var avatarPath: String?
public var badge: Badge?
public init(id: Int64, name: String, lastName: String?, letters: [String], avatarPath: String?) {
public init(id: Int64, name: String, lastName: String?, letters: [String], avatarPath: String?, badge: Badge?) {
self.id = id
self.name = name
self.lastName = lastName
self.letters = letters
self.avatarPath = avatarPath
self.badge = badge
}
}

View File

@ -127,9 +127,19 @@ genrule(
],
cmd_bash =
"""
SOURCE_PATH="submodules/ffmpeg/Sources/FFMpeg"
#random:2
BUILD_DIR="$(RULEDIR)/build"
set -x
ABS_RULEDIR="$$(pwd)/$(RULEDIR)"
echo "ABS_RULEDIR=$$ABS_RULEDIR"
SOURCE_PATH="$$ABS_RULEDIR/FFMpegSource"
rm -rf "$$SOURCE_PATH"
cp -R "submodules/ffmpeg/Sources/FFMpeg" "$$SOURCE_PATH"
BUILD_DIR="$$ABS_RULEDIR/build"
rm -rf "$$BUILD_DIR"
mkdir -p "$$BUILD_DIR"
YASM_DIR="$$BUILD_DIR/yasm"
@ -167,6 +177,9 @@ genrule(
cc_library(
name = "ffmpeg_lib",
srcs = ffmpeg_libs,
visibility = [
"//visibility:public",
]
)
objc_library(

View File

@ -120,6 +120,7 @@ then
do
echo "building $ARCH..."
mkdir -p "$SCRATCH/$ARCH"
pushd "$SCRATCH/$ARCH"
LIBOPUS_PATH="$SOURCE_DIR/libopus"
@ -178,6 +179,8 @@ then
CORE_COUNT=`sysctl -n hw.logicalcpu`
make -j$CORE_COUNT install $EXPORT || exit 1
popd
done
fi

View File

@ -27,7 +27,7 @@ genrule(
"""
OUT_DIR="ios"
if [ "$(TARGET_CPU)" == "ios_armv7" ]; then
BUILD_ARCH="armv7"
BUILD_ARCH="arm"
elif [ "$(TARGET_CPU)" == "ios_arm64" ]; then
BUILD_ARCH="arm64"
elif [ "$(TARGET_CPU)" == "ios_x86_64" ]; then
@ -37,7 +37,7 @@ genrule(
echo "Unsupported architecture $(TARGET_CPU)"
fi
BUILD_DIR="$(RULEDIR)/$$BUILD_ARCH"
#rm -rf "$$BUILD_DIR"
rm -rf "$$BUILD_DIR"
mkdir -p "$$BUILD_DIR"
SOURCE_PATH="third-party/webrtc/webrtc-ios/src"