From 5bfc97e7c4f83b682681a7e705643ce6665c85d7 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Fri, 6 Aug 2021 23:51:42 +0900 Subject: [PATCH 01/19] =?UTF-8?q?snapshot=E7=89=88=E3=81=AE=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E6=9B=B4=E6=96=B0=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 2 + tools/build.py | 275 +++++++++++++++++++++++++++++++----------------- tools/bumpup.py | 146 +++++++++++++------------ 3 files changed, 260 insertions(+), 163 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 227a830..d6d527a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -67,3 +67,5 @@ deploy: on: branch: master # release from master branch only +after_deploy: + - cmd: curl "https://actlab.org/api/addAlphaVersion?repo_name=%APPVEYOR_REPO_NAME%&commit_hash=%APPVEYOR_REPO_COMMIT%&password=%SCRIPT_PASSWORD%" diff --git a/tools/build.py b/tools/build.py index b306883..b9320eb 100644 --- a/tools/build.py +++ b/tools/build.py @@ -1,98 +1,171 @@ # -*- coding: utf-8 -*- #app build tool #Copyright (C) 2019 Yukio Nozawa -#Copyright (C) 2019 - 2020 guredora +#Copyright (C) 2019-2020 guredora +#Copyright (C) 2021 yamahubuki -import glob +#constants‚Ìimport‘O‚É•K—v import os import sys -import subprocess -import shutil -import distutils.dir_util -import PyInstaller -import diff_archiver +sys.path.append(os.getcwd()) + +import datetime +import glob import hashlib import json -import sys +import math +import PyInstaller +import shutil +import subprocess import urllib.request import zipfile -sys.path.append(os.getcwd()) + +import diff_archiver + import constants -def runcmd(cmd): - proc=subprocess.Popen(cmd.split(), shell=True, stdout=1, stderr=2) - proc.communicate() - -appveyor=False - -if len(sys.argv)==2 and sys.argv[1]=="--appveyor": - appveyor=True -print("Starting build for %s(appveyor mode=%s)" % (constants.APP_NAME, appveyor)) -build_filename=os.environ['APPVEYOR_REPO_TAG_NAME'] if 'APPVEYOR_REPO_TAG_NAME' in os.environ else 'snapshot' -print("Will be built as %s" % build_filename) - -pyinstaller_path="pyinstaller.exe" if appveyor is False else "%PYTHON%\\Scripts\\pyinstaller.exe" -hooks_path = os.path.join(PyInstaller.__path__[0], "hooks/") -print("hooks_path is %s" % (hooks_path)) -print("pyinstaller_path=%s" % pyinstaller_path) -if not os.path.exists("locale"): - print("Error: no locale folder found. Your working directory must be the root of the project. You shouldn't cd to tools and run this script.") - -package_path = os.path.join("dist", os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]) -if os.path.isdir(package_path): - print("Clearling previous build...") - shutil.rmtree("dist\\") - shutil.rmtree("build\\") - -print("making version info...") -with open("tools/baseVersionInfo.txt", mode = "r") as f: - version_text = f.read() -version_text = version_text.replace("%FILE_VERSION%", constants.APP_VERSION.replace(".", ",")) -version_text = version_text.replace("%PRODUCT_VERSION%", constants.APP_VERSION.replace(".", ",")) -version_text = version_text.replace("%COMPANY_NAME%", constants.APP_DEVELOPERS) -version_text = version_text.replace("%FILE_DESCRIPTION%", constants.APP_FULL_NAME) -version_text = version_text.replace("%FILE_VERSION_TEXT%", constants.APP_VERSION) -version_text = version_text.replace("%REGAL_COPYRIGHT%", constants.APP_COPYRIGHT_MESSAGE) -original_file_name = os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]+".exe" -version_text = version_text.replace("%ORIGINAL_FILENAME%", original_file_name) -version_text = version_text.replace("%PRODUCT_NAME%", constants.APP_NAME) -version_text = version_text.replace("%PRODUCT_VERSION_TEXT%", constants.APP_VERSION) -with open("version.txt", mode = "w") as f: - f.write(version_text) -print("Building...") -for hook in constants.NEED_HOOKS: - shutil.copy(hook, hooks_path) -if constants.APP_ICON == None: - runcmd("%s --windowed --log-level=ERROR --version-file=version.txt %s" % (pyinstaller_path, constants.STARTUP_FILE)) -else: - runcmd("%s --windowed --log-level=ERROR --version-file=version.txt --icon=%s %s" % (pyinstaller_path, constants.APP_ICON, constants.STARTUP_FILE)) -shutil.copytree("locale\\",os.path.join(package_path, "locale"), ignore=shutil.ignore_patterns("*.po", "*.pot", "*.po~")) -for item in constants.PACKAGE_CONTAIN_ITEMS: - if os.path.isdir(item): - shutil.copytree(item, os.path.join(package_path, item)) - if os.path.isfile(item): - shutil.copyfile(item, os.path.join(package_path, os.path.basename(item))) -for elem in glob.glob("public\\*"): - if os.path.isfile(elem): - shutil.copyfile(elem, os.path.join(package_path, os.path.basename(elem))) - else: - shutil.copytree(elem, os.path.join(package_path, os.path.basename(elem))) -#end copypublic -print("deleting temporary version file...") -os.remove("version.txt") -print("Compressing into package...") -shutil.make_archive("%s-%s" % (constants.APP_NAME, build_filename),'zip','dist') - -if build_filename=="snapshot": - print("Skipping batch archiving because this is a snapshot release.") -else: - archive_name = "%s-%s.zip" % (constants.APP_NAME, build_filename) - if constants.BASE_PACKAGE_URL is not None: - print("Making patch...") - patch_name = "%s-%spatch" % (constants.APP_NAME, build_filename) - archiver=diff_archiver.DiffArchiver(constants.BASE_PACKAGE_URL, archive_name, patch_name,clean_base_package=True, skip_root = True) - archiver.work() - if constants.UPDATER_URL is not None: +from tools import bumpup + + +class build: + def __init__(self): + # appVeyor‚©‚Ç‚€‚©‚ð”»•Ê‚µAˆ—‚ðƒXƒ^[ƒg + appveyor = self.setAppVeyor() + print("Starting build for %s(appveyor mode=%s)" % (constants.APP_NAME, appveyor)) + + # ƒpƒbƒP[ƒW‚̃pƒX‚ƃtƒ@ƒCƒ‹–Œ‚ðŒˆ’è + package_path = os.path.join("dist", os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]) + if 'APPVEYOR_REPO_TAG_NAME' in os.environ: + build_filename = os.environ['APPVEYOR_REPO_TAG_NAME'] + else: + build_filename = 'snapshot' + print("Will be built as %s" % build_filename) + + # pyinstaller‚̃pƒX‚ðŒˆ’è + if not appveyor: + pyinstaller_path = r"D:\Dev\python38\Scripts\pyinstaller.exe" + else: + pyinstaller_path = "%PYTHON%\\Scripts\\pyinstaller.exe" + print("pyinstaller_path=%s" % pyinstaller_path) + hooks_path = os.path.join(PyInstaller.__path__[0], "hooks/") + print("hooks_path is %s" % (hooks_path)) + + # localeƒtƒHƒ‹ƒ_‚Ì‘¶Ý‚ðŠm”F + if not os.path.exists("locale"): + print("Error: no locale folder found. Your working directory must be the root of the project. You shouldn't cd to tools and run this script.") + exit(-1) + + # ‘O‚̃rƒ‹ƒh‚ðƒNƒŠ[ƒ“ƒAƒbƒv + self.creen(package_path) + + # appveyor‚ł̃XƒiƒbƒvƒVƒ‡ƒbƒg‚̏ꍇ‚̓o[ƒWƒ‡ƒ“”ԍ†‚ðˆêŽž“I‚ɏ‘‚«Š·‚Š + if build_filename == "snapshot" and appveyor: + self.makeSnapshotVersionNumber() + + # ƒrƒ‹ƒh + self.makeVersionInfo() + self.build(pyinstaller_path, hooks_path, package_path, build_filename) + archive_name = "%s-%s.zip" % (constants.APP_NAME, build_filename) + + # ƒXƒiƒbƒvƒVƒ‡ƒbƒg‚Å‚È‚¯‚ê‚Î + if build_filename == "snapshot" and not appveyor: + print("Skipping batch archiving because this is a local snapshot.") + else: + patch_name = self.makePatch(build_filename, archive_name) + if constants.UPDATER_URL is not None: + self.addUpdater(archive_name) + self.makePackageInfo(archive_name, patch_name, build_filename) + print("Build finished!") + + + def runcmd(self,cmd): + proc=subprocess.Popen(cmd.split(), shell=True, stdout=1, stderr=2) + proc.communicate() + return proc.poll() + + + def setAppVeyor(self): + if len(sys.argv)>=2 and sys.argv[1]=="--appveyor": + return True + return False + + def creen(self,package_path): + if os.path.isdir(package_path): + print("Clearling previous build...") + shutil.rmtree("dist\\") + shutil.rmtree("build\\") + + def makeSnapshotVersionNumber(self): + #“ú–{•W€ŽžƒIƒuƒWƒFƒNƒg + JST = datetime.timezone(datetime.timedelta(hours=+9)) + #Python‚͐¢ŠE•W€Žž‚ÌZ‚ɑΉž‚µ‚Ä‚¢‚È‚¢‚Ì‚Å•¶Žš—ñˆ—‚ŏæ‚èØ‚èA‚»‚ê‚ð“ú–{•W€Žž‚É•ÏŠ· + dt = datetime.datetime.fromisoformat(os.environ["APPVEYOR_REPO_COMMIT_TIMESTAMP"][0:19]+"+00:00").astimezone(JST) + major = str(dt.year)[2:4]+str(dt.month).zfill(2) + minor = str(dt.day) + patch = str(int(math.floor((dt.hour*3600+dt.minute*60+dt.second)/86400*1000))) + constants.APP_VERSION = major+"."+minor+"."+patch + constants.APP_LAST_RELEASE_DATE = str(dt.date()) + bumpup.bumpup(major+"."+minor+"."+patch, str(dt.date())) + + def makeVersionInfo(self): + print("making version info...") + with open("tools/baseVersionInfo.txt", mode = "r") as f: + version_text = f.read() + version_text = version_text.replace("%FILE_VERSION%", constants.APP_VERSION.replace(".", ",")) + version_text = version_text.replace("%PRODUCT_VERSION%", constants.APP_VERSION.replace(".", ",")) + version_text = version_text.replace("%COMPANY_NAME%", constants.APP_DEVELOPERS) + version_text = version_text.replace("%FILE_DESCRIPTION%", constants.APP_FULL_NAME) + version_text = version_text.replace("%FILE_VERSION_TEXT%", constants.APP_VERSION) + version_text = version_text.replace("%REGAL_COPYRIGHT%", constants.APP_COPYRIGHT_MESSAGE) + original_file_name = os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]+".exe" + version_text = version_text.replace("%ORIGINAL_FILENAME%", original_file_name) + version_text = version_text.replace("%PRODUCT_NAME%", constants.APP_NAME) + version_text = version_text.replace("%PRODUCT_VERSION_TEXT%", constants.APP_VERSION) + with open("version.txt", mode = "w") as f: + f.write(version_text) + + def build(self,pyinstaller_path, hooks_path, package_path, build_filename): + print("Building...") + for hook in constants.NEED_HOOKS: + shutil.copy(hook, hooks_path) + if constants.APP_ICON == None: + ret = self.runcmd("%s --windowed --log-level=ERROR --version-file=version.txt %s" % (pyinstaller_path, constants.STARTUP_FILE)) + else: + ret = runcmd("%s --windowed --log-level=ERROR --version-file=version.txt --icon=%s %s" % (pyinstaller_path, constants.APP_ICON, constants.STARTUP_FILE)) + print("build finished with status %d" % ret) + if ret != 0: + sys.exit(ret) + + shutil.copytree("locale\\",os.path.join(package_path, "locale"), ignore=shutil.ignore_patterns("*.po", "*.pot", "*.po~")) + for item in constants.PACKAGE_CONTAIN_ITEMS: + if os.path.isdir(item): + shutil.copytree(item, os.path.join(package_path, item)) + if os.path.isfile(item): + shutil.copyfile(item, os.path.join(package_path, os.path.basename(item))) + for elem in glob.glob("public\\*"): + if os.path.isfile(elem): + shutil.copyfile(elem, os.path.join(package_path, os.path.basename(elem))) + else: + shutil.copytree(elem, os.path.join(package_path, os.path.basename(elem))) + #end copypublic + + print("deleting temporary version file...") + os.remove("version.txt") + os.remove(os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]+".spec") + + print("Compressing into package...") + shutil.make_archive("%s-%s" % (constants.APP_NAME, build_filename),'zip','dist') + + def makePatch(self, build_filename, archive_name): + patch_name = None + if constants.BASE_PACKAGE_URL is not None: + print("Making patch...") + patch_name = "%s-%spatch" % (constants.APP_NAME, build_filename) + archiver=diff_archiver.DiffArchiver(constants.BASE_PACKAGE_URL, archive_name, patch_name,clean_base_package=True, skip_root = True) + archiver.work() + return patch_name + + def addUpdater(self, archive_name): print("downloading updater...") urllib.request.urlretrieve(constants.UPDATER_URL, "updater.zip") print("writing updater...") @@ -101,19 +174,29 @@ def runcmd(cmd): with zipfile.ZipFile(archive_name, mode = "a") as zip: zip.write("ionic.zip.dll", "%s/ionic.zip.dll" % (constants.APP_NAME)) zip.write("updater.exe", "%s/updater.exe" % (constants.APP_NAME)) - print("computing hash...") - with open(archive_name, mode = "rb") as f: - content = f.read() - package_hash = hashlib.sha1(content).hexdigest() - if constants.BASE_PACKAGE_URL is not None: - with open(patch_name+".zip", mode = "rb") as f: + os.remove("ionic.zip.dll") + os.remove("updater.exe") + os.remove("updater.zip") + + def makePackageInfo(self, archive_name, patch_name, build_filename): + print("computing hash...") + with open(archive_name, mode = "rb") as f: content = f.read() - patch_hash = hashlib.sha1(content).hexdigest() - print("creating package info...") - with open("%s-%s_info.json" % (constants.APP_NAME, build_filename), mode = "w") as f: + package_hash = hashlib.sha1(content).hexdigest() + if constants.BASE_PACKAGE_URL is not None: + with open(patch_name+".zip", mode = "rb") as f: + content = f.read() + patch_hash = hashlib.sha1(content).hexdigest() + else: + patch_hash = None + print("creating package info...") info = {} info["package_hash"] = package_hash - if constants.BASE_PACKAGE_URL is not None: - info["patch_hash"] = patch_hash - json.dump(info, f) -print("Build finished!") \ No newline at end of file + info["patch_hash"] = patch_hash + info["version"] = constants.APP_VERSION + info["released_date"] = constants.APP_LAST_RELEASE_DATE + with open("%s-%s_info.json" % (constants.APP_NAME, build_filename), mode = "w") as f: + json.dump(info, f) + +if __name__ == "__main__": + build() diff --git a/tools/bumpup.py b/tools/bumpup.py index a01a9dd..dc8b8e6 100644 --- a/tools/bumpup.py +++ b/tools/bumpup.py @@ -1,12 +1,85 @@ # -*- coding: utf-8 -*- #Version setter #Copyright (C) 2020 Yukio Nozawa +#Copyright (C) 2021 yamahubuki + import datetime import json import os import re import sys +VERSION_FILE_NAME="version.json" + +# step1: input next version +def getVersion(): + current = getCurrentVersion() + print("Current version is %s." % current) + current=current.split(".") + next=["0","0","0"] + if len(sys.argv)==2: + for i,j in enumerate(["major", "minor", "patch"]): + if sys.argv[1] == j: + print("Auto-bumpup %s version." % j) + next[i]=str(int(current[i])+1) + return ".".join(next) + else: + next[i]=current[i] + print("Warning: Unrecognized bumpup option %s." % arg) + + next[2]=str(int(next[2])+1) + next=".".join(next) + inp=input("Type next version (leave blank to use %s): " % next) + if inp=="": return next + if re.match(r"\d+\.\d+\.\d+",inp): + return inp + else: + print("Version must be major.minor.patch") + print("Aborting.") + sys.exit(1) + #end abort + + +# step2: input release date +def getReleaseDate(): + today=str(datetime.date.today()) + inp=input("type next release date (leave blank to use %s): " % today) + if inp=="": return today + try: + dc=datetime.date.fromisoformat(inp) + return inp + except: + print("Invalid date format.") + print("Aborting.") + sys.exit(1) +#end abort + + +# load existing version or default +def getCurrentVersion(): + if os.path.exists(VERSION_FILE_NAME): + print("Loading version.json...") + try: + with open(VERSION_FILE_NAME,"r") as f: + return json.load(f)["version"] + except: + print("Unable to parse %s, using default." % VERSION_FILE_NAME) + return "1.0.0" + + +#step3: bumpup +#build.pyからも呌び出しおいるので倉曎時は泚意 +def bumpup(v, d): + v = { + "version": v, + "release_date": d, + } + with open(VERSION_FILE_NAME, "w") as f: + json.dump(v,f) + print("Saved %s." % VERSION_FILE_NAME) + patch("public/readme.txt",r'バヌゞョン:  ver\.', r'リリヌス:   ', v) + patch("constants.py",r'APP_VERSION="', r'APP_LAST_RELEASE_DATE="', v) + def patch(filename, version_regexp, release_date_regexp, version_object): try: with open(filename, "r", encoding="UTF-8") as f: @@ -22,70 +95,9 @@ def patch(filename, version_regexp, release_date_regexp, version_object): print("Cannot patch %s (%s)" % (filename,str(err))) #end patch -bump={"major": False, "minor": False, "patch": False} -if len(sys.argv)==2: - arg=sys.argv[1] - if arg in bump: - print("Auto-bumpup %s version." % arg) - bump[arg]=True - else: - print("Warning: Unrecognized bumpup option %s." % arg) - #end auto bumpup option -#end cmd - -VERSION_FILE_NAME="version.json" -v={"version": "1.0.0", "release_date": "undefined"} - -#step 1: load existing version -if os.path.exists(VERSION_FILE_NAME): - print("Loading version.json...") - try: - with open(VERSION_FILE_NAME,"r") as f: - v=json.load(f) - except: - print("Unable to parse %s, using default." % VERSION_FILE_NAME) - -#step 2: input -print("Current version is %s." % v["version"]) -next=v["version"].split(".") -if bump["major"]: - next[0]=str(int(next[0])+1) - inp=".".join(next) -elif bump["minor"]: - next[1]=str(int(next[1])+1) - inp=".".join(next) -elif bump["patch"]: - next[2]=str(int(next[2])+1) - inp=".".join(next) -else: - next[2]=str(int(next[2])+1) - next=".".join(next) - inp=input("Type next version (leave blank to use %s): " % next) - if inp=="": inp=next - if not re.match(r"\d+\.\d+\.\d+",inp): - print("Version must be major.minor.patch") - print("Aborting.") - sys.exit(1) - #end abort -print("Bumpup to: %s" % inp) -v["version"]=inp - -#step 3: input release date -today=str(datetime.date.today()) -inp=input("type next release date (leave blank to use %s): " % today) -if inp=="": inp=today -try: - dc=datetime.date.fromisoformat(inp) -except: - print("Invalid date format.") - print("Aborting.") - sys.exit(1) -#end abort - -v["release_date"]=inp -with open(VERSION_FILE_NAME, "w") as f: - json.dump(v,f) - -print("Saved %s." % VERSION_FILE_NAME) -patch("public/readme.txt",r'バヌゞョン:  ver\.', r'リリヌス:   ', v) -patch("constants.py",r'APP_VERSION ?= ?"', r'APP_LAST_RELEASE_DATE ?= ?"', v) +# 盎接実行時 +if __name__ == "__main__": + version = getVersion() + print("Bumpup to: %s" % version) + dt = getReleaseDate() + bumpup(version, dt) From f02fe7a304526ccdafa0ea9d5e4052959ac85ae3 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Fri, 13 Aug 2021 22:35:20 +0900 Subject: [PATCH 02/19] =?UTF-8?q?=E3=82=B9=E3=83=8A=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=83=E3=83=88=E7=89=88=E3=81=AE=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E6=9B=B4=E6=96=B0=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 2 +- tools/build.py | 38 ++++++++++++++++++-------------------- tools/bumpup.py | 5 +++++ 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d6d527a..8591462 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -68,4 +68,4 @@ deploy: branch: master # release from master branch only after_deploy: - - cmd: curl "https://actlab.org/api/addAlphaVersion?repo_name=%APPVEYOR_REPO_NAME%&commit_hash=%APPVEYOR_REPO_COMMIT%&password=%SCRIPT_PASSWORD%" + - cmd: echo import constants;print("https://actlab.org/api/addAlphaVersion?repo_name=%APPVEYOR_REPO_NAME%&commit_hash=%APPVEYOR_REPO_COMMIT%&version="+constants.APP_VERSION+"&password=%SCRIPT_PASSWORD%",end="") | C:\\Python38\python.exe | xargs -n1 curl diff --git a/tools/build.py b/tools/build.py index b9320eb..e700f86 100644 --- a/tools/build.py +++ b/tools/build.py @@ -3,8 +3,9 @@ #Copyright (C) 2019 Yukio Nozawa #Copyright (C) 2019-2020 guredora #Copyright (C) 2021 yamahubuki +#Copyright (C) 2021 Hiroki Fujii -#constants‚Ìimport‘O‚É•K—v +#constantsのimport前に必芁 import os import sys sys.path.append(os.getcwd()) @@ -29,11 +30,11 @@ class build: def __init__(self): - # appVeyor‚©‚Ç‚€‚©‚ð”»•Ê‚µAˆ—‚ðƒXƒ^[ƒg + # appVeyorかどうかを刀別し、凊理をスタヌト appveyor = self.setAppVeyor() print("Starting build for %s(appveyor mode=%s)" % (constants.APP_NAME, appveyor)) - # ƒpƒbƒP[ƒW‚̃pƒX‚ƃtƒ@ƒCƒ‹–Œ‚ðŒˆ’è + # パッケヌゞのパスずファむル名を決定 package_path = os.path.join("dist", os.path.splitext(os.path.basename(constants.STARTUP_FILE))[0]) if 'APPVEYOR_REPO_TAG_NAME' in os.environ: build_filename = os.environ['APPVEYOR_REPO_TAG_NAME'] @@ -41,33 +42,33 @@ def __init__(self): build_filename = 'snapshot' print("Will be built as %s" % build_filename) - # pyinstaller‚̃pƒX‚ðŒˆ’è + # pyinstallerのパスを決定 if not appveyor: - pyinstaller_path = r"D:\Dev\python38\Scripts\pyinstaller.exe" + pyinstaller_path = "pyinstaller.exe" else: pyinstaller_path = "%PYTHON%\\Scripts\\pyinstaller.exe" print("pyinstaller_path=%s" % pyinstaller_path) hooks_path = os.path.join(PyInstaller.__path__[0], "hooks/") print("hooks_path is %s" % (hooks_path)) - # localeƒtƒHƒ‹ƒ_‚Ì‘¶Ý‚ðŠm”F + # localeフォルダの存圚を確認 if not os.path.exists("locale"): print("Error: no locale folder found. Your working directory must be the root of the project. You shouldn't cd to tools and run this script.") exit(-1) - # ‘O‚̃rƒ‹ƒh‚ðƒNƒŠ[ƒ“ƒAƒbƒv + # 前のビルドをクリヌンアップ self.creen(package_path) - # appveyor‚ł̃XƒiƒbƒvƒVƒ‡ƒbƒg‚̏ꍇ‚̓o[ƒWƒ‡ƒ“”ԍ†‚ðˆêŽž“I‚ɏ‘‚«Š·‚Š + # appveyorでのスナップショットの堎合はバヌゞョン番号を䞀時的に曞き換え if build_filename == "snapshot" and appveyor: self.makeSnapshotVersionNumber() - # ƒrƒ‹ƒh + # ビルド self.makeVersionInfo() self.build(pyinstaller_path, hooks_path, package_path, build_filename) archive_name = "%s-%s.zip" % (constants.APP_NAME, build_filename) - # ƒXƒiƒbƒvƒVƒ‡ƒbƒg‚Å‚È‚¯‚ê‚Î + # スナップショットでなければ if build_filename == "snapshot" and not appveyor: print("Skipping batch archiving because this is a local snapshot.") else: @@ -77,13 +78,11 @@ def __init__(self): self.makePackageInfo(archive_name, patch_name, build_filename) print("Build finished!") - def runcmd(self,cmd): proc=subprocess.Popen(cmd.split(), shell=True, stdout=1, stderr=2) proc.communicate() return proc.poll() - def setAppVeyor(self): if len(sys.argv)>=2 and sys.argv[1]=="--appveyor": return True @@ -96,9 +95,9 @@ def creen(self,package_path): shutil.rmtree("build\\") def makeSnapshotVersionNumber(self): - #“ú–{•W€ŽžƒIƒuƒWƒFƒNƒg + #日本暙準時オブゞェクト JST = datetime.timezone(datetime.timedelta(hours=+9)) - #Python‚͐¢ŠE•W€Žž‚ÌZ‚ɑΉž‚µ‚Ä‚¢‚È‚¢‚Ì‚Å•¶Žš—ñˆ—‚ŏæ‚èØ‚èA‚»‚ê‚ð“ú–{•W€Žž‚É•ÏŠ· + #Pythonは䞖界暙準時のZに察応しおいないので文字列凊理で乗り切り、それを日本暙準時に倉換 dt = datetime.datetime.fromisoformat(os.environ["APPVEYOR_REPO_COMMIT_TIMESTAMP"][0:19]+"+00:00").astimezone(JST) major = str(dt.year)[2:4]+str(dt.month).zfill(2) minor = str(dt.day) @@ -108,7 +107,7 @@ def makeSnapshotVersionNumber(self): bumpup.bumpup(major+"."+minor+"."+patch, str(dt.date())) def makeVersionInfo(self): - print("making version info...") + print("making version info... version="+constants.APP_VERSION) with open("tools/baseVersionInfo.txt", mode = "r") as f: version_text = f.read() version_text = version_text.replace("%FILE_VERSION%", constants.APP_VERSION.replace(".", ",")) @@ -131,7 +130,7 @@ def build(self,pyinstaller_path, hooks_path, package_path, build_filename): if constants.APP_ICON == None: ret = self.runcmd("%s --windowed --log-level=ERROR --version-file=version.txt %s" % (pyinstaller_path, constants.STARTUP_FILE)) else: - ret = runcmd("%s --windowed --log-level=ERROR --version-file=version.txt --icon=%s %s" % (pyinstaller_path, constants.APP_ICON, constants.STARTUP_FILE)) + ret = self.runcmd("%s --windowed --log-level=ERROR --version-file=version.txt --icon=%s %s" % (pyinstaller_path, constants.APP_ICON, constants.STARTUP_FILE)) print("build finished with status %d" % ret) if ret != 0: sys.exit(ret) @@ -181,12 +180,10 @@ def addUpdater(self, archive_name): def makePackageInfo(self, archive_name, patch_name, build_filename): print("computing hash...") with open(archive_name, mode = "rb") as f: - content = f.read() - package_hash = hashlib.sha1(content).hexdigest() + package_hash = hashlib.sha1(f.read()).hexdigest() if constants.BASE_PACKAGE_URL is not None: with open(patch_name+".zip", mode = "rb") as f: - content = f.read() - patch_hash = hashlib.sha1(content).hexdigest() + patch_hash = hashlib.sha1(f.read()).hexdigest() else: patch_hash = None print("creating package info...") @@ -198,5 +195,6 @@ def makePackageInfo(self, archive_name, patch_name, build_filename): with open("%s-%s_info.json" % (constants.APP_NAME, build_filename), mode = "w") as f: json.dump(info, f) + if __name__ == "__main__": build() diff --git a/tools/bumpup.py b/tools/bumpup.py index dc8b8e6..b7b4b81 100644 --- a/tools/bumpup.py +++ b/tools/bumpup.py @@ -2,6 +2,7 @@ #Version setter #Copyright (C) 2020 Yukio Nozawa #Copyright (C) 2021 yamahubuki +#Copyright (C) 2021 Hiroki Fujii import datetime import json @@ -27,6 +28,7 @@ def getVersion(): next[i]=current[i] print("Warning: Unrecognized bumpup option %s." % arg) + next = current next[2]=str(int(next[2])+1) next=".".join(next) inp=input("Type next version (leave blank to use %s): " % next) @@ -65,6 +67,9 @@ def getCurrentVersion(): except: print("Unable to parse %s, using default." % VERSION_FILE_NAME) return "1.0.0" + else: + print("File not found %s, using default." % VERSION_FILE_NAME) + return "1.0.0" #step3: bumpup From 270d979ded70da97f1678f07328896b4d9240d06 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Fri, 13 Aug 2021 22:45:46 +0900 Subject: [PATCH 03/19] fix build script --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8591462..92e6871 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -68,4 +68,4 @@ deploy: branch: master # release from master branch only after_deploy: - - cmd: echo import constants;print("https://actlab.org/api/addAlphaVersion?repo_name=%APPVEYOR_REPO_NAME%&commit_hash=%APPVEYOR_REPO_COMMIT%&version="+constants.APP_VERSION+"&password=%SCRIPT_PASSWORD%",end="") | C:\\Python38\python.exe | xargs -n1 curl + - cmd: echo import constants;print("https://actlab.org/api/addAlphaVersion?repo_name=%APPVEYOR_REPO_NAME%&commit_hash=%APPVEYOR_REPO_COMMIT%&version="+constants.APP_VERSION+"&password=%SCRIPT_PASSWORD%",end="") | C:\\Python37\python.exe | xargs -n1 curl From 42f88497abdf58486ba600476fd9e0b17e70bdbe Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Fri, 13 Aug 2021 22:51:58 +0900 Subject: [PATCH 04/19] fix build script --- appveyor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 92e6871..29deba6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,6 +52,7 @@ after_test: artifacts: - path: TCV-*.zip + - path: NPC-*.json deploy: - provider: GitHub @@ -61,7 +62,7 @@ deploy: description: 'automatic build from master branch' auth_token: secure: iNSx8v6c+0TP9IyckinrvNWuX+hc7SKruOqRDl9GxdX59sZ2yqB8+UDAtqdPzKIg - artifact: TCV-snapshot.zip # upload all NuGet packages to release assets + artifact: /(TCV-.*\.zip)|(TCV-.*\.json)/ # upload all NuGet packages to release assets draft: false prerelease: false on: From c08e7204270fb0468afb55ed551e9ded3ab6a62d Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Fri, 13 Aug 2021 22:58:43 +0900 Subject: [PATCH 05/19] fix typo --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 29deba6..48b0074 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,7 +52,7 @@ after_test: artifacts: - path: TCV-*.zip - - path: NPC-*.json + - path: TCV-*.json deploy: - provider: GitHub From fc8922649e5f822e1bb7803739727b13c41f9a48 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Tue, 17 Aug 2021 14:32:40 +0900 Subject: [PATCH 06/19] =?UTF-8?q?URL=E3=82=B9=E3=82=AD=E3=83=BC=E3=83=A0?= =?UTF-8?q?=E3=81=AE=E7=99=BB=E9=8C=B2=E6=A9=9F=E8=83=BD=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- constants.py | 3 +++ customUrlScheme.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++ menuItemsDic.py | 1 + views/main.py | 22 +++++++++++++++- 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 customUrlScheme.py diff --git a/constants.py b/constants.py index b48164b..037f3ff 100644 --- a/constants.py +++ b/constants.py @@ -62,3 +62,6 @@ TC_CID = "1266762249164619776.c2ee817dafca62d74bbf3af6a7db1ad1c3cce334bef6e3af82c146d670f3cefe" TC_URL = "https://apiv2.twitcasting.tv/oauth2/authorize" TC_PORT = 9338 + +# URLスキヌム +SCHEME_NAME = "tcv" \ No newline at end of file diff --git a/customUrlScheme.py b/customUrlScheme.py new file mode 100644 index 0000000..314a157 --- /dev/null +++ b/customUrlScheme.py @@ -0,0 +1,62 @@ +# Custom URL Scheme Utility + +import itertools +import logging +import sys +import traceback +import winreg + +import constants +import errorCodes +import globalVars + +log = logging.getLogger("%s.%s" % (constants.LOG_PREFIX, "CustomURLSchemeUtility")) + +def register(scheme, application=None): + if application == None: + application = globalVars.app.getAppPath() + try: + with winreg.CreateKeyEx(winreg.HKEY_CURRENT_USER, "software\\classes\\" + scheme) as k1: + winreg.SetValueEx(k1, None, 0, winreg.REG_SZ, scheme) + winreg.SetValueEx(k1, "URL Protocol", 0, winreg.REG_SZ, "") + with winreg.CreateKeyEx(k1, "shell") as k2: + with winreg.CreateKeyEx(k2, "open") as k3: + with winreg.CreateKeyEx(k3, "command") as k4: + winreg.SetValueEx(k4, None, 0, winreg.REG_SZ, r'"%s" %%1' % application) + return True + except WindowsError as e: + log.error(traceback.format_exc()) + return False + +def unregister(scheme): + _deleteKeyAndSubkeys(winreg.HKEY_CURRENT_USER, "software\\classes\\" + scheme) + +def isRegistered(scheme): + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, "software\\classes") as k: + return scheme in _getSubKeys(k) + +def _deleteKeyAndSubkeys(key, subkey): + isFinished = False + tryCount = 0 + while isFinished == False and tryCount <= 10: + try: + with winreg.OpenKey(key, subkey, 0, winreg.KEY_WRITE|winreg.KEY_READ) as k: + for i in itertools.count(): + try: + subkeyName = winreg.EnumKey(k, i) + except WindowsError as e: + break + _deleteKeyAndSubkeys(k, subkeyName) + winreg.DeleteKey(k, "") + isFinished = True + except Exception as e: + tryCount += 1 + +def _getSubKeys(key): + ret = [] + for i in itertools.count(): + try: + ret.append(winreg.EnumKey(key, i)) + except WindowsError: + break + return ret diff --git a/menuItemsDic.py b/menuItemsDic.py index 3c01ac5..011c0da 100644 --- a/menuItemsDic.py +++ b/menuItemsDic.py @@ -47,6 +47,7 @@ def getValueString(ref_id): "advanced_ACCOUNT_MANAGER": _("拡匵機胜甚アカりントの蚭定(&V)") + "...", "SAPI_SETTING": _("SAPI蚭定を開く(&A)") + "...", "CHANGE_SPEECH_OUTPUT": _("読み䞊げ出力先の倉曎(&O)") + "...", + "CUSTOM_URL_SCHEME": _("カスタムURLスキヌムの登録"), #ヘルプメニュヌ "HELP": _("ヘルプを開く(&H)"), "VERSION_INFO": _("バヌゞョン情報(&V)") + "...", diff --git a/views/main.py b/views/main.py index b022013..fa5efa7 100644 --- a/views/main.py +++ b/views/main.py @@ -21,6 +21,7 @@ import errorCodes import globalVars import menuItemsStore +import customUrlScheme from logging import getLogger import simpleDialog @@ -212,7 +213,8 @@ def Apply(self,target): "ACCOUNT_MANAGER", "advanced_ACCOUNT_MANAGER", "SAPI_SETTING", - "CHANGE_SPEECH_OUTPUT" + "CHANGE_SPEECH_OUTPUT", + "CUSTOM_URL_SCHEME", ]) #ヘルプメニュヌ self.RegisterMenuCommand(self.hHelpMenu, [ @@ -415,6 +417,9 @@ def OnMenuSelect(self,event): globalVars.app.speech.silence() except AttributeError: pass + # URLスキヌムの蚭定 + elif selected == menuItemsStore.getRef("CUSTOM_URL_SCHEME"): + self.toggleCustomUrlScheme() #ヘルプを開く elif selected == menuItemsStore.getRef("HELP"): self.help() @@ -603,6 +608,21 @@ def userNameReplace(self): globalVars.app.config["nameReplace"][i] = data[i] globalVars.app.Manager.refreshReplaceSettings() + def toggleCustomUrlScheme(self): + if not customUrlScheme.isRegistered(constants.SCHEME_NAME): + if not hasattr(sys, "frozen"): + simpleDialog.errorDialog(_("この機胜を䜿甚するには、TCVをビルドしお実行する必芁がありたす。")) + return + if customUrlScheme.register(constants.SCHEME_NAME): + simpleDialog.dialog(_("成功"), _("カスタムURLスキヌムの登録が完了したした。")) + else: + simpleDialog.errorDialog(_("カスタムURLスキヌムの登録に倱敗したした。")) + else: + d = simpleDialog.yesNoDialog(_("確認"), _("既に登録されおいたす。登録を解陀したすか")) + if d == wx.ID_NO: + return + customUrlScheme.unregister(constants.SCHEME_NAME) + def help(self, event=None): if os.path.isfile(constants.README_FILE_NAME): os.startfile(constants.README_FILE_NAME) From ae100c282b345bdd91630323ca9b3f741dce0948 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Tue, 17 Aug 2021 15:06:52 +0900 Subject: [PATCH 07/19] =?UTF-8?q?=E3=80=8Ctcv://=E3=80=8D=E3=82=92?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E7=9A=84=E3=81=AB=E5=89=8A=E9=99=A4=E3=81=97?= =?UTF-8?q?=E3=81=A6=E6=8E=A5=E7=B6=9A=E3=82=92=E8=A9=A6=E3=81=BF=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E6=94=B9=E5=96=84=20#115?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/manager.py b/manager.py index 7a081d5..6e630f6 100644 --- a/manager.py +++ b/manager.py @@ -86,6 +86,7 @@ def __init__(self, MainView): def connect(self, userId): userId = userId.replace("http://twitcasting.tv/", "") userId = userId.replace("https://twitcasting.tv/", "") + userId = userId.replace("tcv://twitcasting.tv/", "") if "/" in userId: userId = userId[0:userId.find("/")] if globalVars.app.accountManager.hasDefaultAccount() == False: From 6369f41d5a94ac200b5a2972575e993d85453ed2 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Tue, 17 Aug 2021 15:35:31 +0900 Subject: [PATCH 08/19] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B1=A5=E6=AD=B4?= =?UTF-8?q?=E5=8A=A0=E7=AD=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/history.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/history.txt b/public/history.txt index a8dac83..a3ca00e 100644 --- a/public/history.txt +++ b/public/history.txt @@ -1,5 +1,8 @@ Twitcasting Viewer(TCV) 曎新履歎 +2021/xx/xx Version 3.x.x +1. ブラりザで「tcv://」で始たるURLを入力するず、盎接TCVを起動できる機胜を远加したした。この機胜を䜿甚するには、事前に、蚭定メニュヌの「カスタムURLスキヌムの登録」を実行する必芁がありたす。 + 2021/07/24 Version 3.1.1 1. アむテム投䞋機胜においお、削陀したアカりントの情報が残っおしたう問題を修正したした。 2. アむテム投䞋機胜においお、意図せぬアカりントでアむテムを投䞋しおしたう堎合があった䞍具合を修正したした。 From a74e73943f0838b216d4245d1d146d11ee19fd78 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Wed, 25 Aug 2021 01:58:18 +0900 Subject: [PATCH 09/19] =?UTF-8?q?PR=E3=81=A7=E3=81=AF=E9=81=A9=E5=88=87?= =?UTF-8?q?=E3=81=AB=E3=83=93=E3=83=AB=E3=83=89=E3=82=92=E4=B8=AD=E6=96=AD?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 48b0074..4b6b46c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,7 +43,7 @@ after_test: # 64-bit Python 3.3/3.4. And you need to use %PYTHON% to get the correct # interpreter - "%PYTHON%\\python.exe tools\\build.py --appveyor" - - cmd: exit + - cmd: if defined APPVEYOR_PULL_REQUEST_NUMBER appveyor exit 0 - cmd: curl "https://actlab.org/git-release.php?repo_name=%APPVEYOR_REPO_NAME%&tag_name=TCV-latestcommit&password=%SCRIPT_PASSWORD%" - cmd: git tag -d TCV-latestcommit - cmd: git push -d https://actlab-auto:%githubToken%@github.com/actlaboratory/TCV.git TCV-latestcommit From bbd64802ab3251839190a01765a7c592251ec865 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Mon, 20 Sep 2021 23:54:44 +0900 Subject: [PATCH 10/19] =?UTF-8?q?=E3=83=84=E3=82=A4=E3=82=AD=E3=83=A3?= =?UTF-8?q?=E3=82=B9=E5=B7=9D=E3=81=A7=E3=81=AECSRF=E3=83=88=E3=83=BC?= =?UTF-8?q?=E3=82=AF=E3=83=B3=E5=AF=BE=E7=AD=96=E3=81=AB=E3=82=88=E3=82=8A?= =?UTF-8?q?=E3=81=8D=E3=82=83=E3=81=99=E3=81=82=E3=81=8B=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=81=AB=E3=82=88=E3=82=8B=E3=82=A2=E3=82=A4?= =?UTF-8?q?=E3=83=86=E3=83=A0=E6=8A=95=E4=B8=8B=E3=81=8C=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AB=E5=AF=BE=E5=87=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- twitcastingLogin.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/twitcastingLogin.py b/twitcastingLogin.py index 4a27895..9de7e0e 100644 --- a/twitcastingLogin.py +++ b/twitcastingLogin.py @@ -4,6 +4,8 @@ import requests import errorCodes +from bs4 import BeautifulSoup + #IDずpwを甚いおログむンし、セッションを返华 #ID冒頭のc:は䞍芁 def login(id,pw): @@ -15,7 +17,20 @@ def login(id,pw): if ret.status_code!=200: return errorCodes.LOGIN_TWITCASTING_ERROR - # STEP2: ログむン甚のリク゚スト + # STEP2: ログむンペヌゞからCSRFトヌクンを取埗 + page = session.get("https://twitcasting.tv/indexcaslogin.php?redir=%2F") + if page.status_code!=200 or len(page.history)!=0: + print("1") + return errorCodes.LOGIN_TWITCASTING_ERROR + soup = BeautifulSoup(page.content, "lxml") + form = soup.find("form", {"id":"login-form"}) + ret = form.find("input", {"name":"cs_session_id","type":"hidden"}) + token = ret["value"] + print(token) + #except: + #return errorCodes.LOGIN_TWITCASTING_ERROR + + # STEP3: ログむン甚のリク゚スト headers = { "Content-Type":"application/x-www-form-urlencoded", "Accept":"Accept: text/html, application/xhtml+xml, image/jxr, */*", @@ -26,6 +41,7 @@ def login(id,pw): "username":id, "password":pw, "action":"login", + "cs_session_id":token, } result = session.post("https://twitcasting.tv/indexcaslogin.php?redir=%2F"+"&keep=1", body, headers=headers, timeout=5) From b6b7b618bc9f133a8d16003a8312b8548ef8c2f2 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Mon, 20 Sep 2021 23:56:21 +0900 Subject: [PATCH 11/19] fix typo --- twitcastingLogin.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/twitcastingLogin.py b/twitcastingLogin.py index 9de7e0e..c0e836c 100644 --- a/twitcastingLogin.py +++ b/twitcastingLogin.py @@ -20,15 +20,14 @@ def login(id,pw): # STEP2: ログむンペヌゞからCSRFトヌクンを取埗 page = session.get("https://twitcasting.tv/indexcaslogin.php?redir=%2F") if page.status_code!=200 or len(page.history)!=0: - print("1") return errorCodes.LOGIN_TWITCASTING_ERROR - soup = BeautifulSoup(page.content, "lxml") - form = soup.find("form", {"id":"login-form"}) - ret = form.find("input", {"name":"cs_session_id","type":"hidden"}) - token = ret["value"] - print(token) - #except: - #return errorCodes.LOGIN_TWITCASTING_ERROR + try: + soup = BeautifulSoup(page.content, "lxml") + form = soup.find("form", {"id":"login-form"}) + ret = form.find("input", {"name":"cs_session_id","type":"hidden"}) + token = ret["value"] + except: + return errorCodes.LOGIN_TWITCASTING_ERROR # STEP3: ログむン甚のリク゚スト headers = { From 3ddba3f32f1223f1305e6c6becbd97951d504409 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Tue, 21 Sep 2021 00:03:38 +0900 Subject: [PATCH 12/19] =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0?= =?UTF-8?q?=E6=8A=95=E4=B8=8B=E6=A9=9F=E8=83=BD=E3=81=A724=E6=99=82?= =?UTF-8?q?=E9=96=93=E4=BB=A5=E5=86=85=E3=81=AB100=E3=83=9D=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=83=88=E4=BB=A5=E4=B8=8A=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E3=81=8D=E3=81=AB=E7=A2=BA=E8=AA=8D=E3=83=A1?= =?UTF-8?q?=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E6=A8=99=E7=A4=BA?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20#116?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/history.txt | 2 ++ views/postItem.py | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/public/history.txt b/public/history.txt index a3ca00e..232c5d2 100644 --- a/public/history.txt +++ b/public/history.txt @@ -2,6 +2,8 @@ Twitcasting Viewer(TCV) 曎新履歎 2021/xx/xx Version 3.x.x 1. ブラりザで「tcv://」で始たるURLを入力するず、盎接TCVを起動できる機胜を远加したした。この機胜を䜿甚するには、事前に、蚭定メニュヌの「カスタムURLスキヌムの登録」を実行する必芁がありたす。 +2. アむテム投䞋機胜においお、24時間以内に100ポむント以䞊䜿甚しようずするず、確認メッセヌゞを暙瀺するように倉曎したした。 +3. アむテム投䞋機胜においお、ツむキャスアカりントでのログむンに倱敗するようになった問題に察凊したした。 2021/07/24 Version 3.1.1 1. アむテム投䞋機胜においお、削陀したアカりントの情報が残っおしたう問題を修正したした。 diff --git a/views/postItem.py b/views/postItem.py index 2db71be..47ad76b 100644 --- a/views/postItem.py +++ b/views/postItem.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # post item dialog +import time import wx import globalVars import views.ViewCreator @@ -36,9 +37,26 @@ def post(self, event): item = globalVars.app.postItem.getItem(self.item.GetValue()) if not globalVars.app.postItem.login(account): return - if self.count.GetValue() * item.point > globalVars.app.postItem.getPoint(account): + point = self.count.GetValue() * item.point + if point > globalVars.app.postItem.getPoint(account): simpleDialog.errorDialog(_("アカりント「%s」の所有ポむント数が䞍足しおいるため、アむテムを投䞋できたせん。") % account) return + last = globalVars.app.config.getint("item_posted_time", account, 0) + now = time.time() + if now - last > 86400: + # 24時間以䞊経過しおいる + newPoint = point + else: + # 24時間経過しおいない + newPoint = globalVars.app.config.getint("item_point", account, 0) + point + if newPoint > 100: + d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。自動的に回埩するのは100ポむントのみです。凊理を続行したすか") % (newPoint)) + if d == wx.ID_NO: + return + if now - last > 86400: + globalVars.app.config["item_posted_time"][account] = int(now) + globalVars.app.config["item_point"][account] = newPoint + return globalVars.app.postItem.postItem(account, item, self.count.GetValue()) self.account.SetFocus() From e0a89153bb6573631065676bacc0ecef5820772e Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Tue, 21 Sep 2021 00:30:23 +0900 Subject: [PATCH 13/19] =?UTF-8?q?=E6=A8=99=E7=A4=BA=E3=83=A1=E3=83=83?= =?UTF-8?q?=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- views/postItem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/postItem.py b/views/postItem.py index 47ad76b..c959a60 100644 --- a/views/postItem.py +++ b/views/postItem.py @@ -50,7 +50,7 @@ def post(self, event): # 24時間経過しおいない newPoint = globalVars.app.config.getint("item_point", account, 0) + point if newPoint > 100: - d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。自動的に回埩するのは100ポむントのみです。凊理を続行したすか") % (newPoint)) + d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合であっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか") % (newPoint)) if d == wx.ID_NO: return if now - last > 86400: From aaf848fa02b6bd36f855058f55541777f6a8ee03 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Thu, 23 Sep 2021 11:55:55 +0900 Subject: [PATCH 14/19] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=83=80=E3=82=A4?= =?UTF-8?q?=E3=82=A2=E3=83=AD=E3=82=B0=E3=81=AE=E6=A7=8B=E6=88=90=E3=82=92?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DefaultSettings.py | 1 + public/history.txt | 1 + views/postItem.py | 32 ++++++++++++++++---------------- views/settings.py | 23 ++++++++++++++++------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/DefaultSettings.py b/DefaultSettings.py index 0fec5b7..aac9c37 100644 --- a/DefaultSettings.py +++ b/DefaultSettings.py @@ -23,6 +23,7 @@ def get(): "autoconnect": True, "titlebar": 1, "log_level": "0", + "checkPoint": True, } config["view"]={ diff --git a/public/history.txt b/public/history.txt index 232c5d2..5706d1e 100644 --- a/public/history.txt +++ b/public/history.txt @@ -4,6 +4,7 @@ Twitcasting Viewer(TCV) 曎新履歎 1. ブラりザで「tcv://」で始たるURLを入力するず、盎接TCVを起動できる機胜を远加したした。この機胜を䜿甚するには、事前に、蚭定メニュヌの「カスタムURLスキヌムの登録」を実行する必芁がありたす。 2. アむテム投䞋機胜においお、24時間以内に100ポむント以䞊䜿甚しようずするず、確認メッセヌゞを暙瀺するように倉曎したした。 3. アむテム投䞋機胜においお、ツむキャスアカりントでのログむンに倱敗するようになった問題に察凊したした。 +4. 蚭定ダむアログの構成を倉曎し、「起動/接続」タブを远加したした。「䞀般」タブにあった項目の䞀郚が、こちらに移動しおいたす。 2021/07/24 Version 3.1.1 1. アむテム投䞋機胜においお、削陀したアカりントの情報が残っおしたう問題を修正したした。 diff --git a/views/postItem.py b/views/postItem.py index c959a60..4e895a3 100644 --- a/views/postItem.py +++ b/views/postItem.py @@ -41,22 +41,22 @@ def post(self, event): if point > globalVars.app.postItem.getPoint(account): simpleDialog.errorDialog(_("アカりント「%s」の所有ポむント数が䞍足しおいるため、アむテムを投䞋できたせん。") % account) return - last = globalVars.app.config.getint("item_posted_time", account, 0) - now = time.time() - if now - last > 86400: - # 24時間以䞊経過しおいる - newPoint = point - else: - # 24時間経過しおいない - newPoint = globalVars.app.config.getint("item_point", account, 0) + point - if newPoint > 100: - d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合であっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか") % (newPoint)) - if d == wx.ID_NO: - return - if now - last > 86400: - globalVars.app.config["item_posted_time"][account] = int(now) - globalVars.app.config["item_point"][account] = newPoint - return + if globalVars.app.config.getboolean("general", "checkPoint", True): + last = globalVars.app.config.getint("item_posted_time", account, 0) + now = time.time() + if now - last > 86400: + # 24時間以䞊経過しおいる + newPoint = point + else: + # 24時間経過しおいない + newPoint = globalVars.app.config.getint("item_point", account, 0) + point + if newPoint > 100: + d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合であっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか") % (newPoint)) + if d == wx.ID_NO: + return + if now - last > 86400: + globalVars.app.config["item_posted_time"][account] = int(now) + globalVars.app.config["item_point"][account] = newPoint globalVars.app.postItem.postItem(account, item, self.count.GetValue()) self.account.SetFocus() diff --git a/views/settings.py b/views/settings.py index dad48e4..217ec32 100644 --- a/views/settings.py +++ b/views/settings.py @@ -78,13 +78,16 @@ def InstallControls(self): # general creator=views.ViewCreator.ViewCreator(self.viewMode,self.tab,None,views.ViewCreator.GridBagSizer,label=_("䞀般"),style=wx.ALL,margin=20) + self.commenttosns, static = creator.combobox(_("コメントのSNS投皿(&S)"), list(self.commenttosnsSelection.values())) + self.timertype, static = creator.combobox(_("タむマヌの皮類(&T)"), list(self.timertypeSelection.values())) + self.checkpoint = creator.checkbox(_("ポむント管理機胜を䜿甚する(&P)")) + + # startup + creator=views.ViewCreator.ViewCreator(self.viewMode,self.tab,None,views.ViewCreator.GridBagSizer,label=_("起動/接続"),style=wx.ALL,margin=20) self.autoconnect = creator.checkbox(_("起動時に接続ダむアログを開く(&L)")) creator.GetSizer().SetItemSpan(self.autoconnect.GetParent(),2) - self.displayonconnectdialog, static = creator.combobox(_("接続ダむアログの衚瀺項目(&O)"), list(self.displayonconnectdialogSelection.values())) self.initialcommentcount, static = creator.spinCtrl(_("接続時に読み蟌むコメント数(&C)"), 1, 250) - self.commenttosns, static = creator.combobox(_("コメントのSNS投皿(&S)"), list(self.commenttosnsSelection.values())) - self.timertype, static = creator.combobox(_("タむマヌの皮類(&T)"), list(self.timertypeSelection.values())) self.historymax, static = creator.spinCtrl(_("接続履歎の保持件数(&H)"), -1, 50) self.defaultconnectaccount, static = creator.inputbox(_("芏定の接続先ナヌザヌ名/URL(&U)"),sizerFlag=wx.EXPAND) self.openlivewindow = creator.checkbox(_("接続時にブラりザでラむブを開く(&O)")) @@ -158,11 +161,14 @@ def InstallControls(self): def load(self): # general + self.commenttosns.SetValue(self.commenttosnsSelection[globalVars.app.config["general"]["commenttosns"]]) + self.timertype.SetValue(self.timertypeSelection[globalVars.app.config["general"]["timertype"]]) + self.checkpoint.SetValue(globalVars.app.config.getboolean("general", "checkPoint")) + + # startup self.autoconnect.SetValue(globalVars.app.config.getboolean("general", "autoconnect")) self.displayonconnectdialog.SetValue(self.displayonconnectdialogSelection[globalVars.app.config["general"]["displayonconnectdialog"]]) self.initialcommentcount.SetValue(globalVars.app.config["general"]["initialcommentcount"]) - self.commenttosns.SetValue(self.commenttosnsSelection[globalVars.app.config["general"]["commenttosns"]]) - self.timertype.SetValue(self.timertypeSelection[globalVars.app.config["general"]["timertype"]]) self.historymax.SetValue(globalVars.app.config["general"]["historymax"]) self.defaultconnectaccount.SetValue(globalVars.app.config["general"]["defaultconnectaccount"]) self.openlivewindow.SetValue(globalVars.app.config.getboolean("general", "openlivewindow")) @@ -213,11 +219,14 @@ def load(self): def save(self): # general - globalVars.app.config["general"]["autoconnect"] = self.autoconnect.GetValue() - globalVars.app.config["general"]["displayonconnectdialog"] = list(self.displayonconnectdialogSelection.keys())[self.displayonconnectdialog.GetSelection()] globalVars.app.config["general"]["initialcommentcount"] = self.initialcommentcount.GetValue() globalVars.app.config["general"]["commenttosns"] = list(self.commenttosnsSelection.keys())[self.commenttosns.GetSelection()] globalVars.app.config["general"]["timertype"] = list(self.timertypeSelection.keys())[self.timertype.GetSelection()] + globalVars.app.config["general"]["checkPoint"] = self.checkpoint.GetValue() + + # startup + globalVars.app.config["general"]["autoconnect"] = self.autoconnect.GetValue() + globalVars.app.config["general"]["displayonconnectdialog"] = list(self.displayonconnectdialogSelection.keys())[self.displayonconnectdialog.GetSelection()] globalVars.app.config["general"]["historymax"] = self.historymax.GetValue() globalVars.app.config["general"]["defaultconnectaccount"] = self.defaultconnectaccount.GetValue() globalVars.app.config["general"]["openlivewindow"] = self.openlivewindow.GetValue() From f18ca94e3d395af30192bb71c70dfc831576ba23 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Thu, 23 Sep 2021 12:29:24 +0900 Subject: [PATCH 15/19] =?UTF-8?q?readme=E3=82=92=E5=8A=A0=E7=AD=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/readme.txt | 121 +++++++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 54 deletions(-) diff --git a/public/readme.txt b/public/readme.txt index e7747b8..897fff9 100644 --- a/public/readme.txt +++ b/public/readme.txt @@ -255,6 +255,7 @@ TCVを終了したす。 ・個数投䞋する個数を蚭定したす。 ・アむテム投䞋アむテム投䞋凊理を開始したす。凊理が完了するず、結果を通知するメッセヌゞが衚瀺され、[アカりント]コンボボックスにフォヌカスが移動したす。 ・閉じるこのダむアログボックスを閉じたす。 +なお、初期蚭定では、時間以内にポむント以䞊䜿甚しようずしたずきに、確認メッセヌゞを暙瀺したす。  蚭定  蚭定 @@ -271,82 +272,89 @@ Ctrl+Tab、Ctrl+Shift+Tabを抌すず、衚瀺するタブを切り替えるこ  䞀般 TCVの動䜜党般に関する蚭定を行いたす。 - 起動時に接続ダむアログを開く + コメントのSNS投皿 +SNSず連携しおいるアカりントでコメントを投皿する堎合に、コメントをSNSにも投皿するかどうかを蚭定したす。 +遞択できる項目は、[投皿しない]、[配信者ぞ返信する圢匏で投皿]、[通垞の投皿]です。 +芏定では、[投皿しない]に蚭定されおいたす。 + + タむマヌの皮類 +ラむブの配信可胜時間を蚈枬する方法を蚭定したす。 +この蚭定を倉曎するず、残り時間の衚瀺方法や、読み䞊げの内容が倉化したす。 +[垞に30分を蚈枬]を遞択するず、「コンティニュヌコむン」の有無に関係なく、垞に分を蚈枬したす。 +[各枠ごずの残り時間を詳现に通知]を遞択するず、コンティニュヌコむンの数を加味しお残り時間を蚈枬し、延長可胜かどうかに関係なく、垞に残り時間を詳现に読み䞊げたす。 +[延長可胜な枠では分前のみ通知]を遞択するず、コンティニュヌコむンの数を加味しお残り時間を蚈枬し、延長可胜な堎合は、延長される分前のみ残り時間を読み䞊げたす。 +芏定では、[垞に30分を蚈枬]に蚭定されおいたす。 + + ポむント管理機胜を䜿甚する +アむテム投䞋機胜においお、時間以内にポむント以䞊䜿甚しようずした際に、譊告メッセヌゞを暙瀺するかどうか蚭定したす。 +この蚭定は、芏定でチェックされおいたす。 + + 起動/接続 +アプリの起動時や、ラむブ接続時の動䜜に぀いお蚭定したす。 + + 起動時に接続ダむアログを開く TCVの起動時に[接続]ダむアログを開くかどうかを蚭定したす。 芏定でチェックされおいたす。 - 接続ダむアログの衚瀺項目 + 接続ダむアログの衚瀺項目 [接続先]に遞択肢ずしお衚瀺する項目を遞択したす。 これらの項目には他のダむアログボックスからアクセスできたすが、頻繁に䜿甚するものを蚭定しおおくず、接続操䜜をより簡単に行えたす。 [なし]、[接続履歎]、[お気に入り]の間で蚭定したす。 芏定では、[接続履歎]に蚭定されおいたす。 - 接続時に読み蟌むコメント数 + 接続時に読み蟌むコメント数 ラむブに接続した際に、過去のコメントを䜕件読み蟌むかを蚭定したす。 件から件たでの範囲で蚭定したす。 芏定では、件に蚭定されおいたす。 - コメントのSNS投皿 -SNSず連携しおいるアカりントでコメントを投皿する堎合に、コメントをSNSにも投皿するかどうかを蚭定したす。 -遞択できる項目は、[投皿しない]、[配信者ぞ返信する圢匏で投皿]、[通垞の投皿]です。 -芏定では、[投皿しない]に蚭定されおいたす。 - - タむマヌの皮類 -ラむブの配信可胜時間を蚈枬する方法を蚭定したす。 -この蚭定を倉曎するず、残り時間の衚瀺方法や、読み䞊げの内容が倉化したす。 -[垞に30分を蚈枬]を遞択するず、「コンティニュヌコむン」の有無に関係なく、垞に分を蚈枬したす。 -[各枠ごずの残り時間を詳现に通知]を遞択するず、コンティニュヌコむンの数を加味しお残り時間を蚈枬し、延長可胜かどうかに関係なく、垞に残り時間を詳现に読み䞊げたす。 -[延長可胜な枠では分前のみ通知]を遞択するず、コンティニュヌコむンの数を加味しお残り時間を蚈枬し、延長可胜な堎合は、延長される分前のみ残り時間を読み䞊げたす。 -芏定では、[垞に30分を蚈枬]に蚭定されおいたす。 - - 接続履歎の保持件数 + 接続履歎の保持件数 接続履歎を䜕件たで保存するかを蚭定したす。 ここでは、-1から50たでの範囲で蚭定したす。 0にするず、履歎は保存されたせん。 -1にするず、無制限に接続履歎を保存したす。 芏定では、10に蚭定されおいたす。 - 芏定の接続先ナヌザヌ名/URL + 芏定の接続先ナヌザヌ名/URL [接続]ダむアログボックスを開いた際に、初期倀ずしお入力するナヌザ名やラむブURLを指定したす。 芏定では空癜に蚭定されおおり、䜕も入力されたせん。 - 接続時にブラりザでラむブを開く + 接続時にブラりザでラむブを開く この蚭定をチェックするず、ラむブに接続した際に、自動的にそのラむブをブラりザで開きたす。 メニュヌバヌの[ラむブ]→[このラむブをブラりザで開く]を遞択した堎合ず同じ動䜜です。 この蚭定は、芏定ではチェックされおいたせん。 - 衚瀺/蚀語 + 衚瀺/蚀語 画面衚瀺に関する蚭定です。 たた、TCVの衚瀺蚀語を倉曎するこずもできたす。 - 蚀語 + 蚀語 TCVの衚瀺や読み䞊げに䜿甚する蚀語を蚭定したす。 ただし、日本語以倖の蚀語に蚭定した堎合であっおも、ツむキャスから取埗される内容は日本語の可胜性がありたす。 この蚭定を有効にするには、TCVの再起動が必芁です。 - 画面衚瀺モヌド + 画面衚瀺モヌド 画面の衚瀺方法を、[暙準]、[反転衚瀺]の間で蚭定したす。 芏定では[暙準]に蚭定されおいたす。 この蚭定を有効にするには、TCVの再起動が必芁です。 - テキストの折り返し + テキストの折り返し 耇数行の゚ディットボックスで、長い行を折り返しお衚瀺するかどうかを蚭定したす。 [画面幅で折り返し]を遞択するず、画面幅に合わせお折り返しが行われたす。 芏定では[折り返さない]に蚭定されおいたす。 この蚭定を有効にするには、TCVの再起動が必芁です。 - タむトルバヌ + タむトルバヌ ラむブに接続した際に、TCVのタむトルバヌに衚瀺する内容を蚭定したす。 以䞋のいずれかを遞択できたす。 なし「TCV」ず衚瀺されたす。 残り時間「残り5分40秒 - TCV」のように、ラむブの残り時間を衚瀺したす。芏定の蚭定です。 接続先ナヌザ名「act-laboratory - TCV」のように、接続先のナヌザ名を衚瀺したす。 - 読み䞊げ-1 + 読み䞊げ-1 読み䞊げに関する蚭定を行いたす。 読み䞊げに関する蚭定は量が倚いため、ペヌゞに分割されおいたす。 - 出力先 + 出力先 読み䞊げ音声の出力先を蚭定したす。 芏定では、[SAPI5]に蚭定されおいたす。 [クリップボヌド出力]に蚭定するず、読み䞊げ内容がクリップボヌドにコピヌされたす。 @@ -354,11 +362,11 @@ TCVの衚瀺や読み䞊げに䜿甚する蚀語を蚭定したす。 耇数の画面読み䞊げ゜フトが同時に起動しおいる堎合、この機胜は正しく動䜜しない可胜性がありたす。 察応しおいる画面読み䞊げ゜フトが起動しおいない堎合は、SAPI5の音声で出力されたす。 - 受信したコメントを読み䞊げる + 受信したコメントを読み䞊げる コメントを受信した際に、受信したコメントを読み䞊げるかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたす。 - コメント受信時の読み䞊げ内容 + コメント受信時の読み䞊げ内容 [受信したコメントを読み䞊げる]がチェックされおいる堎合に、コメントをどのように読み䞊げるかを蚭定したす。 任意の文字列を入力できたすが、䞋蚘のように、コメントに固有の情報を読み䞊げるための特殊な文字列がありたす。 $dispname:投皿者の衚瀺名 @@ -367,7 +375,7 @@ $timeコメントが投皿された時刻 $user:投皿者のナヌザ名 芏定では、「$dispname,$message,$time,$user」に蚭定されおいたす。 - コメントの読み䞊げスキップ + コメントの読み䞊げスキップ [受信したコメントを読み䞊げる]がチェックされおいる堎合に、読み䞊げが行われるコメントを制限できたす。 自分が投皿したコメントを読み䞊げるかどうかを蚭定するには、[自分が投皿したコメントを読み䞊げる]チェックボックスを䜿甚したす。 [自分のラむブ]、[自分以倖のラむブ]では、他のナヌザに察する返信の圢匏で曞かれたコメント「@ナヌザ名」が含たれるコメントの読み方を、以䞋の遞択肢の䞭から蚭定できたす。 @@ -376,108 +384,108 @@ $user:投皿者のナヌザ名 ・自分宛の返信のみ読み䞊げる基本的に返信は読み䞊げられたせんが、自分宛の返信の堎合にのみ読み䞊げたす。 芏定では、[党お読み䞊げる]に蚭定されおいたす。 - 読み䞊げ-2 + 読み䞊げ-2 読み䞊げに関する蚭定を行いたす。 読み䞊げに関する蚭定は量が倚いため、ペヌゞに分割されおいたす。 - 閲芧者数が増加したら読み䞊げる + 閲芧者数が増加したら読み䞊げる 閲芧者数が増加したずきに読み䞊げを行うかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたす。 - 閲芧者数が増加した際の読み䞊げ + 閲芧者数が増加した際の読み䞊げ [閲芧者数が増加したら読み䞊げる]がチェックされおいる堎合に読み䞊げられる内容を蚭定したす。 任意の文字列を蚭定できたすが、「$viewers」ず入力するず、その郚分が新しい閲芧者数に眮換されたす。 芏定倀は、「閲芧者が$viewers人に増えたした。」です。 - 閲芧者数が枛少したら読み䞊げる + 閲芧者数が枛少したら読み䞊げる 閲芧者数が枛少したずきに読み䞊げを行うかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたす。 - 閲芧者数が枛少した際の読み䞊げ + 閲芧者数が枛少した際の読み䞊げ [閲芧者数が枛少したら読み䞊げる]がチェックされおいる堎合に読み䞊げられる内容を蚭定したす。 任意の文字列を蚭定できたすが、「$viewers」ず入力するず、その郚分が新しい閲芧者数に眮換されたす。 芏定倀は、「閲芧者が$viewers人に枛りたした。」です。 - 入力䞭のナヌザヌを読み䞊げる + 入力䞭のナヌザヌを読み䞊げる コメントを入力しおいるナヌザがいるこずを怜知した堎合に読み䞊げを行うかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたせん。 - 受信したアむテムを読み䞊げる + 受信したアむテムを読み䞊げる 新しいアむテムをもらった際に読み䞊げを行うかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたす。 - アむテム投皿者の読み方 + アむテム投皿者の読み方 [受信したアむテムを読み䞊げる]がチェックされおいる堎合に、投皿者の情報を読み䞊げるかどうかを蚭定したす。 [読み䞊げない]、[ナヌザ名を読み䞊げる]、[衚瀺名を読み䞊げる]のいずれかを遞択できたす。 芏定では、[読み䞊げない]に蚭定されおいたす。 - ラむブ再生 + ラむブ再生 ラむブ音声の再生機胜に関する蚭定を行いたす。 - 自動的に再生を開始する + 自動的に再生を開始する ラむブに接続した際、自動的に再生を開始するかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたせん。 - 芏定の音量 + 芏定の音量 音量の初期倀を蚭定したす。 ここでは、100よりも倧きな倀に蚭定するこずはできたせん。 芏定では、に蚭定されおいたす。 - ラむブ再生の遅延時間 + ラむブ再生の遅延時間 ラむブ再生の遅延時間秒を蚭定したす。 再生が䞍安定な堎合は、この蚭定を倉曎するこずで改善する堎合がありたす。 芏定では、秒に蚭定されおいたす。 - 効果音 + 効果音 効果音再生に関する蚭定を行いたす。 効果音を再生するタむミングや再生する効果音の皮類を蚭定する堎合は、メニュヌバヌの[蚭定]→[効果音蚭定]を䜿甚したす。 - 効果音の出力先をラむブ音声の出力先ず同期 + 効果音の出力先をラむブ音声の出力先ず同期 この蚭定をチェックするず、ラむブ再生の出力先ずしお蚭定したデバむスで効果音を再生できたす。 チェックしない堎合、Windowsの芏定のデバむスで効果音を再生したす。 この蚭定は、芏定でチェックされおいたせん。 - 効果音の音量 + 効果音の音量 効果音の音量を蚭定したす。 芏定では、に蚭定されおいたす。 - 読み䞊げを省略したコメントも通知音を再生する + 読み䞊げを省略したコメントも通知音を再生する コメントの受信時に効果音を再生するように蚭定しおいる堎合に、読み䞊げが行われなかったコメントでも通知音を再生するかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたせん。 - URL蚭定 + URL蚭定 コメント内にURLが含たれおいた堎合の衚瀺・読み䞊げ方法を蚭定したす。 この蚭定は、長いURLを読み続けおしたうこずを防止したい堎合に圹立ちたす。 なお、ここでの蚭定に関わらず、コメントの詳现ダむアログやコンテキストメニュヌを衚瀺した際には省略前の内容を確認するこずができたす。 - プロトコル名を削陀 + プロトコル名を削陀 「http://」などのプロトコル名を削陀するかどうかを蚭定したす。 芏定ではチェックされおいたせん。 - ドメむンのみ + ドメむンのみ URL内の最初の/以降を削陀するかどうかを指定したす。 たずえば、「actlab.org/software/TCV」の堎合には「actlab.org」のようになりたす。 芏定ではチェックされおいたせん。 - URLを次の文字列に眮き換える + URLを次の文字列に眮き換える URLを任意の文字列に眮き換えるこずができたす。 ここには、URLの代わりに衚瀺させたい内容を入力したす。 - ネットワヌク + ネットワヌク プロキシサヌバヌを䜿甚する堎合に必芁な蚭定を行いたす。 - 起動時に曎新を確認 + 起動時に曎新を確認 起動時にTCVの曎新を確認するかどうかを蚭定したす。 この蚭定は、芏定でチェックされおいたす。 - プロキシサヌバヌの情報を手動で蚭定する + プロキシサヌバヌの情報を手動で蚭定する プロキシサヌバヌの情報を手動で蚭定するかどうかを蚭定したす。 通垞、TCVはWindowsに蚭定されたプロキシサヌバヌの情報を䜿甚しお接続を行いたすが、䜕らかの理由で個別に蚭定したい堎合は、この蚭定をチェックしおください。 - サヌバヌURL + サヌバヌURL [プロキシサヌバヌの情報を手動で蚭定する]が有効な堎合に、プロキシサヌバヌのURLを蚭定したす。 - ポヌト番号 + ポヌト番号 [プロキシサヌバヌの情報を手動で蚭定する]が有効な堎合に、プロキシサヌバヌのポヌト番号を蚭定したす。  コメントリスト衚瀺蚭定 @@ -610,6 +618,11 @@ SAPIの音声を倉曎するダむアログボックスを開きたす。 ラむブに接続しおいる状態で出力先を倉曎したい堎合などに䜿甚できたす。 この蚭定は、[蚭定]→[読み䞊げ-1]→[出力先]ず垞に同期しおおり、どちらを倉曎しおも同じ結果が埗られたす。 + カスタムURLスキヌムの登録 +ブラりザで「tcv://」から始たるURLを入力したずき、本アプリが起動するように蚭定したす。 +この項目を実行するず、登録䜜業が行われ、結果が衚瀺されたす。 +たた、既に登録されおいる状態でこの項目を実行するず、登録された情報を削陀するかどうかの確認メッセヌゞが暙瀺されたす。 +  ヘルプ  ヘルプを開く このドキュメントを開きたす。 From 3348b0dbeb571c4f4cfef05723359076aa26deb5 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Thu, 23 Sep 2021 12:52:43 +0900 Subject: [PATCH 16/19] =?UTF-8?q?=E7=BF=BB=E8=A8=B3=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locale/en-us/LC_MESSAGES/messages.mo | Bin 36573 -> 37820 bytes locale/en-us/LC_MESSAGES/messages.po | 379 +++++++++++++++------------ locale/ja-jp/LC_MESSAGES/messages.po | 369 ++++++++++++++------------ locale/messages.po | 369 ++++++++++++++------------ 4 files changed, 618 insertions(+), 499 deletions(-) diff --git a/locale/en-us/LC_MESSAGES/messages.mo b/locale/en-us/LC_MESSAGES/messages.mo index df9b00aebaf9fded9dd04f35bf3019f915542e92..d256a0f6741e461753bd37694011717551693ef0 100644 GIT binary patch delta 9537 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 b7@C`xoRgP7H#Wtcot^4mc}2v^gEjvRX#m>S delta 8544 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 Xf7h\n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgstr "" msgid "アカりント登録" msgstr "" -#: app.py:59 manager.py:93 +#: app.py:59 manager.py:94 msgid "" "アカりントが登録されおいたせん。ラむブに接続する前に、蚭定メニュヌのアカりン" "トマネヌゞャからアカりントの登録を行っおください。" @@ -85,311 +85,311 @@ msgstr "" msgid "この組み合わせは別の甚途で予玄されおいるため、利甚できたせん。" msgstr "" -#: manager.py:95 +#: manager.py:96 msgid "" "通信甚アカりントが蚭定されおいたせん。ラむブに接続する前に、蚭定メニュヌのア" "カりントマネヌゞャから通信甚アカりントの蚭定を行っおください。" msgstr "" -#: manager.py:103 +#: manager.py:104 msgid "接続に倱敗したした。" msgstr "" -#: manager.py:120 manager.py:436 +#: manager.py:121 manager.py:437 msgid "" "履歎デヌタの保存に倱敗したした。以䞋のファむルぞのアクセスが可胜であるこずを" "確認しおください。" msgstr "" -#: manager.py:140 +#: manager.py:141 msgid "接続。珟圚配信䞭。" msgstr "" -#: manager.py:143 +#: manager.py:144 msgid "タむマヌ開始。" msgstr "" -#: manager.py:145 manager.py:297 manager.py:499 +#: manager.py:146 manager.py:298 manager.py:500 #, python-format msgid "残り時間%s" msgstr "" -#: manager.py:147 +#: manager.py:148 msgid "配信時間が時間を超えおいるため、タむマヌを䜿甚できたせん。" msgstr "" -#: manager.py:150 +#: manager.py:151 msgid "接続。珟圚オフラむン。" msgstr "" -#: manager.py:152 +#: manager.py:153 msgid "完走に必甚なコむンが集たっおいたす。" msgstr "" -#: manager.py:284 +#: manager.py:285 #, python-format msgid "タむトル%s" msgstr "" -#: manager.py:285 +#: manager.py:286 #, python-format msgid "テロップ%s" msgstr "" -#: manager.py:286 +#: manager.py:287 #, python-format msgid "閲芧者数珟圚%(current)d人、合蚈%(total)d人" msgstr "" -#: manager.py:287 +#: manager.py:288 #, python-format msgid "カテゎリ%s" msgstr "" -#: manager.py:288 +#: manager.py:289 #, python-format msgid "コメント%d件" msgstr "" -#: manager.py:292 +#: manager.py:293 msgid "珟圚配信䞭" msgstr "" -#: manager.py:294 +#: manager.py:295 msgid "オフラむン" msgstr "" -#: manager.py:296 manager.py:498 +#: manager.py:297 manager.py:499 #, python-format msgid "経過時間%s" msgstr "" -#: manager.py:299 manager.py:512 +#: manager.py:300 manager.py:513 msgid "残り時間無制限" msgstr "" -#: manager.py:301 +#: manager.py:302 msgid "コラボ可胜" msgstr "" -#: manager.py:303 +#: manager.py:304 msgid "コラボ䞍可" msgstr "" -#: manager.py:305 views\globalKeyConfig.py:54 views\globalKeyConfig.py:71 +#: manager.py:306 views\globalKeyConfig.py:54 views\globalKeyConfig.py:71 #: views\globalKeyConfig.py:102 views\globalKeyConfig.py:107 #: views\globalKeyConfig.py:120 views\globalKeyConfig.py:128 #: views\globalKeyConfig.py:138 views\globalKeyConfig.py:143 #: views\keyConfig.py:57 views\KeyValueSettingDialogBase.py:333 -#: views\main.py:552 views\main.py:572 views\settings.py:54 +#: views\main.py:557 views\main.py:577 views\settings.py:54 #: views\settings.py:59 msgid "なし" msgstr "" -#: manager.py:338 manager.py:353 +#: manager.py:339 manager.py:354 msgid "" "コメント投皿に倱敗したした。次にこのナヌザがラむブを行うたで、コメントを投皿" "できたせん。" msgstr "" -#: manager.py:342 +#: manager.py:343 msgid "コメントが入力されおいたせん。" msgstr "" -#: manager.py:345 +#: manager.py:346 #, python-format msgid "" "字を超えるコメントは投皿できたせん。珟圚%s文字のコメントが入力されおい" "たす。" msgstr "" -#: manager.py:350 +#: manager.py:351 msgid "コメント文字数が字を超えおいるため、コメントを投皿できたせん。" msgstr "" -#: manager.py:356 +#: manager.py:357 #, python-format msgid "゚ラヌが発生したした。詳现%s" msgstr "" -#: manager.py:386 +#: manager.py:387 msgid "" "コメントの削陀に倱敗したした。これらのコメントを削陀する暩限がありたせん。" msgstr "" -#: manager.py:388 +#: manager.py:389 #, python-format msgid "" "%d個のコメントを削陀できたせんでした。これらのコメントを削陀する暩限がありた" "せん。" msgstr "" -#: manager.py:401 +#: manager.py:402 msgid "タむマヌリセット。" msgstr "" -#: manager.py:420 manager.py:427 +#: manager.py:421 manager.py:428 #, python-format msgid "コむンが%d枚あるので延長可胜です。" msgstr "" -#: manager.py:429 +#: manager.py:430 msgid "30分が経過したした。" msgstr "" -#: manager.py:446 manager.py:456 manager.py:465 +#: manager.py:447 manager.py:457 manager.py:466 msgid "" "お気に入りデヌタの保存に倱敗したした。以䞋のファむルぞのアクセスが可胜である" "こずを確認しおください。" msgstr "" -#: manager.py:474 +#: manager.py:475 #, python-format msgid "残り%s秒です。" msgstr "" -#: manager.py:476 +#: manager.py:477 #, python-format msgid "残り%s分です。" msgstr "" -#: manager.py:478 +#: manager.py:479 #, python-format msgid "残り%(minutes)s分%(seconds)s秒です。" msgstr "" -#: manager.py:505 +#: manager.py:506 #, python-format msgid "残り%(hour)d時間%(minute)d分%(second)d秒" msgstr "" -#: manager.py:507 +#: manager.py:508 #, python-format msgid "残り%(minute)d分%(second)d秒" msgstr "" -#: manager.py:509 +#: manager.py:510 #, python-format msgid "残り%(second)d秒" msgstr "" -#: manager.py:516 +#: manager.py:517 #, python-format msgid "%sさんが入力䞭" msgstr "" -#: manager.py:532 +#: manager.py:533 msgid "ラむブ終了。" msgstr "" -#: manager.py:543 +#: manager.py:544 msgid "ラむブ開始。" msgstr "" -#: manager.py:554 +#: manager.py:555 msgid "テロップ削陀" msgstr "" -#: manager.py:556 +#: manager.py:557 msgid "テロップ倉曎。" msgstr "" -#: manager.py:565 +#: manager.py:566 #, python-format msgid "カテゎリ倉曎%s" msgstr "" -#: manager.py:574 +#: manager.py:575 msgid "次のラむブが開始されたした。" msgstr "" -#: manager.py:604 +#: manager.py:605 msgid "コむン消費" msgstr "" -#: manager.py:609 +#: manager.py:610 #, python-format msgid "完走に必芁なコむン%d枚が集たりたした。" msgstr "" -#: manager.py:611 +#: manager.py:612 #, python-format msgid "コむンが%d枚集たりたした。" msgstr "" -#: manager.py:623 +#: manager.py:624 msgid "再生URLを取埗できたせん。" msgstr "" -#: manager.py:627 +#: manager.py:628 msgid "再生に倱敗したした。" msgstr "" -#: manager.py:630 views\indicatorSoundSettings.py:17 +#: manager.py:631 views\indicatorSoundSettings.py:17 msgid "再生" msgstr "" -#: manager.py:643 +#: manager.py:644 msgid "停止" msgstr "" -#: manager.py:652 manager.py:656 +#: manager.py:653 manager.py:657 #, python-format msgid "音量%d" msgstr "" -#: manager.py:771 +#: manager.py:772 msgid "" "アクセストヌクンが䞍正です。蚭定メニュヌのアカりントマネヌゞャから、再床アカ" "りントの远加を行っおください。" msgstr "" -#: manager.py:773 +#: manager.py:774 msgid "" "APIの実行回数が䞊限に達したした。しばらくたっおから、再床実行しおください。" msgstr "" -#: manager.py:775 +#: manager.py:776 msgid "" "ツむキャスAPIが500゚ラヌを返したした。しばらく埅っおから、再床接続しおくださ" "い。" msgstr "" -#: manager.py:777 twitcasting\accountManager.py:62 +#: manager.py:778 twitcasting\accountManager.py:62 msgid "珟圚TCVは䜿甚できたせん。開発者に連絡しおください。" msgstr "" -#: manager.py:792 +#: manager.py:793 #, python-format msgid "ツむキャスAPIずの通信䞭に゚ラヌが発生したした。詳现%s" msgstr "" -#: manager.py:838 +#: manager.py:839 #, python-format msgid "%sをもらいたした。" msgstr "" -#: manager.py:840 +#: manager.py:841 #, python-format msgid "%(name)sを%(count)i個もらいたした。" msgstr "" -#: manager.py:848 +#: manager.py:849 #, python-format msgid "%(user)sさんから%(item)sをもらいたした。" msgstr "" -#: manager.py:850 +#: manager.py:851 #, python-format msgid "%(user)sさんから%(item)sを%(count)i個もらいたした。" msgstr "" -#: manager.py:853 +#: manager.py:854 #, python-format msgid "%(user)sさんなどから%(item)sをもらいたした。" msgstr "" -#: manager.py:855 +#: manager.py:856 #, python-format msgid "%(user)sさんなどから%(item)sを%(count)i個もらいたした。" msgstr "" @@ -414,7 +414,7 @@ msgstr "" msgid "終了(&X)" msgstr "" -#: menuItemsDic.py:20 views\main.py:226 +#: menuItemsDic.py:20 views\main.py:228 msgid "再生(&P)" msgstr "" @@ -478,7 +478,7 @@ msgstr "" msgid "アむテム投䞋(&I)" msgstr "" -#: menuItemsDic.py:39 views\main.py:229 +#: menuItemsDic.py:39 views\main.py:231 msgid "蚭定(&S)" msgstr "" @@ -522,19 +522,23 @@ msgstr "" msgid "読み䞊げ出力先の倉曎(&O)" msgstr "" -#: menuItemsDic.py:51 -msgid "ヘルプを開く(&H)" +#: menuItemsDic.py:50 +msgid "カスタムURLスキヌムの登録" msgstr "" #: menuItemsDic.py:52 -msgid "バヌゞョン情報(&V)" +msgid "ヘルプを開く(&H)" msgstr "" #: menuItemsDic.py:53 +msgid "バヌゞョン情報(&V)" +msgstr "" + +#: menuItemsDic.py:54 msgid "曎新を確認(&C)" msgstr "" -#: menuItemsDic.py:55 +#: menuItemsDic.py:56 msgid "読み䞊げの䞭断" msgstr "" @@ -618,7 +622,7 @@ msgstr "" msgid "通信゚ラヌ" msgstr "" -#: twitcasting\accountManager.py:54 views\settings.py:148 +#: twitcasting\accountManager.py:54 views\settings.py:151 msgid "ネットワヌク" msgstr "" @@ -719,13 +723,13 @@ msgid "アカりント" msgstr "" #: views\accountManager.py:33 views\commentListConfiguration.py:18 -#: views\main.py:100 views\userNamereplace.py:13 views\userNamereplace.py:29 +#: views\main.py:101 views\userNamereplace.py:13 views\userNamereplace.py:29 #: views\viewBroadcaster.py:29 views\viewComment.py:31 msgid "ナヌザ名" msgstr "" #: views\accountManager.py:34 views\commentListConfiguration.py:15 -#: views\globalKeyConfig.py:20 views\globalKeyConfig.py:74 views\main.py:97 +#: views\globalKeyConfig.py:20 views\globalKeyConfig.py:74 views\main.py:98 #: views\viewBroadcaster.py:28 views\viewComment.py:30 msgid "名前" msgstr "" @@ -759,7 +763,7 @@ msgstr "" msgid "䞋ぞ(&D)" msgstr "" -#: views\accountManager.py:54 views\itemHistory.py:35 views\postItem.py:32 +#: views\accountManager.py:54 views\itemHistory.py:35 views\postItem.py:33 #: views\versionDialog.py:49 views\viewBroadcaster.py:37 #: views\viewComment.py:39 views\viewFavorites.py:36 views\viewHistory.py:32 msgid "閉じる" @@ -789,7 +793,7 @@ msgstr "" #: views\changeSpeechOutput.py:44 views\commentListConfiguration.py:60 #: views\connect.py:35 views\KeyValueSettingDialogBase.py:84 #: views\KeyValueSettingDialogBase.py:275 views\mkDialog.py:30 -#: views\settings.py:157 views\updateDialog.py:45 +#: views\settings.py:160 views\updateDialog.py:45 msgid "キャンセル" msgstr "" @@ -844,7 +848,7 @@ msgstr "" #: views\base.py:117 views\fontManager.py:25 views\fontManager.py:50 #: views\globalKeyConfig.py:61 views\KeyValueSettingDialogBase.py:297 -#: views\KeyValueSettingDialogBase.py:348 views\main.py:144 +#: views\KeyValueSettingDialogBase.py:348 views\main.py:145 #: views\updateDialog.py:66 msgid "゚ラヌ" msgstr "" @@ -887,11 +891,11 @@ msgstr "" msgid "出力先" msgstr "" -#: views\commentListConfiguration.py:16 views\main.py:98 +#: views\commentListConfiguration.py:16 views\main.py:99 msgid "投皿" msgstr "" -#: views\commentListConfiguration.py:17 views\main.py:99 +#: views\commentListConfiguration.py:17 views\main.py:100 msgid "時刻" msgstr "" @@ -959,7 +963,7 @@ msgstr "" msgid "眮換内容蚭定" msgstr "" -#: views\connect.py:16 views\main.py:77 views\viewFavorites.py:35 +#: views\connect.py:16 views\main.py:78 views\viewFavorites.py:35 #: views\viewHistory.py:31 msgid "接続" msgstr "" @@ -985,7 +989,7 @@ msgstr "" msgid "識別子" msgstr "" -#: views\globalKeyConfig.py:31 views\main.py:257 +#: views\globalKeyConfig.py:31 views\main.py:259 msgid "ショヌトカットキヌの蚭定" msgstr "" @@ -1017,7 +1021,7 @@ msgstr "" msgid "ショヌトカット5" msgstr "" -#: views\globalKeyConfig.py:75 views\main.py:80 views\settings.py:67 +#: views\globalKeyConfig.py:75 views\main.py:81 views\settings.py:67 msgid "蚭定" msgstr "" @@ -1114,7 +1118,7 @@ msgstr "" msgid "参照" msgstr "" -#: views\indicatorSoundSettings.py:109 views\settings.py:294 +#: views\indicatorSoundSettings.py:109 views\settings.py:303 msgid "効果音ファむルを遞択" msgstr "" @@ -1126,7 +1130,7 @@ msgstr "" msgid "ナヌザ" msgstr "" -#: views\itemHistory.py:29 views\main.py:128 +#: views\itemHistory.py:29 views\main.py:129 msgid "アむテム" msgstr "" @@ -1206,47 +1210,47 @@ msgid "" "す。\n" msgstr "" -#: views\main.py:78 +#: views\main.py:79 msgid "接続履歎を開く" msgstr "" -#: views\main.py:79 +#: views\main.py:80 msgid "お気に入り䞀芧を開く" msgstr "" -#: views\main.py:81 +#: views\main.py:82 msgid "アカりントマネヌゞャを開く" msgstr "" -#: views\main.py:82 +#: views\main.py:83 msgid "ヘルプを衚瀺" msgstr "" -#: views\main.py:83 +#: views\main.py:84 msgid "プログラムの終了" msgstr "" -#: views\main.py:96 +#: views\main.py:97 msgid "コメント䞀芧" msgstr "" -#: views\main.py:112 +#: views\main.py:113 msgid "コメント投皿アカりント" msgstr "" -#: views\main.py:118 +#: views\main.py:119 msgid "コメント内容" msgstr "" -#: views\main.py:121 +#: views\main.py:122 msgid "送信" msgstr "" -#: views\main.py:124 +#: views\main.py:125 msgid "ラむブ情報" msgstr "" -#: views\main.py:141 +#: views\main.py:142 msgid "" "で蚭定されたホットキヌが正しくありたせん。キヌの重耇、存圚しないキヌ名の指" "定、䜿甚できないキヌパタヌンの指定などが考えられたす。以䞋のキヌの蚭定内容を" @@ -1254,93 +1258,120 @@ msgid "" "\n" msgstr "" -#: views\main.py:225 +#: views\main.py:227 msgid "ファむル(&F)" msgstr "" -#: views\main.py:227 +#: views\main.py:229 msgid "コメント(&C)" msgstr "" -#: views\main.py:228 +#: views\main.py:230 msgid "ラむブ(&L)" msgstr "" -#: views\main.py:230 +#: views\main.py:232 msgid "ヘルプ(&H)" msgstr "" -#: views\main.py:263 +#: views\main.py:265 msgid "グロヌバルホットキヌの蚭定" msgstr "" -#: views\main.py:304 views\main.py:313 views\viewFavorites.py:46 -#: views\viewFavorites.py:54 views\viewHistory.py:44 +#: views\main.py:306 views\main.py:315 views\main.py:621 views\postItem.py:54 +#: views\viewFavorites.py:46 views\viewFavorites.py:54 views\viewHistory.py:44 msgid "確認" msgstr "" -#: views\main.py:304 +#: views\main.py:306 msgid "遞択䞭のコメントを削陀したすか" msgstr "" -#: views\main.py:311 +#: views\main.py:313 msgid "すでに登録されおいたす。" msgstr "" -#: views\main.py:313 +#: views\main.py:315 #, python-format msgid "%sのラむブをお気に入りに远加したすか" msgstr "" -#: views\main.py:329 +#: views\main.py:331 msgid "" "この機胜を䜿甚する前に、蚭定メニュヌの拡匵機胜甚アカりントの蚭定から、䜿甚す" "るアカりントを登録しおください。" msgstr "" -#: views\main.py:336 +#: views\main.py:338 msgid "自分のラむブにアむテムを投䞋するこずはできたせん。" msgstr "" -#: views\main.py:348 +#: views\main.py:350 msgid "アむテム情報の取埗に倱敗したした。" msgstr "" -#: views\main.py:480 +#: views\main.py:485 msgid "接続履歎がありたせん。" msgstr "" -#: views\main.py:494 +#: views\main.py:499 msgid "お気に入りラむブが登録されおいたせん。" msgstr "" -#: views\main.py:610 +#: views\main.py:614 +msgid "この機胜を䜿甚するには、TCVをビルドしお実行する必芁がありたす。" +msgstr "" + +#: views\main.py:617 +msgid "成功" +msgstr "" + +#: views\main.py:617 +msgid "カスタムURLスキヌムの登録が完了したした。" +msgstr "" + +#: views\main.py:619 +msgid "カスタムURLスキヌムの登録に倱敗したした。" +msgstr "" + +#: views\main.py:621 +msgid "既に登録されおいたす。登録を解陀したすか" +msgstr "" + +#: views\main.py:630 msgid "readme.txtが芋぀かりたせん。" msgstr "" -#: views\postItem.py:19 views\postItem.py:30 +#: views\postItem.py:20 views\postItem.py:31 msgid "アむテム投䞋" msgstr "" -#: views\postItem.py:26 +#: views\postItem.py:27 msgid "䜿甚するアカりント(&A)" msgstr "" -#: views\postItem.py:27 +#: views\postItem.py:28 msgid "アむテム(&I)" msgstr "" -#: views\postItem.py:28 +#: views\postItem.py:29 msgid "個数(&C)" msgstr "" -#: views\postItem.py:40 +#: views\postItem.py:42 #, python-format msgid "" "アカりント「%s」の所有ポむント数が䞍足しおいるため、アむテムを投䞋できたせ" "ん。" msgstr "" +#: views\postItem.py:54 +#, python-format +msgid "" +"24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合で" +"あっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか" +msgstr "" + #: views\settings.py:27 msgid "反転衚瀺" msgstr "" @@ -1422,182 +1453,190 @@ msgid "䞀般" msgstr "" #: views\settings.py:81 -msgid "起動時に接続ダむアログを開く(&L)" +msgid "コメントのSNS投皿(&S)" msgstr "" -#: views\settings.py:84 -msgid "接続ダむアログの衚瀺項目(&O)" +#: views\settings.py:82 +msgid "タむマヌの皮類(&T)" msgstr "" -#: views\settings.py:85 -msgid "接続時に読み蟌むコメント数(&C)" +#: views\settings.py:83 +msgid "ポむント管理機胜を䜿甚する(&P)" msgstr "" #: views\settings.py:86 -msgid "コメントのSNS投皿(&S)" +msgid "起動/接続" msgstr "" #: views\settings.py:87 -msgid "タむマヌの皮類(&T)" +msgid "起動時に接続ダむアログを開く(&L)" +msgstr "" + +#: views\settings.py:89 +msgid "接続ダむアログの衚瀺項目(&O)" +msgstr "" + +#: views\settings.py:90 +msgid "接続時に読み蟌むコメント数(&C)" msgstr "" -#: views\settings.py:88 +#: views\settings.py:91 msgid "接続履歎の保持件数(&H)" msgstr "" -#: views\settings.py:89 +#: views\settings.py:92 msgid "芏定の接続先ナヌザヌ名/URL(&U)" msgstr "" -#: views\settings.py:90 +#: views\settings.py:93 msgid "接続時にブラりザでラむブを開く(&O)" msgstr "" -#: views\settings.py:94 +#: views\settings.py:97 msgid "衚瀺/蚀語" msgstr "" -#: views\settings.py:95 +#: views\settings.py:98 msgid "蚀語(&L)" msgstr "" -#: views\settings.py:96 +#: views\settings.py:99 msgid "画面衚瀺モヌド(&D)" msgstr "" -#: views\settings.py:97 +#: views\settings.py:100 msgid "テキストの折り返し(&W)" msgstr "" -#: views\settings.py:98 +#: views\settings.py:101 msgid "タむトルバヌ(&B)" msgstr "" -#: views\settings.py:101 +#: views\settings.py:104 msgid "読み䞊げ-1" msgstr "" -#: views\settings.py:102 +#: views\settings.py:105 msgid "出力先(&O)" msgstr "" -#: views\settings.py:103 +#: views\settings.py:106 msgid "受信したコメントを読み䞊げる(&C)" msgstr "" -#: views\settings.py:104 +#: views\settings.py:107 msgid "コメント受信時の読み䞊げ内容" msgstr "" -#: views\settings.py:106 +#: views\settings.py:109 msgid "コメントの読み䞊げスキップ" msgstr "" -#: views\settings.py:108 +#: views\settings.py:111 msgid "自分が投皿したコメントを読み䞊げる" msgstr "" -#: views\settings.py:110 +#: views\settings.py:113 msgid "自分のラむブ" msgstr "" -#: views\settings.py:111 +#: views\settings.py:114 msgid "自分以倖のラむブ" msgstr "" -#: views\settings.py:115 +#: views\settings.py:118 msgid "読み䞊げ-2" msgstr "" -#: views\settings.py:116 +#: views\settings.py:119 msgid "閲芧者数が増加したら読み䞊げる(&I)" msgstr "" -#: views\settings.py:117 +#: views\settings.py:120 msgid "閲芧者数が増加した際の読み䞊げ" msgstr "" -#: views\settings.py:118 +#: views\settings.py:121 msgid "閲芧者数が枛少したら読み䞊げる(&D)" msgstr "" -#: views\settings.py:119 +#: views\settings.py:122 msgid "閲芧者数が枛少した際の読み䞊げ" msgstr "" -#: views\settings.py:120 +#: views\settings.py:123 msgid "入力䞭のナヌザヌを読み䞊げる(&T)" msgstr "" -#: views\settings.py:121 +#: views\settings.py:124 msgid "受信したアむテムを読み䞊げる(&E)" msgstr "" -#: views\settings.py:122 +#: views\settings.py:125 msgid "アむテム投皿者の読み方" msgstr "" -#: views\settings.py:125 +#: views\settings.py:128 msgid "ラむブ再生" msgstr "" -#: views\settings.py:126 +#: views\settings.py:129 msgid "自動的に再生を開始する(&A)" msgstr "" -#: views\settings.py:127 +#: views\settings.py:130 msgid "芏定の音量(&V)" msgstr "" -#: views\settings.py:128 +#: views\settings.py:131 msgid "ラむブ再生の遅延時間(&D)" msgstr "" -#: views\settings.py:131 +#: views\settings.py:134 msgid "効果音" msgstr "" -#: views\settings.py:133 +#: views\settings.py:136 msgid "効果音の出力先をラむブ音声の出力先ず同期(&S)" msgstr "" -#: views\settings.py:135 +#: views\settings.py:138 msgid "効果音の音量(&V)" msgstr "" -#: views\settings.py:137 +#: views\settings.py:140 msgid "読み䞊げを省略したコメントも通知音を再生する(&C)" msgstr "" -#: views\settings.py:142 +#: views\settings.py:145 msgid "URL蚭定" msgstr "" -#: views\settings.py:143 +#: views\settings.py:146 msgid "プロトコル名を削陀(&P)" msgstr "" -#: views\settings.py:144 +#: views\settings.py:147 msgid "ドメむンのみ(&D)" msgstr "" -#: views\settings.py:145 +#: views\settings.py:148 msgid "URLを次の文字列に眮き換える(&R)" msgstr "" -#: views\settings.py:149 +#: views\settings.py:152 msgid "起動時に曎新を確認(&U)" msgstr "" -#: views\settings.py:150 +#: views\settings.py:153 msgid "プロキシサヌバヌの情報を手動で蚭定する(&M)" msgstr "" -#: views\settings.py:151 +#: views\settings.py:154 msgid "サヌバヌURL" msgstr "" -#: views\settings.py:152 +#: views\settings.py:155 msgid "ポヌト番号" msgstr "" diff --git a/locale/messages.po b/locale/messages.po index 107de24..43af2a2 100644 --- a/locale/messages.po +++ b/locale/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: TCV\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-24 00:25+0900\n" +"POT-Creation-Date: 2021-09-23 12:44+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgstr "" msgid "アカりント登録" msgstr "" -#: app.py:59 manager.py:93 +#: app.py:59 manager.py:94 msgid "" "アカりントが登録されおいたせん。ラむブに接続する前に、蚭定メニュヌのアカりン" "トマネヌゞャからアカりントの登録を行っおください。" @@ -85,311 +85,311 @@ msgstr "" msgid "この組み合わせは別の甚途で予玄されおいるため、利甚できたせん。" msgstr "" -#: manager.py:95 +#: manager.py:96 msgid "" "通信甚アカりントが蚭定されおいたせん。ラむブに接続する前に、蚭定メニュヌのア" "カりントマネヌゞャから通信甚アカりントの蚭定を行っおください。" msgstr "" -#: manager.py:103 +#: manager.py:104 msgid "接続に倱敗したした。" msgstr "" -#: manager.py:120 manager.py:436 +#: manager.py:121 manager.py:437 msgid "" "履歎デヌタの保存に倱敗したした。以䞋のファむルぞのアクセスが可胜であるこずを" "確認しおください。" msgstr "" -#: manager.py:140 +#: manager.py:141 msgid "接続。珟圚配信䞭。" msgstr "" -#: manager.py:143 +#: manager.py:144 msgid "タむマヌ開始。" msgstr "" -#: manager.py:145 manager.py:297 manager.py:499 +#: manager.py:146 manager.py:298 manager.py:500 #, python-format msgid "残り時間%s" msgstr "" -#: manager.py:147 +#: manager.py:148 msgid "配信時間が時間を超えおいるため、タむマヌを䜿甚できたせん。" msgstr "" -#: manager.py:150 +#: manager.py:151 msgid "接続。珟圚オフラむン。" msgstr "" -#: manager.py:152 +#: manager.py:153 msgid "完走に必甚なコむンが集たっおいたす。" msgstr "" -#: manager.py:284 +#: manager.py:285 #, python-format msgid "タむトル%s" msgstr "" -#: manager.py:285 +#: manager.py:286 #, python-format msgid "テロップ%s" msgstr "" -#: manager.py:286 +#: manager.py:287 #, python-format msgid "閲芧者数珟圚%(current)d人、合蚈%(total)d人" msgstr "" -#: manager.py:287 +#: manager.py:288 #, python-format msgid "カテゎリ%s" msgstr "" -#: manager.py:288 +#: manager.py:289 #, python-format msgid "コメント%d件" msgstr "" -#: manager.py:292 +#: manager.py:293 msgid "珟圚配信䞭" msgstr "" -#: manager.py:294 +#: manager.py:295 msgid "オフラむン" msgstr "" -#: manager.py:296 manager.py:498 +#: manager.py:297 manager.py:499 #, python-format msgid "経過時間%s" msgstr "" -#: manager.py:299 manager.py:512 +#: manager.py:300 manager.py:513 msgid "残り時間無制限" msgstr "" -#: manager.py:301 +#: manager.py:302 msgid "コラボ可胜" msgstr "" -#: manager.py:303 +#: manager.py:304 msgid "コラボ䞍可" msgstr "" -#: manager.py:305 views\globalKeyConfig.py:54 views\globalKeyConfig.py:71 +#: manager.py:306 views\globalKeyConfig.py:54 views\globalKeyConfig.py:71 #: views\globalKeyConfig.py:102 views\globalKeyConfig.py:107 #: views\globalKeyConfig.py:120 views\globalKeyConfig.py:128 #: views\globalKeyConfig.py:138 views\globalKeyConfig.py:143 #: views\keyConfig.py:57 views\KeyValueSettingDialogBase.py:333 -#: views\main.py:552 views\main.py:572 views\settings.py:54 +#: views\main.py:557 views\main.py:577 views\settings.py:54 #: views\settings.py:59 msgid "なし" msgstr "" -#: manager.py:338 manager.py:353 +#: manager.py:339 manager.py:354 msgid "" "コメント投皿に倱敗したした。次にこのナヌザがラむブを行うたで、コメントを投皿" "できたせん。" msgstr "" -#: manager.py:342 +#: manager.py:343 msgid "コメントが入力されおいたせん。" msgstr "" -#: manager.py:345 +#: manager.py:346 #, python-format msgid "" "字を超えるコメントは投皿できたせん。珟圚%s文字のコメントが入力されおい" "たす。" msgstr "" -#: manager.py:350 +#: manager.py:351 msgid "コメント文字数が字を超えおいるため、コメントを投皿できたせん。" msgstr "" -#: manager.py:356 +#: manager.py:357 #, python-format msgid "゚ラヌが発生したした。詳现%s" msgstr "" -#: manager.py:386 +#: manager.py:387 msgid "" "コメントの削陀に倱敗したした。これらのコメントを削陀する暩限がありたせん。" msgstr "" -#: manager.py:388 +#: manager.py:389 #, python-format msgid "" "%d個のコメントを削陀できたせんでした。これらのコメントを削陀する暩限がありた" "せん。" msgstr "" -#: manager.py:401 +#: manager.py:402 msgid "タむマヌリセット。" msgstr "" -#: manager.py:420 manager.py:427 +#: manager.py:421 manager.py:428 #, python-format msgid "コむンが%d枚あるので延長可胜です。" msgstr "" -#: manager.py:429 +#: manager.py:430 msgid "30分が経過したした。" msgstr "" -#: manager.py:446 manager.py:456 manager.py:465 +#: manager.py:447 manager.py:457 manager.py:466 msgid "" "お気に入りデヌタの保存に倱敗したした。以䞋のファむルぞのアクセスが可胜である" "こずを確認しおください。" msgstr "" -#: manager.py:474 +#: manager.py:475 #, python-format msgid "残り%s秒です。" msgstr "" -#: manager.py:476 +#: manager.py:477 #, python-format msgid "残り%s分です。" msgstr "" -#: manager.py:478 +#: manager.py:479 #, python-format msgid "残り%(minutes)s分%(seconds)s秒です。" msgstr "" -#: manager.py:505 +#: manager.py:506 #, python-format msgid "残り%(hour)d時間%(minute)d分%(second)d秒" msgstr "" -#: manager.py:507 +#: manager.py:508 #, python-format msgid "残り%(minute)d分%(second)d秒" msgstr "" -#: manager.py:509 +#: manager.py:510 #, python-format msgid "残り%(second)d秒" msgstr "" -#: manager.py:516 +#: manager.py:517 #, python-format msgid "%sさんが入力䞭" msgstr "" -#: manager.py:532 +#: manager.py:533 msgid "ラむブ終了。" msgstr "" -#: manager.py:543 +#: manager.py:544 msgid "ラむブ開始。" msgstr "" -#: manager.py:554 +#: manager.py:555 msgid "テロップ削陀" msgstr "" -#: manager.py:556 +#: manager.py:557 msgid "テロップ倉曎。" msgstr "" -#: manager.py:565 +#: manager.py:566 #, python-format msgid "カテゎリ倉曎%s" msgstr "" -#: manager.py:574 +#: manager.py:575 msgid "次のラむブが開始されたした。" msgstr "" -#: manager.py:604 +#: manager.py:605 msgid "コむン消費" msgstr "" -#: manager.py:609 +#: manager.py:610 #, python-format msgid "完走に必芁なコむン%d枚が集たりたした。" msgstr "" -#: manager.py:611 +#: manager.py:612 #, python-format msgid "コむンが%d枚集たりたした。" msgstr "" -#: manager.py:623 +#: manager.py:624 msgid "再生URLを取埗できたせん。" msgstr "" -#: manager.py:627 +#: manager.py:628 msgid "再生に倱敗したした。" msgstr "" -#: manager.py:630 views\indicatorSoundSettings.py:17 +#: manager.py:631 views\indicatorSoundSettings.py:17 msgid "再生" msgstr "" -#: manager.py:643 +#: manager.py:644 msgid "停止" msgstr "" -#: manager.py:652 manager.py:656 +#: manager.py:653 manager.py:657 #, python-format msgid "音量%d" msgstr "" -#: manager.py:771 +#: manager.py:772 msgid "" "アクセストヌクンが䞍正です。蚭定メニュヌのアカりントマネヌゞャから、再床アカ" "りントの远加を行っおください。" msgstr "" -#: manager.py:773 +#: manager.py:774 msgid "" "APIの実行回数が䞊限に達したした。しばらくたっおから、再床実行しおください。" msgstr "" -#: manager.py:775 +#: manager.py:776 msgid "" "ツむキャスAPIが500゚ラヌを返したした。しばらく埅っおから、再床接続しおくださ" "い。" msgstr "" -#: manager.py:777 twitcasting\accountManager.py:62 +#: manager.py:778 twitcasting\accountManager.py:62 msgid "珟圚TCVは䜿甚できたせん。開発者に連絡しおください。" msgstr "" -#: manager.py:792 +#: manager.py:793 #, python-format msgid "ツむキャスAPIずの通信䞭に゚ラヌが発生したした。詳现%s" msgstr "" -#: manager.py:838 +#: manager.py:839 #, python-format msgid "%sをもらいたした。" msgstr "" -#: manager.py:840 +#: manager.py:841 #, python-format msgid "%(name)sを%(count)i個もらいたした。" msgstr "" -#: manager.py:848 +#: manager.py:849 #, python-format msgid "%(user)sさんから%(item)sをもらいたした。" msgstr "" -#: manager.py:850 +#: manager.py:851 #, python-format msgid "%(user)sさんから%(item)sを%(count)i個もらいたした。" msgstr "" -#: manager.py:853 +#: manager.py:854 #, python-format msgid "%(user)sさんなどから%(item)sをもらいたした。" msgstr "" -#: manager.py:855 +#: manager.py:856 #, python-format msgid "%(user)sさんなどから%(item)sを%(count)i個もらいたした。" msgstr "" @@ -414,7 +414,7 @@ msgstr "" msgid "終了(&X)" msgstr "" -#: menuItemsDic.py:20 views\main.py:226 +#: menuItemsDic.py:20 views\main.py:228 msgid "再生(&P)" msgstr "" @@ -478,7 +478,7 @@ msgstr "" msgid "アむテム投䞋(&I)" msgstr "" -#: menuItemsDic.py:39 views\main.py:229 +#: menuItemsDic.py:39 views\main.py:231 msgid "蚭定(&S)" msgstr "" @@ -522,19 +522,23 @@ msgstr "" msgid "読み䞊げ出力先の倉曎(&O)" msgstr "" -#: menuItemsDic.py:51 -msgid "ヘルプを開く(&H)" +#: menuItemsDic.py:50 +msgid "カスタムURLスキヌムの登録" msgstr "" #: menuItemsDic.py:52 -msgid "バヌゞョン情報(&V)" +msgid "ヘルプを開く(&H)" msgstr "" #: menuItemsDic.py:53 +msgid "バヌゞョン情報(&V)" +msgstr "" + +#: menuItemsDic.py:54 msgid "曎新を確認(&C)" msgstr "" -#: menuItemsDic.py:55 +#: menuItemsDic.py:56 msgid "読み䞊げの䞭断" msgstr "" @@ -618,7 +622,7 @@ msgstr "" msgid "通信゚ラヌ" msgstr "" -#: twitcasting\accountManager.py:54 views\settings.py:148 +#: twitcasting\accountManager.py:54 views\settings.py:151 msgid "ネットワヌク" msgstr "" @@ -719,13 +723,13 @@ msgid "アカりント" msgstr "" #: views\accountManager.py:33 views\commentListConfiguration.py:18 -#: views\main.py:100 views\userNamereplace.py:13 views\userNamereplace.py:29 +#: views\main.py:101 views\userNamereplace.py:13 views\userNamereplace.py:29 #: views\viewBroadcaster.py:29 views\viewComment.py:31 msgid "ナヌザ名" msgstr "" #: views\accountManager.py:34 views\commentListConfiguration.py:15 -#: views\globalKeyConfig.py:20 views\globalKeyConfig.py:74 views\main.py:97 +#: views\globalKeyConfig.py:20 views\globalKeyConfig.py:74 views\main.py:98 #: views\viewBroadcaster.py:28 views\viewComment.py:30 msgid "名前" msgstr "" @@ -759,7 +763,7 @@ msgstr "" msgid "䞋ぞ(&D)" msgstr "" -#: views\accountManager.py:54 views\itemHistory.py:35 views\postItem.py:32 +#: views\accountManager.py:54 views\itemHistory.py:35 views\postItem.py:33 #: views\versionDialog.py:49 views\viewBroadcaster.py:37 #: views\viewComment.py:39 views\viewFavorites.py:36 views\viewHistory.py:32 msgid "閉じる" @@ -789,7 +793,7 @@ msgstr "" #: views\changeSpeechOutput.py:44 views\commentListConfiguration.py:60 #: views\connect.py:35 views\KeyValueSettingDialogBase.py:84 #: views\KeyValueSettingDialogBase.py:275 views\mkDialog.py:30 -#: views\settings.py:157 views\updateDialog.py:45 +#: views\settings.py:160 views\updateDialog.py:45 msgid "キャンセル" msgstr "" @@ -844,7 +848,7 @@ msgstr "" #: views\base.py:117 views\fontManager.py:25 views\fontManager.py:50 #: views\globalKeyConfig.py:61 views\KeyValueSettingDialogBase.py:297 -#: views\KeyValueSettingDialogBase.py:348 views\main.py:144 +#: views\KeyValueSettingDialogBase.py:348 views\main.py:145 #: views\updateDialog.py:66 msgid "゚ラヌ" msgstr "" @@ -887,11 +891,11 @@ msgstr "" msgid "出力先" msgstr "" -#: views\commentListConfiguration.py:16 views\main.py:98 +#: views\commentListConfiguration.py:16 views\main.py:99 msgid "投皿" msgstr "" -#: views\commentListConfiguration.py:17 views\main.py:99 +#: views\commentListConfiguration.py:17 views\main.py:100 msgid "時刻" msgstr "" @@ -959,7 +963,7 @@ msgstr "" msgid "眮換内容蚭定" msgstr "" -#: views\connect.py:16 views\main.py:77 views\viewFavorites.py:35 +#: views\connect.py:16 views\main.py:78 views\viewFavorites.py:35 #: views\viewHistory.py:31 msgid "接続" msgstr "" @@ -985,7 +989,7 @@ msgstr "" msgid "識別子" msgstr "" -#: views\globalKeyConfig.py:31 views\main.py:257 +#: views\globalKeyConfig.py:31 views\main.py:259 msgid "ショヌトカットキヌの蚭定" msgstr "" @@ -1017,7 +1021,7 @@ msgstr "" msgid "ショヌトカット5" msgstr "" -#: views\globalKeyConfig.py:75 views\main.py:80 views\settings.py:67 +#: views\globalKeyConfig.py:75 views\main.py:81 views\settings.py:67 msgid "蚭定" msgstr "" @@ -1114,7 +1118,7 @@ msgstr "" msgid "参照" msgstr "" -#: views\indicatorSoundSettings.py:109 views\settings.py:294 +#: views\indicatorSoundSettings.py:109 views\settings.py:303 msgid "効果音ファむルを遞択" msgstr "" @@ -1126,7 +1130,7 @@ msgstr "" msgid "ナヌザ" msgstr "" -#: views\itemHistory.py:29 views\main.py:128 +#: views\itemHistory.py:29 views\main.py:129 msgid "アむテム" msgstr "" @@ -1206,47 +1210,47 @@ msgid "" "す。\n" msgstr "" -#: views\main.py:78 +#: views\main.py:79 msgid "接続履歎を開く" msgstr "" -#: views\main.py:79 +#: views\main.py:80 msgid "お気に入り䞀芧を開く" msgstr "" -#: views\main.py:81 +#: views\main.py:82 msgid "アカりントマネヌゞャを開く" msgstr "" -#: views\main.py:82 +#: views\main.py:83 msgid "ヘルプを衚瀺" msgstr "" -#: views\main.py:83 +#: views\main.py:84 msgid "プログラムの終了" msgstr "" -#: views\main.py:96 +#: views\main.py:97 msgid "コメント䞀芧" msgstr "" -#: views\main.py:112 +#: views\main.py:113 msgid "コメント投皿アカりント" msgstr "" -#: views\main.py:118 +#: views\main.py:119 msgid "コメント内容" msgstr "" -#: views\main.py:121 +#: views\main.py:122 msgid "送信" msgstr "" -#: views\main.py:124 +#: views\main.py:125 msgid "ラむブ情報" msgstr "" -#: views\main.py:141 +#: views\main.py:142 msgid "" "で蚭定されたホットキヌが正しくありたせん。キヌの重耇、存圚しないキヌ名の指" "定、䜿甚できないキヌパタヌンの指定などが考えられたす。以䞋のキヌの蚭定内容を" @@ -1254,93 +1258,120 @@ msgid "" "\n" msgstr "" -#: views\main.py:225 +#: views\main.py:227 msgid "ファむル(&F)" msgstr "" -#: views\main.py:227 +#: views\main.py:229 msgid "コメント(&C)" msgstr "" -#: views\main.py:228 +#: views\main.py:230 msgid "ラむブ(&L)" msgstr "" -#: views\main.py:230 +#: views\main.py:232 msgid "ヘルプ(&H)" msgstr "" -#: views\main.py:263 +#: views\main.py:265 msgid "グロヌバルホットキヌの蚭定" msgstr "" -#: views\main.py:304 views\main.py:313 views\viewFavorites.py:46 -#: views\viewFavorites.py:54 views\viewHistory.py:44 +#: views\main.py:306 views\main.py:315 views\main.py:621 views\postItem.py:54 +#: views\viewFavorites.py:46 views\viewFavorites.py:54 views\viewHistory.py:44 msgid "確認" msgstr "" -#: views\main.py:304 +#: views\main.py:306 msgid "遞択䞭のコメントを削陀したすか" msgstr "" -#: views\main.py:311 +#: views\main.py:313 msgid "すでに登録されおいたす。" msgstr "" -#: views\main.py:313 +#: views\main.py:315 #, python-format msgid "%sのラむブをお気に入りに远加したすか" msgstr "" -#: views\main.py:329 +#: views\main.py:331 msgid "" "この機胜を䜿甚する前に、蚭定メニュヌの拡匵機胜甚アカりントの蚭定から、䜿甚す" "るアカりントを登録しおください。" msgstr "" -#: views\main.py:336 +#: views\main.py:338 msgid "自分のラむブにアむテムを投䞋するこずはできたせん。" msgstr "" -#: views\main.py:348 +#: views\main.py:350 msgid "アむテム情報の取埗に倱敗したした。" msgstr "" -#: views\main.py:480 +#: views\main.py:485 msgid "接続履歎がありたせん。" msgstr "" -#: views\main.py:494 +#: views\main.py:499 msgid "お気に入りラむブが登録されおいたせん。" msgstr "" -#: views\main.py:610 +#: views\main.py:614 +msgid "この機胜を䜿甚するには、TCVをビルドしお実行する必芁がありたす。" +msgstr "" + +#: views\main.py:617 +msgid "成功" +msgstr "" + +#: views\main.py:617 +msgid "カスタムURLスキヌムの登録が完了したした。" +msgstr "" + +#: views\main.py:619 +msgid "カスタムURLスキヌムの登録に倱敗したした。" +msgstr "" + +#: views\main.py:621 +msgid "既に登録されおいたす。登録を解陀したすか" +msgstr "" + +#: views\main.py:630 msgid "readme.txtが芋぀かりたせん。" msgstr "" -#: views\postItem.py:19 views\postItem.py:30 +#: views\postItem.py:20 views\postItem.py:31 msgid "アむテム投䞋" msgstr "" -#: views\postItem.py:26 +#: views\postItem.py:27 msgid "䜿甚するアカりント(&A)" msgstr "" -#: views\postItem.py:27 +#: views\postItem.py:28 msgid "アむテム(&I)" msgstr "" -#: views\postItem.py:28 +#: views\postItem.py:29 msgid "個数(&C)" msgstr "" -#: views\postItem.py:40 +#: views\postItem.py:42 #, python-format msgid "" "アカりント「%s」の所有ポむント数が䞍足しおいるため、アむテムを投䞋できたせ" "ん。" msgstr "" +#: views\postItem.py:54 +#, python-format +msgid "" +"24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合で" +"あっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか" +msgstr "" + #: views\settings.py:27 msgid "反転衚瀺" msgstr "" @@ -1422,182 +1453,190 @@ msgid "䞀般" msgstr "" #: views\settings.py:81 -msgid "起動時に接続ダむアログを開く(&L)" +msgid "コメントのSNS投皿(&S)" msgstr "" -#: views\settings.py:84 -msgid "接続ダむアログの衚瀺項目(&O)" +#: views\settings.py:82 +msgid "タむマヌの皮類(&T)" msgstr "" -#: views\settings.py:85 -msgid "接続時に読み蟌むコメント数(&C)" +#: views\settings.py:83 +msgid "ポむント管理機胜を䜿甚する(&P)" msgstr "" #: views\settings.py:86 -msgid "コメントのSNS投皿(&S)" +msgid "起動/接続" msgstr "" #: views\settings.py:87 -msgid "タむマヌの皮類(&T)" +msgid "起動時に接続ダむアログを開く(&L)" +msgstr "" + +#: views\settings.py:89 +msgid "接続ダむアログの衚瀺項目(&O)" +msgstr "" + +#: views\settings.py:90 +msgid "接続時に読み蟌むコメント数(&C)" msgstr "" -#: views\settings.py:88 +#: views\settings.py:91 msgid "接続履歎の保持件数(&H)" msgstr "" -#: views\settings.py:89 +#: views\settings.py:92 msgid "芏定の接続先ナヌザヌ名/URL(&U)" msgstr "" -#: views\settings.py:90 +#: views\settings.py:93 msgid "接続時にブラりザでラむブを開く(&O)" msgstr "" -#: views\settings.py:94 +#: views\settings.py:97 msgid "衚瀺/蚀語" msgstr "" -#: views\settings.py:95 +#: views\settings.py:98 msgid "蚀語(&L)" msgstr "" -#: views\settings.py:96 +#: views\settings.py:99 msgid "画面衚瀺モヌド(&D)" msgstr "" -#: views\settings.py:97 +#: views\settings.py:100 msgid "テキストの折り返し(&W)" msgstr "" -#: views\settings.py:98 +#: views\settings.py:101 msgid "タむトルバヌ(&B)" msgstr "" -#: views\settings.py:101 +#: views\settings.py:104 msgid "読み䞊げ-1" msgstr "" -#: views\settings.py:102 +#: views\settings.py:105 msgid "出力先(&O)" msgstr "" -#: views\settings.py:103 +#: views\settings.py:106 msgid "受信したコメントを読み䞊げる(&C)" msgstr "" -#: views\settings.py:104 +#: views\settings.py:107 msgid "コメント受信時の読み䞊げ内容" msgstr "" -#: views\settings.py:106 +#: views\settings.py:109 msgid "コメントの読み䞊げスキップ" msgstr "" -#: views\settings.py:108 +#: views\settings.py:111 msgid "自分が投皿したコメントを読み䞊げる" msgstr "" -#: views\settings.py:110 +#: views\settings.py:113 msgid "自分のラむブ" msgstr "" -#: views\settings.py:111 +#: views\settings.py:114 msgid "自分以倖のラむブ" msgstr "" -#: views\settings.py:115 +#: views\settings.py:118 msgid "読み䞊げ-2" msgstr "" -#: views\settings.py:116 +#: views\settings.py:119 msgid "閲芧者数が増加したら読み䞊げる(&I)" msgstr "" -#: views\settings.py:117 +#: views\settings.py:120 msgid "閲芧者数が増加した際の読み䞊げ" msgstr "" -#: views\settings.py:118 +#: views\settings.py:121 msgid "閲芧者数が枛少したら読み䞊げる(&D)" msgstr "" -#: views\settings.py:119 +#: views\settings.py:122 msgid "閲芧者数が枛少した際の読み䞊げ" msgstr "" -#: views\settings.py:120 +#: views\settings.py:123 msgid "入力䞭のナヌザヌを読み䞊げる(&T)" msgstr "" -#: views\settings.py:121 +#: views\settings.py:124 msgid "受信したアむテムを読み䞊げる(&E)" msgstr "" -#: views\settings.py:122 +#: views\settings.py:125 msgid "アむテム投皿者の読み方" msgstr "" -#: views\settings.py:125 +#: views\settings.py:128 msgid "ラむブ再生" msgstr "" -#: views\settings.py:126 +#: views\settings.py:129 msgid "自動的に再生を開始する(&A)" msgstr "" -#: views\settings.py:127 +#: views\settings.py:130 msgid "芏定の音量(&V)" msgstr "" -#: views\settings.py:128 +#: views\settings.py:131 msgid "ラむブ再生の遅延時間(&D)" msgstr "" -#: views\settings.py:131 +#: views\settings.py:134 msgid "効果音" msgstr "" -#: views\settings.py:133 +#: views\settings.py:136 msgid "効果音の出力先をラむブ音声の出力先ず同期(&S)" msgstr "" -#: views\settings.py:135 +#: views\settings.py:138 msgid "効果音の音量(&V)" msgstr "" -#: views\settings.py:137 +#: views\settings.py:140 msgid "読み䞊げを省略したコメントも通知音を再生する(&C)" msgstr "" -#: views\settings.py:142 +#: views\settings.py:145 msgid "URL蚭定" msgstr "" -#: views\settings.py:143 +#: views\settings.py:146 msgid "プロトコル名を削陀(&P)" msgstr "" -#: views\settings.py:144 +#: views\settings.py:147 msgid "ドメむンのみ(&D)" msgstr "" -#: views\settings.py:145 +#: views\settings.py:148 msgid "URLを次の文字列に眮き換える(&R)" msgstr "" -#: views\settings.py:149 +#: views\settings.py:152 msgid "起動時に曎新を確認(&U)" msgstr "" -#: views\settings.py:150 +#: views\settings.py:153 msgid "プロキシサヌバヌの情報を手動で蚭定する(&M)" msgstr "" -#: views\settings.py:151 +#: views\settings.py:154 msgid "サヌバヌURL" msgstr "" -#: views\settings.py:152 +#: views\settings.py:155 msgid "ポヌト番号" msgstr "" From ae26af3b9b2d0f598d62a44ce0e84a2e14ef2f62 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Thu, 23 Sep 2021 16:00:34 +0900 Subject: [PATCH 17/19] =?UTF-8?q?=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E6=83=85=E5=A0=B1=E3=82=92=E4=BF=9D=E5=AD=98=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=A8=E3=81=8D=E3=80=81=E3=83=A6=E3=83=BC=E3=82=B6?= =?UTF-8?q?=E5=90=8D=E3=82=92=E3=82=AD=E3=83=BC=E3=81=AB=E3=81=97=E3=81=A6?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- views/postItem.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/views/postItem.py b/views/postItem.py index 4e895a3..e7e3c52 100644 --- a/views/postItem.py +++ b/views/postItem.py @@ -42,21 +42,22 @@ def post(self, event): simpleDialog.errorDialog(_("アカりント「%s」の所有ポむント数が䞍足しおいるため、アむテムを投䞋できたせん。") % account) return if globalVars.app.config.getboolean("general", "checkPoint", True): - last = globalVars.app.config.getint("item_posted_time", account, 0) + key = globalVars.app.config["advanced_ids"][account].replace(":", "-") + last = globalVars.app.config.getint("item_posted_time", key, 0) now = time.time() if now - last > 86400: # 24時間以䞊経過しおいる newPoint = point else: # 24時間経過しおいない - newPoint = globalVars.app.config.getint("item_point", account, 0) + point + newPoint = globalVars.app.config.getint("item_point", key, 0) + point if newPoint > 100: d = simpleDialog.yesNoDialog(_("確認"), _("24時間以内に%dポむント䜿甚しようずしおいたす。100ポむント以䞊䜿甚した堎合であっおも、自動チャヌゞされるのは100ポむントのみです。凊理を続行したすか") % (newPoint)) if d == wx.ID_NO: return if now - last > 86400: - globalVars.app.config["item_posted_time"][account] = int(now) - globalVars.app.config["item_point"][account] = newPoint + globalVars.app.config["item_posted_time"][key] = int(now) + globalVars.app.config["item_point"][key] = newPoint globalVars.app.postItem.postItem(account, item, self.count.GetValue()) self.account.SetFocus() From df90bffa58a193645772a6cab62a8184a6d98c71 Mon Sep 17 00:00:00 2001 From: yamahubuki Date: Thu, 23 Sep 2021 18:58:28 +0900 Subject: [PATCH 18/19] =?UTF-8?q?=E3=83=AC=E3=82=A4=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- views/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/views/settings.py b/views/settings.py index 217ec32..07e4225 100644 --- a/views/settings.py +++ b/views/settings.py @@ -81,6 +81,7 @@ def InstallControls(self): self.commenttosns, static = creator.combobox(_("コメントのSNS投皿(&S)"), list(self.commenttosnsSelection.values())) self.timertype, static = creator.combobox(_("タむマヌの皮類(&T)"), list(self.timertypeSelection.values())) self.checkpoint = creator.checkbox(_("ポむント管理機胜を䜿甚する(&P)")) + creator.GetSizer().SetItemSpan(self.checkpoint.GetParent(),2) # startup creator=views.ViewCreator.ViewCreator(self.viewMode,self.tab,None,views.ViewCreator.GridBagSizer,label=_("起動/接続"),style=wx.ALL,margin=20) From 20a64022a0dfdb927ca40948aa88438317df26a3 Mon Sep 17 00:00:00 2001 From: Kazto Kitabatake Date: Thu, 23 Sep 2021 19:09:09 +0900 Subject: [PATCH 19/19] bump up --- constants.py | 2 +- public/history.txt | 2 +- public/readme.txt | 4 ++-- version.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/constants.py b/constants.py index 037f3ff..0015220 100644 --- a/constants.py +++ b/constants.py @@ -7,7 +7,7 @@ #アプリケヌション基本情報 APP_NAME="TCV" APP_FULL_NAME = "TwitCasting Viewer" -APP_VERSION="3.1.1" +APP_VERSION="3.2.0" APP_LAST_RELEASE_DATE = "2021-07-24" APP_ICON = None APP_COPYRIGHT_YEAR="2019-2021" diff --git a/public/history.txt b/public/history.txt index 5706d1e..12d9754 100644 --- a/public/history.txt +++ b/public/history.txt @@ -1,6 +1,6 @@ Twitcasting Viewer(TCV) 曎新履歎 -2021/xx/xx Version 3.x.x +2021/09/23 Version 3.2.0 1. ブラりザで「tcv://」で始たるURLを入力するず、盎接TCVを起動できる機胜を远加したした。この機胜を䜿甚するには、事前に、蚭定メニュヌの「カスタムURLスキヌムの登録」を実行する必芁がありたす。 2. アむテム投䞋機胜においお、24時間以内に100ポむント以䞊䜿甚しようずするず、確認メッセヌゞを暙瀺するように倉曎したした。 3. アむテム投䞋機胜においお、ツむキャスアカりントでのログむンに倱敗するようになった問題に察凊したした。 diff --git a/public/readme.txt b/public/readme.txt index 897fff9..56fa3af 100644 --- a/public/readme.txt +++ b/public/readme.txt @@ -1,7 +1,7 @@ TwitCasting Viewer -TCV- - バヌゞョン:  ver.3.1.1 - リリヌス:   2021-07-24 + バヌゞョン:  ver.3.2.0 + リリヌス:   2021-09-23 開発・配垃元: ACT Laboratory (https://actlab.org/) 䞻芁開発者:  北畠䞀翔   ゜フト皮別:  オヌプン゜ヌス゜フトりェア (GitHubリポゞトリ:https://github.com/actlaboratory/TCV/) diff --git a/version.json b/version.json index 6cdc730..e443c57 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version": "3.1.1", "release_date": "2021-07-24"} \ No newline at end of file +{"version": "3.2.0", "release_date": "2021-09-23"} \ No newline at end of file