Skip to content

Commit 9fbae97

Browse files
authored
Merge pull request #5 from onkernel/sync/upstream-20250926
Sync Upstream
2 parents 826e0c9 + a9d0e9d commit 9fbae97

File tree

26 files changed

+810
-429
lines changed

26 files changed

+810
-429
lines changed

apps/chromium/Dockerfile

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/base:latest
22
FROM $BASE_IMAGE
33

4+
COPY ./widevinecdm.sh /widevine.sh
5+
46
#
57
# install neko chromium
68
RUN set -eux; \
@@ -12,19 +14,10 @@ RUN set -eux; \
1214
CHROMIUM_DIR="/usr/lib/chromium"; \
1315
ARCH=$(dpkg --print-architecture); \
1416
if [ "${ARCH}" = "amd64" ]; then \
15-
# https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/chromeos-lacros-arm64-squash-zstd-120.0.6098.0
16-
apt-get install -y --no-install-recommends unzip; \
17-
WIDEVINE_ARCH="x64"; \
18-
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
19-
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-${WIDEVINE_ARCH}.zip"; \
20-
mkdir -p "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_${WIDEVINE_ARCH}"; \
21-
unzip -p /tmp/widevine.zip LICENSE.txt > "${CHROMIUM_DIR}/WidevineCdm/LICENSE"; \
22-
unzip -p /tmp/widevine.zip manifest.json > "${CHROMIUM_DIR}/WidevineCdm/manifest.json"; \
23-
unzip -p /tmp/widevine.zip libwidevinecdm.so > "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_${WIDEVINE_ARCH}/libwidevinecdm.so"; \
24-
find "${CHROMIUM_DIR}/WidevineCdm" -type d -exec chmod 0755 '{}' \;; \
25-
find "${CHROMIUM_DIR}/WidevineCdm" -type f -exec chmod 0644 '{}' \;; \
26-
rm /tmp/widevine.zip; \
27-
apt-get --purge autoremove -y unzip; \
17+
apt-get install -y --no-install-recommends xz-utils; \
18+
./widevine.sh "${CHROMIUM_DIR}/WidevineCdm"; \
19+
rm -f /widevine.sh; \
20+
apt-get --purge autoremove -y xz-utils; \
2821
else \
2922
echo "Widevine is not supported on ${ARCH}"; \
3023
fi; \

apps/chromium/Dockerfile.nvidia

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
ARG BASE_IMAGE=ghcr.io/m1k1o/neko/nvidia-base:latest
22
FROM $BASE_IMAGE
33

4+
COPY ./widevinecdm.sh /widevine.sh
5+
46
#
57
# install neko chromium
68
RUN set -eux; \
@@ -10,22 +12,15 @@ RUN set -eux; \
1012
# and nvidia base is ubuntu not debian
1113
add-apt-repository ppa:system76/pop; \
1214
apt-get update; \
13-
apt-get install -y --no-install-recommends unzip chromium openbox; \
15+
apt-get install -y --no-install-recommends xz-utils chromium openbox; \
1416
#
1517
# install widevine module
1618
CHROMIUM_DIR="/usr/lib/chromium"; \
17-
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
18-
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-x64.zip"; \
19-
mkdir -p "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_x64"; \
20-
unzip -p /tmp/widevine.zip LICENSE.txt > "${CHROMIUM_DIR}/WidevineCdm/LICENSE"; \
21-
unzip -p /tmp/widevine.zip manifest.json > "${CHROMIUM_DIR}/WidevineCdm/manifest.json"; \
22-
unzip -p /tmp/widevine.zip libwidevinecdm.so > "${CHROMIUM_DIR}/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"; \
23-
find "${CHROMIUM_DIR}/WidevineCdm" -type d -exec chmod 0755 '{}' \;; \
24-
find "${CHROMIUM_DIR}/WidevineCdm" -type f -exec chmod 0644 '{}' \;; \
25-
rm /tmp/widevine.zip; \
19+
./widevine.sh "${CHROMIUM_DIR}/WidevineCdm"; \
20+
rm -f /widevine.sh; \
2621
#
2722
# clean up
28-
apt-get --purge autoremove -y unzip; \
23+
apt-get --purge autoremove -y xz-utils; \
2924
apt-get clean -y; \
3025
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
3126

apps/chromium/widevinecdm.sh

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
TARGET_DIR="$(realpath "$1")"
5+
if [ -z "$TARGET_DIR" ]; then
6+
echo "Usage: $0 /path/to/install/WidevineCdm"
7+
exit 1
8+
fi
9+
10+
TMPDIR=$(mktemp -d)
11+
cd "$TMPDIR"
12+
13+
function cleanup {
14+
rm -rf "$TMPDIR"
15+
}
16+
trap cleanup EXIT
17+
18+
# Fetch manifest and extract URL
19+
URL=$(python3 -c "
20+
import json, urllib.request
21+
data = json.load(urllib.request.urlopen('https://raw.githubusercontent.com/mozilla/gecko-dev/master/toolkit/content/gmp-sources/widevinecdm.json'))
22+
for v in data['vendors'].values():
23+
for k, p in v['platforms'].items():
24+
if 'Linux_x86_64-gcc3' in k:
25+
print(p['fileUrl'])
26+
break
27+
")
28+
29+
# Download CRX
30+
curl -L -o widevinecdm.crx "$URL"
31+
32+
# Install go-crx3
33+
echo "Fetching latest go-crx3 version..."
34+
VERSION=$(curl -s https://api.github.com/repos/m1k1o/go-crx3/releases/latest | grep 'tag_name' | cut -d '"' -f4)
35+
ARTIFACT="go-crx3_${VERSION#v}_linux_amd64.tar.gz"
36+
URL="https://github.com/m1k1o/go-crx3/releases/download/${VERSION}/${ARTIFACT}"
37+
echo "Downloading $URL"
38+
curl -L -o "$ARTIFACT" "$URL"
39+
tar -xzf "$ARTIFACT"
40+
41+
# Unpack with go-crx3
42+
./go-crx3 unpack widevinecdm.crx
43+
mkdir -p "$TARGET_DIR"
44+
cp -ar widevinecdm/* "$TARGET_DIR"

apps/ungoogled-chromium/Dockerfile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ FROM $BASE_IMAGE
33

44
ARG API_URL="https://api.github.com/repos/macchrome/linchrome/releases/latest"
55

6+
COPY ./widevinecdm.sh /widevine.sh
7+
68
#
79
# install custom chromium build from woolyss with support for hevc/x265
810
SHELL ["/bin/bash", "-c"]
@@ -21,11 +23,9 @@ RUN set -eux; apt-get update; \
2123
chmod 4755 /usr/lib/chromium/chrome-sandbox; \
2224
#
2325
# install widevine module
24-
WIDEVINE_VERSION=$(wget --quiet -O - https://dl.google.com/widevine-cdm/versions.txt | sort --version-sort | tail -n 1); \
25-
wget -O /tmp/widevine.zip "https://dl.google.com/widevine-cdm/${WIDEVINE_VERSION}-linux-x64.zip"; \
26-
unzip -p /tmp/widevine.zip libwidevinecdm.so > /usr/lib/chromium/libwidevinecdm.so; \
27-
chmod 644 /usr/lib/chromium/libwidevinecdm.so; \
28-
rm /tmp/widevine.zip; \
26+
CHROMIUM_DIR="/usr/lib/chromium"; \
27+
./widevine.sh "${CHROMIUM_DIR}/WidevineCdm"; \
28+
rm -f /widevine.sh; \
2929
#
3030
# install latest version of uBlock Origin and SponsorBlock for YouTube
3131
CHROMIUM_VERSION="$(wget -O - "${API_URL}" 2>/dev/null | jq -r ".tag_name" | sed -e 's/v//' -e 's/-.*//')"; \

apps/ungoogled-chromium/preferences.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"homepage": "http://www.google.com",
2+
"homepage": "https://duckduckgo.com/",
33
"homepage_is_newtabpage": false,
44
"first_run_tabs": [
5-
"https://www.google.com/_/chrome/newtab?ie=UTF-8"
5+
"https://duckduckgo.com/"
66
],
77
"custom_links": {
88
"initialized": true,
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
TARGET_DIR="$(realpath "$1")"
5+
if [ -z "$TARGET_DIR" ]; then
6+
echo "Usage: $0 /path/to/install/WidevineCdm"
7+
exit 1
8+
fi
9+
10+
TMPDIR=$(mktemp -d)
11+
cd "$TMPDIR"
12+
13+
function cleanup {
14+
rm -rf "$TMPDIR"
15+
}
16+
trap cleanup EXIT
17+
18+
# Fetch manifest and extract URL
19+
URL=$(python3 -c "
20+
import json, urllib.request
21+
data = json.load(urllib.request.urlopen('https://raw.githubusercontent.com/mozilla/gecko-dev/master/toolkit/content/gmp-sources/widevinecdm.json'))
22+
for v in data['vendors'].values():
23+
for k, p in v['platforms'].items():
24+
if 'Linux_x86_64-gcc3' in k:
25+
print(p['fileUrl'])
26+
break
27+
")
28+
29+
# Download CRX
30+
curl -L -o widevinecdm.crx "$URL"
31+
32+
# Install go-crx3
33+
echo "Fetching latest go-crx3 version..."
34+
VERSION=$(curl -s https://api.github.com/repos/m1k1o/go-crx3/releases/latest | grep 'tag_name' | cut -d '"' -f4)
35+
ARTIFACT="go-crx3_${VERSION#v}_linux_amd64.tar.gz"
36+
URL="https://github.com/m1k1o/go-crx3/releases/download/${VERSION}/${ARTIFACT}"
37+
echo "Downloading $URL"
38+
curl -L -o "$ARTIFACT" "$URL"
39+
tar -xzf "$ARTIFACT"
40+
41+
# Unpack with go-crx3
42+
./go-crx3 unpack widevinecdm.crx
43+
mkdir -p "$TARGET_DIR"
44+
cp -ar widevinecdm/* "$TARGET_DIR"

client/src/components/video.vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
@touchmove.stop.prevent="onTouchHandler"
2727
@touchstart.stop.prevent="onTouchHandler"
2828
@touchend.stop.prevent="onTouchHandler"
29+
@compositionstart="onCompositionStartHandler"
30+
@compositionend="onCompositionEndHandler"
2931
/>
3032
<div v-if="!playing && playable" class="player-overlay" @click.stop.prevent="playAndUnmute">
3133
<i class="fas fa-play-circle" />
@@ -250,6 +252,7 @@
250252
private focused = false
251253
private fullscreen = false
252254
private mutedOverlay = true
255+
private lastTextAreaValue = ''
253256
254257
get admin() {
255258
return this.$accessor.user.admin
@@ -756,6 +759,14 @@
756759
first.target.dispatchEvent(simulatedEvent)
757760
}
758761
762+
onCompositionStartHandler() {
763+
this.lastTextAreaValue = this._overlay.value
764+
}
765+
766+
onCompositionEndHandler() {
767+
this._overlay.value = this.lastTextAreaValue
768+
}
769+
759770
isMouseDown = false
760771
761772
onMouseDown(e: MouseEvent) {

client/src/locale/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import * as cn from './zh-cn'
1212
import * as tw from './zh-tw'
1313
import * as ja from './ja-jp'
1414
import * as id from './id-id'
15+
import * as pl from './pl-pl'
1516

1617
export const messages = {
1718
en,
@@ -28,4 +29,5 @@ export const messages = {
2829
tw,
2930
ja,
3031
id,
32+
pl,
3133
}

client/src/locale/pl-pl.ts

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
export const logout = 'Wyloguj się'
2+
export const unsupported = 'Ta przeglądarka nie obsługuje WebRTC'
3+
export const admin_loggedin = 'Jesteś zalogowany jako administrator'
4+
export const you = 'Ty'
5+
export const somebody = 'Ktoś'
6+
export const send_a_message = 'Wyślij wiadomość'
7+
8+
export const side = {
9+
chat: 'Czat',
10+
files: 'Pliki',
11+
settings: 'Ustawienia',
12+
}
13+
14+
export const connect = {
15+
login_title: 'Zaloguj się',
16+
invitation_title: 'Otrzymałeś zaproszenie do tego pokoju',
17+
displayname: 'Podaj swoją nazwę',
18+
password: 'Hasło',
19+
connect: 'Połącz',
20+
error: 'Błąd logowania',
21+
empty_displayname: 'Pole nazwy użytkownika nie może być puste.',
22+
}
23+
24+
export const context = {
25+
ignore: 'Ignoruj',
26+
unignore: 'Przestań ignorować',
27+
mute: 'Wycisz',
28+
unmute: 'Cofnij wyciszenie',
29+
release: 'Wymuś zwolnienie sterowania',
30+
take: 'Wymuś przejęcie sterowania',
31+
give: 'Przekaż sterowanie',
32+
kick: 'Wyrzuć',
33+
ban: 'Zbanuj IP',
34+
confirm: {
35+
kick_title: 'Wyrzucić {name}?',
36+
kick_text: 'Czy na pewno chcesz wyrzucić {name}?',
37+
ban_title: 'Zbanować {name}?',
38+
ban_text: 'Czy chcesz zbanować {name}? Aby cofnąć, musisz zrestartować serwer.',
39+
mute_title: 'Wyciszyć {name}?',
40+
mute_text: 'Czy na pewno chcesz wyciszyć {name}?',
41+
unmute_title: 'Cofnąć wyciszenie {name}?',
42+
unmute_text: 'Czy chcesz cofnąć wyciszenie {name}?',
43+
button_yes: 'Tak',
44+
button_cancel: 'Anuluj',
45+
},
46+
}
47+
48+
export const controls = {
49+
release: 'Zwolnij sterowanie',
50+
request: 'Poproś o sterowanie',
51+
lock: 'Zablokuj sterowanie',
52+
unlock: 'Odblokuj sterowanie',
53+
has: 'Masz sterowanie',
54+
hasnot: 'Nie masz sterowania',
55+
}
56+
57+
export const locks = {
58+
control: {
59+
lock: 'Zablokuj sterowanie (dla użytkowników)',
60+
unlock: 'Odblokuj sterowanie (dla użytkowników)',
61+
locked: 'Sterowanie zablokowane (dla użytkowników)',
62+
unlocked: 'Sterowanie odblokowane (dla użytkowników)',
63+
notif_locked: 'zablokował sterowanie dla użytkowników',
64+
notif_unlocked: 'odblokował sterowanie dla użytkowników',
65+
},
66+
login: {
67+
lock: 'Zablokuj pokój (dla użytkowników)',
68+
unlock: 'Odblokuj pokój (dla użytkowników)',
69+
locked: 'Pokój zablokowany (dla użytkowników)',
70+
unlocked: 'Pokój odblokowany (dla użytkowników)',
71+
notif_locked: 'zablokował pokój',
72+
notif_unlocked: 'odblokował pokój',
73+
},
74+
file_transfer: {
75+
lock: 'Zablokuj transfer plików (dla użytkowników)',
76+
unlock: 'Odblokuj transfer plików (dla użytkowników)',
77+
locked: 'Transfer plików zablokowany (dla użytkowników)',
78+
unlocked: 'Transfer plików odblokowany (dla użytkowników)',
79+
notif_locked: 'zablokował transfer plików',
80+
notif_unlocked: 'odblokował transfer plików',
81+
},
82+
}
83+
84+
export const setting = {
85+
scroll: 'Czułość przewijania',
86+
scroll_invert: 'Odwróć przewijanie',
87+
autoplay: 'Autoodtwarzanie wideo',
88+
ignore_emotes: 'Ignoruj emotki',
89+
chat_sound: 'Odtwarzaj dźwięk czatu',
90+
keyboard_layout: 'Układ klawiatury',
91+
broadcast_title: 'Transmisja na żywo',
92+
}
93+
94+
export const connection = {
95+
logged_out: 'Zostałeś wylogowany.',
96+
reconnecting: 'Ponowne łączenie...',
97+
connected: 'Połączono',
98+
disconnected: 'Rozłączono',
99+
kicked: 'Zostałeś usunięty z pokoju.',
100+
button_confirm: 'OK',
101+
}
102+
103+
export const notifications = {
104+
connected: '{name} dołączył',
105+
disconnected: '{name} opuścił',
106+
controls_taken: '{name} przejął sterowanie',
107+
controls_taken_force: 'przejął sterowanie siłą',
108+
controls_taken_steal: 'przejął sterowanie od {name}',
109+
controls_released: '{name} zwolnił sterowanie',
110+
controls_released_force: 'zwolnił sterowanie siłą',
111+
controls_released_steal: 'zwolnił sterowanie od {name}',
112+
controls_given: 'przekazał sterowanie {name}',
113+
controls_has: '{name} ma sterowanie',
114+
controls_has_alt: 'Ale poinformowałem osobę, że chciałeś je otrzymać',
115+
controls_requesting: '{name} prosi o sterowanie',
116+
resolution: 'zmienił rozdzielczość na {width}x{height}@{rate}',
117+
banned: 'zbanował {name}',
118+
kicked: 'wyrzucił {name}',
119+
muted: 'wyciszył {name}',
120+
unmuted: 'cofnął wyciszenie {name}',
121+
}
122+
123+
export const files = {
124+
downloads: 'Pobrane pliki',
125+
uploads: 'Wysyłane pliki',
126+
upload_here: 'Kliknij lub przeciągnij pliki tutaj, aby przesłać',
127+
}

0 commit comments

Comments
 (0)