diff --git a/.doozer.json b/.doozer.json
index eb42dd9828..058e0cdc4e 100644
--- a/.doozer.json
+++ b/.doozer.json
@@ -1,5 +1,5 @@
{
- "submodules": ["ext/libav", "ext/vmir", "ext/rtmpdump", "ext/gumbo-parser"],
+ "submodules": ["ext/libav", "ext/fribidi", "ext/vmir", "ext/rtmpdump", "ext/gumbo-parser"],
"targets": {
"android": {
"buildenv": "docker:andoma/movian-android",
@@ -35,6 +35,11 @@
"git",
"build-essential",
"pkg-config",
+ "autoconf",
+ "automake",
+ "bison",
+ "flex",
+ "libtool",
"libfreetype6-dev",
"libfontconfig1-dev",
"libx11-dev",
@@ -64,6 +69,11 @@
"git",
"build-essential",
"pkg-config",
+ "autoconf",
+ "bison",
+ "flex",
+ "libtool",
+ "automake",
"libfreetype6-dev",
"libfontconfig1-dev",
"libx11-dev",
diff --git a/.gitmodules b/.gitmodules
index 83078ad101..279338e666 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -16,3 +16,9 @@
[submodule "ext/vmir"]
path = ext/vmir
url = https://github.com/andoma/vmir
+[submodule "ext/fribidi"]
+ path = ext/fribidi
+ url = https://github.com/Mashatan/fribidi.git
+[submodule "android"]
+ path = android
+ url = andoma@git.lonelycoder.com:movian-android.git
diff --git a/README.markdown b/README.markdown
index 170ccb214d..804be10cf7 100644
--- a/README.markdown
+++ b/README.markdown
@@ -5,16 +5,19 @@ Movian mediaplayer
[](https://doozer.io/user/andoma/movian)
-For more information and latest versions, please visit:
+For more information and latest versions, please visit: [https://movian.tv/](https://movian.tv/)
+
+with BiDi support for Farsi and Arabic languages
+Vazir-Font for Farsi and Arabic support, https://github.com/rastikerdar/vazir-font
-[https://movian.tv/](https://movian.tv/)
## How to build for Linux
First you need to satisfy some dependencies:
For Ubuntu 12.04)
- sudo apt-get install libfreetype6-dev libfontconfig1-dev libxext-dev libgl1-mesa-dev libasound2-dev libasound2-dev libgtk2.0-dev libxss-dev libxxf86vm-dev libxv-dev libvdpau-dev yasm libpulse-dev libssl-dev curl libwebkitgtk-dev libsqlite3-dev
+ sudo apt-get install libfreetype6-dev libfontconfig1-dev libxext-dev libgl1-mesa-dev libasound2-dev libasound2-dev libgtk2.0-dev libxss-dev libxxf86vm-dev libxv-dev libvdpau-dev yasm libpulse-dev libssl-dev curl libwebkitgtk-dev libsqlite3-dev ccache
+
Then you need to configure:
diff --git a/configure.linux b/configure.linux
index 968a035797..3b5644c826 100755
--- a/configure.linux
+++ b/configure.linux
@@ -106,6 +106,7 @@ enable realpath
enable webkit
enable librtmp
enable vmir
+enable fribidi
#enable airplay -- not functional yet
#enable libxrandr -- code does not really work yet
@@ -562,7 +563,6 @@ if enabled nvctrl; then
echo >>${CONFIG_MAK} "LDFLAGS_cfg += -lXNVCtrl"
fi
-
#
# Check for valgrind include files
#
diff --git a/configure.ps3 b/configure.ps3
index 03750890f3..2b0ed5a267 100755
--- a/configure.ps3
+++ b/configure.ps3
@@ -39,7 +39,7 @@ enable sqlite_locking
enable tlsf
enable webpopup
enable libntfs
-
+enable fribidi
show_help(){
common_help
@@ -63,7 +63,10 @@ done
setup_env "$@"
-
+if enabled fribidi; then
+ FRIBIDI_COMMON_FLAGS="--host=powerpc"
+ mkdir -p ${BUILDDIR}/fribidi
+fi
mkdir -p ${BUILDDIR}/libav
${PS3DEV}/host/ppu/bin/ppu-gcc -c -o ${BUILDDIR}/libav/mallocstub.o ${TOPDIR}/support/mallocstub.c
LIBAV_LDFLAGS="${BUILDDIR}/libav/mallocstub.o -B${PS3DEV}/host/ppu/lib"
diff --git a/configure.rpi b/configure.rpi
index 1ae004b303..70d906003b 100755
--- a/configure.rpi
+++ b/configure.rpi
@@ -21,6 +21,7 @@ enable libcec
enable avahi
enable connman
enable vmir
+enable fribidi
show_help(){
common_help
@@ -57,6 +58,11 @@ LIBAV_CFLAGS="-I${EXT_INSTALL_DIR}/include"
LIBAV_LDFLAGS="-L${EXT_INSTALL_DIR}/lib"
LIBAV_ARCH_FLAGS="--cross-prefix=${TOOLCHAIN} --enable-cross-compile --arch=arm --target-os=linux"
+if enabled fribidi; then
+ FRIBIDI_COMMON_FLAGS="--host=arm-linux"
+ mkdir -p ${BUILDDIR}/fribidi
+fi
+
if [ -n "$SYSROOT" ]; then
echo >>${CONFIG_MAK} "LDFLAGS_cfg += --sysroot=$SYSROOT"
echo >>${CONFIG_MAK} "CFLAGS_cfg += --sysroot=$SYSROOT"
diff --git a/ext/fribidi b/ext/fribidi
new file mode 160000
index 0000000000..82b4ae43c8
--- /dev/null
+++ b/ext/fribidi
@@ -0,0 +1 @@
+Subproject commit 82b4ae43c885bd20cf59fcdda57d8c1aa1ca0b83
diff --git a/ext/fribidi.mk b/ext/fribidi.mk
new file mode 100644
index 0000000000..859009427d
--- /dev/null
+++ b/ext/fribidi.mk
@@ -0,0 +1,3 @@
+build:
+ ${MAKE} -C ${BUILDDIR}/fribidi/build
+ ${MAKE} -C ${BUILDDIR}/fribidi/build install
diff --git a/glwskins/flat/log.view b/glwskins/flat/log.view
index f3a87ad701..85ffce164a 100644
--- a/glwskins/flat/log.view
+++ b/glwskins/flat/log.view
@@ -17,7 +17,7 @@ widget(container_z, {
cloner($core.logbuffer, label, {
caption: $self.prefix + $self.message;
ellipsize: true;
- font: "dataroot://res/fonts/UbuntuMono-Regular.ttf";
+ font: "dataroot://res/fonts/Vazir.ttf";
size: 0.8em;
color: translate($self.severity, [1,1,1],
diff --git a/glwskins/old/universe.view b/glwskins/old/universe.view
index 943c282de6..bf749d2567 100644
--- a/glwskins/old/universe.view
+++ b/glwskins/old/universe.view
@@ -1,5 +1,5 @@
setDefaultFont($core.fonts.main);
-$ui.monofont = "dataroot://res/fonts/UbuntuMono-Regular.ttf";
+$ui.monofont = "dataroot://res/fonts/Vazir.ttf";
$ui.condensedfont = $core.fonts.condensed ??
"skin://fonts/OpenSans-CondBold.ttf";
$ui.background = "skin://graphics/background.jpg";
diff --git a/lang/fa_FA.lang b/lang/fa_FA.lang
new file mode 100644
index 0000000000..8bf72a0932
--- /dev/null
+++ b/lang/fa_FA.lang
@@ -0,0 +1,1944 @@
+language: Farsi
+native: فارسی
+maintainer: Ali Mashatan
+#
+# ./glwskins/flat/ctxmenu/default_details.view
+#
+id: Bookmark
+msg: نشانه
+
+id: Bookmarked
+msg:نشانه شده
+
+id: Copy to clipboard
+msg:کپی به حافظه موقت
+
+id: Copy to location...
+msg:...کپی به محل
+
+id: Delete
+msg:حذف
+
+id: Queue
+msg:صف
+
+#
+# ./glwskins/flat/ctxmenu/plugin_details.view
+#
+id: Author:
+msg:نویسنده
+
+id: Available version:
+msg:نگارش
+
+id: Changelog
+msg:تغییرات
+
+id: Install
+msg:نصب
+
+id: Installed version:
+msg:
+
+id: Status:
+msg:وضعیت
+
+id: Uninstall
+msg:حذف برنامه
+
+id: Upgrade
+msg:ارتقا
+
+#
+# ./glwskins/flat/ctxmenu/video_details.view
+#
+id: Continue from %s
+msg:%s ادامه از
+
+id: Mark as seen
+msg:دیده شده
+
+id: Mark as unseen
+msg:دیده نشده
+
+id: Play from beginning
+msg:پخش از اول
+
+id: Play until end of list
+msg:پخش تا آخر لیست
+
+id: Video Cast
+msg: بازیگران
+
+#
+# ./glwskins/flat/items/details/video.view
+#
+id: Season %d - Episode %d
+# Missing translation
+msg:
+
+id: Seen %d times, %s
+# Missing plural translation for 'Seen %d times, %s' and 'Seen %d time, %s'
+msg[0]:
+msg[1]:
+
+#
+# ./glwskins/flat/items/list/add.view
+#
+id: Add new entry
+msg: اضافه کردن
+
+#
+# ./glwskins/flat/items/list/bool.view
+#
+id: Off
+msg:خاموش
+
+id: On
+msg:روشن
+
+#
+# ./glwskins/flat/items/list/font.view
+#
+id: Condensed
+msg:
+
+id: Subtitles
+msg:زیرنویس ها
+
+id: User interface
+msg:رابطه کاربری
+
+#
+# ./glwskins/flat/items/list/tvepisode.view
+#
+id: Episode %d - %s
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/loading.view
+#
+id: %d kb/s
+msg:
+
+id: Bitrate:
+msg:
+
+#
+# ./glwskins/flat/log.view
+#
+id: System log
+msg:سیستم لاگ
+
+#
+# ./glwskins/flat/mediainfo.view
+#
+id: A/V diff
+# Missing translation
+msg:
+
+id: Audio bitrate
+# Missing translation
+msg:
+
+id: Audio codec
+# Missing translation
+msg:
+
+id: Audio packets
+# Missing translation
+msg:
+
+id: Buffer usage
+# Missing translation
+msg:
+
+id: No media loaded
+msg:
+
+id: Remaining buffer
+# Missing translation
+msg:
+
+id: Source
+# Missing translation
+msg:
+
+id: Video bitrate
+# Missing translation
+msg:
+
+id: Video codec
+# Missing translation
+msg:
+
+id: Video framerate
+# Missing translation
+msg:
+
+id: Video packets
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/menu/sidebar.view
+#
+id: Bookmark page
+msg:
+
+id: Page settings
+msg:صفحه تنظیمات
+
+id: Paste
+# Missing translation
+msg:
+
+id: Reload page
+msg: بازخوانی صفحه
+
+id: Remove bookmark
+# Missing translation
+msg:
+
+id: Settings
+msg:تنظیمات
+
+#
+# ./glwskins/flat/menu/sidebar_common.view
+#
+id: Activate sleep timer
+msg:
+
+id: Disable sleep timer
+msg:
+
+id: Exit %s
+msg: خروج %s
+
+id: Hide media info
+# Missing translation
+msg:
+
+id: Hide system info
+msg:
+
+id: Master volume
+msg: حجم صدا اصلی
+
+id: Show media info
+msg: نمایش اطلاعات مدیا
+
+id: Show system info
+msg: نمایش اطلاعات سیستم
+
+id: Suspend
+msg: تعلیق
+
+id: Time until sleep
+msg:
+
+id: View log
+msg:
+
+id: dB
+msg:
+
+id: min
+msg:
+
+#
+# ./glwskins/flat/osd/osd_audio.view
+#
+id: Audio
+msg:
+
+#
+# ./glwskins/flat/osd/osd_main.view
+#
+id: Audio settings
+msg:
+
+id: Subtitle settings
+msg:
+
+id: Video settings
+msg:
+
+#
+# ./glwskins/flat/osk.view
+#
+id: Default
+msg:پیش فرض
+
+id: Keyboard layout:
+msg:
+
+#
+# ./glwskins/flat/pages/directory.view
+#
+id: Album
+msg:آلبوم
+
+id: Artist
+msg:بازیگر
+
+id: Custom
+msg:
+
+id: Grid
+# Missing translation
+msg:
+
+id: List
+msg:لیست
+
+id: Page layout
+# Missing translation
+msg:
+
+id: Search results
+# Missing translation
+msg:
+
+id: TV Season
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/empty.view
+#
+id: No contents
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/home.view
+#
+id: Dismiss
+msg:
+
+id: Home
+msg:خانه
+
+#
+# ./glwskins/flat/pages/openerror.view
+#
+id: Unable to open resource
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/playqueue.view
+#
+id: Playqueue
+msg:
+
+#
+# ./glwskins/flat/pages/searchresults.view
+#
+id: Show more
+msg: بیشتر
+
+id: %d hits
+# Missing plural translation for '%d hits' and '%d hit'
+msg[0]:
+msg[1]:
+
+#
+# ./glwskins/flat/pages/slideshow.view
+#
+id: Interval: %ds
+# Missing translation
+msg:
+
+id: Play/Pause
+# Missing translation
+msg:
+
+id: Stop
+msg:
+
+#
+# ./glwskins/flat/pages/stpp.view
+#
+id: Remote control - %s
+# Missing translation
+msg:
+
+id: Remote controlling %s
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/stppstpp.view
+#
+id: Nested remote controll is not supported
+# Missing translation
+msg:
+
+id: Remote control
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/stppvideo.view
+#
+id: Audio tracks
+msg:
+
+id: Audio volume adjustment: %d dB
+msg:
+
+id: CPU is too slow to decode this video
+msg:
+
+id: Next
+# Missing translation
+msg:
+
+id: Previous
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/tvseason.view
+#
+id: Season %d
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/pages/upgrade.view
+#
+id: %s is up to date
+msg:
+
+id: An error occured during download
+msg:
+
+id: Changelog for %s releases
+msg:
+
+id: Check for updates now
+msg:
+
+id: Checking for updates
+# Missing translation
+msg:
+
+id: Current version:
+msg:
+
+id: Download and install
+# Missing translation
+msg:
+
+id: Downloading %s
+msg:
+
+id: New version %s is available for download
+msg:
+
+id: No upgrade available
+msg:
+
+id: Retry
+# Missing translation
+msg:
+
+id: Stable
+msg:
+
+id: Testing
+msg:
+
+id: Unable to query for new version
+msg:
+
+#
+# ./glwskins/flat/popups/auth.view
+#
+id: Domain
+msg:
+
+id: Password
+msg:
+
+id: Remember me
+msg:
+
+id: Username
+msg:
+
+#
+# ./glwskins/flat/popups/common.view
+#
+id: Cancel
+msg:
+
+id: Ok
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/popups/filepicker.view
+#
+id: Back
+# Missing translation
+msg:
+
+id: Close
+# Missing translation
+msg:
+
+id: Folder select mode, press right to open subfolder
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/popups/resume.view
+#
+id: No, Start over
+msg:
+
+id: Resume from %s
+# Missing translation
+msg:
+
+id: Yes
+msg:
+
+#
+# ./glwskins/flat/popups/textDialog.view
+#
+id: OK
+msg:
+
+#
+# ./glwskins/flat/sysinfo.view
+#
+id: CPU Temp
+msg:
+
+id: Connected
+# Missing translation
+msg:
+
+id: Fragmentation
+msg:
+
+id: Framerate
+# Missing translation
+msg:
+
+id: GPU Temp
+msg:
+
+id: HDD Avail
+msg:
+
+id: IP Address
+# Missing translation
+msg:
+
+id: Inactive memory
+# Missing translation
+msg:
+
+id: Memory usage
+msg:
+
+id: Network
+# Missing translation
+msg:
+
+id: Not available
+# Missing translation
+msg:
+
+id: System Free
+msg:
+
+id: System Total
+msg:
+
+id: VM Page In/Out
+# Missing translation
+msg:
+
+id: Version
+# Missing translation
+msg:
+
+#
+# ./glwskins/flat/universe.view
+#
+id: Audio muted
+msg:
+
+id: Copying %d files
+# Missing translation
+msg:
+
+id: Master volume: %d dB
+msg:
+
+id: Overscan adjustment\nPosition border at screen edges
+# Missing translation
+msg:
+
+#
+# ./src/api/stpp.c
+#
+id: Allow remote control
+# Missing translation
+msg:
+
+id: Device not available
+# Missing translation
+msg:
+
+id: Movians for remote control
+# Missing translation
+msg:
+
+#
+# ./src/api/tmdb.c
+#
+id: Language (ISO 639-1 code)
+msg:
+
+id: Use original title
+msg:
+
+#
+# ./src/arch/android/android.c
+#
+id: Android Storage
+msg:
+
+#
+# ./src/arch/linux/pulseaudio.c
+#
+id: Unable to initialize audio system %s -- %s
+msg:
+
+#
+# ./src/arch/ps3/ps3_main.c
+#
+id: System is low on memory (%d kB RAM available)
+msg:
+
+#
+# ./src/arch/ps3/ps3_vdec.c
+#
+id: Cell-h264: %d Ref-frames for %d content is incompatible with PS3 HW decoder. Disabling acceleration
+msg:
+
+id: Cell-h264: Broken headers, Disabling acceleration
+msg:
+
+id: Cell-h264: Forcing level 4.2 for content in level %d.%d. This may break video playback.
+msg:
+
+id: Unable to accelerate %s, library not loaded.
+msg:
+
+id: Unable to open Cell codec. Error 0x%x
+msg:
+
+id: Unable to open Cell codec. Unable to allocate %d bytes of RAM
+msg:
+
+id: Unable to query Cell codec. Error 0x%x
+msg:
+
+#
+# ./src/arch/rpi/rpi_audio.c
+#
+id: 8 Channel PCM
+msg:
+
+id: AC3 Pass-Through
+msg:
+
+id: Analog
+msg:
+
+id: Audio output port
+msg:
+
+id: Autodetect
+msg:
+
+id: DTS Pass-Through
+msg:
+
+id: HDMI
+msg:
+
+#
+# ./src/arch/rpi/rpi_tv.c
+#
+id: Match display and content framerate
+# Missing translation
+msg:
+
+#
+# ./src/audio2/audio.c
+#
+id: Audio delay
+msg:
+
+id: Audio gain
+msg:
+
+id: Setup audio output
+msg:
+
+id: Video playback
+msg:
+
+#
+# ./src/audio2/audio_test.c
+#
+id: 440Hz sinewave -12dB
+msg:
+
+id: Audio test
+msg:
+
+id: Center
+msg:
+
+id: Front Left
+msg:
+
+id: Front Right
+msg:
+
+id: LFE
+msg:
+
+id: Pink noise
+msg:
+
+id: Play test signal
+msg:
+
+id: Rear Left
+msg:
+
+id: Rear Right
+msg:
+
+id: Speaker position
+msg:
+
+id: Surround Left
+msg:
+
+id: Surround Right
+msg:
+
+id: Test signal type
+msg:
+
+#
+# ./src/backend/bittorrent/bt_backend.c
+#
+id: No files in torrent
+msg:
+
+id: Unable to open torrent: %s
+msg:
+
+#
+# ./src/backend/bittorrent/diskio.c
+#
+id: Cached torrents use %d MB out of allowed %d MB. Total free space on volume: %d MB
+msg:
+
+#
+# ./src/backend/bittorrent/fa_torrent.c
+#
+id: Connected peers
+msg:
+
+id: Known peers
+msg:
+
+id: Receiving from
+msg:
+
+id: Torrent leechers
+msg:
+
+id: Torrent seeders
+msg:
+
+#
+# ./src/backend/bittorrent/torrent_settings.c
+#
+id: BitTorrent
+msg:
+
+id: Clear cache
+msg:
+
+id: Enable bittorrent
+msg:
+
+id: Max upload speed
+# Missing translation
+msg:
+
+id: Max usage of free space for caching torrents
+msg:
+
+id: Status
+msg:
+
+id: Torrent cache path
+msg:
+
+#
+# ./src/backend/dvd/dvd.c
+#
+id: DVD
+msg:
+
+id: DVD read error, restarting disc
+msg:
+
+#
+# ./src/backend/hls/hls.c
+#
+id: Primary
+msg:
+
+id: Supplementary
+msg:
+
+#
+# ./src/backend/htsp/htsp.c
+#
+id: Channels
+# Missing translation
+msg:
+
+id: Invalid HTSP URL
+msg:
+
+id: No such channel
+# Missing translation
+msg:
+
+id: Recorded shows
+# Missing translation
+msg:
+
+id: Recorder
+# Missing translation
+msg:
+
+#
+# ./src/backend/playlist.c
+#
+id: Unable to open playlist
+# Missing translation
+msg:
+
+#
+# ./src/backend/search.c
+#
+id: Search
+msg:
+
+id: Search result for: %s
+msg:
+
+#
+# ./src/backend/slideshow/slideshow.c
+#
+id: 3 seconds
+msg:
+
+id: 5 seconds
+msg:
+
+id: 7 seconds
+msg:
+
+id: Slideshow speed
+msg:
+
+#
+# ./src/blobcache_file.c
+#
+id: Cache cleared
+msg:
+
+id: Clear cached files
+msg:
+
+#
+# ./src/fileaccess/fa_backend.c
+#
+id: Can't handle content type %d
+msg:
+
+id: Checking file contents
+msg:
+
+id: Invalid URL from redirect
+# Missing translation
+msg:
+
+id: Unable to open file: %s
+msg:
+
+#
+# ./src/fileaccess/fa_filepicker.c
+#
+id: Select a file
+# Missing translation
+msg:
+
+#
+# ./src/fileaccess/fa_locatedb.c
+#
+id: Search using Unix locatedb
+msg:
+
+#
+# ./src/fileaccess/fa_scanner.c
+#
+id: Deleted %s
+msg:
+
+id: Filename
+msg:
+
+id: Include in library
+# Missing translation
+msg:
+
+id: Newest first
+# Missing translation
+msg:
+
+id: Oldest first
+# Missing translation
+msg:
+
+id: Show only supported files
+msg:
+
+id: Sort folders first
+msg:
+
+id: Sort on
+msg:
+
+id: Unable to delete %s\n%s
+msg:
+
+#
+# ./src/fileaccess/fa_spotlight.c
+#
+id: Search using spotlight
+msg:
+
+#
+# ./src/fileaccess/fileaccess.c
+#
+id: Are you sure you want to delete:
+msg:
+
+id: Browse archives as folders
+msg:
+
+id: Enable file deletion from item menu
+msg:
+
+id: Show filename extensions
+msg:
+
+id: Store per-file settings in filesystem
+msg:
+
+id: %d archive parts
+msg[0]: %d Archivteil
+msg[1]: %d Archivteile
+
+id: %d directories
+msg[0]: %d Verzeichniss
+msg[1]: %d Verzeichnisse
+
+id: %d files
+msg[0]: %d Datei
+msg[1]: %d Dateien
+
+#
+# ./src/fileaccess/smb/fa_nativesmb.c
+#
+id: Access denied
+msg:امکان دسترسی وجود ندارد
+
+id: Account restricted
+msg:دسترسی محدود شده
+
+id: Bad network share name
+msg:
+
+id: Logon failure
+msg:عدم موفیقت لاگین
+
+id: Object name not found
+msg:
+
+#
+# ./src/i18n.c
+#
+id: 12 Hour
+msg: ساعت ۱۲
+
+id: 24 Hour
+msg: ۲۴ ساعت
+
+id: Default character set
+msg:
+
+id: Ignore 'The' at beginning of words when sorting
+msg:
+
+id: Language
+msg:
+
+id: Language codes should be configured as three character ISO codes, example (eng, swe, fra)
+msg:
+
+id: Languages
+msg:
+
+id: Preferred languages
+msg:
+
+id: Primary audio language code
+msg:
+
+id: Primary subtitle language code
+msg:
+
+id: Secondary audio language code
+msg:
+
+id: Secondary subtitle language code
+msg:
+
+id: System default
+msg:
+
+id: Tertiary audio language code
+msg:
+
+id: Tertiary subtitle language code
+msg:
+
+id: Time format
+msg:فرم زمانی
+
+id: Timezone
+msg:منظقه زمانی
+
+#
+# ./src/ipc/libcec.c
+#
+id: Longpress SELECT for item menu
+# Missing translation
+msg:
+
+id: Switch TV input source
+# Missing translation
+msg:
+
+id: Use STOP key for combo input
+# Missing translation
+msg:
+
+#
+# ./src/keyring.c
+#
+id: Forget remembered passwords
+msg:
+
+id: Rembered passwords erased
+msg:
+
+#
+# ./src/media/media_settings.c
+#
+id: Align on video frame
+# Missing translation
+msg:
+
+id: Audio volume
+msg:
+
+id: Delay
+# Missing translation
+msg:
+
+id: Go to standby after video ends
+msg:
+
+id: Horizontal pan
+msg:
+
+id: Horizontal position
+# Missing translation
+msg:
+
+id: Horizontal scale
+msg:
+
+id: Reset defaults for folder '%s'
+msg:
+
+id: Save as defaults for folder '%s'
+msg:
+
+id: Save as global default
+msg:
+
+id: Scaling
+# Missing translation
+msg:
+
+id: Stretch video to fullscreen
+msg:
+
+id: Stretch video to widescreen
+msg:
+
+id: Vertical pan
+msg:
+
+id: Vertical position
+# Missing translation
+msg:
+
+id: Vertical scale
+msg:
+
+id: Video frame interpolation
+msg:
+
+id: Video zoom
+msg:
+
+#
+# ./src/metadata/browsemdb.c
+#
+id: Indexing
+msg:
+
+#
+# ./src/metadata/decoration.c
+#
+id: Automatic
+msg:
+
+id: Erase all playback info
+msg:
+
+id: Manual
+msg:
+
+id: Mark all as seen
+msg:
+
+id: Mark all as unseen
+msg:
+
+id: Metadata mode
+msg:
+
+#
+# ./src/metadata/metadata.c
+#
+id: Embedded in file
+msg:
+
+id: Track %d
+msg:
+
+#
+# ./src/metadata/metadata_sources.c
+#
+id: Enabled
+msg:
+
+id: Metadata
+msg:
+
+id: Metadata configuration and provider settings
+msg:
+
+id: Providers for Music
+msg:
+
+id: Providers for Video
+msg:
+
+#
+# ./src/metadata/metadb.c
+#
+id: %d items deleted
+msg:
+
+id: Clear all metadata
+msg:
+
+id: Clearing all metadata means losing all metadata cached from external sources such as themoviedb.org, etc\n\nInformation about resume-points, playcount, etc will be saved.\nAre you sure you proceed?
+# Missing translation
+msg:
+
+#
+# ./src/metadata/mlp.c
+#
+id: Custom search query
+msg:
+
+id: Custom title
+msg:
+
+id: IMDb ID
+msg:
+
+id: Metadata loaded from %s based on %s
+# Missing translation
+msg:
+
+id: Metadata source
+msg:
+
+id: Movie
+msg:
+
+id: Movie title
+msg:
+
+id: No data found
+msg:
+
+id: None
+msg:
+
+id: Refresh metadata
+msg:
+
+id: Title, Season, Episode
+msg:
+
+id: custom IMDb ID
+msg:
+
+id: custom query
+msg:
+
+id: filename
+msg:
+
+id: filename as TV episode
+msg:
+
+id: folder name
+msg:
+
+#
+# ./src/navigator.c
+#
+id: Add and remove items on homepage
+msg:
+
+id: Added %s to home page
+msg:
+
+id: Added new bookmark: %s
+msg:
+
+id: Bookmarks
+msg:
+
+id: Icon
+msg:
+
+id: Music
+msg:
+
+id: No handler for URL
+msg:
+
+id: Other
+msg:
+
+id: Photos
+msg:
+
+id: Removed %s from homepage
+msg:
+
+id: Removed bookmark: %s
+msg:
+
+id: TV
+msg:
+
+id: Title
+msg:
+
+id: Type
+msg:
+
+id: URL
+msg:
+
+id: Video
+msg:
+
+#
+# ./src/networking/connman.c
+#
+id: Enable Wi-Fi
+msg:
+
+id: Network connections
+msg:
+
+#
+# ./src/networking/ftp_server.c
+#
+id: Enable FTP server
+msg:
+
+id: FTP server
+msg:
+
+id: Server TCP port
+msg:
+
+#
+# ./src/networking/http_server.c
+#
+id: Power Off
+# Missing translation
+msg:
+
+id: Rebooting
+# Missing translation
+msg:
+
+id: Restarting
+# Missing translation
+msg:
+
+id: Standby
+msg:
+
+#
+# ./src/notifications.c
+#
+id: Show news on home screen
+# Missing translation
+msg:
+
+#
+# ./src/plugins.c
+#
+id: Alternate plugin Repository URL
+msg:
+
+id: Audio decoders
+# Missing translation
+msg:
+
+id: Auto install plugins on demand
+# Missing translation
+msg:
+
+id: Auto installed plugin %s (Version %s)
+# Missing translation
+msg:
+
+id: Automatically upgrade plugins
+msg:
+
+id: Available plugins
+msg:
+
+id: Background
+msg:
+
+id: Beta testing passwords
+msg:
+
+id: Browse available plugins
+msg:
+
+id: Browsing
+msg:
+
+id: Cloud services
+msg:
+
+id: Corrupt plugin bundle
+msg:
+
+id: Custom backgrounds can now be set in Settings -> Look and Feel
+# Missing translation
+msg:
+
+id: Disk write error
+msg:
+
+id: Downloading
+msg:
+
+id: File open error
+msg:
+
+id: Home page
+msg:
+
+id: Images
+msg:
+
+id: Installed
+# Missing translation
+msg:
+
+id: Installed plugins
+msg:
+
+id: Installed version higher than available
+msg:
+
+id: Installing
+msg:
+
+id: List of albums
+msg:
+
+id: Loading screen
+msg:
+
+id: Movies
+msg:
+
+id: Music streaming
+msg:
+
+id: Not installable
+msg:
+
+id: Not installed
+msg:
+
+id: Not upgradable
+msg:
+
+id: On Screen Keyboards
+msg:
+
+id: Online TV
+msg:
+
+id: Plugin %s %s has been uninstalled because it may cause problems.\nYou may try reinstalling a different version manually.
+msg:
+
+id: Plugin %s has been uninstalled - %s
+msg:
+
+id: Plugin categories
+msg:
+
+id: Plugins
+msg: پلاگین
+
+id: Preferred views from plugins
+msg:
+
+id: Screen saver
+msg: محافظ صفحه نمایش
+
+id: TV channels
+msg: کانالهای تی وی
+
+id: Unable to load plugin.json: %s
+msg:
+
+id: Unable to load plugin.json: Malformed JSON
+msg:
+
+id: Uncategorized
+msg:
+
+id: Up to date
+msg: بروزرسانی
+
+id: Upgradable
+msg: ارتقا
+
+id: Upgraded plugin %s to version %s
+msg:
+
+id: User interface extensions
+msg:
+
+id: Version %s is no longer compatible with Movian
+msg:
+
+id: Video streaming
+msg:
+
+#
+# ./src/prop/prop_proxy.c
+#
+id: Remote exited
+# Missing translation
+msg:
+
+#
+# ./src/runcontrol.c
+#
+id: Automatic standby
+msg:
+
+id: Enable SSH server
+msg:
+
+id: Logout
+msg:
+
+id: Open shell
+msg:
+
+id: Power off system
+msg:
+
+id: Quit
+msg:
+
+id: SSH server
+msg:
+
+#
+# ./src/sd/sd.c
+#
+id: Enabled on home screen
+msg:
+
+id: Name
+msg: نام
+
+#
+# ./src/service.c
+#
+id: Local network
+msg:شبکه محلی
+
+id: Remove from homepage
+msg:
+
+#
+# ./src/settings.c
+#
+id: About
+msg:درباره
+
+id: Applications and installed plugins
+msg:
+
+id: Configure communications with your TV
+msg:
+
+id: Developer settings
+msg:
+
+id: Discovered media sources
+msg:
+
+id: File browsing
+msg:
+
+id: Fonts and user interface styling
+msg:
+
+id: General
+msg:عمومی
+
+id: Global settings
+msg:تنظیمات عمومی
+
+id: Look and feel
+msg:ظاهر
+
+id: Network services, etc
+msg:سرویس شبکه و غیره
+
+id: Network settings
+msg:تنظیمات شبکه
+
+id: Reset
+msg:ریست
+
+id: Settings useful for developers
+msg:
+
+id: Software upgrade
+msg:ارتقا نرم افزار
+
+id: Starting and stopping
+msg:شروع کردن و متوقف کردن
+
+id: System name
+msg:نام سیستم
+
+id: System related settings
+msg:
+
+id: TV Control
+msg: کنترل تی وی
+
+#
+# ./src/subtitles/subtitles.c
+#
+id: Any subtitle in central folder
+msg:
+
+id: Any subtitle in same folder as video
+msg:
+
+id: Auto
+msg:اتوماتیک
+
+id: Automatically select from this source
+msg:
+
+id: Central subtitle folder
+msg:
+
+id: Color
+msg: رنگ
+
+id: External file
+msg:
+
+id: Force subtitles to reside on video frame
+msg:
+
+id: Generic settings for video subtitles
+msg:
+
+id: Ignore embedded styling
+msg:
+
+id: Left
+msg: چپ
+
+id: Outline color
+msg:
+
+id: Outline size
+msg:
+
+id: Path to central folder
+msg:
+
+id: Providers for Subtitles
+msg:
+
+id: Right
+msg: راست
+
+id: Shadow color
+msg:
+
+id: Shadow offset
+msg:
+
+id: Subtitle horizontal displacement
+msg:
+
+id: Subtitle position
+msg:
+
+id: Subtitle size
+msg:
+
+id: Subtitle size and positioning
+msg:
+
+id: Subtitle vertical displacement
+msg:
+
+id: Subtitles embedded in video file
+msg:
+
+id: Subtitles with matching filename in central folder
+msg:
+
+id: Subtitles with matching filename in same folder as video
+msg:
+
+#
+# ./src/text/fontstash.c
+#
+id: Defaults
+msg:
+
+id: Fonts
+msg:
+
+id: Installed fonts
+msg:
+
+id: Narrow text
+msg:
+
+id: Reset main font to default
+msg:
+
+id: Reset narrow font to default
+msg:
+
+id: Reset subtitle font to default
+msg:
+
+id: Unable to install font: %s
+msg:
+
+id: Use font %s for
+msg:
+
+#
+# ./src/ui/clipboard.c
+#
+id: Copy failed: %s
+# Missing translation
+msg:
+
+id: Target folder
+# Missing translation
+msg:
+
+#
+# ./src/ui/glw/glw_ps3.c
+#
+id: Dual-Shock Remote
+# Missing translation
+msg:
+
+id: No
+msg:
+
+id: Seek using L2 and R2 button
+msg:
+
+id: Yes with Select button
+msg:
+
+#
+# ./src/ui/glw/glw_settings.c
+#
+id: Custom background image
+msg:
+
+id: Emulate Up/Down buttons with mouse wheel
+msg:
+
+id: Folder for screensaver images
+msg:
+
+id: Font and icon size
+msg:
+
+id: Interface horizontal shrink
+msg:
+
+id: Interface vertical shrink
+msg:
+
+id: Screensaver
+msg:
+
+id: Screensaver delay
+msg:
+
+id: Seconds per image
+# Missing translation
+msg:
+
+id: Use Bing images of the day
+msg:
+
+id: Wrap when reaching beginning/end of lists
+msg:
+
+#
+# ./src/ui/glw/glw_view_eval.c
+#
+id: %d days ago
+msg:
+
+id: %d hours ago
+msg:
+
+id: %d minutes ago
+msg:
+
+id: %d months ago
+msg:
+
+id: %d weeks ago
+msg:
+
+id: %d years ago
+msg:
+
+id: Just now
+msg:
+
+id: One day ago
+msg:
+
+id: One hour ago
+msg:
+
+id: One minute ago
+msg:
+
+id: One month ago
+msg:
+
+#
+# ./src/ui/linux/nvidia.c
+#
+id: Auto-switch to this mode
+msg:
+
+id: DVI-Video color range
+msg:
+
+id: Switch to this mode now
+msg:
+
+id: Video modes
+msg:
+
+#
+# ./src/upgrade.c
+#
+id: %s version %s is available
+msg:
+
+id: Notify about upgrades
+msg:
+
+id: Open download page
+msg:
+
+id: System
+msg:
+
+id: Upgrade to releases from
+msg:
+
+#
+# ./src/upnp/upnp_browse.c
+#
+id: Date (newest first)
+msg:
+
+id: Date (oldest first)
+msg:
+
+id: Device not found
+msg:
+
+id: Malformed URI after device
+msg:
+
+id: Malformed URI after service
+msg:
+
+id: Service not found
+msg:
+
+#
+# ./src/video/video_settings.c
+#
+id: Always
+msg:
+
+id: Ask
+msg:
+
+id: Automatically play next video in list
+msg:
+
+id: Count video as played when reaching
+msg:
+
+id: Enable VDPAU
+msg:
+
+id: Hardware accelerated decoding
+msg:
+
+id: Maximum resolution for deinterlacer
+msg:
+
+id: Never
+msg:
+
+id: No limit
+msg:
+
+id: Per-file volume
+msg:
+
+id: Preferred VDPAU deinterlacer method
+msg:
+
+id: Resume video playback
+msg:
+
+id: Show clock during playback
+msg:
+
+id: Step when seeking backward
+msg:
+
+id: Step when seeking forward
+msg:
+
+id: Temporal
+msg:
+
+id: Temporal/Spatial
+msg:
+
+id: Up / Down during video playback controls
+msg:
+
+id: Video acceleration and display behaviour
+msg:
+
+id: Video buffer size
+# Missing translation
+msg:
+
diff --git a/res/fonts/Vazir.ttf b/res/fonts/Vazir.ttf
new file mode 100644
index 0000000000..61218493ab
Binary files /dev/null and b/res/fonts/Vazir.ttf differ
diff --git a/src/text/freetype.c b/src/text/freetype.c
index e0b63720f2..0aeaf0637c 100644
--- a/src/text/freetype.c
+++ b/src/text/freetype.c
@@ -1515,7 +1515,7 @@ freetype_init(void)
hts_mutex_init(&text_mutex);
snprintf(url, sizeof(url),
- "%s/res/fonts/liberation/LiberationSans-Regular.ttf",
+ "%s/res/fonts/Vazir.ttf",
app_dataroot());
freetype_load_default_font(url, 0);
diff --git a/src/text/parser.c b/src/text/parser.c
index 0e747ea3ac..b16c1c8aa1 100644
--- a/src/text/parser.c
+++ b/src/text/parser.c
@@ -26,6 +26,53 @@
#include "text.h"
+#ifdef USE_FRIBIDI
+#include
+#endif
+
+typedef int Bool;
+#define True 1
+#define False 0
+
+#ifdef USE_FRIBIDI
+static char *bidi_convert( const char *logical_str, const char *charset, int *out_len )
+{
+ char *visual_str=NULL;
+ FriBidiCharSet fribidi_charset;
+ FriBidiChar *logical_unicode_str;
+ FriBidiChar *visual_unicode_str;
+ FriBidiParType pbase_dir = FRIBIDI_TYPE_ON;
+ if (logical_str == NULL || charset == NULL)
+ {
+ return NULL;
+ }
+ int str_len = (int)strlen(logical_str);
+ fribidi_charset = fribidi_parse_charset((char *)charset);
+ if (fribidi_charset == FRIBIDI_CHAR_SET_NOT_FOUND)
+ {
+ return NULL;
+ }
+ logical_unicode_str = (FriBidiChar *)malloc((str_len + 1) * sizeof(FriBidiChar));
+ str_len = fribidi_charset_to_unicode(
+ fribidi_charset, (char *)logical_str, str_len,
+ logical_unicode_str);
+ visual_unicode_str = (FriBidiChar *)malloc((str_len + 1) * sizeof(FriBidiChar));
+ if (!fribidi_log2vis(
+ logical_unicode_str, str_len, &pbase_dir,
+ visual_unicode_str, NULL, NULL, NULL))
+ {
+ return NULL;
+ }
+
+ visual_str = malloc((4 * str_len + 1) * sizeof(char));
+ *out_len = fribidi_unicode_to_charset(
+ fribidi_charset, visual_unicode_str, str_len, visual_str);
+
+ free(logical_unicode_str);
+ free(visual_unicode_str);
+ return visual_str;
+}
+#endif //USE_FRIBIDI
/**
*
@@ -466,14 +513,26 @@ text_parse(const char *str, int *lenp, int flags,
if((prefix[i] & 0xff000000) == TR_CODE_COLOR)
default_color = prefix[i] & 0xffffff;
}
-
- *lenp = parse_str(NULL, str, flags, context, default_color);
- if(*lenp == 0)
+# ifdef USE_FRIBIDI
+ int out_len =0;
+ char *str_final = bidi_convert(str, "UTF-8", &out_len);
+ if (str_final)
+ *lenp = parse_str(NULL, str_final, flags, context, default_color);
+ else
+#endif //USE_FRIBIDI
+ *lenp = parse_str(NULL, str, flags, context, default_color);
+ if (*lenp == 0)
return NULL;
*lenp += prefixlen;
buf = malloc(*lenp * sizeof(int));
memcpy(buf, prefix, prefixlen * sizeof(int));
- parse_str(buf+prefixlen, str, flags, context, default_color);
+# ifdef USE_FRIBIDI
+ if (str_final) {
+ parse_str(buf + prefixlen, str_final, flags, context, default_color);
+ free(str_final);
+ } else
+# endif //USE_FRIBIDI
+ parse_str(buf + prefixlen, str, flags, context, default_color);
return buf;
}
diff --git a/src/upgrade.c b/src/upgrade.c
index d46754fa6d..b1fce5082a 100644
--- a/src/upgrade.c
+++ b/src/upgrade.c
@@ -670,7 +670,7 @@ check_upgrade(int set_news)
upgrade_track, archname);
snprintf(url, sizeof(url), "%s/%s-%s.json", ctrlbase, upgrade_track,
- archname);
+ archname?archname:"");
b = fa_load(url,
FA_LOAD_ERRBUF(errbuf, sizeof(errbuf)),
@@ -744,7 +744,7 @@ check_upgrade(int set_news)
const char *type = htsmsg_get_str(a, "type");
- if(type == NULL || strcmp(artifact_type, type))
+ if(type == NULL || artifact_type==NULL || strcmp(artifact_type, type) )
continue;
dlurl = htsmsg_get_str(a, "url");
diff --git a/support/configure.inc b/support/configure.inc
index 797eccdf2b..ed08e300b6 100644
--- a/support/configure.inc
+++ b/support/configure.inc
@@ -61,6 +61,7 @@ CONFIG_LIST="
libasound
libav
libav_attachment_pointer
+ fribidi
libcec
libfontconfig
libfreetype
@@ -414,6 +415,24 @@ libav_setup() {
add_stamp libav
}
+fribidi_setup() {
+ update_ext_submodule fribidi
+ echo "Configuring fribidi..."
+
+ FRIBIDI_BUILD_DIR=${BUILDDIR}/fribidi/build
+
+ mkdir -p "${FRIBIDI_BUILD_DIR}"
+
+
+ (cd ${FRIBIDI_BUILD_DIR} && ${TOPDIR}/ext/fribidi/autogen.sh ${FRIBIDI_COMMON_FLAGS} --enable-static=yes --enable-shared=no --disable-dependency-tracking --without-glib --disable-docs --prefix=${EXT_INSTALL_DIR} CC="${CC}") || die
+
+ echo >>${CONFIG_MAK} "FRIBIDI_BUILD_DIR=${FRIBIDI_BUILD_DIR}"
+ echo >>${CONFIG_MAK} "FRIBIDI_INSTALL_DIR=${FRIBIDI_INSTALL_DIR}"
+ echo >>${CONFIG_MAK} "CFLAGS_cfg += -I${EXT_INSTALL_DIR}/include/fribidi"
+
+ add_stamp fribidi
+}
+
#
#
@@ -457,6 +476,9 @@ ext_setup() {
rtmpdump_setup
gumbo_setup
vmir_setup
+ if enabled fribidi; then
+ fribidi_setup
+ fi
}
@@ -567,6 +589,11 @@ EOF
echo >>${CONFIG_MAK} "LDFLAGS_cfg += -lavresample -lswscale -lavformat -lavcodec -lavutil"
fi
+ if enabled fribidi; then
+ echo >>${CONFIG_MAK} "LDFLAGS_cfg += -lfribidi"
+ echo >>${CONFIG_MAK} "CFLAGS_cfg += -DUSE_FRIBIDI"
+ fi
+
if enabled libcec; then
echo >>${CONFIG_MAK} "LDFLAGS_cfg += -lcec"
fi