Compare commits

...

17 Commits

Author SHA1 Message Date
Arkadiusz Fal
84db321b70 Update CHANGELOG 2023-04-24 13:00:57 +02:00
Arkadiusz Fal
10c1fbd503 Bump build number to 142 2023-04-24 12:58:24 +02:00
Arkadiusz Fal
c7b64c973d Fix player overlay opacity 2023-04-24 12:57:31 +02:00
Arkadiusz Fal
40097de1fd Fix localizations 2023-04-24 12:57:20 +02:00
Arkadiusz Fal
8eac32078b Fix placeholders 2023-04-24 12:57:06 +02:00
Arkadiusz Fal
8271feb77a Fix actions actionable 2023-04-24 12:16:45 +02:00
Arkadiusz Fal
77fde219e0 Fix chapters layout 2023-04-24 12:16:45 +02:00
Arkadiusz Fal
383bb32215 Merge pull request #434 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2023-04-24 12:16:28 +02:00
joaooliva
6a4f031cca Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (496 of 496 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/pt_BR/
2023-04-23 23:03:50 +02:00
Arkadiusz Fal
1e65f6d807 Bump build number to 141 2023-04-23 14:11:59 +02:00
Arkadiusz Fal
b4d5322ac6 Update CHANGELOG 2023-04-23 14:11:39 +02:00
Arkadiusz Fal
a5bfabed0c Fix clipped controls
Fix #431
2023-04-23 14:10:44 +02:00
Arkadiusz Fal
f6569db418 Fix crash 2023-04-23 14:10:44 +02:00
Arkadiusz Fal
9cc9c74f97 Merge pull request #433 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2023-04-23 14:10:39 +02:00
mere
5dbc211c95 Translated using Weblate (Romanian)
Currently translated at 100.0% (496 of 496 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/ro/
2023-04-23 14:10:20 +02:00
joaooliva
03b27280f4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.5% (494 of 496 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/pt_BR/
2023-04-23 14:10:20 +02:00
Arkadiusz Fal
913ac37991 Translated using Weblate (Polish)
Currently translated at 100.0% (496 of 496 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/pl/
2023-04-23 14:10:20 +02:00
13 changed files with 121 additions and 48 deletions

View File

@@ -1,4 +1,8 @@
## Build 140
## Build 142
* Fixed chapters layout when there are no images available
* Other minor fixes
### Previous Builds
* Improved player layout
- Video titles can now span multiple lines for readability
- Channel details and video dates/likes/dislikes displayed below title
@@ -22,14 +26,6 @@
* Changed layout to vertical and added configuration buttons for remaining views on tvOS (Popular, Trending, Playlists, Search)
* Simplified animation on closing player
* Removed "Watch Next" view
* Fixed reported crashes
* Fixed issues with opening channel URLs
* Fixed issue where account username would get truncated
* Fixed issue where marking all feed videos as watched/unwatched would not refresh actions in Subscriptions menu
* Fixed issue where closing channel would require multiple back presses
* Other minor changes and improvements
### Previous Builds
* Added pagination/infinite scroll for channel contents (Invidious and Piped)
* Added support for channel tabs for Invidious (previously available only for Piped)
* Added filter to hide Short videos, available via view menu/toolbar button
@@ -37,4 +33,9 @@
* Added browsing setting: "Show unwatched feed badges"
* Fixed reported crashes
* Fixed issue where channels in Favorites would not refresh contents
* Fixed issues with opening channel URLs
* Fixed issue where account username would get truncated
* Fixed issue where marking all feed videos as watched/unwatched would not refresh actions in Subscriptions menu
* Fixed issue where closing channel would require multiple back presses
* Fixed issue with controls being clipped (regression from build 140)
* Other minor changes and improvements

View File

@@ -10,7 +10,7 @@ extension PlayerModel {
}
var videoForDisplay: Video? {
videoBeingOpened ?? (closing ? nil : currentVideo)
videoBeingOpened ?? currentVideo
}
func play(_ videos: [Video], shuffling: Bool = false) {

View File

@@ -295,8 +295,8 @@ struct Video: Identifiable, Equatable, Hashable {
}
var localStreamIsRemoteURL: Bool {
guard let localStream else { return false }
return !localStream.localURL.isFileURL
guard let url = localStream?.localURL else { return false }
return url.isFileURL
}
var localStreamIsDirectory: Bool {

View File

@@ -30,10 +30,16 @@ struct PlayerOverlayModifier: ViewModifier {
}
}
.animation(.easeIn, value: player.videoForDisplay)
.opacity(player.videoForDisplay == nil ? 0 : 1)
.opacity(opacity)
}
}
var opacity: Double {
guard !player.closing else { return 0 }
return player.videoForDisplay == nil ? 0 : 1
}
var maxWidth: Double {
playerBarMaxWidth == "0" ? .infinity : (Double(playerBarMaxWidth) ?? 600)
}

View File

@@ -9,6 +9,10 @@ struct ChaptersView: View {
player.videoForDisplay?.chapters ?? []
}
var chaptersHaveImages: Bool {
chapters.allSatisfy { $0.image != nil }
}
var body: some View {
if !chapters.isEmpty {
#if os(tvOS)
@@ -22,15 +26,24 @@ struct ChaptersView: View {
}
.listStyle(.plain)
#else
ScrollView(.horizontal) {
LazyHStack(spacing: 20) {
if chaptersHaveImages {
ScrollView(.horizontal) {
LazyHStack(spacing: 20) {
ForEach(chapters) { chapter in
ChapterView(chapter: chapter)
}
}
.padding(.horizontal, 15)
}
.frame(minHeight: ChapterView.thumbnailHeight + 100)
} else {
Section {
ForEach(chapters) { chapter in
ChapterView(chapter: chapter)
}
}
.padding(.horizontal, 15)
.padding(.horizontal)
}
.frame(minHeight: ChapterView.thumbnailHeight + 100)
#endif
} else {
NoCommentsView(text: "No chapters information available".localized(), systemImage: "xmark.circle.fill")

View File

@@ -96,8 +96,16 @@ struct VideoActions: View {
return !(video?.isLocal ?? true) && accounts.signedIn && accounts.app.supportsSubscriptions
case .settings:
return video != nil
case .fullScreen:
return video != nil
case .pip:
return video != nil
case .advanceToNextItem:
return player.isAdvanceToNextItemAvailable
case .restart:
return video != nil
case .musicMode:
return video != nil
default:
return true
}

View File

@@ -96,7 +96,7 @@ struct VideoDetails: View {
if let views = video?.viewsCount {
Text(views)
} else if model.videoBeingOpened != nil {
Text("1,234M").redacted(reason: .placeholder)
Text("123").redacted(reason: .placeholder)
}
if model.videoBeingOpened != nil || video?.likesCount != nil {
@@ -106,7 +106,7 @@ struct VideoDetails: View {
if let likes = video?.likesCount, !likes.isEmpty {
Text(likes)
} else {
Text("1,234M").redacted(reason: .placeholder)
Text("123").redacted(reason: .placeholder)
}
if enableReturnYouTubeDislike {
@@ -117,7 +117,7 @@ struct VideoDetails: View {
if let dislikes = video?.dislikesCount, !dislikes.isEmpty {
Text(dislikes)
} else {
Text("1,234M").redacted(reason: .placeholder)
Text("123").redacted(reason: .placeholder)
}
}
}
@@ -134,7 +134,7 @@ struct VideoDetails: View {
if let published = video.publishedDate {
Text(published)
} else {
Text("1 century ago").redacted(reason: .placeholder)
Text("1 wk ago").redacted(reason: .placeholder)
}
}
}

View File

@@ -430,7 +430,6 @@ struct VideoPlayerView: View {
}
)
#endif
.ignoresSafeArea(edges: .horizontal)
}
var fullScreenPlayer: Bool {

View File

@@ -10,7 +10,7 @@ struct ListingStyleButtons: View {
Button {
listingStyle = listingStyle.next()
} label: {
Label(listingStyle.rawValue.capitalized, systemImage: listingStyle.systemImage)
Label(listingStyle.rawValue.capitalized.localized(), systemImage: listingStyle.systemImage)
#if os(tvOS)
.font(.caption)
.imageScale(.small)
@@ -25,7 +25,7 @@ struct ListingStyleButtons: View {
Button {
listingStyle = style
} label: {
Label(style.rawValue.capitalized, systemImage: style.systemImage)
Label(style.rawValue.capitalized.localized(), systemImage: style.systemImage)
}
}
}

View File

@@ -260,7 +260,7 @@
"Reset search filters" = "Zresetuj filtry";
"Reset watched status when playing again" = "Resetuj status odtwarzania za każdym razem";
"Resolution" = "Rozdzielczość";
"Restart" = "Od początku";
"Restart" = "Początek";
"Restart the app to apply the settings above." = "Zrestartuj aplikację aby zastosować powyższe ustawienia.";
"Restart/Play next" = "Od początku/Następny";
"Restore default profiles..." = "Przywróć domyślne profile…";

View File

@@ -1,6 +1,6 @@
"Shuffle All" = "Randomizar tudo";
"Shuffle All" = "Embaralhar tudo";
"Regular Size" = "Tamanho Normal";
"%@ subscribers" = "%@ inscritos";
" subscribers" = " inscritos";
@@ -364,7 +364,7 @@
"Categories to Skip" = "Categorias para Pular";
"Restart the app to apply the settings above." = "Reinicie o app para aplicar os ajustes acima.";
"Related" = "Relacionados";
"Shuffle" = "Randomizar";
"Shuffle" = "Embaralhar";
"Could not refresh Trending" = "Não pôde atualizar Em Alta";
"Add Account..." = "Adicionar Conta…";
"Add profile..." = "Adicionar perfil…";
@@ -540,3 +540,26 @@
"Subscribe/Unsubscribe" = "Inscrever/Desinscrever";
"Are you sure you want to clear cache?" = "Tem certeza que deseja limpar o cache?";
"Gesture settings control skipping interval for double click on left/right side of the player. Changing system controls settings requires restart." = "As configurações de gesto controlam o intervalo de pulo para o clique duplo no lado direito/esquerdo do player. Mudar as configurações dos controles do sistema requer reinício.";
"Loop one" = "Um em loop";
"List" = "Lista";
"Do nothing" = "Fazer nada";
"Toggle size" = "Alternar tamanho";
"Toggle player" = "Alternar player";
"Show Next in Queue" = "Mostrar Próximo na Fila";
"Feed" = "Feed";
"Show toggle watch status button" = "Mostrar botão de mudar status de assistir";
"Queue - shuffled" = "Fila - embaralhado";
"Playback Settings" = "Configurações de Playback";
"Fullscreen" = "Tela cheia";
"Lock" = "Travar";
"Description" = "Descrição";
"Mark all as watched" = "Marcar todos como vistos";
"Next in Queue" = "Próximo na Fila";
"Cells" = "Células";
"Autoplay next" = "Tocar automaticamente próximo";
"Open channel" = "Abrir canal";
"Inspector" = "Inspetor";
"Mark all as unwatched" = "Marcar todos como não vistos";
"Open video description expanded" = "Abrir descrição do vídeo expandida";
"Replay" = "Replay";
"Stream" = "Stream";

View File

@@ -104,7 +104,7 @@
"Play Last" = "Reda ultimul";
"Player" = "Player";
"Playlist" = "Playlist";
"Popular" = "Popular";
"Popular" = "Populare";
"Queue" = "Coadă";
"Replies" = "Răspunsuri";
"Search..." = "Căutare...";
@@ -265,7 +265,7 @@
"Rate" = "Rată";
/* Video sort order in search */
"Rating" = "Rating";
"Rating" = "Evaluare";
"Refresh" = "Reîmprospăta";
"Proxy videos" = "Videoclipuri Proxy";
"Public Manifest" = "Manifest public";
@@ -314,7 +314,7 @@
"Show anonymous accounts" = "Afișați conturi anonime";
"Show channel name" = "Afișează numele canalului";
"Show video length" = "Afișează durata videoclipului";
"Shuffle" = "Shuffle";
"Shuffle" = "Amestecă";
"Show keywords" = "Afișați cuvintele cheie";
"Sort" = "Fel";
@@ -437,7 +437,7 @@
"Show Open Videos quick actions" = "Afișați acțiuni rapide pentru videoclipuri deschise";
"Show Favorites" = "Afișează favoritele";
"Home" = "Acasă";
"Share files from Finder on a Mac\nor iTunes on Windows" = "Partajați fișiere din Finder pe un Mac sau iTunes pe Windows";
"Share files from Finder on a Mac\nor iTunes on Windows" = "Partajează fișierele din Finder pe un Mac\nsau iTunes pe Windows";
"Show Home" = "Arată Acasă";
"Pages toolbar position" = "Poziția barei de instrumente a paginilor";
"URL to Open" = "URL-ul pentru a deschide";
@@ -465,7 +465,7 @@
"Right" = "Dreapta";
"Channels" = "Canale";
"Open Files" = "Deschideți Fișiere";
"Share" = "Share";
"Share" = "Trimite";
"Show icons and text when space permits" = "Afișați pictograme și text atunci când spațiul permite";
"Left" = "Stânga";
"Format" = "Format";
@@ -540,3 +540,26 @@
"Show cache status" = "Afișați starea cache-ului";
"Maximum feed items" = "Numărul maxim de articole de feed";
"Are you sure you want to clear cache?" = "Sigur doriți să ștergeți memoria cache?";
"List" = "Listă";
"Cells" = "Celule";
"Toggle size" = "Comutare dimensiune";
"Toggle player" = "Comutați player-ul";
"Do nothing" = "Nu face nimic";
"Show Next in Queue" = "Afișează următorul din coadă";
"Feed" = "Abonări";
"Show toggle watch status button" = "Afișează butonul de comutare a statului de urmărire";
"Next in Queue" = "Următorul în coadă";
"Open channel" = "Deschide canalul";
"Inspector" = "Inspector";
"Open video description expanded" = "Deschide descrierea videoclipului extinsă";
"Mark all as unwatched" = "Marcați totul ca nevizionat";
"Mark all as watched" = "Marcați toate ca vizionate";
"Queue - shuffled" = "Coadă - amestecată";
"Playback Settings" = "Setări de redare";
"Replay" = "Reluare";
"Fullscreen" = "Ecran complet";
"Lock" = "Lacăt";
"Description" = "Descriere";
"Loop one" = "Buclă unu";
"Autoplay next" = "Urmează redarea automată";
"Stream" = "Flux";

View File

@@ -3972,7 +3972,7 @@
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
@@ -4003,7 +4003,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -4034,7 +4034,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -4054,7 +4054,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -4214,7 +4214,7 @@
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -4267,7 +4267,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
@@ -4319,7 +4319,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEAD_CODE_STRIPPING = YES;
ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES;
@@ -4361,7 +4361,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEAD_CODE_STRIPPING = YES;
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
ENABLE_APP_SANDBOX = YES;
@@ -4399,7 +4399,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4423,7 +4423,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4449,7 +4449,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4474,7 +4474,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4500,7 +4500,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEVELOPMENT_ASSET_PATHS = "";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -4540,7 +4540,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
DEVELOPMENT_ASSET_PATHS = "";
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
@@ -4581,7 +4581,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -4605,7 +4605,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 142;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",