Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
4f4c9c7473
|
|
@ -2,84 +2,181 @@ name: Build viewer
|
|||
on: push
|
||||
env:
|
||||
AUTOBUILD_VARIABLES_FILE: ${{github.workspace}}/build-variables/variables
|
||||
EXTRA_ARGS: -DFMODSTUDIO=Off -DUSE_KDU=Off
|
||||
EXTRA_ARGS: -DFMODSTUDIO=ON -DUSE_KDU=ON --crashreporting
|
||||
build_secrets_checkout: ${{github.workspace}}/signing
|
||||
|
||||
jobs:
|
||||
build_matrix:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-11,ubuntu-18.04,windows-2022]
|
||||
os: [macos-10.15,ubuntu-18.04,windows-2022]
|
||||
grid: [sl,os]
|
||||
addrsize: [64,32]
|
||||
exclude:
|
||||
- os: ubuntu-18.04
|
||||
addrsize: 32
|
||||
- os: macos-11
|
||||
- os: macos-10.15
|
||||
addrsize: 32
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Set OS flag
|
||||
if: matrix.grid == 'os'
|
||||
run: echo "FS_GRID=-DOPENSIM:BOOL=ON" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
if: runner.os != 'Windows'
|
||||
id: py311
|
||||
with:
|
||||
python-version: '3.11'
|
||||
cache: 'pip'
|
||||
- run: pip3 install -r requirements.txt
|
||||
- name: Check python version
|
||||
run: python -V
|
||||
- name: Checkout build var
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: FirestormViewer/fs-build-variables
|
||||
path: build-variables
|
||||
- name: Setup rclone and download the folder
|
||||
uses: beqjanus/setup-rclone@main
|
||||
with:
|
||||
rclone_config: ${{ secrets.RCLONE_CONFIG }}
|
||||
|
||||
- name: Set SL flag
|
||||
if: matrix.grid == 'sl'
|
||||
run: echo "FS_GRID=-DOPENSIM:BOOL=OFF" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Get the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Set OS flag
|
||||
if: matrix.grid == 'os'
|
||||
run: echo "FS_GRID=-DOPENSIM:BOOL=ON" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Checkout build var
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: FirestormViewer/fs-build-variables
|
||||
path: build-variables
|
||||
- name: Set channel name
|
||||
if: matrix.addrsize == '64'
|
||||
run: echo "FS_RELEASE_CHAN=Releasex64" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Set channel name for 32 bit
|
||||
if: matrix.addrsize == '32'
|
||||
run: echo "FS_RELEASE_CHAN=Release" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Set SL flag
|
||||
if: matrix.grid == 'sl'
|
||||
run: echo "FS_GRID=-DOPENSIM:BOOL=OFF -DHAVOK_TPV:BOOL=ON" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: set VSVER for Windows builds
|
||||
if: runner.os == 'Windows'
|
||||
run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- name: Get the code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install required Ubuntu packages
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install python3-setuptools mesa-common-dev libgl1-mesa-dev libxinerama-dev libxrandr-dev libpulse-dev libglu1-mesa-dev
|
||||
- name: Checkout build var
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: FirestormViewer/fs-build-variables
|
||||
path: build-variables
|
||||
|
||||
- name: install autobuild
|
||||
run: pip3 install git+https://github.com/Nicky-D/autobuild@main_nd
|
||||
- name: rclone the private 3p packages on Windows
|
||||
if: runner.os == 'Windows'
|
||||
run: 'rclone copy fs_bundles: --include "*windows*bz2" .'
|
||||
- name: rclone the private 3p packages on MacOS
|
||||
if: runner.os == 'MacOS'
|
||||
run: 'rclone copy fs_bundles: --include "*darwin*bz2" .'
|
||||
- name: rclone the private 3p packages on Linux
|
||||
if: runner.os == 'Linux'
|
||||
run: 'rclone copy fs_bundles: --include "*linux*bz2" .'
|
||||
|
||||
- name: install autobuild
|
||||
run: pip3 install llbase
|
||||
- name: set VSVER for Windows builds
|
||||
if: runner.os == 'Windows'
|
||||
run: echo "AUTOBUILD_VSVER=170" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- name: Install certificate
|
||||
if: runner.os == 'macOS'
|
||||
env:
|
||||
FS_CERT: ${{ secrets.FS_CERT }}
|
||||
FS_CERT_PASS: ${{ secrets.FS_CERT_PASS }}
|
||||
FS_KEYCHAIN_PASS: ${{ secrets.FS_KEYCHAIN_PASS }}
|
||||
NOTARIZE_CREDS: ${{ secrets.NOTARIZE_CREDS }}
|
||||
run: |
|
||||
mkdir -p ${build_secrets_checkout}/code-signing-osx
|
||||
echo -n "$FS_CERT" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/fs-cert.p12
|
||||
echo -n "$FS_CERT_PASS" >${build_secrets_checkout}/code-signing-osx/password.txt
|
||||
echo -n "$NOTARIZE_CREDS" | base64 --decode --output ${build_secrets_checkout}/code-signing-osx/notarize_creds.sh
|
||||
security create-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain
|
||||
security set-keychain-settings -lut 21600 ~/Library/Keychains/viewer.keychain
|
||||
security unlock-keychain -p "$FS_KEYCHAIN_PASS" ~/Library/Keychains/viewer.keychain
|
||||
security import ${build_secrets_checkout}/code-signing-osx/fs-cert.p12 -P "$FS_CERT_PASS" -A -t cert -f pkcs12 -k ~/Library/Keychains/viewer.keychain
|
||||
security set-key-partition-list -S apple-tool:,apple:, -s -k "$FS_KEYCHAIN_PASS" -t private ~/Library/Keychains/viewer.keychain
|
||||
security list-keychain -d user -s ~/Library/Keychains/viewer.keychain
|
||||
- name: Install required Ubuntu packages
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install python3-setuptools mesa-common-dev libgl1-mesa-dev libxinerama-dev libxrandr-dev libpulse-dev libglu1-mesa-dev
|
||||
- name: install autobuild
|
||||
run: pip3 install git+https://github.com/Nicky-D/autobuild@main_nd
|
||||
|
||||
- name: Configure
|
||||
run: autobuild configure -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{github.ref_name}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
|
||||
shell: bash
|
||||
|
||||
- name: build
|
||||
run: autobuild build -c ReleaseFS -A${{matrix.addrsize}} --no-configure
|
||||
shell: bash
|
||||
- name: install autobuild
|
||||
run: pip3 install llbase
|
||||
|
||||
- name: publish ${{ matrix.os }} artifacts
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: |
|
||||
build-*/newview/Release/*Setup.exe
|
||||
build-*/newview/Release/*.xz
|
||||
- name: edit installables (64 bit)
|
||||
if: runner.os == 'Windows' && matrix.addrsize == 64
|
||||
run: |
|
||||
autobuild installables edit llphysicsextensions_tpv platform=windows${{matrix.addrsize}} url='file:///\${{ github.workspace }}\llphysicsextensions_tpv-1.0.571939-windows${{matrix.addrsize}}-571939.tar.bz2'
|
||||
autobuild installables edit fmodstudio platform=windows${{matrix.addrsize}} url='file:///\${{ github.workspace }}\fmodstudio-2.02.09-windows${{matrix.addrsize}}-222890941.tar.bz2'
|
||||
shell: bash
|
||||
|
||||
- name: publish ${{ matrix.os }} artifacts
|
||||
if: runner.os == 'Linux'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: build-linux-*/newview/*.xz
|
||||
- name: edit installables (32 bit)
|
||||
if: runner.os == 'Windows' && matrix.addrsize == 32
|
||||
run: |
|
||||
autobuild installables edit llphysicsextensions_tpv platform=windows url='file:///\${{ github.workspace }}\llphysicsextensions_tpv-1.0.571939-windows-571939.tar.bz2'
|
||||
autobuild installables edit fmodstudio platform=windows url='file:///\${{ github.workspace }}\fmodstudio-2.02.09-windows-222890940.tar.bz2'
|
||||
shell: bash
|
||||
|
||||
- name: publish ${{ matrix.os }} artifacts
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: build-darwin-*/newview/*.dmg
|
||||
- name: edit installables (32/64 agnostic)
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
autobuild installables edit kdu platform=windows url='file:///\${{ github.workspace }}\kdu-8.2-windows-212351246.tar.bz2'
|
||||
shell: bash
|
||||
|
||||
- name: edit installables
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
autobuild installables edit llphysicsextensions_tpv platform=darwin${{matrix.addrsize}} url='file:////${{ github.workspace }}/llphysicsextensions_tpv-1.0.571939-darwin${{matrix.addrsize}}-571939.tar.bz2'
|
||||
autobuild installables edit kdu platform=darwin url='file:////${{ github.workspace }}/kdu-8.2-darwin-212431232.tar.bz2'
|
||||
autobuild installables --debug edit fmodstudio platform=darwin${{matrix.addrsize}} url='file:////${{ github.workspace }}/fmodstudio-2.02.09-darwin${{matrix.addrsize}}-5.tar.bz2'
|
||||
shell: bash
|
||||
|
||||
- name: edit installables
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
autobuild installables edit kdu platform=linux${{matrix.addrsize}} url='file:////${{ github.workspace }}/kdu-8.2-linux${{matrix.addrsize}}_bionic-220911445.tar.bz2'
|
||||
autobuild installables edit fmodstudio platform=linux${{matrix.addrsize}} url='file:////${{ github.workspace }}/fmodstudio-2.02.09-linux${{matrix.addrsize}}-222891103.tar.bz2'
|
||||
shell: bash
|
||||
|
||||
- name: Configure
|
||||
run: autobuild configure --debug -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
|
||||
shell: bash
|
||||
|
||||
- name: build
|
||||
run: autobuild build --debug -c ReleaseFS -A${{matrix.addrsize}} --no-configure
|
||||
shell: bash
|
||||
|
||||
- name: publish Windows artifacts
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: |
|
||||
build-*/newview/Release/*Setup.exe
|
||||
build-*/newview/Release/*.xz
|
||||
|
||||
- name: publish Linux artifacts
|
||||
if: runner.os == 'Linux'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: |
|
||||
build-linux-*/newview/*.xz
|
||||
build-linux-*/newview/*.bz2
|
||||
|
||||
- name: publish MacOS artifacts
|
||||
if: runner.os == 'macOS'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.os }}-${{matrix.addrsize}}-${{matrix.grid}}-artifacts.zip
|
||||
path: |
|
||||
build-darwin-*/newview/*.dmg
|
||||
build-darwin-*/newview/*.bz2
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* @file
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2022&license=fsviewerlgpl$
|
||||
* $LicenseInfo:firstyear=2023&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2020, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -3427,7 +3427,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>canonical_repo</key>
|
||||
<string>https://github.com/secondlife/viewer</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2022, The Phoenix Firestorm Project, Inc.</string>
|
||||
<string>Copyright (c) 2023, The Phoenix Firestorm Project, Inc.</string>
|
||||
<key>description</key>
|
||||
<string>Firestorm Viewer</string>
|
||||
<key>license</key>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,211 @@
|
|||
#!/bin/python3
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import zipfile
|
||||
import glob
|
||||
import shutil
|
||||
|
||||
# iterate over the files in a directory and pass them to a command line subshell
|
||||
def get_files(path):
|
||||
files = []
|
||||
for root, dirs, files in os.walk(path):
|
||||
# print(f"Found : {files}")
|
||||
return files
|
||||
return None
|
||||
|
||||
|
||||
# run a command line subshell and return the output
|
||||
|
||||
# We want to get the following output by looping over the files
|
||||
# DOWNLOADS
|
||||
# -------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Windows for SL 64 bit
|
||||
# https://downloads.firestormviewer.org/preview/windows/Phoenix-Firestorm-Releasex64-6-6-8-68355_Setup.exe
|
||||
|
||||
# MD5: 3094776F5DB11B6A959B0F3AED068C6A
|
||||
|
||||
# Windows for SL 32 bit
|
||||
# https://downloads.firestormviewer.org/preview/windows/Phoenix-Firestorm-Release-6-6-8-68355_Setup.exe
|
||||
|
||||
# MD5: 2F960B3353971FFF63307B5210D306F5
|
||||
|
||||
# Windows for Opensim 64bit
|
||||
# https://downloads.firestormviewer.org/preview/windows/Phoenix-FirestormOS-Releasex64-6-6-8-68355_Setup.exe
|
||||
|
||||
# MD5: 6218D7B826538BB956699F9581532ECE
|
||||
|
||||
# Windows for Opensim 32bit
|
||||
# https://downloads.firestormviewer.org/preview/windows/Phoenix-FirestormOS-Release-6-6-8-68355_Setup.exe
|
||||
|
||||
# MD5: D636CAFD287B4C8B96D726FE2A145327
|
||||
|
||||
# -------------------------------------------------------------------------------------------------------
|
||||
# Mac OSX for SL
|
||||
# https://downloads.firestormviewer.org/preview/mac/Phoenix-Firestorm-Releasex64-6-6-8-68355.dmg
|
||||
|
||||
# MD5: DA5AF534690328078B0B7BCEEA8D6959
|
||||
|
||||
# Mac OSX for Opensim
|
||||
# https://downloads.firestormviewer.org/preview/mac/Phoenix-FirestormOS-Releasex64-6-6-8-68355.dmg
|
||||
|
||||
# MD5: 16CA020E73760D8205E2314D07EEC90E
|
||||
|
||||
# -------------------------------------------------------------------------------------------------------
|
||||
# Linux for SL
|
||||
# https://downloads.firestormviewer.org/preview/linux/Phoenix-Firestorm-Releasex64-6-6-8-68355.tar.xz
|
||||
|
||||
# MD5: 1A0C50065077B92889FFBC651E4278E4
|
||||
|
||||
# Linux for Opensim
|
||||
# https://downloads.firestormviewer.org/preview/linux/Phoenix-FirestormOS-Releasex64-6-6-8-68355.tar.xz
|
||||
|
||||
# MD5: 9D5D8021F376194B42F6E7D8E537E45E
|
||||
|
||||
# -------------------------------------------------------------------------------------------------------
|
||||
|
||||
def run_cmd(cmd):
|
||||
# print(cmd)
|
||||
return os.popen(cmd).read()
|
||||
|
||||
#using the md5sum command get the md5 for the file
|
||||
|
||||
def get_md5(mdfile):
|
||||
# print(f"mdfile is {mdfile}")
|
||||
md5sum = run_cmd(f"md5sum {mdfile}")
|
||||
#split md5sum on space
|
||||
md5sum = md5sum.split()[0]
|
||||
#remove leading '\'
|
||||
md5sum = md5sum[1:]
|
||||
return md5sum
|
||||
|
||||
def unzip_file(zip_file, unzip_dir):
|
||||
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
||||
zip_ref.extractall(unzip_dir)
|
||||
|
||||
def flatten_tree(tree_root):
|
||||
for root, flatten_dirs, files in os.walk(tree_root, topdown=False):
|
||||
for file in files:
|
||||
# Construct the full path to the file
|
||||
file_path = os.path.join(root, file)
|
||||
# Move the file to the root directory
|
||||
shutil.move(file_path, tree_root)
|
||||
for dir in flatten_dirs:
|
||||
# Construct the full path to the subdirectory
|
||||
subdir_path = os.path.join(root, dir)
|
||||
# Delete the subdirectory and its contents
|
||||
shutil.rmtree(subdir_path)
|
||||
|
||||
|
||||
# parse args first arg optional -r (release) second arg mandatory string path_to_directory
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="print_download_list",
|
||||
description="Prints the list of files for download and their md5 checksums"
|
||||
)
|
||||
parser.add_argument("-r", "--release", required=False, default=False, action="store_true", help="use the release folder in the target URL")
|
||||
parser.add_argument("-u", "--unzip", required=False, default=False, action="store_true", help="unzip the github artifact first")
|
||||
# add path_to_directory required parameter to parser
|
||||
parser.add_argument("path_to_directory", help="path to the directory in which we'll look for the files")
|
||||
|
||||
args = parser.parse_args()
|
||||
path_to_directory = args.path_to_directory
|
||||
release = args.release
|
||||
|
||||
dirs = ["windows", "mac", "linux"]
|
||||
|
||||
if args.unzip:
|
||||
# unzip the github artifact for this OS (`dir`) into the folder `dir`
|
||||
# get the .zip files in args.path_to_directory using glob
|
||||
zips = glob.glob(f"{args.path_to_directory}/*.zip")
|
||||
for file in zips:
|
||||
# print(f"unzipping {file}")
|
||||
if "ubuntu" in file.lower():
|
||||
unzip_file(file, os.path.join(args.path_to_directory, "linux"))
|
||||
if "windows" in file.lower():
|
||||
unzip_file(file, os.path.join(args.path_to_directory, "windows"))
|
||||
if "macos" in file.lower():
|
||||
unzip_file(file, os.path.join(args.path_to_directory, "mac"))
|
||||
for dir in dirs:
|
||||
flatten_tree(os.path.join(args.path_to_directory, dir))
|
||||
# Now move the symbols files to the symbols folder
|
||||
symbols_folder = os.path.join(args.path_to_directory, "symbols")
|
||||
os.mkdir(symbols_folder)
|
||||
# Traverse the directory tree and move all of the files to the root directory
|
||||
symbol_archives = glob.glob(f"{args.path_to_directory}/**/*_hvk*", recursive=True)
|
||||
for sym_file in symbol_archives:
|
||||
print(f"Moving {sym_file} to {symbols_folder}")
|
||||
shutil.move(sym_file, symbols_folder)
|
||||
symbol_archives = glob.glob(f"{args.path_to_directory}/**/*_oss*", recursive=True)
|
||||
for sym_file in symbol_archives:
|
||||
print(f"Moving {sym_file} to {symbols_folder}")
|
||||
shutil.move(sym_file, symbols_folder)
|
||||
|
||||
|
||||
file_dict = {}
|
||||
md5_dict = {}
|
||||
|
||||
for dir in dirs:
|
||||
dir = dir.lower()
|
||||
files = get_files(os.path.join(args.path_to_directory, dir))
|
||||
for file in files:
|
||||
full_file = os.path.join(args.path_to_directory, dir, file)
|
||||
md5 = get_md5(full_file)
|
||||
base_name = os.path.basename(file)
|
||||
if "-Release-" in base_name:
|
||||
wordsize = "32"
|
||||
else:
|
||||
wordsize = "64"
|
||||
|
||||
if "FirestormOS-" in base_name:
|
||||
grid = "OS"
|
||||
else:
|
||||
grid = "SL"
|
||||
|
||||
if dir in dirs:
|
||||
file_dict[f"{grid}{dir}{wordsize}"] = full_file
|
||||
md5_dict[f"{grid}{dir}{wordsize}"] = md5
|
||||
|
||||
download_root_preview = "https://downloads.firestormviewer.org/preview"
|
||||
download_root_release = "https://downloads.firestormviewer.org/release"
|
||||
|
||||
if args.release:
|
||||
download_root = download_root_release
|
||||
else:
|
||||
download_root = download_root_preview
|
||||
|
||||
print('''
|
||||
DOWNLOADS''')
|
||||
|
||||
platforms_printable = {"windows":"MS Windows", "mac":"MacOS", "linux":"Linux"}
|
||||
grids_printable = {"SL":"Second Life", "OS":"OpenSim"}
|
||||
|
||||
for dir in dirs:
|
||||
print(f'''-------------------------------------------------------------------------------------------------------
|
||||
{platforms_printable[dir]}
|
||||
''')
|
||||
dir=dir.lower()
|
||||
wordsize = "64"
|
||||
platform = f"{platforms_printable[dir]}"
|
||||
for grid in ["SL", "OS"]:
|
||||
grid_printable = f"{grids_printable[grid]}"
|
||||
print (f"{platform} for {grid_printable} ({wordsize}-bit)")
|
||||
print ( "{}/{}/{}".format(download_root,dir,os.path.basename(file_dict[f"{grid}{dir}{wordsize}"])) )
|
||||
print ()
|
||||
print ( "MD5: {}".format(md5_dict[f"{grid}{dir}{wordsize}"]) )
|
||||
print ()
|
||||
if(dir == "windows"):
|
||||
# Need to do 32 bit as well
|
||||
wordsize = "32"
|
||||
print (f"{platform} for {grid_printable} ({wordsize}-bit)")
|
||||
print ( "{}/{}/{}".format(download_root,dir,os.path.basename(file_dict[f"{grid}{dir}{wordsize}"])) )
|
||||
print ()
|
||||
print ( "MD5: {}".format(md5_dict[f"{grid}{dir}{wordsize}"]) )
|
||||
print ()
|
||||
wordsize = "64"
|
||||
|
||||
print('''
|
||||
-------------------------------------------------------------------------------------------------------''')
|
||||
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# open the avatar_lad.xml file and load it as a dom object
|
||||
|
||||
from xml.dom import minidom
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
# add positional argument for avatar_lad.xml
|
||||
parser.add_argument("avatar_lad", help="path to avatar_lad.xml file")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
# using minidom open the avatar_lad.xml file and load it as a dom object
|
||||
|
||||
|
||||
# open the avatar_lad.xml file and load it as a dom object
|
||||
|
||||
dom = minidom.parse(open(args.avatar_lad, "rb"))
|
||||
|
||||
|
||||
# get the first element in the dom object
|
||||
|
||||
root = dom.documentElement
|
||||
|
||||
# find the "skeleton" child node
|
||||
skeleton = root.getElementsByTagName("skeleton")[0]
|
||||
|
||||
|
||||
for child in skeleton.childNodes:
|
||||
if child.nodeType == child.ELEMENT_NODE:
|
||||
# if tagname is "attachment_point" and 'hud' attribute doesn't exist print id and name
|
||||
if child.tagName == "attachment_point":
|
||||
if not child.hasAttribute("hud"):
|
||||
print(f"{child.getAttribute('id')} - {child.getAttribute('name')}")
|
||||
else:
|
||||
print(f"{child.getAttribute('id')} - [HUD] {child.getAttribute('name')}")
|
||||
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ protected:
|
|||
typedef QueueT queue_type;
|
||||
QueueT mStorage;
|
||||
U32 mCapacity;
|
||||
bool mClosed;
|
||||
std::atomic<bool> mClosed; // <FS:Beq/> Try harder to stop the compiler optimising the mClosed state inside the loops
|
||||
|
||||
boost::fibers::timed_mutex mLock;
|
||||
typedef std::unique_lock<decltype(mLock)> lock_t;
|
||||
|
|
@ -308,7 +308,13 @@ bool LLThreadSafeQueue<ElementT, QueueT>::push_(lock_t& lock, T&& element)
|
|||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_THREAD;
|
||||
if (mStorage.size() >= mCapacity)
|
||||
// <FS:Beq> Make thread queue capacity hangs visible
|
||||
// return false;
|
||||
{
|
||||
LL_WARNS("ThreadPool") << "Threadsafe queue push_(lockacquired) queue full " << mStorage.size() << " >= " << mCapacity << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
mStorage.push(std::forward<T>(element));
|
||||
lock.unlock();
|
||||
|
|
@ -336,7 +342,13 @@ bool LLThreadSafeQueue<ElementT, QueueT>::pushIfOpen(T&& element)
|
|||
return true;
|
||||
|
||||
// Storage Full. Wait for signal.
|
||||
mCapacityCond.wait(lock1);
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour. Time bound the sleep
|
||||
// mCapacityCond.wait(lock1);
|
||||
// When the queue is full and the consuming thread has exited we would never wake up.
|
||||
// For safety, we now wait max half a second then recheck close.
|
||||
const auto timeout = std::chrono::milliseconds(500);
|
||||
mCapacityCond.wait_for(lock1, timeout);
|
||||
// </FS:Beq>
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,10 @@ namespace LL
|
|||
* ThreadPool listens for application shutdown messages on the "LLApp"
|
||||
* LLEventPump. Call close() to shut down this ThreadPool early.
|
||||
*/
|
||||
void close();
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
// void close();
|
||||
virtual void close();
|
||||
// </FS:Beq>
|
||||
|
||||
std::string getName() const { return mName; }
|
||||
size_t getWidth() const { return mThreads.size(); }
|
||||
|
|
@ -61,7 +64,8 @@ namespace LL
|
|||
|
||||
private:
|
||||
void run(const std::string& name);
|
||||
|
||||
|
||||
protected: // <FS:Beq/> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
WorkQueue mQueue;
|
||||
std::string mName;
|
||||
size_t mThreadCount;
|
||||
|
|
|
|||
|
|
@ -845,7 +845,7 @@ LLSD LLModel::writeModel(
|
|||
|
||||
mdl[model_names[idx]][i]["TriangleList"] = indices;
|
||||
|
||||
if (skinning)
|
||||
if (skinning && idx != LLModel::LOD_PHYSICS)
|
||||
{
|
||||
//write out skin weights
|
||||
|
||||
|
|
|
|||
|
|
@ -505,7 +505,12 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
// e.g. OS Window for upload something or Input Window...
|
||||
// mModifiers instance variable is for insertText: or insertText:replacementRange: (by Pell Smit)
|
||||
mModifiers = [theEvent modifierFlags];
|
||||
unichar ch = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
|
||||
NSString *str_no_modifiers = [theEvent charactersIgnoringModifiers];
|
||||
unichar ch = 0;
|
||||
if (str_no_modifiers.length)
|
||||
{
|
||||
ch = [str_no_modifiers characterAtIndex:0];
|
||||
}
|
||||
bool acceptsText = mHasMarkedText ? false : callKeyDown(&eventData, keycode, mModifiers, ch);
|
||||
|
||||
if (acceptsText &&
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llwindowcallbacks.h"
|
||||
|
||||
// Linden library includes
|
||||
#include "llapp.h" // <FS:Beq/> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
#include "llerror.h"
|
||||
#include "llexception.h"
|
||||
#include "llfasttimer.h"
|
||||
|
|
@ -88,6 +89,7 @@ const UINT WM_DUMMY_(WM_USER + 0x0017);
|
|||
const UINT WM_POST_FUNCTION_(WM_USER + 0x0018);
|
||||
|
||||
extern BOOL gDebugWindowProc;
|
||||
extern BOOL gDisconnected; // <FS:Beq/> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
|
||||
static std::thread::id sWindowThreadId;
|
||||
static std::thread::id sMainThreadId;
|
||||
|
|
@ -346,6 +348,7 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
|
|||
LLWindowWin32Thread();
|
||||
|
||||
void run() override;
|
||||
void close() override; // <FS:Beq/> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
|
||||
/// called by main thread to post work to this window thread
|
||||
template <typename CALLABLE>
|
||||
|
|
@ -353,6 +356,7 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
|
|||
{
|
||||
try
|
||||
{
|
||||
LL_DEBUGS("Window") << "post( callable ) to work queue" << LL_ENDL; // <FS:Beq/> extra debug for threaded window handler
|
||||
getQueue().post(std::forward<CALLABLE>(func));
|
||||
}
|
||||
catch (const LLThreadSafeQueueInterrupt&)
|
||||
|
|
@ -897,9 +901,12 @@ void LLWindowWin32::close()
|
|||
// This causes WM_DESTROY to be sent *immediately*
|
||||
if (!destroy_window_handler(mWindowHandle))
|
||||
{
|
||||
OSMessageBox(mCallbacks->translateString("MBDestroyWinFailed"),
|
||||
mCallbacks->translateString("MBShutdownErr"),
|
||||
OSMB_OK);
|
||||
// <FS:Beq> Can't use a message box here because we're about to stop servicing the events.
|
||||
// OSMessageBox(mCallbacks->translateString("MBDestroyWinFailed"),
|
||||
// mCallbacks->translateString("MBShutdownErr"),
|
||||
// OSMB_OK);
|
||||
LL_INFOS("Window") << "Destroying Window failed" << LL_ENDL;
|
||||
// </FS:Beq>
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -918,6 +925,10 @@ void LLWindowWin32::close()
|
|||
// operations we're asking. That's the last time WE should touch it.
|
||||
mhDC = NULL;
|
||||
mWindowHandle = NULL;
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] close the related queues first to prevent spinning.
|
||||
mFunctionQueue.close();
|
||||
mMouseQueue.close();
|
||||
// </FS:Beq>
|
||||
mWindowThread->close();
|
||||
}
|
||||
|
||||
|
|
@ -4734,11 +4745,45 @@ private:
|
|||
std::string mPrev;
|
||||
};
|
||||
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
// Provide a close() override that ignores the initial close triggered by the threadpool detecting "quit"
|
||||
// but waits for the viewer to be disconected and the second close call triggered by the app window destructor
|
||||
void LLWindowWin32::LLWindowWin32Thread::close()
|
||||
{
|
||||
assert_main_thread();
|
||||
if (! mQueue.isClosed() && gDisconnected)
|
||||
{
|
||||
LL_DEBUGS("ThreadPool") << mName << " closing queue and joining threads" << LL_ENDL;
|
||||
mQueue.close();
|
||||
for (auto& pair: mThreads)
|
||||
{
|
||||
LL_DEBUGS("ThreadPool") << mName << " waiting on thread " << pair.first << LL_ENDL;
|
||||
// As we cannot seem to rely on the clean and timely exit of the windows thread in ALL situations we apply a timeout.
|
||||
std::future<void> f = std::async(std::launch::async, [&] { pair.second.join(); });
|
||||
if (f.wait_until(std::chrono::steady_clock::now() + std::chrono::seconds(5)) == std::future_status::ready) {
|
||||
LL_DEBUGS("ThreadPool") << mName << " joined normally." << LL_ENDL;
|
||||
} else {
|
||||
LL_WARNS("ThreadPool") << mName << " join timed out." << LL_ENDL;
|
||||
// the specified time point was reached before the thread finished execution and could be joined
|
||||
}
|
||||
}
|
||||
LL_DEBUGS("ThreadPool") << mName << " shutdown complete" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("ThreadPool") << mName << " shutdown request ignored - not yet disconneced." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
void LLWindowWin32::LLWindowWin32Thread::run()
|
||||
{
|
||||
sWindowThreadId = std::this_thread::get_id();
|
||||
LogChange logger("Window");
|
||||
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
try
|
||||
{
|
||||
// </FS:Beq>
|
||||
while (! getQueue().done())
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_WIN32;
|
||||
|
|
@ -4765,18 +4810,31 @@ void LLWindowWin32::LLWindowWin32Thread::run()
|
|||
", ", msg.wParam, ")");
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
|
||||
mMessageQueue.pushFront(msg);
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
// mMessageQueue.pushFront(msg);
|
||||
try
|
||||
{
|
||||
// <FS:Beq> Nobody is reading this queue once we are quitting. Writing to it causes a hang.
|
||||
if(!LLApp::isQuitting())
|
||||
mMessageQueue.pushFront(msg);
|
||||
}
|
||||
catch (const LLThreadSafeQueueInterrupt&)
|
||||
{
|
||||
// Shutdown timing is tricky. The main thread can end up trying
|
||||
// to post a cursor position after having closed the WorkQueue.
|
||||
logger.always("Message procesing tried to push() to closed MessageQueue - caught");
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("w32t - Function Queue");
|
||||
logger.onChange("runPending()");
|
||||
logger.onChange("runPending()");
|
||||
//process any pending functions
|
||||
getQueue().runPending();
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_WIN32("w32t - Sleep");
|
||||
|
|
@ -4785,16 +4843,42 @@ void LLWindowWin32::LLWindowWin32Thread::run()
|
|||
}
|
||||
#endif
|
||||
}
|
||||
// <FS:Beq> [FIRE-32453][BUG-232971] Improve shutdown behaviour.
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
logger.always("Windows thread exiting - Exception: ", e.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
logger.always("Windows thread exiting - Exception: Unknown");
|
||||
}
|
||||
logger.always("done - queue closed on windows thread.");
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
void LLWindowWin32::post(const std::function<void()>& func)
|
||||
{
|
||||
mFunctionQueue.pushFront(func);
|
||||
try
|
||||
{
|
||||
mFunctionQueue.pushFront(func);
|
||||
}
|
||||
catch (const LLThreadSafeQueueInterrupt&)
|
||||
{
|
||||
LL_INFOS("Window") << "push function to closed Queue caught" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLWindowWin32::postMouseButtonEvent(const std::function<void()>& func)
|
||||
{
|
||||
mMouseQueue.pushFront(func);
|
||||
try
|
||||
{
|
||||
mMouseQueue.pushFront(func);
|
||||
}
|
||||
catch (const LLThreadSafeQueueInterrupt&)
|
||||
{
|
||||
LL_INFOS("Window") << "push mouse event to closed Queue caught" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLWindowWin32::kickWindowThread(HWND windowHandle)
|
||||
|
|
|
|||
|
|
@ -2681,7 +2681,7 @@ if (DARWIN)
|
|||
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
|
||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
|
||||
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2022 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2023 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
|
||||
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
CFBundleName = "Firestorm";
|
||||
|
||||
CFBundleShortVersionString = "Firestorm version %%VERSION%%";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2022 The Phoenix Firestorm Project, Inc.";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2023 The Phoenix Firestorm Project, Inc.";
|
||||
|
|
|
|||
|
|
@ -2062,13 +2062,12 @@ bool LLAppViewer::cleanup()
|
|||
|
||||
// Give any remaining SLPlugin instances a chance to exit cleanly.
|
||||
LLPluginProcessParent::shutdown();
|
||||
// <FS:Beq> [FIRE-32453] [BUG-232971] disconnect sooner to force the cache write.
|
||||
// disconnectViewer();
|
||||
// LLViewerCamera::deleteSingleton();
|
||||
|
||||
// LL_INFOS() << "Viewer disconnected" << LL_ENDL;
|
||||
disconnectViewer();
|
||||
LLViewerCamera::deleteSingleton();
|
||||
// </FS:Beq>
|
||||
|
||||
LL_INFOS() << "Viewer disconnected" << LL_ENDL;
|
||||
|
||||
if (gKeyboard)
|
||||
{
|
||||
gKeyboard->resetKeys();
|
||||
|
|
@ -4870,10 +4869,6 @@ void LLAppViewer::removeDumpDir()
|
|||
|
||||
void LLAppViewer::forceQuit()
|
||||
{
|
||||
// <FS:Beq> [FIRE-32453] [BUG-232971] disconnect sooner to force the cache write.
|
||||
disconnectViewer();
|
||||
LL_INFOS() << "Viewer disconnected" << LL_ENDL;
|
||||
// </FS:Beq>
|
||||
LLApp::setQuitting();
|
||||
}
|
||||
|
||||
|
|
@ -6344,12 +6339,7 @@ void LLAppViewer::idleNetwork()
|
|||
}
|
||||
}
|
||||
add(LLStatViewer::NUM_NEW_OBJECTS, gObjectList.mNumNewObjects);
|
||||
// <FS:Beq> [FIRE-32453] [BUG-232971] disconnect sooner to force the cache write.
|
||||
if(gDisconnected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
// Retransmit unacknowledged packets.
|
||||
gXferManager->retransmitUnackedPackets();
|
||||
gAssetStorage->checkForTimeouts();
|
||||
|
|
@ -6378,7 +6368,6 @@ void LLAppViewer::disconnectViewer()
|
|||
{
|
||||
return;
|
||||
}
|
||||
gDisconnected = TRUE;// <FS:Beq> [FIRE-32453] [BUG-232971] disconnect sooner to force the cache write.
|
||||
//
|
||||
// Cleanup after quitting.
|
||||
//
|
||||
|
|
@ -6461,7 +6450,7 @@ void LLAppViewer::disconnectViewer()
|
|||
LLDestroyClassList::instance().fireCallbacks();
|
||||
|
||||
cleanup_xfer_manager();
|
||||
// gDisconnected = TRUE; // <FS:Beq/> [FIRE-32453] [BUG-232971] disconnect sooner to force the cache write.
|
||||
gDisconnected = TRUE;
|
||||
|
||||
// Pass the connection state to LLUrlEntryParcel not to attempt
|
||||
// parcel info requests while disconnected.
|
||||
|
|
|
|||
|
|
@ -1446,7 +1446,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
else
|
||||
{
|
||||
mCanUseHTTP = false ;
|
||||
LL_WARNS(LOG_TXT) << "Texture not available via HTTP: empty URL." << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: empty URL." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ BEGIN
|
|||
VALUE "FileDescription", "Firestorm"
|
||||
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
VALUE "InternalName", "Firestorm"
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2022, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2023, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "OriginalFilename", "Firestorm.exe"
|
||||
VALUE "ProductName", "Firestorm"
|
||||
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
|
|
|
|||
|
|
@ -31,17 +31,6 @@
|
|||
<button name="close_btn" tool_tip="Diese Unterhaltung beenden"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Dieses Fenster schließen/erweitern"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
legacy_header_height="18"
|
||||
can_minimize="false"
|
||||
can_close="false"
|
||||
height="200"
|
||||
height="215"
|
||||
layout="topleft"
|
||||
name="Display Name"
|
||||
help_topic="display_name"
|
||||
|
|
@ -30,12 +30,12 @@
|
|||
length="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="16"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="25"
|
||||
text_color="EmphasisColor"
|
||||
name="lockout_text"
|
||||
top="50"
|
||||
top="65"
|
||||
use_ellipses="true"
|
||||
visible="false"
|
||||
width="410"
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@
|
|||
Decir en el chat local
|
||||
</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn">
|
||||
<button tool_tip="Usar el servicio de traducción seleccionado" name="translate_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn">
|
||||
<button tool_tip="Abre la transcripción del chat local" name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -19,17 +19,6 @@
|
|||
<button name="close_btn" tool_tip="Finalizar esta conversación"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Contraer/expandir este panel"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traducir chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traducir el chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
<floater name="nearby_chat" title="Chat local">
|
||||
<floater.string name="chatbox_label">Au chat local</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn"><button tool_tip="Utiliser le service de traduction sélectionné" name="translate_btn"/></layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn"><button tool_tip="Ouvrir l'historique de conversation." name="chat_history_btn"/></layout_panel>
|
||||
<layout_panel name="lp_chat_history_muted_btn"><button tool_tip="Affiche le texte ignoré dans l'historique de conversation." name="chat_history_muted_btn"/></layout_panel>
|
||||
<layout_panel name="lp_options_btn"><menu_button tool_tip="Options du Chat" name="chat_options_btn"/></layout_panel>
|
||||
|
|
|
|||
|
|
@ -10,15 +10,6 @@
|
|||
<button name="close_btn" tool_tip="Mettre fin à cette conversation"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Réduire/Développer ce panneau"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp"><check_box label="Traduire le chat" name="translate_chat_checkbox"/></layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_button_layout_panel"><button name="minz_btn" tool_tip="Affiche/Masque le panneau des messages"/></layout_panel>
|
||||
|
|
|
|||
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="outfit_snapshot" title="Photo de la tenue">
|
||||
<floater.string name="unknown">
|
||||
inconnu
|
||||
</floater.string>
|
||||
<string name="inventory_progress_str">
|
||||
Enregistrement dans l'inventaire
|
||||
</string>
|
||||
<string name="inventory_succeeded_str">
|
||||
Enregistré dans l'inventaire !!
|
||||
</string>
|
||||
<string name="inventory_failed_str">
|
||||
Échec de l'enregistrement.
|
||||
</string>
|
||||
<view name="controls_container">
|
||||
<button label="Rafraîchir" name="new_snapshot_btn" />
|
||||
<panel name="advanced_options_panel">
|
||||
<text name="layer_type_label">
|
||||
Capture :
|
||||
</text>
|
||||
<combo_box label="Couches de l'image" name="layer_types">
|
||||
<combo_box.item label="Couleurs" name="Colors" />
|
||||
<combo_box.item label="Profondeur" name="Depth" />
|
||||
<combo_box.item label="Profondeur (24 bits)" name="Depth24" />
|
||||
</combo_box>
|
||||
<check_box label="Interface" name="ui_check" />
|
||||
<check_box label="Solde L$" name="currency_check" />
|
||||
<check_box label="HUDs" name="hud_check" />
|
||||
<check_box label="Geler l'image (plein écran)" name="freeze_frame_check" />
|
||||
<check_box label="Actualisation automatique" name="auto_snapshot_check" />
|
||||
<text name="filter_list_label">
|
||||
Filtre :
|
||||
</text>
|
||||
<combo_box name="filters_combobox" tool_tip="Filtres d'images">
|
||||
<combo_box.item label="Pas de filtre" name="NoFilter" />
|
||||
</combo_box>
|
||||
</panel>
|
||||
<panel name="succeeded_panel">
|
||||
<text name="succeeded_lbl">
|
||||
Succés
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="failed_panel">
|
||||
<text name="failed_lbl">
|
||||
Échec
|
||||
</text>
|
||||
</panel>
|
||||
<text name="working_lbl">
|
||||
Je travaille
|
||||
</text>
|
||||
<text name="refresh_lbl">
|
||||
Actualisez pour enregistrer.
|
||||
</text>
|
||||
</view>
|
||||
<text name="image_res_text">
|
||||
[WIDTH]px (largeur) x [HEIGHT]px (hauteur)
|
||||
</text>
|
||||
<text name="file_size_label">
|
||||
[SIZE] Ko
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="simple_outfit_snapshot" title="Photo de la tenue">
|
||||
<button label="Photographier" name="new_snapshot_btn" />
|
||||
<button label="Sauver ([UPLOAD_COST]L$)" name="save_btn" />
|
||||
<button label="Annuler" name="cancel_btn" />
|
||||
</floater>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp"><check_box label="Traduire le chat" name="translate_chat_checkbox"/></layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -4,9 +4,6 @@
|
|||
Chat locale
|
||||
</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn">
|
||||
<button tool_tip="Usa il servizio traduzioni selezionato" name="translate_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn">
|
||||
<button tool_tip="Apri il log della chat locale" name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -19,17 +19,6 @@
|
|||
<button name="close_btn" tool_tip="Termina questa conversazione"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Minimizza/espandi questo pannello"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduci chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_button_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduci chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -5,9 +5,6 @@
|
|||
|
||||
<layout_stack name="ls_control_panel">
|
||||
|
||||
<layout_panel name="lp_translate_btn">
|
||||
<button tool_tip="選択した翻訳サービスを利用します。" name="translate_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn">
|
||||
<button tool_tip="周辺チャット履歴を開きます。" name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -40,31 +40,16 @@
|
|||
<button name="expand_collapse_btn" tool_tip="Collapse/Expand this pane" />
|
||||
<button name="tear_off_btn" />
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="speakers_list_panel" />
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="チャットを翻訳" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_holder">
|
||||
<chat_history name="chat_history" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
<chat_editor label="宛先" name="chat_editor"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="input_button_layout_panel">
|
||||
<button name="minz_btn" tool_tip="メッセージパネルの表示 / 非表示"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
<chat_editor label="宛先" name="chat_editor"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="input_button_layout_panel">
|
||||
<button name="minz_btn" tool_tip="メッセージパネルの表示 / 非表示"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</view>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="チャットを翻訳" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -409,7 +409,7 @@ teksturę:
|
|||
<check_box label="Rozmowy włączone" name="parcel_enable_voice_channel"/>
|
||||
<check_box label="Rozmowy włączone (ustawione przez Majątek)" name="parcel_enable_voice_channel_is_estate_disabled"/>
|
||||
<check_box label="Ogranicz komunikację głosową do obszaru tej działki" name="parcel_enable_voice_channel_local"/>
|
||||
<check_box label="Maskuj MOAP" name="obscure_moap" tool_tip="Media na primach znajdujących się poza tą działką nie powinny odtwarzać się automatycznie dla rezydentów będących na niej - i odwrotnie." />
|
||||
<check_box label="Ogranicz MOAP do obecnej działki" name="obscure_moap" tool_tip="Media na primach znajdujących się poza tą działką nie powinny odtwarzać się automatycznie dla rezydentów będących na niej - i odwrotnie." />
|
||||
</panel>
|
||||
<panel label="Dostęp" name="land_access_panel">
|
||||
<panel.string name="access_estate_defined">
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@
|
|||
Na czat w pobliżu
|
||||
</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn">
|
||||
<button tool_tip="Użyj zdefiniowanej wcześniej usługi tłumaczącej" name="translate_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn">
|
||||
<button tool_tip="Pokaż logi czatu w pobliżu" name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -19,17 +19,6 @@
|
|||
<button name="close_btn" tool_tip="Zakończ tą rozmowę" />
|
||||
<button name="expand_collapse_btn" tool_tip="Zwiń/Rozwiń ten panel" />
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Tłumacz czat" name="translate_chat_checkbox" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_button_layout_panel">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="simple_outfit_snapshot" title="Zdjęcie stroju">
|
||||
<button label="Zrób zdjęcie" name="new_snapshot_btn" />
|
||||
<button label="Zapisz ([UPLOAD_COST]L$)" name="save_btn" />
|
||||
<button label="Anuluj" name="cancel_btn" />
|
||||
</floater>
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
</text>
|
||||
<check_box label="Przeczytałem/am i zgadzam się na" name="agree_chk" />
|
||||
<text name="agree_list">
|
||||
Regulamin (Terms and Conditions), Politykę Prywatności (Privacy Policy) i Warunki korzystania z Usług (Terms of Service) wraz z wymagamiani rozwiązywania sporów.
|
||||
Regulamin (Terms and Conditions), Politykę Prywatności (Privacy Policy) i Warunki korzystania z Usług (Terms of Service).
|
||||
</text>
|
||||
<button label="Kontynuuj" label_selected="Kontynuuj" name="Continue" />
|
||||
<button label="Anuluj" label_selected="Anuluj" name="Cancel" />
|
||||
|
|
|
|||
|
|
@ -5193,6 +5193,14 @@ Rozpakowywanie: [UNPACK_TIME]s [USIZE]KB
|
|||
<notification name="SameFolderRequired">
|
||||
Wybrane elementy muszą znajdować się w tym samym folderze.
|
||||
</notification>
|
||||
<notification name="RiggedMeshAttachedToHUD">
|
||||
Dodatek o nazwie "[NAME]" dołączony do HUD "[POINT]" zawiera riggowany mesz.
|
||||
|
||||
Riggowane mesze są przeznaczone do dodawania do samego awatara. Ani ty, ani nikt inny nie zobaczy tego obiektu.
|
||||
|
||||
Jeśli chcesz zobaczyć ten obiekt, to usuń go i ponownie dołącz do punktu doczepienia na awatarze.
|
||||
<usetemplate ignoretext="Ostrzegaj, gdy dodatek z riggowanym meszem jest dołączany do punktu HUD" name="okignore" />
|
||||
</notification>
|
||||
<notification name="NoValidEnvSettingFound">
|
||||
Nie wybrano prawidłowego ustawienia otoczenia.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Tłumacz czat" name="translate_chat_checkbox" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -23,6 +23,13 @@
|
|||
<check_box label="Włączone" name="enable_media"/>
|
||||
<slider label="Rozmowy głosowe" name="Voice Volume"/>
|
||||
<check_box label="Włączone" name="enable_voice_check_volume"/>
|
||||
<text name="Listen media from">
|
||||
Odtwarzaj media i dźwięki:
|
||||
</text>
|
||||
<radio_group name="media_ear_location">
|
||||
<radio_item label="Z pozycji kamery" name="0" />
|
||||
<radio_item label="Z pozycji awatara" name="1" />
|
||||
</radio_group>
|
||||
<text name="auto_unmute_label">
|
||||
Wyłącz wyciszenie po teleportacji:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -5921,6 +5921,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
|
|||
<string name="Mav_Details_MAV_CONFIRMATION_DATA_MISMATCH">
|
||||
Kształt fizyczny zawiera uszkodzone dane. Spróbuj poprawić model fizyczny.
|
||||
</string>
|
||||
<string name="Mav_Details_MAV_BLOCK_MISSING">
|
||||
Brakujące dane. Upewnij się, że wysoki LOD jest obecny i prawidłowy. Ustaw model fizyczny, jeśli nie jest obecny.
|
||||
</string>
|
||||
<string name="Mav_Details_MAV_UNKNOWN_VERSION">
|
||||
Kształt fizyczny zawiera niepoprawną wersję. Ustaw poprawną wersję dla modelu fizycznego.
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -31,17 +31,6 @@
|
|||
<button name="close_btn" tool_tip="Encerrar esta conversa"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Recolher/expandir este painel"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduzir conversa" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduzir bate-papo" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -2,9 +2,6 @@
|
|||
<floater name="nearby_chat" title="Общий чат">
|
||||
<floater.string name="chatbox_label">В общий чат</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn">
|
||||
<button tool_tip="Использовать выбранный сервис перевода" name="translate_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_btn">
|
||||
<button tool_tip="Открыть историю общего чата." name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -31,17 +31,6 @@
|
|||
<button name="close_btn" tool_tip="Завершить этот разговор"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Развернуть/свернуть эту панель"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Переводить чат" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Перевести чат" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -31,17 +31,6 @@
|
|||
<button name="close_btn" tool_tip="Bu sohbeti bitir"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Bu panoyu Daralt/Genişlet"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Sohbeti çevir" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Sohbeti çevir" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -31,17 +31,6 @@
|
|||
<button name="close_btn" tool_tip="結束這個交談"/>
|
||||
<button name="expand_collapse_btn" tool_tip="縮疊/展開這個框"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="body_panel">
|
||||
<layout_stack name="im_panels">
|
||||
<layout_panel name="right_part_holder">
|
||||
<layout_stack name="translate_and_chat_stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="翻譯聊天內容" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_editor_layout_panel">
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="翻譯聊天內容" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
@ -609,13 +609,15 @@ class WindowsManifest(ViewerManifest):
|
|||
print ("Skipping GLOD library (assumming linked statically)")
|
||||
|
||||
# Get fmodstudio dll if needed
|
||||
if self.args['fmodstudio'] == 'ON':
|
||||
# if self.args['fmodstudio'] == 'ON':
|
||||
if self.args['fmodstudio'].lower() == 'on':
|
||||
if(self.args['configuration'].lower() == 'debug'):
|
||||
self.path("fmodL.dll")
|
||||
else:
|
||||
self.path("fmod.dll")
|
||||
|
||||
if self.args['openal'] == 'ON':
|
||||
# if self.args['openal'] == 'ON':
|
||||
if self.args['openal'].lower() == 'on':
|
||||
# Get openal dll
|
||||
self.path("OpenAL32.dll")
|
||||
self.path("alut.dll")
|
||||
|
|
@ -1344,6 +1346,7 @@ class DarwinManifest(ViewerManifest):
|
|||
|
||||
with self.prefix(src="", dst="Contents"): # everything goes in Contents
|
||||
bugsplat_db = self.args.get('bugsplat')
|
||||
print(f"debug: bugsplat_db={bugsplat_db}")
|
||||
if bugsplat_db:
|
||||
# Inject BugsplatServerURL into Info.plist if provided.
|
||||
Info_plist = self.dst_path_of("Info.plist")
|
||||
|
|
@ -1477,17 +1480,26 @@ class DarwinManifest(ViewerManifest):
|
|||
self.path2basename(relpkgdir, libfile)
|
||||
|
||||
# Fmod studio dylibs (vary based on configuration)
|
||||
if self.args['fmodstudio'] == 'ON':
|
||||
# <FS:Beq> Fix intolerant processing of booleans
|
||||
# if self.args['fmodstudio'].lower() == 'ON':
|
||||
usefmod = self.args['fmodstudio'].lower()
|
||||
print(f"debug: fmodstudio={usefmod}")
|
||||
if usefmod == 'on':
|
||||
if self.args['configuration'].lower() == 'debug':
|
||||
print("debug: fmodstudio is used in debug")
|
||||
for libfile in (
|
||||
"libfmodL.dylib",
|
||||
):
|
||||
dylibs += path_optional(os.path.join(debpkgdir, libfile), libfile)
|
||||
else:
|
||||
print("debug: fmodstudio is used in release")
|
||||
for libfile in (
|
||||
"libfmod.dylib",
|
||||
):
|
||||
|
||||
print("debug: adding {} to dylibs for fmodstudio".format(path_optional(os.path.join(relpkgdir, libfile), libfile)))
|
||||
dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)
|
||||
print(f"debug: dylibs = {dylibs}")
|
||||
|
||||
# our apps
|
||||
executable_path = {}
|
||||
|
|
@ -1832,7 +1844,12 @@ class DarwinManifest(ViewerManifest):
|
|||
|
||||
finally:
|
||||
# Unmount the image even if exceptions from any of the above
|
||||
self.run_command(['hdiutil', 'detach', '-force', devfile])
|
||||
for tries in range(10):
|
||||
try:
|
||||
self.run_command(['hdiutil', 'detach', '-force', devfile])
|
||||
except ManifestError as err:
|
||||
print(f"detach failed on attempt {tries}")
|
||||
time.sleep(1)
|
||||
|
||||
print("Converting temp disk image to final disk image")
|
||||
self.run_command(['hdiutil', 'convert', sparsename, '-format', 'UDZO',
|
||||
|
|
@ -2199,7 +2216,8 @@ class Linux_i686_Manifest(LinuxManifest):
|
|||
print("tcmalloc files not found, skipping")
|
||||
pass
|
||||
|
||||
if self.args['fmodstudio'] == 'ON':
|
||||
# if self.args['fmodstudio'] == 'ON':
|
||||
if self.args['fmodstudio'].lower() == 'on':
|
||||
try:
|
||||
self.path("libfmod.so")
|
||||
self.path("libfmod.so*")
|
||||
|
|
@ -2240,7 +2258,8 @@ class Linux_x86_64_Manifest(LinuxManifest):
|
|||
# is now in the slvoice package, and we need to just use it as is.
|
||||
# self.path("libopenal32.so", "libvivoxoal.so.1") # vivox's sdk expects this soname
|
||||
|
||||
if self.args['fmodstudio'] == 'ON':
|
||||
# if self.args['fmodstudio'] == 'ON':
|
||||
if self.args['fmodstudio'].lower() == 'on':
|
||||
try:
|
||||
self.path("libfmod.so")
|
||||
self.path("libfmod.so*")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
llbase==1.2.11
|
||||
git+https://github.com/Nicky-D/autobuild@main_nd#egg=autobuild
|
||||
Loading…
Reference in New Issue