1{ lib, ... }:
2let
3 ocrContent = "Feed";
4 videoFile = "test.webm";
5in
6{
7 name = "lomiri-mediaplayer-app-standalone";
8 meta.maintainers = lib.teams.lomiri.members;
9
10 nodes.machine =
11 { config, pkgs, ... }:
12 {
13 imports = [ ./common/x11.nix ];
14
15 services.xserver.enable = true;
16
17 environment = {
18 # Setup video
19 etc."${videoFile}".source =
20 pkgs.runCommand videoFile
21 {
22 nativeBuildInputs = with pkgs; [
23 ffmpeg # produce video for OCR
24 (imagemagick.override { ghostscriptSupport = true; }) # produce OCR-able image
25 ];
26 }
27 ''
28 magick -size 600x600 canvas:white -pointsize 20 -fill black -annotate +100+100 '${ocrContent}' output.png
29 ffmpeg -re -loop 1 -i output.png -c:v libvpx -b:v 200K -t 120 $out -loglevel fatal
30 '';
31 systemPackages = with pkgs.lomiri; [
32 suru-icon-theme
33 lomiri-mediaplayer-app
34 ];
35 variables = {
36 UITK_ICON_THEME = "suru";
37 };
38 };
39
40 i18n.supportedLocales = [ "all" ];
41
42 fonts = {
43 packages = with pkgs; [
44 # Intended font & helps with OCR
45 ubuntu-classic
46 ];
47 };
48 };
49
50 enableOCR = true;
51
52 testScript = ''
53 machine.wait_for_x()
54
55 with subtest("lomiri mediaplayer launches"):
56 machine.succeed("lomiri-mediaplayer-app >&2 &")
57 machine.wait_for_console_text("The name com.lomiri.content.dbus.Service was not provided")
58 machine.wait_for_console_text("The name com.lomiri.content.dbus.Service was not provided") # Emitted twice
59 machine.sleep(10)
60 machine.send_key("alt-f10")
61 machine.sleep(5)
62 machine.wait_for_text(r"(Choose|Sorry|provide|content)")
63 machine.screenshot("lomiri-mediaplayer_open")
64
65 machine.succeed("pkill -f lomiri-mediaplayer-app")
66
67 with subtest("lomiri mediaplayer plays video"):
68 machine.succeed("lomiri-mediaplayer-app /etc/${videoFile} >&2 &")
69 machine.wait_for_console_text("The name com.lomiri.content.dbus.Service was not provided") # Only once here
70 machine.wait_for_console_text("qml: onPositionChanged")
71 machine.sleep(10)
72 machine.send_key("alt-f10")
73 machine.sleep(5)
74 machine.wait_for_text("${ocrContent}")
75 machine.screenshot("lomiri-mediaplayer_playback")
76
77 machine.succeed("pkill -f lomiri-mediaplayer-app")
78
79 with subtest("lomiri mediaplayer localisation works"):
80 # OCR struggles with finding the translated window title, and lomiri-content-hub QML isn't translated
81 # Cause an error, and look for the error popup
82 machine.succeed("touch invalid.mp4")
83 machine.succeed("env LANG=de_DE.UTF-8 lomiri-mediaplayer-app invalid.mp4 >&2 &")
84 machine.wait_for_console_text("The name com.lomiri.content.dbus.Service was not provided")
85 machine.wait_for_console_text("Der Datenstrom enthält keine Daten")
86 machine.sleep(10)
87 machine.send_key("alt-f10")
88 machine.sleep(5)
89 machine.wait_for_text(r"(Fehler|Abspielen|fehlgeschlagen)")
90 machine.screenshot("lomiri-mediaplayer_localised")
91 '';
92}