From 410924aa00ba6cc590ed9ab4174e3bcfc4447b1d Mon Sep 17 00:00:00 2001 From: navjot Date: Wed, 17 Mar 2021 01:44:12 +0530 Subject: [PATCH] added kivy app code and telenium test cases --- python3_requirements.txt | 14 + src/bitmessagekivy/Makefile | 12 + src/bitmessagekivy/__init__.py | 0 .../recipes/bitmsghash/__init__.py | 50 + src/bitmessagekivy/get_platform.py | 49 + src/bitmessagekivy/identiconGeneration.py | 81 + src/bitmessagekivy/kivy_helper_search.py | 74 + src/bitmessagekivy/kv/addressbook.kv | 26 + src/bitmessagekivy/kv/allmails.kv | 25 + src/bitmessagekivy/kv/chat_list.kv | 58 + src/bitmessagekivy/kv/chat_room.kv | 45 + src/bitmessagekivy/kv/common_widgets.kv | 61 + src/bitmessagekivy/kv/composer.kv | 147 + src/bitmessagekivy/kv/credits.kv | 28 + src/bitmessagekivy/kv/draft.kv | 23 + src/bitmessagekivy/kv/inbox.kv | 39 + src/bitmessagekivy/kv/login.kv | 264 ++ src/bitmessagekivy/kv/maildetail.kv | 81 + src/bitmessagekivy/kv/myaddress.kv | 26 + src/bitmessagekivy/kv/network.kv | 117 + src/bitmessagekivy/kv/payment.kv | 253 ++ src/bitmessagekivy/kv/popup.kv | 329 ++ src/bitmessagekivy/kv/scanner.kv | 37 + src/bitmessagekivy/kv/sent.kv | 26 + src/bitmessagekivy/kv/settings.kv | 546 +++ src/bitmessagekivy/kv/trash.kv | 25 + src/bitmessagekivy/language_script.py | 94 + src/bitmessagekivy/main.kv | 376 ++ src/bitmessagekivy/messages.pot | 368 ++ src/bitmessagekivy/mpybit.py | 3639 +++++++++++++++++ src/bitmessagekivy/tests/__init__.py | 0 src/bitmessagekivy/tests/common.py | 17 + src/bitmessagekivy/tests/telenium_process.py | 63 + src/bitmessagekivy/tests/test_addressbook.py | 105 + .../tests/test_allmail_message.py | 26 + .../tests/test_create_random_address.py | 72 + .../tests/test_draft_message.py | 92 + .../tests/test_myaddress_screen.py | 55 + .../tests/test_network_screen.py | 18 + .../tests/test_payment_subscription.py | 25 + src/bitmessagekivy/tests/test_sent_message.py | 101 + .../tests/test_setting_screen.py | 16 + .../tests/test_trash_message.py | 22 + .../mo/locales/ar/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/cs/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/da/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/de/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/en/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/eo/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/fr/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/it/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/ja/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/nl/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/no/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/pl/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/pt/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/ru/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/sk/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../mo/locales/zh/LC_MESSAGES/langapp.mo | Bin 0 -> 386 bytes .../translations/po/bitmessage_ar.po | 367 ++ .../translations/po/bitmessage_cs.po | 367 ++ .../translations/po/bitmessage_da.po | 367 ++ .../translations/po/bitmessage_de.po | 367 ++ .../translations/po/bitmessage_en.po | 367 ++ .../translations/po/bitmessage_eo.po | 367 ++ .../translations/po/bitmessage_fr.po | 367 ++ .../translations/po/bitmessage_it.po | 367 ++ .../translations/po/bitmessage_ja.po | 367 ++ .../translations/po/bitmessage_nl.po | 367 ++ .../translations/po/bitmessage_no.po | 367 ++ .../translations/po/bitmessage_pl.po | 367 ++ .../translations/po/bitmessage_pt.po | 367 ++ .../translations/po/bitmessage_ru.po | 367 ++ .../translations/po/bitmessage_sk.po | 367 ++ .../translations/po/bitmessage_zh.po | 367 ++ src/bitmessagekivy/uikivysignaler.py | 30 + src/main_test.py | 26 + 77 files changed, 13453 insertions(+) create mode 100644 python3_requirements.txt create mode 100644 src/bitmessagekivy/Makefile create mode 100644 src/bitmessagekivy/__init__.py create mode 100644 src/bitmessagekivy/android/python-for-android/recipes/bitmsghash/__init__.py create mode 100644 src/bitmessagekivy/get_platform.py create mode 100644 src/bitmessagekivy/identiconGeneration.py create mode 100644 src/bitmessagekivy/kivy_helper_search.py create mode 100644 src/bitmessagekivy/kv/addressbook.kv create mode 100644 src/bitmessagekivy/kv/allmails.kv create mode 100644 src/bitmessagekivy/kv/chat_list.kv create mode 100644 src/bitmessagekivy/kv/chat_room.kv create mode 100644 src/bitmessagekivy/kv/common_widgets.kv create mode 100644 src/bitmessagekivy/kv/composer.kv create mode 100644 src/bitmessagekivy/kv/credits.kv create mode 100644 src/bitmessagekivy/kv/draft.kv create mode 100644 src/bitmessagekivy/kv/inbox.kv create mode 100644 src/bitmessagekivy/kv/login.kv create mode 100644 src/bitmessagekivy/kv/maildetail.kv create mode 100644 src/bitmessagekivy/kv/myaddress.kv create mode 100644 src/bitmessagekivy/kv/network.kv create mode 100644 src/bitmessagekivy/kv/payment.kv create mode 100644 src/bitmessagekivy/kv/popup.kv create mode 100644 src/bitmessagekivy/kv/scanner.kv create mode 100644 src/bitmessagekivy/kv/sent.kv create mode 100644 src/bitmessagekivy/kv/settings.kv create mode 100644 src/bitmessagekivy/kv/trash.kv create mode 100644 src/bitmessagekivy/language_script.py create mode 100644 src/bitmessagekivy/main.kv create mode 100644 src/bitmessagekivy/messages.pot create mode 100644 src/bitmessagekivy/mpybit.py create mode 100644 src/bitmessagekivy/tests/__init__.py create mode 100644 src/bitmessagekivy/tests/common.py create mode 100644 src/bitmessagekivy/tests/telenium_process.py create mode 100644 src/bitmessagekivy/tests/test_addressbook.py create mode 100644 src/bitmessagekivy/tests/test_allmail_message.py create mode 100644 src/bitmessagekivy/tests/test_create_random_address.py create mode 100644 src/bitmessagekivy/tests/test_draft_message.py create mode 100644 src/bitmessagekivy/tests/test_myaddress_screen.py create mode 100644 src/bitmessagekivy/tests/test_network_screen.py create mode 100644 src/bitmessagekivy/tests/test_payment_subscription.py create mode 100644 src/bitmessagekivy/tests/test_sent_message.py create mode 100644 src/bitmessagekivy/tests/test_setting_screen.py create mode 100644 src/bitmessagekivy/tests/test_trash_message.py create mode 100644 src/bitmessagekivy/translations/mo/locales/ar/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/cs/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/da/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/de/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/en/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/eo/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/fr/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/it/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/ja/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/nl/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/no/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/pl/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/pt/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/ru/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/sk/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/mo/locales/zh/LC_MESSAGES/langapp.mo create mode 100644 src/bitmessagekivy/translations/po/bitmessage_ar.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_cs.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_da.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_de.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_en.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_eo.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_fr.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_it.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_ja.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_nl.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_no.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_pl.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_pt.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_ru.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_sk.po create mode 100644 src/bitmessagekivy/translations/po/bitmessage_zh.po create mode 100644 src/bitmessagekivy/uikivysignaler.py create mode 100644 src/main_test.py diff --git a/python3_requirements.txt b/python3_requirements.txt new file mode 100644 index 00000000..2f06d14b --- /dev/null +++ b/python3_requirements.txt @@ -0,0 +1,14 @@ +certifi==2020.12.5 +chardet==4.0.0 +docutils==0.16 +idna==2.10 +Kivy==2.0.0 +Kivy-Garden==0.1.4 +-e git+https://github.com/navjotcis/KivyMD#egg=kivymd +numpy==1.20.1 +opencv-python==4.5.1.48 +Pillow==8.1.2 +Pygments==2.8.1 +pyzbar==0.1.8 +requests==2.25.1 +urllib3==1.26.4 diff --git a/src/bitmessagekivy/Makefile b/src/bitmessagekivy/Makefile new file mode 100644 index 00000000..6b33590a --- /dev/null +++ b/src/bitmessagekivy/Makefile @@ -0,0 +1,12 @@ +.PHONY: po mo + +po: + xgettext -Lpython --output=messages.pot main.py lang.kv + msgmerge --update --no-fuzzy-matching --backup=off po/en.po messages.pot + msgmerge --update --no-fuzzy-matching --backup=off po/fr.po messages.pot + +mo: + mkdir -p data/locales/en/LC_MESSAGES + mkdir -p data/locales/fr/LC_MESSAGES + msgfmt -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po + msgfmt -c -o data/locales/fr/LC_MESSAGES/langapp.mo po/fr.po diff --git a/src/bitmessagekivy/__init__.py b/src/bitmessagekivy/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/bitmessagekivy/android/python-for-android/recipes/bitmsghash/__init__.py b/src/bitmessagekivy/android/python-for-android/recipes/bitmsghash/__init__.py new file mode 100644 index 00000000..4566ebfb --- /dev/null +++ b/src/bitmessagekivy/android/python-for-android/recipes/bitmsghash/__init__.py @@ -0,0 +1,50 @@ +from pythonforandroid.toolchain import Recipe, shprint, shutil, current_directory +from os.path import exists, join +import os +import sys +from multiprocessing import cpu_count +import sh + + +class BitmsghashRecipe(Recipe): + # This could also inherit from PythonRecipe etc. if you want to + # use their pre-written build processes + + url = 'https://github.com/surbhicis/bitmsghash/archive/master.zip' + # {version} will be replaced with self.version when downloading + + depends = ['openssl'] + + conflicts = [] + + def get_recipe_env(self, arch=None): + env = super(BitmsghashRecipe, self).get_recipe_env(arch) + r = Recipe.get_recipe('openssl', self.ctx) + b = r.get_build_dir(arch.arch) + env['CCFLAGS'] = env['CFLAGS'] = \ + env['CFLAGS'] + ' -I{openssl_build_path}/include ' \ + '-I{openssl_build_path}/include/openssl'.format( + openssl_build_path=b) + env['LDFLAGS'] = \ + env['LDFLAGS'] + ' -L{openssl_build_path} ' \ + '-lcrypto{openssl_version} ' \ + '-lssl{openssl_version}'.format( + openssl_build_path=b, + openssl_version=r.version) + return env + + def should_build(self, arch=None): + super(BitmsghashRecipe, self).should_build(arch) + return not exists( + join(self.ctx.get_libs_dir(arch.arch), 'libbitmsghash.so')) + + def build_arch(self, arch=None): + super(BitmsghashRecipe, self).build_arch(arch) + env = self.get_recipe_env(arch) + with current_directory(join(self.get_build_dir(arch.arch))): + dst_dir = join(self.get_build_dir(arch.arch)) + shprint(sh.make, '-j', str(cpu_count()), _env=env) + self.install_libs(arch, '{}/libbitmsghash.so'.format(dst_dir), + 'libbitmsghash.so') + +recipe = BitmsghashRecipe() diff --git a/src/bitmessagekivy/get_platform.py b/src/bitmessagekivy/get_platform.py new file mode 100644 index 00000000..4392da16 --- /dev/null +++ b/src/bitmessagekivy/get_platform.py @@ -0,0 +1,49 @@ +from sys import platform as _sys_platform +from os import environ + +""" +We need to check platform and set environ for KIVY_CAMERA, if requires, before importing kivy. + +We cannot use sys.platform directly because it returns 'linux' on android devices as well. +We cannot use kivy.util.platform beacuse it imports kivy beforehand and thus setting environ +after that doesn't make any sense. + +So we needed to copy the `_get_platform` function from kivy.utils +""" + + +def _get_platform(): + # On Android sys.platform returns 'linux2', so prefer to check the + # existence of environ variables set during Python initialization + kivy_build = environ.get("KIVY_BUILD", "") + if kivy_build in {"android", "ios"}: + return kivy_build + elif "P4A_BOOTSTRAP" in environ: + return "android" + elif "ANDROID_ARGUMENT" in environ: + # We used to use this method to detect android platform, + # leaving it here to be backwards compatible with `pydroid3` + # and similar tools outside kivy's ecosystem + return "android" + elif _sys_platform in ("win32", "cygwin"): + return "win" + elif _sys_platform == "darwin": + return "macosx" + elif _sys_platform.startswith("linux"): + return "linux" + elif _sys_platform.startswith("freebsd"): + return "linux" + return "unknown" + + +platform = _get_platform() + +if platform not in ("android", "unknown"): + """ + After tweaking a little bit with opencv camera, it's possible to make camera + go on and off as required while the app is still running. + + Other camera provider such as `gi` has some issue upon closing the camera. + by setting KIVY_CAMERA environment variable before importing kivy, we are forcing it to use opencv camera provider. + """ + environ["KIVY_CAMERA"] = "opencv" diff --git a/src/bitmessagekivy/identiconGeneration.py b/src/bitmessagekivy/identiconGeneration.py new file mode 100644 index 00000000..0f8c4203 --- /dev/null +++ b/src/bitmessagekivy/identiconGeneration.py @@ -0,0 +1,81 @@ +""" +Core classes for loading images and converting them to a Texture. +The raw image data can be keep in memory for further access +""" +import hashlib +from io import BytesIO + +from PIL import Image +from kivy.core.image import Image as CoreImage +from kivy.uix.image import Image as kiImage +# pylint: disable=import-error + + +# constants +RESOLUTION = 300, 300 +V_RESOLUTION = 7, 7 +BACKGROUND_COLOR = 255, 255, 255, 255 +MODE = "RGB" + + +def generate(Generate_string=None): + """Generating string""" + hash_string = generate_hash(Generate_string) + color = random_color(hash_string) + image = Image.new(MODE, V_RESOLUTION, BACKGROUND_COLOR) + image = generate_image(image, color, hash_string) + image = image.resize(RESOLUTION, 0) + data = BytesIO() + image.save(data, format='png') + data.seek(0) + # yes you actually need this + im = CoreImage(BytesIO(data.read()), ext='png') + beeld = kiImage() + # only use this line in first code instance + beeld.texture = im.texture + return beeld + # image.show() + + +def generate_hash(string): + """Generating hash""" + try: + # make input case insensitive + string = str.lower(string) + hash_object = hashlib.md5(str.encode(string)) + print(hash_object.hexdigest()) + # returned object is a hex string + return hash_object.hexdigest() + except IndexError: + print("Error: Please enter a string as an argument.") + + +def random_color(hash_string): + """Getting random color""" + # remove first three digits from hex string + split = 6 + rgb = hash_string[:split] + split = 2 + r = rgb[:split] + g = rgb[split:2 * split] + b = rgb[2 * split:3 * split] + color = (int(r, 16), int(g, 16), int(b, 16), 0xFF) + return color + + +def generate_image(image, color, hash_string): + """Generating images""" + hash_string = hash_string[6:] + lower_x = 1 + lower_y = 1 + upper_x = int(V_RESOLUTION[0] / 2) + 1 + upper_y = V_RESOLUTION[1] - 1 + limit_x = V_RESOLUTION[0] - 1 + index = 0 + for x in range(lower_x, upper_x): + for y in range(lower_y, upper_y): + if int(hash_string[index], 16) % 2 == 0: + image.putpixel((x, y), color) + image.putpixel((limit_x - x, y), color) + index = index + 1 + return image diff --git a/src/bitmessagekivy/kivy_helper_search.py b/src/bitmessagekivy/kivy_helper_search.py new file mode 100644 index 00000000..5842d116 --- /dev/null +++ b/src/bitmessagekivy/kivy_helper_search.py @@ -0,0 +1,74 @@ +""" +Sql queries for bitmessagekivy +""" +from helper_sql import sqlQuery + + +def search_sql( + xAddress="toaddress", account=None, folder="inbox", where=None, + what=None, unreadOnly=False, start_indx=0, end_indx=20): + # pylint: disable=too-many-arguments, too-many-branches + """Method helping for searching mails""" + if what is not None and what != "": + what = "%" + what + "%" + else: + what = None + if folder in ("sent", "draft"): + sqlStatementBase = ( + '''SELECT toaddress, fromaddress, subject, message, status,''' + ''' ackdata, senttime FROM sent ''' + ) + elif folder == "addressbook": + sqlStatementBase = '''SELECT label, address From addressbook ''' + else: + sqlStatementBase = ( + '''SELECT folder, msgid, toaddress, message, fromaddress,''' + ''' subject, received, read FROM inbox ''' + ) + sqlStatementParts = [] + sqlArguments = [] + if account is not None: + if xAddress == 'both': + sqlStatementParts.append("(fromaddress = ? OR toaddress = ?)") + sqlArguments.append(account) + sqlArguments.append(account) + else: + sqlStatementParts.append(xAddress + " = ? ") + sqlArguments.append(account) + if folder != "addressbook": + if folder is not None: + if folder == "new": + folder = "inbox" + unreadOnly = True + sqlStatementParts.append("folder = ? ") + sqlArguments.append(folder) + else: + sqlStatementParts.append("folder != ?") + sqlArguments.append("trash") + if what is not None: + for colmns in where: + if len(where) > 1: + if where[0] == colmns: + filter_col = "(%s LIKE ?" % (colmns) + else: + filter_col += " or %s LIKE ? )" % (colmns) + else: + filter_col = "%s LIKE ?" % (colmns) + sqlArguments.append(what) + sqlStatementParts.append(filter_col) + if unreadOnly: + sqlStatementParts.append("read = 0") + if sqlStatementParts: + sqlStatementBase += "WHERE " + " AND ".join(sqlStatementParts) + # if folder in ("sent", "draft"): + if folder in ("sent", "draft"): + sqlStatementBase += \ + "ORDER BY senttime DESC limit {0}, {1}".format( + start_indx, end_indx) + elif folder == "inbox": + sqlStatementBase += \ + "ORDER BY received DESC limit {0}, {1}".format( + start_indx, end_indx) + # elif folder == "addressbook": + # sqlStatementBase += " limit {0}, {1}".format(start_indx, end_indx) + return sqlQuery(sqlStatementBase, sqlArguments) diff --git a/src/bitmessagekivy/kv/addressbook.kv b/src/bitmessagekivy/kv/addressbook.kv new file mode 100644 index 00000000..73b4c1ef --- /dev/null +++ b/src/bitmessagekivy/kv/addressbook.kv @@ -0,0 +1,26 @@ +: + name: 'addressbook' + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + SearchBar: + id: address_search + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + Loader: + ComposerButton: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/allmails.kv b/src/bitmessagekivy/kv/allmails.kv new file mode 100644 index 00000000..f1b9387e --- /dev/null +++ b/src/bitmessagekivy/kv/allmails.kv @@ -0,0 +1,25 @@ +: + name: 'allmails' + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + GridLayout: + id: identi_tag + padding: [20, 20, 0, 5] + spacing: dp(5) + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + Loader: + ComposerButton: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/chat_list.kv b/src/bitmessagekivy/kv/chat_list.kv new file mode 100644 index 00000000..e59c32d7 --- /dev/null +++ b/src/bitmessagekivy/kv/chat_list.kv @@ -0,0 +1,58 @@ +: + name: 'chlist' + canvas.before: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + MDTabs: + id: chat_panel + tab_display_mode:'text' + + Tab: + text: app.tr._("Chats") + BoxLayout: + id: chat_box + orientation: 'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + MDLabel: + font_style: 'Caption' + theme_text_color: 'Primary' + text: app.tr._('No Chat') + halign: 'center' + size_hint_y: None + bold: True + valign: 'top' + # OneLineAvatarListItem: + # text: "Single-line item with avatar" + # divider: None + # _no_ripple_effect: True + # ImageLeftWidget: + # source: './images/text_images/A.png' + # OneLineAvatarListItem: + # text: "Single-line item with avatar" + # divider: None + # _no_ripple_effect: True + # ImageLeftWidget: + # source: './images/text_images/B.png' + # OneLineAvatarListItem: + # text: "Single-line item with avatar" + # divider: None + # _no_ripple_effect: True + # ImageLeftWidget: + # source: './images/text_images/A.png' + Tab: + text: app.tr._("Contacts") + BoxLayout: + id: contact_box + orientation: 'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml diff --git a/src/bitmessagekivy/kv/chat_room.kv b/src/bitmessagekivy/kv/chat_room.kv new file mode 100644 index 00000000..40843c47 --- /dev/null +++ b/src/bitmessagekivy/kv/chat_room.kv @@ -0,0 +1,45 @@ +#:import C kivy.utils.get_color_from_hex + +: + name: 'chroom' + BoxLayout: + orientation: 'vertical' + canvas.before: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + ScrollView: + Label: + id: chat_logs + text: '' + color: C('#101010') + text_size: (self.width, None) + halign: 'left' + valign: 'top' + padding: (0, 0) # fixed in Kivy 1.8.1 + size_hint: (1, None) + height: self.texture_size[1] + markup: True + font_size: sp(20) + BoxLayout: + height: 50 + orientation: 'horizontal' + padding: 0 + size_hint: (1, None) + + TextInput: + id: message + size_hint: (1, 1) + multiline: False + font_size: sp(20) + on_text_validate: root.send_msg() + + MDRaisedButton: + text: app.tr._("Send") + elevation_normal: 2 + opposite_colors: True + size_hint: (0.3, 1) + pos_hint: {"center_x": .5} + on_press: root.send_msg() diff --git a/src/bitmessagekivy/kv/common_widgets.kv b/src/bitmessagekivy/kv/common_widgets.kv new file mode 100644 index 00000000..d69e648c --- /dev/null +++ b/src/bitmessagekivy/kv/common_widgets.kv @@ -0,0 +1,61 @@ +: + source: app.image_path +('/down-arrow.png' if self.parent.is_open == True else '/right-arrow.png') + size: 15, 15 + x: self.parent.x + self.parent.width - self.width - 5 + y: self.parent.y + self.parent.height/2 - self.height + 5 + +: + # id: search_bar + size_hint_y: None + height: self.minimum_height + + MDIconButton: + icon: 'magnify' + + MDTextField: + id: search_field + hint_text: 'Search' + on_text: app.searchQuery(self) + canvas.before: + Color: + rgba: (0,0,0,1) + +: + id: spinner + size_hint: None, None + size: dp(46), dp(46) + pos_hint: {'center_x': 0.5, 'center_y': 0.5} + active: False + +: + size_hint_y: None + height: dp(56) + spacing: '10dp' + pos_hint: {'center_x':0.45, 'center_y': .1} + + Widget: + + MDFloatingActionButton: + icon: 'plus' + opposite_colors: True + elevation_normal: 8 + md_bg_color: [0.941, 0, 0,1] + on_press: app.root.ids.scr_mngr.current = 'create' + on_press: app.clear_composer() + + +: + size_hint: None, None + size: dp(36), dp(48) + pos_hint: {'center_x': .95, 'center_y': .4} + on_active: app.root.ids.sc10.toggleAction(self) + +: + canvas: + Color: + id: set_clr + # rgba: 0.5, 0.5, 0.5, 0.5 + rgba: 0,0,0,0 + Rectangle: #woohoo!!! + size: self.size + pos: self.pos \ No newline at end of file diff --git a/src/bitmessagekivy/kv/composer.kv b/src/bitmessagekivy/kv/composer.kv new file mode 100644 index 00000000..2f06305d --- /dev/null +++ b/src/bitmessagekivy/kv/composer.kv @@ -0,0 +1,147 @@ +: + ScrollView: + id: id_scroll + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: self.minimum_height + 3 * self.parent.height/4 + padding: dp(20) + spacing: 15 + BoxLayout: + orientation: 'vertical' + MyMDTextField: + id: ti + hint_text: 'type or select sender address' + size_hint_y: None + height: 100 + font_size: dp(15) + multiline: False + required: True + helper_text_mode: "on_error" + canvas.before: + Color: + rgba: (0,0,0,1) + + BoxLayout: + size_hint_y: None + height: dp(40) + CustomSpinner: + id: btn + background_color: app.theme_cls.primary_dark + values: app.variable_1 + on_text: root.auto_fill_fromaddr() if self.text != 'Select' else '' + option_cls: Factory.get("ComposerSpinnerOption") + #background_color: color_button if self.state == 'normal' else color_button_pressed + #background_down: 'atlas://data/images/defaulttheme/spinner' + background_normal: '' + background_color: app.theme_cls.primary_color + color: color_font + font_size: '13.5sp' + ArrowImg: + + BoxLayout: + orientation: 'horizontal' + BoxLayout: + orientation: 'vertical' + txt_input: txt_input + rv: rv + size : (890, 60) + MyTextInput: + id: txt_input + size_hint_y: None + font_size: '15sp' + height: self.parent.height/2 + hint_text: app.tr._('type, select or scan QR code for recipients address') + RV: + id: rv + MDIconButton: + icon: 'qrcode-scan' + pos_hint: {'center_x': 0, 'center_y': .8} + on_release: + if root.is_camara_attached(): app.root.ids.scr_mngr.current = 'scanscreen' + else: root.camera_alert() + on_press: + app.root.ids.sc23.get_screen('composer') + + MyMDTextField: + id: subject + hint_text: 'subject' + required: True + height: 100 + font_size: '15sp' + size_hint_y: None + multiline: False + helper_text_mode: "on_error" + canvas.before: + Color: + rgba: (0,0,0,1) + + # MyMDTextField: + # id: body + # multiline: True + # hint_text: 'body' + # size_hint_y: None + # font_size: '15sp' + # required: True + # helper_text_mode: "on_error" + # canvas.before: + # Color: + # rgba: (0,0,0,1) + ScrollView: + id: scrlv + TextInput: + id: body + # text: 'srggdfsfhgfg' + hint_text: 'body' + size_hint: 1, None + height: app.window_size[1]/4 + BoxLayout: + spacing:50 + +: + readonly: False + multiline: False + + +: + # Draw a background to indicate selection + color: 0,0,0,1 + canvas.before: + Color: + rgba: app.theme_cls.primary_dark if self.selected else (1, 1, 1, 0) + Rectangle: + pos: self.pos + size: self.size + +: + canvas: + Color: + rgba: 0,0,0,.2 + + Line: + rectangle: self.x +1 , self.y, self.width - 2, self.height -2 + bar_width: 10 + scroll_type:['bars'] + viewclass: 'SelectableLabel' + SelectableRecycleBoxLayout: + default_size: None, dp(20) + default_size_hint: 1, None + size_hint_y: None + height: self.minimum_height + orientation: 'vertical' + multiselect: False + + +: + canvas.before: + Color: + rgba: (0,0,0,1) + + +: + font_size: '13.5sp' + #background_color: color_button if self.state == 'down' else color_button_pressed + #background_down: 'atlas://data/images/defaulttheme/button' + background_normal: 'atlas://data/images/defaulttheme/textinput_active' + background_color: app.theme_cls.primary_color + color: color_font \ No newline at end of file diff --git a/src/bitmessagekivy/kv/credits.kv b/src/bitmessagekivy/kv/credits.kv new file mode 100644 index 00000000..b5eb3db7 --- /dev/null +++ b/src/bitmessagekivy/kv/credits.kv @@ -0,0 +1,28 @@ +: + name: 'credits' + ScrollView: + do_scroll_x: False + BoxLayout: + size_hint_y: None + orientation: 'vertical' + OneLineListTitle: + id: cred + text: app.tr._("Available Credits") + divider: None + theme_text_color: 'Primary' + _no_ripple_effect: True + long_press_time: 1 + + OneLineListTitle: + id: cred + text: app.tr._(root.available_credits) + divider: None + font_style: 'H5' + theme_text_color: 'Primary' + _no_ripple_effect: True + long_press_time: 1 + AnchorLayout: + MDRaisedButton: + height: dp(38) + text: app.tr._("+Add more credits") + on_press: app.root.ids.scr_mngr.current = 'payment' diff --git a/src/bitmessagekivy/kv/draft.kv b/src/bitmessagekivy/kv/draft.kv new file mode 100644 index 00000000..56682d2b --- /dev/null +++ b/src/bitmessagekivy/kv/draft.kv @@ -0,0 +1,23 @@ +: + name: 'draft' + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + GridLayout: + id: identi_tag + padding: [20, 20, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + ComposerButton: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/inbox.kv b/src/bitmessagekivy/kv/inbox.kv new file mode 100644 index 00000000..b9cc8566 --- /dev/null +++ b/src/bitmessagekivy/kv/inbox.kv @@ -0,0 +1,39 @@ +: + name: 'inbox' + #transition: NoTransition() + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + SearchBar: + id:inbox_search + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + #FloatLayout: + # MDScrollViewRefreshLayout: + # id: refresh_layout + # refresh_callback: root.refresh_callback + # root_layout: root.set_root_layout() + # MDList: + # id: ml + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + Loader: + ComposerButton: + +: + size_hint:(None, None) + font_style: 'Caption' + halign: 'center' diff --git a/src/bitmessagekivy/kv/login.kv b/src/bitmessagekivy/kv/login.kv new file mode 100644 index 00000000..6c78d847 --- /dev/null +++ b/src/bitmessagekivy/kv/login.kv @@ -0,0 +1,264 @@ +#:import SlideTransition kivy.uix.screenmanager.SlideTransition +: + name:"login" + BoxLayout: + orientation: "vertical" + + #buttons-area-outer + BoxLayout: + size_hint_y: .53 + canvas: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + + ScreenManager: + id: check_screenmgr + Screen: + name: "check_screen" + BoxLayout: + orientation: "vertical" + padding: 0, dp(5), 0, dp(5) + spacing: dp(5) + + #label area + AnchorLayout: + size_hint_y: None + height: dp(50) + MDLabel: + text: app.tr._("Select method to make an address:") + bold: True + halign: "center" + theme_text_color: "Custom" + text_color: .4,.4,.4,1 + + #upper-checkbor-area + AnchorLayout: + size_hint_y: None + height: dp(40) + BoxLayout: + size_hint_x: None + width: self.minimum_width + + #check-container + AnchorLayout: + size_hint_x: None + width: dp(40) + Check: + active: True + + #text-container + AnchorLayout: + size_hint_x: None + width: dp(200) + MDLabel: + text: app.tr._("Random Number Generator") + + AnchorLayout: + size_hint_y: None + height: dp(40) + BoxLayout: + size_hint_x: None + width: self.minimum_width + + #check-container + AnchorLayout: + size_hint_x: None + width: dp(40) + Check: + + #text-container + AnchorLayout: + size_hint_x: None + width: dp(200) + MDLabel: + text: app.tr._("Pseudo Number Generator") + AnchorLayout: + MDFillRoundFlatIconButton: + icon: "chevron-double-right" + text: app.tr._("Proceed Next") + on_release: + app.root.ids.scr_mngr.current = 'random' + on_press: + app.root.ids.sc7.reset_address_label(app) + + #info-area-outer + BoxLayout: + size_hint_y: .47 + padding: dp(7) + InfoLayout: + orientation:"vertical" + padding: 0, dp(5), 0, dp(5) + canvas: + Color: + rgba:1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + Color: + rgba: app.theme_cls.primary_color + Line: + rounded_rectangle: (self.pos[0]+4, self.pos[1]+4, self.width-8,self.height-8, 10, 10, 10, 10, 50) + width: dp(1) + ScreenManager: + id: info_screenmgr + + Screen: + name: "info1" + ScrollView: + bar_width:0 + do_scroll_x: False + + BoxLayout: + orientation: "vertical" + size_hint_y: None + height: self.minimum_height + + #note area + ContentHead: + section_name: "NOTE:" + ContentBody: + section_text: ("You may generate addresses by using either random numbers or by using a pass-phrase.If you use a pass-phrase, the address is called a deterministic address. The Random Number option is selected by default but deterministic addresses may have several pros and cons.") + + + #pros area + ContentHead: + section_name: "PROS:" + ContentBody: + section_text: ("You can re-create your addresses on any computer from memory you need-not-to worry about backing up your keys.dat file as long as you can remember your pass-phrase.") + + #cons area + ContentHead: + section_name: "CONS:" + ContentBody: + section_text: ("You must remember (or write down) your address version number and the stream number along with your pass-phrase.If you choose a weak pass-phrase and someone on the internet can brute-force it, they can read your messages and send messages as you.") + +: + name:"random" + ScrollView: + id:add_random_bx + +: + orientation: "vertical" + #buttons-area-outer + BoxLayout: + orientation: "vertical" + # padding: 0, dp(5), 0, dp(5) + # spacing: dp(5) + size_hint_y: .53 + canvas: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + + #label area + AnchorLayout: + size_hint_y: None + height: dp(50) + MDLabel: + text: app.tr._("Enter a label to generate address for:") + bold: True + halign: "center" + theme_text_color: "Custom" + text_color: .4,.4,.4,1 + + AnchorLayout: + size_hint_y: None + height: dp(40) + MDTextField: + id:lab + hint_text: "Label" + required: True + size_hint_x: None + width: dp(190) + helper_text_mode: "on_error" + # helper_text: "Please enter your label name" + on_text: app.root.ids.sc7.add_validation(self) + canvas.before: + Color: + rgba: (0,0,0,1) + + AnchorLayout: + MDFillRoundFlatIconButton: + icon: "chevron-double-right" + text: app.tr._("Proceed Next") + on_release: app.root.ids.sc7.generateaddress(app) + + Widget: + + #info-area-outer + BoxLayout: + size_hint_y: .47 + padding: dp(7) + InfoLayout: + orientation:"vertical" + padding: 0, dp(5), 0, dp(5) + canvas: + Color: + rgba:1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + Color: + rgba: app.theme_cls.primary_color + Line: + rounded_rectangle: (self.pos[0]+4, self.pos[1]+4, self.width-8,self.height-8, 10, 10, 10, 10, 50) + width: dp(1) + ScreenManager: + id: info_screenmgr + + Screen: + name: "info2" + ScrollView: + bar_width:0 + do_scroll_x: False + + BoxLayout: + orientation: "vertical" + size_hint_y: None + height: self.minimum_height + + #note area + ContentHead: + section_name: "NOTE:" + ContentBody: + section_text: ("Here you may generate as many addresses as you like..Indeed creating and abandoning addresses is not encouraged.") + +: + group: 'group' + size_hint: None, None + size: dp(48), dp(48) + +: + section_name: "" + orientation: "vertical" + size_hint_y: None + height: dp(50) + padding: dp(20), 0, 0, 0 + Widget: + size_hint_y: None + height: dp(25) + MDLabel: + theme_text_color: "Custom" + text_color: .1,.1,.1,.9 + text: app.tr._(root.section_name) + bold: True + font_style: "Button" + +: + section_text: "" + size_hint_y: None + height: self.minimum_height + padding: dp(50), 0, dp(10), 0 + + MDLabel: + size_hint_y: None + height: self.texture_size[1]+dp(10) + theme_text_color: "Custom" + text_color: 0.3,0.3,0.3,1 + font_style: "Body1" + text: app.tr._(root.section_text) diff --git a/src/bitmessagekivy/kv/maildetail.kv b/src/bitmessagekivy/kv/maildetail.kv new file mode 100644 index 00000000..07851e8e --- /dev/null +++ b/src/bitmessagekivy/kv/maildetail.kv @@ -0,0 +1,81 @@ +: + name: 'mailDetail' + ScrollView: + do_scroll_x: False + BoxLayout: + size_hint_y: None + orientation: 'vertical' + # height: dp(bod.height) + self.minimum_height + height: self.minimum_height + padding: dp(10) + # MDLabel: + # size_hint_y: None + # id: subj + # text: root.subject + # theme_text_color: 'Primary' + # halign: 'left' + # font_style: 'H5' + # height: dp(40) + # on_touch_down: root.allclick(self) + OneLineListTitle: + id: subj + text: app.tr._(root.subject) + divider: None + font_style: 'H5' + theme_text_color: 'Primary' + _no_ripple_effect: True + long_press_time: 1 + TwoLineAvatarIconListItem: + id: subaft + text: app.tr._(root.from_addr) + secondary_text: app.tr._('to ' + root.to_addr) + divider: None + on_press: root.detailedPopup() + BadgeText: + size_hint:(None, None) + size:[120, 140] if app.app_platform == 'android' else [64, 80] + text: app.tr._(root.time_tag) + halign:'center' + font_style:'Caption' + pos_hint: {'center_y': .8} + _txt_right_pad: dp(70) + font_size: '11sp' + MDChip: + size_hint: (.16 if app.app_platform == 'android' else .08 , None) + text: app.tr._(root.page_type) + icon: '' + text_color: (1,1,1,1) + pos_hint: {'center_x': .91 if app.app_platform == 'android' else .95, 'center_y': .3} + radius: [8] + height: self.parent.height/4 + AvatarSampleWidget: + source: root.avatarImg + MDLabel: + text: root.status + disabled: True + font_style: 'Body2' + halign:'left' + padding_x: 20 + # MDLabel: + # id: bod + # font_style: 'Subtitle2' + # theme_text_color: 'Primary' + # text: root.message + # halign: 'left' + # height: self.texture_size[1] + MyMDTextField: + id: bod + size_hint_y: None + font_style: 'Subtitle2' + text: root.message + multiline: True + readonly: True + line_color_normal: [0,0,0,0] + _current_line_color: [0,0,0,0] + line_color_focus: [0,0,0,0] + markup: True + font_size: '15sp' + canvas.before: + Color: + rgba: (0,0,0,1) + Loader: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/myaddress.kv b/src/bitmessagekivy/kv/myaddress.kv new file mode 100644 index 00000000..f0ac822f --- /dev/null +++ b/src/bitmessagekivy/kv/myaddress.kv @@ -0,0 +1,26 @@ +: + name: 'myaddress' + BoxLayout: + id: main_box + orientation: 'vertical' + spacing: dp(5) + SearchBar: + id: search_bar + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: app.tr._('My Addresses') + font_style: 'Subtitle2' + FloatLayout: + MDScrollViewRefreshLayout: + id: refresh_layout + refresh_callback: root.refresh_callback + root_layout: root + MDList: + id: ml + Loader: diff --git a/src/bitmessagekivy/kv/network.kv b/src/bitmessagekivy/kv/network.kv new file mode 100644 index 00000000..f38c8b96 --- /dev/null +++ b/src/bitmessagekivy/kv/network.kv @@ -0,0 +1,117 @@ +: + name: 'networkstat' + MDTabs: + id: tab_panel + tab_display_mode:'text' + + Tab: + text: app.tr._("Total connections") + ScrollView: + do_scroll_x: False + MDList: + id: ml + size_hint_y: None + height: dp(200) + OneLineListItem: + text: app.tr._("Total Connections") + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: dp(58) + MDRaisedButton: + size_hint: .6, 0 + height: dp(40) + # text: root.text_variable_1 + elevation_normal: 2 + opposite_colors: True + pos_hint: {'center_x': .5} + MDLabel: + font_style: 'H6' + text: app.tr._(root.text_variable_1) + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + Tab: + text: app.tr._('Processes') + ScrollView: + do_scroll_x: False + MDList: + id: ml + size_hint_y: None + height: dp(500) + OneLineListItem: + text: app.tr._("person-to-person") + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: dp(58) + MDRaisedButton: + size_hint: .6, 0 + height: dp(40) + # text: root.text_variable_2 + elevation_normal: 2 + opposite_colors: True + pos_hint: {'center_x': .5} + MDLabel: + font_style: 'H6' + text: app.tr._(root.text_variable_2) + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + OneLineListItem: + text: app.tr._("Brodcast") + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: dp(58) + MDRaisedButton: + size_hint: .6, 0 + height: dp(40) + # text: root.text_variable_3 + elevation_normal: 2 + opposite_colors: True + pos_hint: {'center_x': .5} + MDLabel: + font_style: 'H6' + text: app.tr._(root.text_variable_3) + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + OneLineListItem: + text: app.tr._("publickeys") + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: dp(58) + MDRaisedButton: + size_hint: .6, 0 + height: dp(40) + # text: root.text_variable_4 + elevation_normal: 2 + opposite_colors: True + pos_hint: {'center_x': .5} + MDLabel: + font_style: 'H6' + text: app.tr._(root.text_variable_4) + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + OneLineListItem: + text: app.tr._("objects") + BoxLayout: + orientation: 'vertical' + size_hint_y: None + height: dp(58) + MDRaisedButton: + size_hint: .6, 0 + height: dp(40) + # text: root.text_variable_5 + elevation_normal: 2 + opposite_colors: True + pos_hint: {'center_x': .5} + MDLabel: + font_style: 'H6' + text: app.tr._(root.text_variable_5) + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' diff --git a/src/bitmessagekivy/kv/payment.kv b/src/bitmessagekivy/kv/payment.kv new file mode 100644 index 00000000..542e8e0e --- /dev/null +++ b/src/bitmessagekivy/kv/payment.kv @@ -0,0 +1,253 @@ +#:import get_color_from_hex kivy.utils.get_color_from_hex + +: + name: "payment" + BoxLayout: + ScrollView: + bar_width:0 + do_scroll_x: False + #scroll_y:0 + + BoxLayout: + spacing: dp(8) + padding: dp(5) + size_hint_y: None + height: self.minimum_height + orientation: "vertical" + + ProductCategoryLayout: + category_text: "Monthly-Subscriptions" + + ProductLayout: + heading_text: "Gas (Play Billing Codelab)" + price_text: "$0.99" + source: app.image_path + "/payment/buynew1.png" + description_text: "Buy gasoline to ride!" + product_id: "SKUGASBILLING" + + ProductLayout: + heading_text: "Upgrade your car (Play Billing Codelab)" + price_text: "$1.49" + source: app.image_path + "/payment/buynew1.png" + description_text: "Buy a premium outfit for your car!" + product_id: "SKUUPGRADECAR" + + ProductLayout: + heading_text: "Month in gold status (Play Billing Codelab)" + price_text: "$0.99" + source: app.image_path + "/payment/buynew1.png" + description_text: "Enjoy a gold status for a month!" + product_id: "SKUMONTHLYGOLD" + + ProductCategoryLayout: + category_text: "One-time payment" + + ProductLayout: + heading_text: "Gas (Play Billing Codelab)" + price_text: "$0.99" + source: app.image_path + "/payment/buynew1.png" + description_text: "Buy gasoline to ride!" + product_id: "SKUONETIMEGAS" + + ProductCategoryLayout: + category_text: "Annual-Subscriptions" + + ProductLayout: + heading_text: "Gas (Play Billing Codelab)" + price_text: "$0.99" + source: app.image_path + "/payment/buynew1.png" + description_text: "Buy gasoline to ride!" + product_id: "SKUANNUALGAS" + + ProductLayout: + heading_text: "Year in gold status (Play Billing Codelab)" + price_text: "$10.99" + source: app.image_path + "/payment/buynew1.png" + description_text: "Enjoy a gold status for a year!" + product_id: "SKUANNUALGOLD" + +: + size_hint_y: None + height: self.minimum_height + category_text:"" + + orientation: "vertical" + spacing: 2 + + #category area + Category: + text_: root.category_text + +: + canvas: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + text_: "" + size_hint_y: None + height: dp(30) + Widget: + size_hint_x: None + width: dp(20) + MDLabel: + text: root.text_ + font_size: sp(15) + +: + heading_text: "" + price_text: "" + source: "" + description_text: "" + + product_id: "" + + canvas: + Color: + rgba: 1,1,1,1 + Rectangle: + pos: self.pos + size: self.size + + size_hint_y: None + height: dp(200) + orientation: "vertical" + + #heading area + BoxLayout: + size_hint_y: 0.3 + + #text heading + BoxLayout: + Widget: + size_hint_x: None + width: dp(20) + MDLabel: + text: root.heading_text + bold: True + + #price text + BoxLayout: + size_hint_x:.3 + MDLabel: + text: root.price_text + bold: True + halign: "right" + theme_text_color: "Custom" + text_color: 0,0,1,1 + Widget: + size_hint_x: None + width: dp(20) + + #details area + BoxLayout: + size_hint_y: 0.3 + Widget: + size_hint_x: None + width: dp(20) + + #image area + AnchorLayout: + size_hint_x: None + width: self.height + BoxLayout: + canvas: + Color: + rgba: 1,1,1,1 + Ellipse: + size: self.size + pos: self.pos + source: root.source + Widget: + size_hint_x: None + width: dp(10) + + #description text + BoxLayout: + #size_hint_x: 1 + MDLabel: + text: root.description_text + font_size: sp(15) + + #Button Area + BoxLayout: + size_hint_y: 0.4 + Widget: + + AnchorLayout: + anchor_x: "right" + MDRaisedButton: + elevation_normal: 5 + text: "BUY" + on_release: + #print(app) + app.open_payment_layout(root.product_id) + + Widget: + size_hint_x: None + width: dp(20) + +: + on_release: app.initiate_purchase(self.method_name) + recent: False + source: "" + method_name: "" + right_label_text: "Recent" if self.recent else "" + + ImageLeftWidget: + source: root.source + + RightLabel: + text: root.right_label_text + theme_text_color: "Custom" + text_color: 0,0,0,.4 + font_size: sp(12) + +: + orientation: "vertical" + size_hint_y: None + height: "200dp" + + BoxLayout: + size_hint_y: None + height: dp(40) + + Widget: + size_hint_x: None + width: dp(20) + MDLabel: + text: "Select Payment Method" + font_size: sp(14) + bold: True + theme_text_color: "Custom" + text_color: 0,0,0,.5 + + + ScrollView: + + GridLayout: + cols: 1 + size_hint_y:None + height:self.minimum_height + + ListItemWithLabel: + source: app.image_path + "/payment/gplay.png" + text: "Google Play" + method_name: "gplay" + recent: True + + ListItemWithLabel: + source: app.image_path + "/payment/btc.png" + text: "BTC" + method_name: "btc" + + ListItemWithLabel: + source: app.image_path + "/payment/paypal.png" + text: "Paypal" + method_name: "som" + + ListItemWithLabel: + source: app.image_path + "/payment/buy.png" + text: "One more method" + method_name: "omm" \ No newline at end of file diff --git a/src/bitmessagekivy/kv/popup.kv b/src/bitmessagekivy/kv/popup.kv new file mode 100644 index 00000000..1a713de6 --- /dev/null +++ b/src/bitmessagekivy/kv/popup.kv @@ -0,0 +1,329 @@ +: + separator_color: 1, 1, 1, 1 + background: "White.png" + Button: + id: btn + disabled: True + background_disabled_normal: "White.png" + Image: + source: app.image_path + '/loader.zip' + anim_delay: 0 + #mipmap: True + size: root.size + + +: + id: popup_box + orientation: 'vertical' + # spacing:dp(20) + # spacing: "12dp" + size_hint_y: None + # height: "120dp" + height: 1.5*label.height+address.height + BoxLayout: + orientation: 'vertical' + MDTextField: + id: label + multiline: False + hint_text: app.tr._("Label") + required: True + helper_text_mode: "on_error" + on_text: root.checkLabel_valid(self) + canvas.before: + Color: + rgba: (0,0,0,1) + MDTextField: + id: address + hint_text: app.tr._("Address") + required: True + helper_text_mode: "on_error" + multiline: False + on_text: root.checkAddress_valid(self) + canvas.before: + Color: + rgba: (0,0,0,1) + +: + id: addbook_popup_box + size_hint_y: None + height: 2.5*(add_label.height) + orientation: 'vertical' + spacing:dp(5) + MDLabel + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("Label") + font_size: '17sp' + halign: 'left' + MDTextField: + id: add_label + font_style: 'Body1' + font_size: '15sp' + halign: 'left' + text: app.tr._(root.address_label) + theme_text_color: 'Primary' + required: True + helper_text_mode: "on_error" + on_text: root.checkLabel_valid(self) + canvas.before: + Color: + rgba: (0,0,0,1) + MDLabel: + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("Address") + font_size: '17sp' + halign: 'left' + Widget: + size_hint_y: None + height: dp(1) + BoxLayout: + orientation: 'horizontal' + MDLabel: + id: address + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._(root.address) + font_size: '15sp' + halign: 'left' + IconRightSampleWidget: + pos_hint: {'center_x': 0, 'center_y': 1} + icon: 'content-copy' + on_press: app.copy_composer_text(root.address) + + +: + id: myadd_popup + size_hint_y: None + spacing:dp(25) + # height: dp(1.2*(myaddr_label.height)) + orientation: 'vertical' + MDLabel: + id: myaddr_label + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("Label") + font_size: '17sp' + halign: 'left' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: root.address_label + font_size: '15sp' + halign: 'left' + MDLabel: + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("Address") + font_size: '17sp' + halign: 'left' + BoxLayout: + orientation: 'horizontal' + MDLabel: + id: label_address + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._(root.address) + font_size: '15sp' + halign: 'left' + IconRightSampleWidget: + pos_hint: {'center_x': 0, 'center_y': 1} + icon: 'content-copy' + on_press: app.copy_composer_text(root.address) + BoxLayout: + id: my_add_btn + spacing:5 + orientation: 'horizontal' + size_hint_y: None + height: self.minimum_height + MDRaisedButton: + size_hint: 2, None + height: dp(40) + on_press: root.send_message_from() + MDLabel: + font_style: 'H6' + text: app.tr._('Send message from') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + MDRaisedButton: + size_hint: 1.5, None + height: dp(40) + on_press: app.root.ids.scr_mngr.current = 'showqrcode' + on_press: app.root.ids.sc15.qrdisplay(root, root.address) + MDLabel: + font_style: 'H6' + text: app.tr._('Show QR code') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + MDRaisedButton: + size_hint: 1.5, None + height: dp(40) + on_press: root.close_pop() + MDLabel: + font_style: 'H6' + text: app.tr._('Cancel') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + +: + id: closing_popup + size_hint : (None,None) + height: 1.4*(popup_label.height+ my_add_btn.children[0].height) + width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4) + background: app.image_path + '/popup.jpeg' + auto_dismiss: False + separator_height: 0 + BoxLayout: + id: myadd_popup_box + size_hint_y: None + spacing:dp(70) + orientation: 'vertical' + BoxLayout: + size_hint_y: None + orientation: 'vertical' + spacing:dp(25) + MDLabel: + id: popup_label + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("Bitmessage isn't connected to the network.\n If you quit now, it may cause delivery delays.\n Wait until connected and the synchronisation finishes?") + font_size: '17sp' + halign: 'center' + BoxLayout: + id: my_add_btn + spacing:5 + orientation: 'horizontal' + MDRaisedButton: + size_hint: 1.5, None + height: dp(40) + on_press: root.closingAction(self.children[0].text) + on_press: app.stop() + MDLabel: + font_style: 'H6' + text: app.tr._('Yes') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + MDRaisedButton: + size_hint: 1.5, None + height: dp(40) + on_press: root.closingAction(self.children[0].text) + MDLabel: + font_style: 'H6' + text: app.tr._('No') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + MDRaisedButton: + size_hint: 1.5, None + height: dp(40) + #on_press: root.dismiss() + on_press: root.closingAction(self.children[0].text) + MDLabel: + font_style: 'H6' + text: app.tr._('Cancel') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + +: + id: myadd_popup + size_hint : (None,None) + # height: 2*(sd_label.height+ sd_btn.children[0].height) + width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4) + background: app.image_path + '/popup.jpeg' + auto_dismiss: False + separator_height: 0 + BoxLayout: + id: myadd_popup_box + size_hint_y: None + orientation: 'vertical' + spacing:dp(8 if app.app_platform == 'android' else 3) + BoxLayout: + orientation: 'vertical' + MDLabel: + id: from_add_label + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: app.tr._("From :") + font_size: '15sp' + halign: 'left' + Widget: + size_hint_y: None + height: dp(1 if app.app_platform == 'android' else 0) + BoxLayout: + size_hint_y: None + height: 50 + orientation: 'horizontal' + MDLabel: + id: sd_label + font_style: 'Body2' + theme_text_color: 'Primary' + text: app.tr._("[b]" + root.from_addr + "[/b]") + font_size: '15sp' + halign: 'left' + markup: True + IconRightSampleWidget: + icon: 'content-copy' + on_press: app.copy_composer_text(root.from_addr) + Widget: + id: space_1 + size_hint_y: None + height: dp(2 if app.app_platform == 'android' else 0) + BoxLayout: + id: to_addtitle + Widget: + id:space_2 + size_hint_y: None + height: dp(1 if app.app_platform == 'android' else 0) + BoxLayout: + id: to_addId + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: 50 + MDLabel: + font_style: 'Body2' + theme_text_color: 'Primary' + text: app.tr._("Date : " + root.time_tag) + font_size: '15sp' + halign: 'left' + BoxLayout: + id: sd_btn + orientation: 'vertical' + MDRaisedButton: + id: dismiss_btn + on_press: root.dismiss() + size_hint: .2, 0 + pos_hint: {'x': 0.8, 'y': 0} + MDLabel: + font_style: 'H6' + text: app.tr._('Cancel') + font_size: '13sp' + color: (1,1,1,1) + halign: 'center' + +: + orientation: 'horizontal' + MDLabel: + font_style: 'Body2' + theme_text_color: 'Primary' + text: app.tr._(root.to_addr) + font_size: '15sp' + halign: 'left' + IconRightSampleWidget: + icon: 'content-copy' + on_press: app.copy_composer_text(root.to_addr) + +: + orientation: 'vertical' + MDLabel: + id: to_add_label + font_style: 'Subtitle2' + theme_text_color: 'Primary' + text: "To :" + font_size: '15sp' + halign: 'left' \ No newline at end of file diff --git a/src/bitmessagekivy/kv/scanner.kv b/src/bitmessagekivy/kv/scanner.kv new file mode 100644 index 00000000..1c56f6c2 --- /dev/null +++ b/src/bitmessagekivy/kv/scanner.kv @@ -0,0 +1,37 @@ +#:import ZBarSymbol pyzbar.pyzbar.ZBarSymbol + +BoxLayout: + orientation: 'vertical' + ZBarCam: + id: zbarcam + # optional, by default checks all types + code_types: ZBarSymbol.QRCODE, ZBarSymbol.EAN13 + scan_callback: app._after_scan + scanner_line_y_initial: self.size[1]/2 +self.qrwidth/2 + scanner_line_y_final: self.size[1]/2-self.qrwidth/2 + + canvas: + Color: + rgba: 0,0,0,.25 + + #left rect + Rectangle: + pos: self.pos[0], self.pos[1] + size: self.size[0]/2-self.qrwidth/2, self.size[1] + + #right rect + Rectangle: + pos: self.size[0]/2+self.qrwidth/2, 0 + size: self.size[0]/2-self.qrwidth/2, self.size[1] + + #top rect + Rectangle: + pos: self.size[0]/2-self.qrwidth/2, self.size[1]/2+self.qrwidth/2 + size: self.qrwidth, self.size[1]/2-self.qrwidth/2 + + #bottom rect + Rectangle: + pos: self.size[0]/2-self.qrwidth/2, 0 + size: self.qrwidth, self.size[1]/2-self.qrwidth/2 + + \ No newline at end of file diff --git a/src/bitmessagekivy/kv/sent.kv b/src/bitmessagekivy/kv/sent.kv new file mode 100644 index 00000000..11477ed6 --- /dev/null +++ b/src/bitmessagekivy/kv/sent.kv @@ -0,0 +1,26 @@ +: + name: 'sent' + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + SearchBar: + id: sent_search + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + Loader: + ComposerButton: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/settings.kv b/src/bitmessagekivy/kv/settings.kv new file mode 100644 index 00000000..193f5db5 --- /dev/null +++ b/src/bitmessagekivy/kv/settings.kv @@ -0,0 +1,546 @@ +: + name: 'set' + MDTabs: + id: tab_panel + tab_display_mode:'text' + + Tab: + text: app.tr._("User Interface") + ScrollView: + do_scroll_x: False + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: dp(250) + self.minimum_height + padding: 10 + BoxLayout: + size_hint_y: None + orientation: 'horizontal' + height: self.minimum_height + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + disabled: True + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Start-on-login not yet supported on your OS") + halign: 'left' + pos_hint: {'center_x': 0, 'center_y': 0.6} + disabled: True + BoxLayout: + size_hint_y: None + orientation: 'vertical' + padding: [20, 0, 0, 0] + spacing: dp(10) + height: dp(100) + self.minimum_height + # pos_hint: {'center_x': 0, 'center_y': 0.6} + BoxLayout: + id: box_height + orientation: 'vertical' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Tray") + halign: 'left' + bold: True + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Start Bitmessage in the tray(don't show main window)") + halign: 'left' + pos_hint: {'x': 0, 'y': .5} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Minimize to tray") + halign: 'left' + pos_hint: {'x': 0, 'y': .5} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Close to tray") + halign: 'left' + pos_hint: {'x': 0, 'y': .5} + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: dp(100) + self.minimum_height + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Hide connection notifications") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Show notification when message received") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Run in Portable Mode") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + BoxLayout: + orientation: 'vertical' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._('In portable Mode, messages and config files are stored in the same directory as the program rather then the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive.') + # text: 'huiiiii' + halign: 'left' + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: dp(100) + self.minimum_height + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Willingly include unencrypted destination address when sending to a mobile device") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Use identicons") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + BoxLayout: + orientation: 'horizontal' + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Reply below Quote") + halign: 'left' + pos_hint: {'x': 0, 'y': 0.2} + Widget: + size_hint_y: None + height: 10 + BoxLayout: + size_hint_y: None + orientation: 'vertical' + # padding: [0, 10, 0, 0] + spacing: 10 + padding: [20, 0, 0, 0] + height: dp(20) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Interface Language") + # halign: 'right' + bold: True + MDDropDownItem: + id: dropdown_item + text: "System Setting" + # pos_hint: {"center_x": .5, "center_y": .6} + # current_item: "Item 0" + on_release: root.menu.open() + BoxLayout: + spacing:5 + orientation: 'horizontal' + # pos_hint: {'x':.76} + BoxLayout: + orientation: 'horizontal' + # padding: [0, 10, 0, 0] + spacing: 10 + # MDRaisedButton: + # text: app.tr._('Cancel') + MDRaisedButton: + text: app.tr._('Apply') + on_press: root.change_language() + Tab: + text: 'Network Settings' + ScrollView: + do_scroll_x: False + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: dp(500) + self.minimum_height + padding: 10 + BoxLayout: + id: box_height + orientation: 'vertical' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Listening port") + halign: 'left' + bold: True + BoxLayout: + orientation: 'horizontal' + padding: [10, 0, 0, 0] + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Listen for connections on port:") + halign: 'left' + BoxLayout: + orientation: 'horizontal' + MDTextFieldRect: + size_hint: None, None + size: dp(100), dp(30) + text: app.tr._('8444') + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + BoxLayout: + orientation: 'horizontal' + padding_left: 10 + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("UPnP") + halign: 'left' + pos_hint: {'x': 0, 'y': 0} + BoxLayout: + orientation: 'vertical' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Proxy server / Tor") + halign: 'left' + bold: True + + GridLayout: + cols: 2 + padding: [10, 0, 0, 0] + MDLabel: + size_hint_x: None + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Type:") + halign: 'left' + MDDropDownItem: + id: dropdown_item2 + dropdown_bg: [1, 1, 1, 1] + text: 'none' + pos_hint: {'x': 0.9, 'y': 0} + items: [f"{i}" for i in ['System Setting','U.S. English']] + BoxLayout: + size_hint_y: None + orientation: 'vertical' + padding: [30, 0, 0, 0] + spacing: 10 + height: dp(100) + self.minimum_height + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Server hostname:") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: dp(app.window_size[0]/4), dp(30) + hint_text: app.tr._('localhost') + pos_hint: {'center_y': .5, 'center_x': .5} + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Port:") + halign: 'left' + # TextInput: + # size_hint: None, None + # hint_text: '9050' + # size: dp(app.window_size[0]/4), dp(30) + # input_filter: "int" + # readonly: False + # multiline: False + # font_size: '15sp' + MDTextFieldRect: + size_hint: None, None + size: dp(app.window_size[0]/4), dp(30) + hint_text: app.tr._('9050') + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Username:") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: dp(app.window_size[0]/4), dp(30) + pos_hint: {'center_y': .5, 'center_x': .5} + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Pass:") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: dp(app.window_size[0]/4), dp(30) + pos_hint: {'center_y': .5, 'center_x': .5} + BoxLayout: + orientation: 'horizontal' + padding: [30, 0, 0, 0] + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Authentication") + halign: 'left' + pos_hint: {'x': 0, 'y': 0} + BoxLayout: + orientation: 'horizontal' + padding: [30, 0, 0, 0] + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Listen for incoming connections when using proxy") + halign: 'left' + pos_hint: {'x': 0, 'y': 0} + BoxLayout: + orientation: 'horizontal' + padding: [30, 0, 0, 0] + MDCheckbox: + id: chkbox + size_hint: None, None + size: dp(48), dp(50) + # active: True + halign: 'center' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Only connect to onion services(*.onion)") + halign: 'left' + pos_hint: {'x': 0, 'y': 0} + BoxLayout: + orientation: 'vertical' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Bandwidth limit") + halign: 'left' + bold: True + BoxLayout: + size_hint_y: None + orientation: 'horizontal' + padding: [30, 0, 0, 0] + height: dp(30) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Maximum download rate (kB/s):[0:unlimited]") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: app.window_size[0]/2, dp(30) + hint_text: app.tr._('0') + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + BoxLayout: + size_hint_y: None + orientation: 'horizontal' + padding: [30, 0, 0, 0] + height: dp(30) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Maximum upload rate (kB/s):[0:unlimited]") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: app.window_size[0]/2, dp(30) + hint_text: '0' + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + BoxLayout: + size_hint_y: None + orientation: 'horizontal' + padding: [30, 0, 0, 0] + height: dp(30) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Maximum outbound connections:[0:none]") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: app.window_size[0]/2, dp(30) + hint_text: '8' + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + BoxLayout: + spacing:5 + orientation: 'horizontal' + # pos_hint: {'x':.76} + # MDRaisedButton: + # text: app.tr._('Cancel') + MDRaisedButton: + text: app.tr._('Apply') + Tab: + text: 'Resends Expire' + ScrollView: + do_scroll_x: False + BoxLayout: + size_hint_y: None + orientation: 'vertical' + height: dp(210 if app.app_platform == 'android' else 100)+ self.minimum_height + padding: 20 + # spacing: 10 + BoxLayout: + # size_hint_y: None + id: box1_height + orientation: 'vertical' + # height: dp(100) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._(root.exp_text) + halign: 'left' + BoxLayout: + id: box2_height + size_hint_y: None + orientation: 'vertical' + height: dp(30) + self.minimum_height + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Leave these input fields blank for the default behavior.") + halign: 'left' + BoxLayout: + size_hint_y: None + orientation: 'vertical' + padding: [10, 0, 0, 0] + height: dp(50) + self.minimum_height + BoxLayout: + orientation: 'horizontal' + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("Give up after") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: dp(70), dp(30) + text: app.tr._('0') + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._("days and") + halign: 'left' + MDTextFieldRect: + size_hint: None, None + size: dp(70), dp(30) + text: '0' + pos_hint: {'center_y': .5, 'center_x': .5} + input_filter: "int" + MDLabel: + font_style: 'Body1' + theme_text_color: 'Primary' + text: "months" + halign: 'left' + BoxLayout: + size_hint_y: None + spacing:5 + orientation: 'horizontal' + # pos_hint: {'left': 0} + # pos_hint: {'x':.75} + height: dp(50) + self.minimum_height + # MDRaisedButton: + # text: app.tr._('Cancel') + MDRaisedButton: + text: app.tr._('Apply') + + Loader: \ No newline at end of file diff --git a/src/bitmessagekivy/kv/trash.kv b/src/bitmessagekivy/kv/trash.kv new file mode 100644 index 00000000..71708e6d --- /dev/null +++ b/src/bitmessagekivy/kv/trash.kv @@ -0,0 +1,25 @@ +: + name: 'trash' + BoxLayout: + orientation: 'vertical' + spacing: dp(5) + GridLayout: + id: identi_tag + padding: [20, 20, 0, 5] + spacing: dp(5) + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + id: tag_label + text: '' + font_style: 'Subtitle2' + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml + Loader: + ComposerButton: \ No newline at end of file diff --git a/src/bitmessagekivy/language_script.py b/src/bitmessagekivy/language_script.py new file mode 100644 index 00000000..45c45a4a --- /dev/null +++ b/src/bitmessagekivy/language_script.py @@ -0,0 +1,94 @@ +import os +import subprocess + +KVFILES = [ + "settings", + "popup", + "allmails", + "draft", + "maildetail", + "common_widgets", + "addressbook", + "myaddress", + "composer", + "payment", + "sent", + "network", + "login", + "credits", + "trash", + "inbox", + "chat_room", + "chat_list" +] + +windowsLanguageMap = { + 'ar': 'Arabic', + 'cs': 'Czech', + 'da': 'Danish', + 'de': 'German', + 'en': 'English', + 'eo': 'Esperanto', + 'fr': 'French', + 'it': 'Italian', + 'ja': 'Japanese', + 'nl': 'Dutch', + 'no': 'Norwegian', + 'pl': 'Polish', + 'pt': 'Portuguese', + 'ru': 'Russian', + 'sk': 'Slovak', + 'zh': 'Chinese', +} + +current_dir_path = os.path.abspath(os.path.join(__file__, '../')) +main_file = os.path.join(current_dir_path, 'mpybit.py') +kv_file = os.path.join(current_dir_path, 'main.kv') + +print("Create .po files for Project") + +translation_command = [ + 'xgettext', + '-Lpython', + '--output=messages.pot', + '--from-code=UTF-8', + main_file, + kv_file +] + +for kv_file in KVFILES: + translation_command.append(f'{current_dir_path}/kv/{kv_file}.kv') + +# print('translation_command..............', translation_command) +subprocess.run(translation_command, stdout=subprocess.DEVNULL) +# print("The exit code1 was: %d" % list_files.returncode) + +# this command is used to create seperate dir for mo and po file +subprocess.run( + ['mkdir', '-p', 'translations/po'], stdout=subprocess.DEVNULL) + + +for key in windowsLanguageMap.keys(): + subprocess.run( + ['touch', f'{current_dir_path}/translations/po/bitmessage_{key}.po'], stdout=subprocess.DEVNULL) + subprocess.run( + ['msgmerge', '--update', '--no-fuzzy-matching', '--backup=off', + f'{current_dir_path}/translations/po/bitmessage_{key}.po', f'{current_dir_path}/messages.pot'], + stdout=subprocess.DEVNULL + ) + +print("Create .mo file from .po file") + +for key in windowsLanguageMap.keys(): + subprocess.run( + ['mkdir', '-p', f'{current_dir_path}/translations/mo/locales/{key}/LC_MESSAGES'], + stdout=subprocess.DEVNULL + ) + subprocess.run( + ['touch', f'{current_dir_path}/translations/mo/locales/{key}/LC_MESSAGES/langapp.mo'], + stdout=subprocess.DEVNULL + ) + subprocess.run( + ['msgfmt', '-c', '-o', f'{current_dir_path}/translations/mo/locales/{key}/LC_MESSAGES/langapp.mo', + f'{current_dir_path}/translations/po/bitmessage_{key}.po'], stdout=subprocess.DEVNULL + ) diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv new file mode 100644 index 00000000..95e98a2b --- /dev/null +++ b/src/bitmessagekivy/main.kv @@ -0,0 +1,376 @@ +#:import IconLeftWidget kivymd.uix.list.IconLeftWidget +#:import images_path kivymd.images_path +#:import Spinner kivy.uix.spinner.Spinner +#:import Factory kivy.factory.Factory + +#:import MDCheckbox kivymd.uix.selectioncontrol.MDCheckbox +#:import MDList kivymd.uix.list.MDList +#:import OneLineListItem kivymd.uix.list.OneLineListItem +#:import MDTextField kivymd.uix.textfield.MDTextField +#:import get_color_from_hex kivy.utils.get_color_from_hex +#:import MDCard kivymd.uix.card.MDCard +#:import colors kivymd.color_definitions.colors +#:import MDTabs kivymd.uix.tab.MDTabs +#:import MDFloatingActionButton kivymd.uix.button.MDFloatingActionButton +#:import Factory kivy.factory.Factory +#:import MDScrollViewRefreshLayout kivymd.uix.refreshlayout.MDScrollViewRefreshLayout +#:import MDSpinner kivymd.uix.spinner.MDSpinner +#:import MDTabsBase kivymd.uix.tab.MDTabsBase +##:import ZBarSymbol pyzbar.pyzbar.ZBarSymbol + + +#:set color_button (0.784, 0.443, 0.216, 1) # brown +#:set color_button_pressed (0.659, 0.522, 0.431, 1) # darker brown +#:set color_font (0.957, 0.890, 0.843, 1) # off white + +: + font_size: '12.5sp' + #background_color: color_button if self.state == 'down' else color_button_pressed + #background_down: 'atlas://data/images/defaulttheme/button' + background_normal: 'atlas://data/images/defaulttheme/textinput_active' + background_color: app.theme_cls.primary_color + # text_autoupdate: True + color: color_font + + + #on_press: root.active = not root.active + on_press: root.currentlyActive() + active_color: root.theme_cls.primary_color if root.active else root.theme_cls.text_color + + IconLeftWidget: + icon: root.icon + theme_text_color: "Custom" + text_color: root.active_color + + BadgeText: + id: badge_txt + text: f"{root.badge_text}" + theme_text_color: "Custom" + #text_color: root.active_color + halign: 'right' + +: + canvas: + Color: + rgba: self.theme_cls.divider_color + Line: + points: root.x, root.y + dp(8), root.x + self.width, root.y + dp(8) + + + + BoxLayout: + orientation: 'vertical' + + FloatLayout: + size_hint_y: None + height: "200dp" + + MDIconButton: + id: reset_image + icon: "refresh" + x: root.parent.x + dp(10) + pos_hint: {"top": 1, 'left': 1} + color: [1,0,0,1] + on_release: app.rest_default_avatar_img() + theme_text_color: "Custom" + text_color: app.theme_cls.primary_color + # opacity: 1 if app.current_address_label() else 0 + # disabled: False if app.current_address_label() else True + opacity: 0 + disabled: True + + MDIconButton: + id: file_manager + icon: "file-image" + x: root.parent.x + dp(10) + pos_hint: {"top": 1, 'right': 1} + color: [1,0,0,1] + on_release: app.file_manager_open() + # md_bg_color: app.theme_cls.primary_color + theme_text_color: "Custom" + text_color: app.theme_cls.primary_color + opacity: 1 if app.current_address_label() else 0 + disabled: False if app.current_address_label() else True + + BoxLayout: + id: top_box + size_hint_y: None + height: "200dp" + #padding: "10dp" + x: root.parent.x + pos_hint: {"top": 1} + Image: + # source: './images/drawer_logo1.png' + # source: app.get_default_logo() + + ScrollView: + id: scroll_y + pos_hint: {"top": 1} + + GridLayout: + id: box_item + cols: 1 + size_hint_y: None + height: self.minimum_height + NavigationDrawerDivider: + NavigationDrawerSubheader: + text: app.tr._('Accounts') + #text: app.tr._('Hello World') + height:"35dp" + NavigationItem: + # size: 50,50 + height: dp(48) + CustomSpinner: + id: btn + pos_hint:{"x":0,"y":0} + option_cls: Factory.get("MySpinnerOption") + font_size: '12.5sp' + text: app.getDefaultAccData(self) + #background_color: color_button if self.state == 'normal' else color_button_pressed + #background_down: 'atlas://data/images/defaulttheme/spinner' + color: color_font + background_normal: '' + background_color: app.theme_cls.primary_color + #background_color: (0.62,0.67,0.72,1) + # values: app.variable_1 + on_text:app.getCurrentAccountData(self.text) + # Image: + # source: app.get_default_image() + # x: self.width/6 + # y: self.parent.y + self.parent.height/4 + # size: self.parent.height/2, self.parent.height/2 + ArrowImg: + NavigationItem: + id: inbox_cnt + text: app.tr._('Inbox') + #text: app.tr._('Hello World') + icon: 'email-open' + divider: None + on_release: app.root.ids.scr_mngr.current = 'inbox' + on_release: root.parent.set_state() + on_press: app.load_screen(self) + NavigationItem: + id: send_cnt + text: app.tr._('Sent') + icon: 'send' + divider: None + on_release: app.root.ids.scr_mngr.current = 'sent' + on_release: root.parent.set_state() + NavigationItem: + id: draft_cnt + text: app.tr._('Draft') + icon: 'message-draw' + divider: None + on_release: app.root.ids.scr_mngr.current = 'draft' + on_release: root.parent.set_state() + NavigationItem: + id: trash_cnt + text: app.tr._('Trash') + icon: 'delete' + divider: None + on_release: app.root.ids.scr_mngr.current = 'trash' + on_release: root.parent.set_state() + NavigationItem: + id: allmail_cnt + text: app.tr._('All Mails') + icon: 'mailbox' + divider: None + on_release: app.root.ids.scr_mngr.current = 'allmails' + on_release: root.parent.set_state() + on_press: app.load_screen(self) + # NavigationItem: + # id: chat_rm + # text: app.tr._('Chat Room') + # icon: 'wechat' + # divider: None + # on_release: app.root.ids.scr_mngr.current = 'chlist' + # on_release: root.parent.set_state() + NavigationDrawerDivider: + NavigationDrawerSubheader: + text: app.tr._("All labels") + NavigationItem: + text: app.tr._('Address Book') + icon: 'book-multiple' + divider: None + on_release: app.root.ids.scr_mngr.current = 'addressbook' + on_release: root.parent.set_state() + NavigationItem: + text: app.tr._('Settings') + icon: 'application-settings' + divider: None + on_release: app.root.ids.scr_mngr.current = 'set' + on_release: root.parent.set_state() + NavigationItem: + text: app.tr._('Purchase') + icon: 'shopping' + divider: None + on_release: app.root.ids.scr_mngr.current = 'payment' + on_release: root.parent.set_state() + # NavigationItem: + # text: app.tr._('Credits') + # icon: 'wallet' + # divider: None + # on_release: app.root.ids.scr_mngr.current = 'credits' + # on_release: root.parent.set_state() + NavigationItem: + text: app.tr._('New address') + icon: 'account-plus' + divider: None + on_release: app.root.ids.scr_mngr.current = 'login' + on_release: root.parent.set_state() + on_press: app.reset_login_screen() + NavigationItem: + text: app.tr._('Network status') + icon: 'server-network' + divider: None + on_release: app.root.ids.scr_mngr.current = 'networkstat' + on_release: root.parent.set_state() + NavigationItem: + text: app.tr._('My addresses') + icon: 'account-multiple' + divider: None + on_release: app.root.ids.scr_mngr.current = 'myaddress' + on_release: root.parent.set_state() + +MDNavigationLayout: + id: nav_layout + + MDToolbar: + id: toolbar + title: app.current_address_label() + opacity: 1 if app.addressexist() else 0 + disabled: False if app.addressexist() else True + pos_hint: {"top": 1} + md_bg_color: app.theme_cls.primary_color + elevation: 10 + left_action_items: [['menu', lambda x: nav_drawer.set_state("toggle")]] + right_action_items: [['account-plus', lambda x: app.addingtoaddressbook()]] + + ScreenManager: + id: scr_mngr + size_hint_y: None + height: root.height - toolbar.height + Inbox: + id:sc1 + Page: + id:sc2 + Create: + id:sc3 + Sent: + id:sc4 + Trash: + id:sc5 + Login: + id:sc6 + Random: + id:sc7 + Spam: + id:sc8 + Setting: + id:sc9 + MyAddress: + id:sc10 + AddressBook: + id:sc11 + Payment: + id:sc12 + NetworkStat: + id:sc13 + MailDetail: + id:sc14 + ShowQRCode: + id:sc15 + Draft: + id:sc16 + Allmails: + id:sc17 + Credits: + id:sc18 + Starred: + id:sc19 + Archieve: + id:sc20 + ChatRoom: + id:sc21 + ChatList: + id:sc22 + ScanScreen: + id:sc23 + + MDNavigationDrawer: + id: nav_drawer + + ContentNavigationDrawer: + id: content_drawer + +: + name: 'page' + Label: + text:"I am in Page" + color: 0,0,0,1 + +: + name: 'create' + Loader: + +: + name: 'spam' + Label: + text:"I am in Spam" + color: 0,0,0,1 + +: + name: 'showqrcode' + BoxLayout: + orientation: 'vertical' + size_hint: (None, None) + pos_hint:{'center_x': .5, 'top': 0.9} + size: (app.window_size[0]/1.8, app.window_size[0]/1.8) + id: qr + BoxLayout: + orientation: 'vertical' + MyMDTextField: + size_hint_y: None + font_style: 'Body1' + theme_text_color: 'Primary' + text: app.tr._(root.address) + multiline: True + readonly: True + line_color_normal: [0,0,0,0] + _current_line_color: [0,0,0,0] + line_color_focus: [0,0,0,0] + halign: 'center' + font_size: dp(15) + bold: True + canvas.before: + Color: + rgba: (0,0,0,1) + # MDLabel: + # size_hint_y: None + # font_style: 'Body1' + # theme_text_color: 'Primary' + # text: "[b]BM-2cV7Y8imvAevK6z6YmhYRcj2t7rghBtDSZ[/b]" + # markup: True + # pos_hint: {'x': .28, 'y': 0.6} + +: + name: 'starred' + Label: + text:"I am in Starred" + color: 0,0,0,1 + + color: 0,0,0,1 + +: + name: 'archieve' + Label: + text:"I am in Archieve" + color: 0,0,0,1 + + color: 0,0,0,1 + +: + name:'scanscreen' + + + \ No newline at end of file diff --git a/src/bitmessagekivy/messages.pot b/src/bitmessagekivy/messages.pot new file mode 100644 index 00000000..6d169819 --- /dev/null +++ b/src/bitmessagekivy/messages.pot @@ -0,0 +1,368 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-20 02:27+0530\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py new file mode 100644 index 00000000..bfc625f2 --- /dev/null +++ b/src/bitmessagekivy/mpybit.py @@ -0,0 +1,3639 @@ +# pylint: disable=too-many-lines,import-error,no-name-in-module,unused-argument +# pylint: disable=too-many-ancestors,too-many-locals,useless-super-delegation +# pylint: disable=protected-access +# pylint: disable=import-outside-toplevel,ungrouped-imports,wrong-import-order,unused-import,arguments-differ +# pylint: disable=invalid-name,unnecessary-comprehension,broad-except,simplifiable-if-expression,no-member +# pylint: disable=too-many-return-statements + +""" +Bitmessage android(mobile) interface +""" + + +from bitmessagekivy.get_platform import platform +import os +import time +from bitmessagekivy import identiconGeneration +from bitmessagekivy import kivy_helper_search +from bitmessagekivy.uikivysignaler import UIkivySignaler +from bmconfigparser import BMConfigParser +from debug import logger +from functools import partial +from helper_sql import sqlExecute, sqlQuery +from kivymd.app import MDApp +from kivy.clock import Clock +from kivy.core.clipboard import Clipboard +from kivy.core.window import Window +from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import ( + BooleanProperty, + ListProperty, + NumericProperty, + ObjectProperty, + StringProperty +) +from kivy.uix.behaviors import FocusBehavior +from kivy.uix.boxlayout import BoxLayout +from kivy.uix.button import Button +from kivy.uix.carousel import Carousel +from kivy.uix.image import Image +from kivy.uix.label import Label +from kivy.uix.popup import Popup +from kivy.uix.recycleboxlayout import RecycleBoxLayout +from kivy.uix.recycleview import RecycleView +from kivy.uix.recycleview.layout import LayoutSelectionBehavior +from kivy.uix.recycleview.views import RecycleDataViewBehavior +from kivy.uix.screenmanager import Screen +from kivy.uix.spinner import Spinner +from kivy.uix.textinput import TextInput +from kivymd.uix.button import MDIconButton +from kivymd.uix.dialog import MDDialog +from kivymd.uix.label import MDLabel +from kivymd.uix.button import MDFlatButton, MDRaisedButton +from kivymd.uix.list import ( + ILeftBody, + ILeftBodyTouch, + IRightBodyTouch, + TwoLineAvatarIconListItem, + OneLineIconListItem, + OneLineAvatarIconListItem, + OneLineListItem +) + +# from kivymd.uix.navigationdrawer import ( +# MDNavigationDrawer, +# NavigationDrawerHeaderBase +# ) +from kivymd.uix.selectioncontrol import MDCheckbox, MDSwitch +from kivymd.uix.chip import MDChip +from kivy.uix.screenmanager import RiseInTransition, SlideTransition, FallOutTransition + +import queues +from semaphores import kivyuisignaler + +import state +from addresses import decodeAddress +from datetime import datetime +from kivymd.uix.behaviors.elevation import RectangularElevationBehavior +from kivymd.uix.bottomsheet import MDCustomBottomSheet +from kivy.effects.dampedscroll import DampedScrollEffect +from kivymd.uix.menu import MDDropdownMenu + +from kivy.lang import Observable +import gettext +import l10n +import locale + +if platform != "android": + from kivy.config import Config + from kivy_garden.zbarcam import ZBarCam + from pyzbar.pyzbar import ZBarSymbol + + Config.set("input", "mouse", "mouse, multitouch_on_demand") +elif platform == "android": + from jnius import autoclass, cast + from android.runnable import run_on_ui_thread + from android import python_act as PythonActivity + + Toast = autoclass("android.widget.Toast") + String = autoclass("java.lang.String") + CharSequence = autoclass("java.lang.CharSequence") + context = PythonActivity.mActivity + + @run_on_ui_thread + def show_toast(text, length): + """Its showing toast on screen""" + t = Toast.makeText(context, text, length) + t.show() + +# pylint: disable=too-few-public-methods,too-many-arguments,attribute-defined-outside-init + +KVFILES = [ + "settings", + "popup", + "allmails", + "draft", + "maildetail", + "common_widgets", + "addressbook", + "myaddress", + "composer", + "payment", + "sent", + "network", + "login", + "credits", + "trash", + "inbox", + "chat_room", + "chat_list" +] + +ThemeClsColor = [0.12, 0.58, 0.95, 1] + + +def toast(text): + """Method will display the toast message""" + # pylint: disable=redefined-outer-name + from kivymd.toast.kivytoast import toast + + toast(text) + return None + + +def showLimitedCnt(total_msg): + """This method set the total count limit in badge_text""" + return "99+" if total_msg > 99 else str(total_msg) + + +def ShowTimeHistoy(act_time): + """This method is used to return the message sent or receive time""" + action_time = datetime.fromtimestamp(int(act_time)) + crnt_date = datetime.now() + duration = crnt_date - action_time + display_data = ( + action_time.strftime("%d/%m/%Y") + if duration.days >= 365 + else action_time.strftime("%I:%M %p").lstrip("0") + if duration.days == 0 and crnt_date.strftime("%d/%m/%Y") == action_time.strftime("%d/%m/%Y") + else action_time.strftime("%d %b") + ) + return display_data + + +def AddTimeWidget(time): # pylint: disable=redefined-outer-name + """This method is used to create TimeWidget""" + action_time = TimeTagRightSampleWidget( + text=str(ShowTimeHistoy(time)), + font_style="Caption", + size=[120, 140] if platform == "android" else [64, 80], + ) + action_time.font_size = "11sp" + return action_time + + +def chipTag(text): + """This method is used for showing chip tag""" + obj = MDChip() + # obj.size_hint = (None, None) + obj.size_hint = (0.16 if platform == "android" else 0.08, None) + obj.text = text + obj.icon = "" + obj.pos_hint = { + "center_x": 0.91 if platform == "android" else 0.94, + "center_y": 0.3 + } + obj.height = dp(18) + obj.text_color = (1,1,1,1) + obj.radius =[8] + return obj + + +class Lang(Observable): + observers = [] + lang = None + + def __init__(self, defaultlang): + super(Lang, self).__init__() + self.ugettext = None + self.lang = defaultlang + self.switch_lang(self.lang) + + def _(self, text): + return self.ugettext(text) + + def fbind(self, name, func, args, **kwargs): + if name == "_": + self.observers.append((func, args, kwargs)) + else: + return super(Lang, self).fbind(name, func, *largs, **kwargs) + + def funbind(self, name, func, args, **kwargs): + if name == "_": + key = (func, args, kwargs) + if key in self.observers: + self.observers.remove(key) + else: + return super(Lang, self).funbind(name, func, *args, **kwargs) + + def switch_lang(self, lang): + # get the right locales directory, and instanciate a gettext + locale_dir = os.path.join(os.path.dirname(__file__), 'translations', 'mo', 'locales') + locales = gettext.translation('langapp', locale_dir, languages=[lang]) + self.ugettext = locales.gettext + + # update all the kv rules attached to this text + for func, largs, kwargs in self.observers: + func(largs, None, None) + + +class Inbox(Screen): + """Inbox Screen class for kivy Ui""" + + queryreturn = ListProperty() + has_refreshed = True + account = StringProperty() + + def __init__(self, *args, **kwargs): + """Method Parsing the address""" + super(Inbox, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + @staticmethod + def set_defaultAddress(): + """This method set's default address""" + if state.association == "": + if BMConfigParser().addresses(): + state.association = BMConfigParser().addresses()[0] + + def init_ui(self, dt=0): + """Clock schdule for method inbox accounts""" + self.loadMessagelist() + + def loadMessagelist(self, where="", what=""): + """Load Inbox list for Inbox messages""" + self.set_defaultAddress() + self.account = state.association + if state.searcing_text: + # self.children[2].children[0].children[0].scroll_y = 1.0 + self.ids.scroll_y.scroll_y = 1.0 + where = ["subject", "message"] + what = state.searcing_text + xAddress = "toaddress" + data = [] + self.ids.tag_label.text = "" + self.inboxDataQuery(xAddress, where, what) + self.ids.tag_label.text = "" + if self.queryreturn: + self.ids.tag_label.text = "Inbox" + state.kivyapp.get_inbox_count() + self.set_inboxCount(state.inbox_count) + for mail in self.queryreturn: + # third_text = mail[3].replace('\n', ' ') + body = mail[3].decode() if isinstance(mail[3], bytes) else mail[3] + subject = mail[5].decode() if isinstance(mail[5], bytes) else mail[5] + data.append( + { + "text": mail[4].strip(), + "secondary_text": ( + subject[:50] + "........" + if len(subject) >= 50 + else (subject + "," + body)[0:50] + "........" + ) + .replace("\t", "") + .replace(" ", ""), + "msgid": mail[1], + "received": mail[6] + } + ) + + self.has_refreshed = True + self.set_mdList(data) + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + self.set_inboxCount("0") + content = MDLabel( + font_style="Caption", + theme_text_color="Primary", + text="No message found!" + if state.searcing_text + else "yet no message for this account!!!!!!!!!!!!!", + halign="center", + size_hint_y=None, + valign="top" + ) + self.ids.ml.add_widget(content) + + def set_inboxCount(self, msgCnt): # pylint: disable=no-self-use + """This method is used to sent inbox message count""" + src_mng_obj = state.kivyapp.root.ids.content_drawer.ids + src_mng_obj.inbox_cnt.ids.badge_txt.text = showLimitedCnt(int(msgCnt)) + state.kivyapp.get_sent_count() + state.all_count = str( + int(state.sent_count) + int(state.inbox_count)) + src_mng_obj.allmail_cnt.ids.badge_txt.text = showLimitedCnt(int(state.all_count)) + + def inboxDataQuery(self, xAddress, where, what, start_indx=0, end_indx=20): + """This method is used for retrieving inbox data""" + self.queryreturn = kivy_helper_search.search_sql( + xAddress, self.account, "inbox", where, what, False, start_indx, end_indx + ) + + def set_mdList(self, data): + """This method is used to create the mdList""" + total_message = len(self.ids.ml.children) + for item in data: + meny = TwoLineAvatarIconListItem( + text=item["text"], + secondary_text=item["secondary_text"], + theme_text_color="Custom", + text_color=NavigateApp().theme_cls.primary_color + ) + meny._txt_right_pad = dp(70) + meny.add_widget( + AvatarSampleWidget( + source=state.imageDir + "/text_images/{}.png".format( + avatarImageFirstLetter(item["secondary_text"].strip()) + ) + ) + ) + meny.bind(on_press=partial(self.inbox_detail, item["msgid"])) + meny.add_widget(AddTimeWidget(item["received"])) + carousel = Carousel(direction="right") + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text="Delete") + del_btn.background_normal = "" + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial(self.delete, item["msgid"])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + # ach_btn = Button(text='Achieve') + # ach_btn.background_color = (0, 1, 0, 1) + # ach_btn.bind(on_press=partial(self.archive, item['msgid'])) + # carousel.add_widget(ach_btn) + carousel.index = 1 + self.ids.ml.add_widget(carousel) + update_message = len(self.ids.ml.children) + self.has_refreshed = True if total_message != update_message else False + + def check_scroll_y(self, instance, somethingelse): + """Loads data on scroll""" + if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed: + self.ids.scroll_y.scroll_y = 0.06 + total_message = len(self.ids.ml.children) + self.update_inbox_screen_on_scroll(total_message) + + def update_inbox_screen_on_scroll(self, total_message, where="", what=""): + """This method is used to load more data on scroll down""" + data = [] + if state.searcing_text: + where = ["subject", "message"] + what = state.searcing_text + self.inboxDataQuery("toaddress", where, what, total_message, 5) + for mail in self.queryreturn: + # third_text = mail[3].replace('\n', ' ') + subject = mail[3].decode() if isinstance(mail[3], bytes) else mail[3] + body = mail[5].decode() if isinstance(mail[5], bytes) else mail[5] + data.append( + { + "text": mail[4].strip(), + "secondary_text": body[:50] + "........" + if len(body) >= 50 + else (body + "," + subject.replace("\n", ""))[0:50] + "........", + "msgid": mail[1], + "received": mail[6] + } + ) + self.set_mdList(data) + + def inbox_detail(self, msg_id, *args): + """Load inbox page details""" + state.detailPageType = "inbox" + state.mail_id = msg_id + if self.manager: + src_mng_obj = self.manager + else: + src_mng_obj = self.parent.parent + src_mng_obj.screens[13].clear_widgets() + src_mng_obj.screens[13].add_widget(MailDetail()) + src_mng_obj.current = "mailDetail" + + def delete(self, data_index, instance, *args): + """Delete inbox mail from inbox listing""" + sqlExecute("UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", data_index) + msg_count_objs = self.parent.parent.ids.content_drawer.ids + if int(state.inbox_count) > 0: + msg_count_objs.inbox_cnt.ids.badge_txt.text = showLimitedCnt( + int(state.inbox_count) - 1 + ) + msg_count_objs.trash_cnt.ids.badge_txt.text = showLimitedCnt( + int(state.trash_count) + 1 + ) + state.inbox_count = str(int(state.inbox_count) - 1) + state.trash_count = str(int(state.trash_count) + 1) + if int(state.all_count) > 0: + msg_count_objs.allmail_cnt.ids.badge_txt.text = showLimitedCnt( + int(state.all_count) - 1 + ) + state.all_count = str(int(state.all_count) - 1) + + if int(state.inbox_count) <= 0: + # self.ids.identi_tag.children[0].text = '' + self.ids.tag_label.text = '' + self.ids.ml.remove_widget( + instance.parent.parent) + toast('Deleted') + self.update_trash() + + def archive(self, data_index, instance, *args): + """Archive inbox mail from inbox listing""" + sqlExecute("UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", data_index) + self.ids.ml.remove_widget(instance.parent.parent) + self.update_trash() + + def update_trash(self): + """Update trash screen mails which is deleted from inbox""" + try: + self.parent.screens[4].clear_widgets() + self.parent.screens[4].add_widget(Trash()) + except Exception: + self.parent.parent.screens[4].clear_widgets() + self.parent.parent.screens[4].add_widget(Trash()) + + def refresh_callback(self, *args): + """Method updates the state of application, + While the spinner remains on the screen""" + + def refresh_callback(interval): + """Method used for loading the inbox screen data""" + state.searcing_text = "" + self.children[2].children[1].ids.search_field.text = "" + self.ids.ml.clear_widgets() + self.loadMessagelist(state.association) + self.has_refreshed = True + self.ids.refresh_layout.refresh_done() + self.tick = 0 + + Clock.schedule_once(refresh_callback, 1) + + +class CustomTwoLineAvatarIconListItem(TwoLineAvatarIconListItem): + """CustomTwoLineAvatarIconListItem class for kivy Ui""" + + +class MyAddress(Screen): + """MyAddress screen class for kivy Ui""" + + address_label = StringProperty() + text_address = StringProperty() + addresses_list = ListProperty() + has_refreshed = True + is_add_created = False + + def __init__(self, *args, **kwargs): + """Clock schdule for method Myaddress accounts""" + super(MyAddress, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock schdule for method Myaddress accounts""" + # pylint: disable=unnecessary-lambda, deprecated-lambda + # self.addresses_list = state.kivyapp.variable_1 + self.addresses_list = BMConfigParser().addresses() + if state.searcing_text: + self.ids.refresh_layout.scroll_y = 1.0 + filtered_list = [ + x for x in BMConfigParser().addresses() + if self.filter_address(x) + ] + self.addresses_list = filtered_list + self.addresses_list = [obj for obj in reversed(self.addresses_list)] + self.ids.tag_label.text = '' + if self.addresses_list: + self.ids.tag_label.text = 'My Addresses' + self.has_refreshed = True + self.set_mdList(0, 15) + self.ids.refresh_layout.bind(scroll_y=self.check_scroll_y) + else: + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="No address found!" if state.searcing_text + else "yet no address is created by user!!!!!!!!!!!!!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + if not state.searcing_text and not self.is_add_created: + try: + self.manager.current = 'login' + except Exception: + pass + + def set_mdList(self, first_index, last_index): + """Creating the mdlist""" + data = [] + for address in self.addresses_list[first_index:last_index]: + data.append({ + 'text': BMConfigParser().get(address, 'label'), + 'secondary_text': address}) + for item in data: + is_enable = BMConfigParser().get(item['secondary_text'], 'enabled') + meny = CustomTwoLineAvatarIconListItem( + text=item['text'], secondary_text=item['secondary_text'], + theme_text_color='Custom' if is_enable == 'true' else 'Primary', + text_color=ThemeClsColor,) + meny._txt_right_pad = dp(70) + try: + meny.canvas.children[6].rgba = [0, 0, 0, 0] if is_enable == 'true' else [0.5, 0.5, 0.5, 0.5] + except Exception: + try: + meny.canvas.children[9].rgba = [0, 0, 0, 0] if is_enable == 'true' else [0.5, 0.5, 0.5, 0.5] + except Exception as e: + print('Exception: ', e) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(item['text'].strip())))) + meny.bind(on_press=partial( + self.myadd_detail, item['secondary_text'], item['text'])) + if state.association == item['secondary_text'] and is_enable == 'true': + badge_obj = BadgeText( + size_hint=(None, None), + size=[90 if platform == 'android' else 50, 60], + text='Active', halign='center', + font_style='Body1', theme_text_color='Custom', + text_color=ThemeClsColor + ) + badge_obj.font_size = '13sp' + meny.add_widget(badge_obj) + else: + meny.add_widget(ToggleBtn(active=True if is_enable == 'true' else False)) + self.ids.ml.add_widget(meny) + + def check_scroll_y(self, instance, somethingelse): + """Load data on scroll down""" + if self.ids.refresh_layout.scroll_y <= -0.0 and self.has_refreshed: + self.ids.refresh_layout.scroll_y = 0.06 + my_addresses = len(self.ids.ml.children) + if my_addresses != len(self.addresses_list): + self.update_addressBook_on_scroll(my_addresses) + self.has_refreshed = ( + True if my_addresses != len(self.addresses_list) else False + ) + + def update_addressBook_on_scroll(self, my_addresses): + """Loads more data on scroll down""" + self.set_mdList(my_addresses, my_addresses + 20) + + # @staticmethod + def myadd_detail(self, fromaddress, label, *args): + """Load myaddresses details""" + if BMConfigParser().get(fromaddress, 'enabled') == 'true': + obj = MyaddDetailPopup() + self.address_label = obj.address_label = label + self.text_address = obj.address = fromaddress + width = .9 if platform == 'android' else .6 + self.myadddetail_popup = MDDialog( + type="custom", + size_hint=(width, .25), + content_cls=obj, + ) + self.myadddetail_popup.set_normal_height() + self.myadddetail_popup.auto_dismiss = False + self.myadddetail_popup.open() + # p.set_address(fromaddress, label) + else: + width = .8 if platform == 'android' else .55 + dialog_box = MDDialog( + text='Address is not currently active. Please click on Toggle button to active it.', + size_hint=(width, .25), + buttons=[ + MDFlatButton( + text="Ok", on_release=lambda x: callback_for_menu_items("Ok") + ), + ], + ) + dialog_box.open() + + def callback_for_menu_items(text_item, *arg): + """Callback of alert box""" + dialog_box.dismiss() + toast(text_item) + + # @staticmethod + # def callback_for_menu_items(text_item, *arg): + # """Callback of alert box""" + # toast(text_item) + + def refresh_callback(self, *args): + """Method updates the state of application, + While the spinner remains on the screen""" + def refresh_callback(interval): + """Method used for loading the myaddress screen data""" + state.searcing_text = '' + # state.kivyapp.root.ids.sc10.children[2].active = False + self.ids.search_bar.ids.search_field.text = '' + self.has_refreshed = True + self.ids.ml.clear_widgets() + self.init_ui() + self.ids.refresh_layout.refresh_done() + self.tick = 0 + Clock.schedule_once(self.address_permision_callback, 0) + Clock.schedule_once(refresh_callback, 1) + + @staticmethod + def filter_address(address): + """Method will filter the my address list data""" + if [ + x for x in [ + BMConfigParser().get(address, 'label').lower(), + address.lower() + ] + if (state.searcing_text).lower() in x + ]: + return True + return False + + def disableAddress(self, address, instance): + """This method is use for disabling address""" + BMConfigParser().set(str(address), 'enabled', 'false') + BMConfigParser().save() + instance.parent.parent.theme_text_color = 'Primary' + try: + instance.parent.parent.canvas.children[6].rgba = [0.5, 0.5, 0.5, 0.5] + except Exception: + instance.parent.parent.canvas.children[9].rgba = [0.5, 0.5, 0.5, 0.5] + toast('Address disabled') + Clock.schedule_once(self.address_permision_callback, 0) + + def enableAddress(self, address, instance): + """This method is use for enabling address""" + BMConfigParser().set(address, 'enabled', 'true') + BMConfigParser().save() + instance.parent.parent.theme_text_color = 'Custom' + try: + instance.parent.parent.canvas.children[6].rgba = [0, 0, 0, 0] + except Exception: + instance.parent.parent.canvas.children[9].rgba = [0, 0, 0, 0] + toast('Address Enabled') + Clock.schedule_once(self.address_permision_callback, 0) + + def address_permision_callback(self, dt=0): + """callback for enable or disable addresses""" + addresses = [addr for addr in BMConfigParser().addresses() + if BMConfigParser().get(str(addr), 'enabled') == 'true'] + self.parent.parent.ids.content_drawer.ids.btn.values = addresses + self.parent.parent.ids.sc3.children[1].ids.btn.values = addresses + + def toggleAction(self, instance): + """This method is used for enable or disable address""" + addr = instance.parent.parent.secondary_text + if instance.active: + self.enableAddress(addr, instance) + else: + self.disableAddress(addr, instance) + + +class AddressBook(Screen): + """AddressBook Screen class for kivy Ui""" + + queryreturn = ListProperty() + has_refreshed = True + address_label = StringProperty() + address = StringProperty() + + def __init__(self, *args, **kwargs): + """Getting AddressBook Details""" + super(AddressBook, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method AddressBook""" + self.loadAddresslist(None, 'All', '') + print(dt) + + def loadAddresslist(self, account, where="", what=""): + """Clock Schdule for method AddressBook""" + if state.searcing_text: + self.ids.scroll_y.scroll_y = 1.0 + where = ['label', 'address'] + what = state.searcing_text + xAddress = '' + self.ids.tag_label.text = '' + self.queryreturn = kivy_helper_search.search_sql( + xAddress, account, "addressbook", where, what, False) + self.queryreturn = [obj for obj in reversed(self.queryreturn)] + if self.queryreturn: + self.ids.tag_label.text = 'Address Book' + self.has_refreshed = True + self.set_mdList(0, 20) + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="No contact found!" if state.searcing_text + else "No contact found yet...... ", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def set_mdList(self, start_index, end_index): + """Creating the mdList""" + for item in self.queryreturn[start_index:end_index]: + meny = TwoLineAvatarIconListItem( + text=item[0], secondary_text=item[1], theme_text_color='Custom', + text_color=ThemeClsColor) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(item[0].strip())))) + meny.bind(on_press=partial( + self.addBook_detail, item[1], item[0])) + carousel = Carousel(direction='right') + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text='Delete') + del_btn.background_normal = '' + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial(self.delete_address, item[1])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + carousel.index = 1 + self.ids.ml.add_widget(carousel) + + def check_scroll_y(self, instance, somethingelse): + """Load data on scroll""" + if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed: + self.ids.scroll_y.scroll_y = 0.06 + exist_addresses = len(self.ids.ml.children) + if exist_addresses != len(self.queryreturn): + self.update_addressBook_on_scroll(exist_addresses) + self.has_refreshed = ( + True if exist_addresses != len(self.queryreturn) else False + ) + + def update_addressBook_on_scroll(self, exist_addresses): + """Load more data on scroll down""" + self.set_mdList(exist_addresses, exist_addresses + 5) + + @staticmethod + def refreshs(*args): + """Refresh the Widget""" + # state.navinstance.ids.sc11.ids.ml.clear_widgets() + # state.navinstance.ids.sc11.loadAddresslist(None, 'All', '') + + # @staticmethod + def addBook_detail(self, address, label, *args): + """Addressbook details""" + obj = AddbookDetailPopup() + self.address_label = obj.address_label = label + self.address = obj.address = address + width = .9 if platform == 'android' else .8 + self.addbook_popup = MDDialog( + type="custom", + size_hint=(width, .25), + content_cls=obj, + buttons=[ + MDRaisedButton( + text="Send message to", + text_color=state.kivyapp.theme_cls.primary_color, + on_release=self.send_message_to, + ), + MDRaisedButton( + text="Save", text_color=state.kivyapp.theme_cls.primary_color, + on_release=self.update_addbook_label, + ), + MDRaisedButton( + text="Cancel", text_color=state.kivyapp.theme_cls.primary_color, + on_release=self.close_pop, + ), + ], + ) + self.addbook_popup.set_normal_height() + self.addbook_popup.auto_dismiss = False + self.addbook_popup.open() + + def delete_address(self, address, instance, *args): + """Delete inbox mail from inbox listing""" + self.ids.ml.remove_widget(instance.parent.parent) + # if len(self.ids.ml.children) == 0: + if self.ids.ml.children is not None: + self.ids.tag_label.text = '' + sqlExecute( + "DELETE FROM addressbook WHERE address = '{}';".format(address)) + + def close_pop(self, instance): + """Pop is Canceled""" + self.addbook_popup.dismiss() + toast('Canceled') + + def update_addbook_label(self, instance): + """Updating the label of address book address""" + address_list = kivy_helper_search.search_sql(folder="addressbook") + stored_labels = [labels[0] for labels in address_list] + add_dict = dict(address_list) + label = str(self.addbook_popup.content_cls.ids.add_label.text) + if label in stored_labels and self.address == add_dict[label]: + stored_labels.remove(label) + if label and label not in stored_labels: + sqlExecute( + "UPDATE addressbook SET label = '{}' WHERE" + " address = '{}';".format( + label, self.addbook_popup.content_cls.address)) + state.kivyapp.root.ids.sc11.ids.ml.clear_widgets() + state.kivyapp.root.ids.sc11.loadAddresslist(None, 'All', '') + self.addbook_popup.dismiss() + toast('Saved') + + def send_message_to(self, instance): + """Method used to fill to_address of composer autofield""" + state.kivyapp.set_navbar_for_composer() + window_obj = state.kivyapp.root.ids + window_obj.sc3.children[1].ids.txt_input.text = self.address + window_obj.sc3.children[1].ids.ti.text = '' + window_obj.sc3.children[1].ids.btn.text = 'Select' + window_obj.sc3.children[1].ids.subject.text = '' + window_obj.sc3.children[1].ids.body.text = '' + window_obj.scr_mngr.current = 'create' + self.addbook_popup.dismiss() + + +class SelectableRecycleBoxLayout( + FocusBehavior, LayoutSelectionBehavior, RecycleBoxLayout +): + """Adds selection and focus behaviour to the view""" + + # pylint: disable = duplicate-bases + + +class SelectableLabel(RecycleDataViewBehavior, Label): + """Add selection support to the Label""" + + index = None + selected = BooleanProperty(False) + selectable = BooleanProperty(True) + + def refresh_view_attrs(self, rv, index, data): + """Catch and handle the view changes""" + self.index = index + return super(SelectableLabel, self).refresh_view_attrs(rv, index, data) + + def on_touch_down(self, touch): # pylint: disable=inconsistent-return-statements + """Add selection on touch down""" + if super(SelectableLabel, self).on_touch_down(touch): + return True + if self.collide_point(*touch.pos) and self.selectable: + return self.parent.select_with_touch(self.index, touch) + + def apply_selection(self, rv, index, is_selected): + """Respond to the selection of items in the view""" + self.selected = is_selected + if is_selected: + print("selection changed to {0}".format(rv.data[index])) + rv.parent.txt_input.text = rv.parent.txt_input.text.replace( + rv.parent.txt_input.text, rv.data[index]["text"] + ) + + +class RV(RecycleView): + """Recycling View class for kivy Ui""" + + def __init__(self, **kwargs): + """Recycling Method""" + super(RV, self).__init__(**kwargs) + + +class DropDownWidget(BoxLayout): + """DropDownWidget class for kivy Ui""" + + # pylint: disable=too-many-statements + + txt_input = ObjectProperty() + rv = ObjectProperty() + + def send(self, navApp): + """Send message from one address to another""" + fromAddress = self.ids.ti.text.strip() + toAddress = self.ids.txt_input.text.strip() + subject = self.ids.subject.text.strip() + message = self.ids.body.text.strip() + encoding = 3 + print("message: ", self.ids.body.text) + sendMessageToPeople = True + if sendMessageToPeople: + if toAddress != "" and subject and message: + status, addressVersionNumber, streamNumber, ripe = decodeAddress( + toAddress + ) + if status == "success": + navApp.root.ids.sc3.children[0].active = True + if state.detailPageType == "draft" and state.send_draft_mail: + sqlExecute( + "UPDATE sent SET toaddress = ?" + ", fromaddress = ? , subject = ?" + ", message = ?, folder = 'sent'" + ", senttime = ?, lastactiontime = ?" + " WHERE ackdata = ?;", + toAddress, + fromAddress, + subject, + message, + int(time.time()), + int(time.time()), + state.send_draft_mail) + self.parent.parent.screens[15].clear_widgets() + self.parent.parent.screens[15].add_widget(Draft()) + # state.detailPageType = '' + # state.send_draft_mail = None + else: + from addresses import addBMIfNotPresent + toAddress = addBMIfNotPresent(toAddress) + statusIconColor = 'red' + if (addressVersionNumber > 4) or ( + addressVersionNumber <= 1): + print( + "addressVersionNumber > 4" + " or addressVersionNumber <= 1") + if streamNumber > 1 or streamNumber == 0: + print("streamNumber > 1 or streamNumber == 0") + if statusIconColor == 'red': + print("shared.statusIconColor == 'red'") + stealthLevel = BMConfigParser().safeGetInt( + 'bitmessagesettings', 'ackstealthlevel') + from helper_ackPayload import genAckPayload + ackdata = genAckPayload(streamNumber, stealthLevel) + # t = () + sqlExecute( + '''INSERT INTO sent VALUES + (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''', + '', + toAddress, + ripe, + fromAddress, + subject, + message, + ackdata, + int(time.time()), + int(time.time()), + 0, + 'msgqueued', + 0, + 'sent', + encoding, + BMConfigParser().safeGetInt( + 'bitmessagesettings', 'ttl')) + state.check_sent_acc = fromAddress + # state.msg_counter_objs = self.parent.parent.parent.parent\ + # .parent.parent.children[2].children[0].ids + if state.detailPageType == 'draft' \ + and state.send_draft_mail: + state.draft_count = str(int(state.draft_count) - 1) + # state.msg_counter_objs.draft_cnt.badge_text = ( + # state.draft_count) + state.detailPageType = '' + state.send_draft_mail = None + self.parent.parent.parent.ids.sc4.update_sent_messagelist() + allmailCnt_obj = state.kivyapp.root.ids.content_drawer.ids.allmail_cnt + allmailCnt_obj.ids.badge_txt.text = showLimitedCnt(int(state.all_count) + 1) + state.all_count = str(int(state.all_count) + 1) + Clock.schedule_once(self.callback_for_msgsend, 3) + queues.workerQueue.put(('sendmessage', toAddress)) + print("sqlExecute successfully #######################") + state.in_composer = True + return + else: + msg = 'Enter a valid recipients address' + elif not toAddress: + msg = 'Please fill the form completely' + else: + msg = 'Please fill the form completely' + self.address_error_message(msg) + + @staticmethod + def callback_for_msgsend(dt=0): + """Callback method for messagesend""" + state.kivyapp.root.ids.sc3.children[0].active = False + state.in_sent_method = True + state.kivyapp.back_press() + toast("sent") + + def address_error_message(self, msg): + """Generates error message""" + width = .8 if platform == 'android' else .55 + dialog_box = MDDialog( + text=msg, + size_hint=(width, .25), + buttons=[ + MDFlatButton( + text="Ok", on_release=lambda x: callback_for_menu_items("Ok") + ), + ],) + dialog_box.open() + + def callback_for_menu_items(text_item, *arg): + """Callback of alert box""" + dialog_box.dismiss() + toast(text_item) + + def reset_composer(self): + """Method will reset composer""" + self.ids.ti.text = "" + self.ids.btn.text = "Select" + self.ids.txt_input.text = "" + self.ids.subject.text = "" + self.ids.body.text = "" + toast("Reset message") + + def auto_fill_fromaddr(self): + """Fill the text automatically From Address""" + self.ids.ti.text = self.ids.btn.text + self.ids.ti.focus = True + + def is_camara_attached(self): + self.parent.parent.parent.ids.sc23.check_camera() + is_available = self.parent.parent.parent.ids.sc23.camera_avaialbe + return is_available + + def camera_alert(self): + width = .8 if platform == 'android' else .55 + altet_txt = 'Currently this feature is not avaialbe!'if platform == 'android' else 'Camera is not available!' + dialog_box = MDDialog( + text=altet_txt, + size_hint=(width, .25), + buttons=[ + MDFlatButton( + text="Ok", on_release=lambda x: callback_for_menu_items("Ok") + ), + ], + ) + dialog_box.open() + + def callback_for_menu_items(text_item, *arg): + """Callback of alert box""" + dialog_box.dismiss() + toast(text_item) + + +class ScanScreen(Screen): + camera_avaialbe = BooleanProperty(False) + previous_open_screen = StringProperty() + pop_up_instance = ObjectProperty() + + def __init__(self, *args, **kwargs): + """Getting AddressBook Details""" + super(ScanScreen, self).__init__(*args, **kwargs) + self.check_camera() + + def check_camera(self): + """This method is used for checking camera avaibility""" + if platform != "android": + import cv2 + cap = cv2.VideoCapture(0) + while(cap.isOpened()): + print('Camera is available!') + self.camera_avaialbe = True + break + else: + print("Camera is not available!") + self.camera_avaialbe = False + + def get_screen(self, screen_name, instance=None): + """This method is used for getting previous screen name""" + self.previous_open_screen = screen_name + if screen_name != 'composer': + self.pop_up_instance = instance + + def on_pre_enter(self): + """ + on_pre_enter works little better on android + It affects screen transition on linux + """ + if not self.children: + tmp = Builder.load_file( + os.path.join(os.path.dirname(__file__), "kv/{}.kv").format("scanner") + ) + self.add_widget(tmp) + if platform == "android": + Clock.schedule_once(self.start_camera, 0) + + def on_enter(self): + """ + on_enter works better on linux + It creates a black screen on android until camera gets loaded + """ + # print(self.children) + if platform != "android": + # pass + Clock.schedule_once(self.start_camera, 0) + + def on_leave(self): + # pass + Clock.schedule_once(self.stop_camera, 0) + + def start_camera(self, *args): + """Its used for starting camera for scanning qrcode""" + self.xcam = self.children[0].ids.zbarcam.ids.xcamera + if platform == "android": + self.xcam.play = True + + else: + Clock.schedule_once(self.open_cam, 0) + + def stop_camera(self, *args): + """Its used for stop the camera""" + self.xcam.play = False + if platform != "android": + self.xcam._camera._device.release() + + def open_cam(self, *args): + """It will open up the camera""" + if not self.xcam._camera._device.isOpened(): + self.xcam._camera._device.open(self.xcam._camera._index) + self.xcam.play = True + + +class MyTextInput(TextInput): + """MyTextInput class for kivy Ui""" + + txt_input = ObjectProperty() + flt_list = ObjectProperty() + word_list = ListProperty() + starting_no = NumericProperty(3) + suggestion_text = '' + + def __init__(self, **kwargs): + """Getting Text Input.""" + super(MyTextInput, self).__init__(**kwargs) + self.__lineBreak__ = 0 + + def on_text(self, instance, value): + """Find all the occurrence of the word""" + self.parent.parent.parent.parent.parent.ids.rv.data = [] + matches = [self.word_list[i] for i in range( + len(self.word_list)) if self.word_list[ + i][:self.starting_no] == value[:self.starting_no]] + display_data = [] + for i in matches: + display_data.append({'text': i}) + self.parent.parent.parent.parent.parent.ids.rv.data = display_data + if len(matches) <= 10: + self.parent.height = (250 + (len(matches) * 20)) + else: + self.parent.height = 400 + + def keyboard_on_key_down(self, window, keycode, text, modifiers): + """Keyboard on key Down""" + if self.suggestion_text and keycode[1] == 'tab': + self.insert_text(self.suggestion_text + ' ') + return True + return super(MyTextInput, self).keyboard_on_key_down( + window, keycode, text, modifiers) + + +class Payment(Screen): + """Payment Screen class for kivy Ui""" + + def get_free_credits(self, instance): + """Get the available credits""" + # pylint: disable=no-self-use + state.availabe_credit = instance.parent.children[1].text + existing_credits = state.kivyapp.root.ids.sc18.ids.cred.text + if float(existing_credits.split()[1]) > 0: + toast( + 'We already have added free coins' + ' for the subscription to your account!') + else: + toast('Coins added to your account!') + state.kivyapp.root.ids.sc18.ids.cred.text = '{0}'.format( + state.availabe_credit) + + def create_hidden_payment_address(self, instance): + """This is basically used for creating hidden address used in payment for purchasing credits""" + if BMConfigParser().paymentaddress(): + toast('hidden payment address already exist for buying subscription...') + else: + streamNumberForAddress = 1 + eighteenByteRipe = False + nonceTrialsPerByte = 1000 + payloadLengthExtraBytes = 1000 + queues.addressGeneratorQueue.put(( + 'createPaymentAddress', 4, streamNumberForAddress, '', 1, + "", eighteenByteRipe, nonceTrialsPerByte, + payloadLengthExtraBytes)) + toast('hidden payment address Creating for buying subscription....') + + +class Category(BoxLayout, RectangularElevationBehavior): + """Category class for kivy Ui""" + elevation_normal = .01 + + +class ProductLayout(BoxLayout, RectangularElevationBehavior): + """ProductLayout class for kivy Ui""" + elevation_normal = .01 + + +class PaymentMethodLayout(BoxLayout): + """PaymentMethodLayout class for kivy Ui""" + + +class ListItemWithLabel(OneLineAvatarIconListItem): + """ListItemWithLabel class for kivy Ui""" + + +class RightLabel(IRightBodyTouch, MDLabel): + """RightLabel class for kivy Ui""" + + +class HomeScreen(Screen): + """HomeScreen class for kivy Ui""" + + +class Credits(Screen): + """Credits Screen class for kivy Ui""" + + available_credits = StringProperty('{0}'.format('€ 0')) + + +class Login(Screen): + """Login Screeen class for kivy Ui""" + log_text1 = ( + 'You may generate addresses by using either random numbers' + ' or by using a passphrase If you use a passphrase, the address' + ' is called a deterministic; address The Random Number option is' + ' selected by default but deterministic addresses have several pros' + ' and cons:') + log_text2 = ('If talk about pros You can recreate your addresses on any computer' + ' from memory, You need-not worry about backing up your keys.dat file' + ' as long as you can remember your passphrase and aside talk about cons' + ' You must remember (or write down) your You must remember the address' + ' version number and the stream number along with your passphrase If you' + ' choose a weak passphrase and someone on the Internet can brute-force it,' + ' they can read your messages and send messages as you') + + +class NetworkStat(Screen): + """NetworkStat class for kivy Ui""" + + text_variable_1 = StringProperty( + '{0}::{1}'.format('Total Connections', '0')) + text_variable_2 = StringProperty( + 'Processed {0} per-to-per messages'.format('0')) + text_variable_3 = StringProperty( + 'Processed {0} brodcast messages'.format('0')) + text_variable_4 = StringProperty( + 'Processed {0} public keys'.format('0')) + text_variable_5 = StringProperty( + 'Processed {0} object to be synced'.format('0')) + + def __init__(self, *args, **kwargs): + """Init method for network stat""" + super(NetworkStat, self).__init__(*args, **kwargs) + Clock.schedule_interval(self.init_ui, 1) + + def init_ui(self, dt=0): + """Clock Schdule for method networkstat screen""" + import network.stats + from network import objectracker + self.text_variable_1 = '{0} :: {1}'.format( + 'Total Connections', str(len(network.stats.connectedHostsList()))) + self.text_variable_2 = 'Processed {0} per-to-per messages'.format( + str(state.numberOfMessagesProcessed)) + self.text_variable_3 = 'Processed {0} brodcast messages'.format( + str(state.numberOfBroadcastsProcessed)) + self.text_variable_4 = 'Processed {0} public keys'.format( + str(state.numberOfPubkeysProcessed)) + self.text_variable_5 = '{0} object to be synced'.format( + len(objectracker.missingObjects)) + + +class ContentNavigationDrawer(BoxLayout): + """ContentNavigationDrawer class for kivy Uir""" + + def __init__(self, *args, **kwargs): + """Method used for contentNavigationDrawer""" + super(ContentNavigationDrawer, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for class contentNavigationDrawer""" + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + + def check_scroll_y(self, instance, somethingelse): + """show data on scroll down""" + if self.ids.btn.is_open: + self.ids.btn.is_open = False + + +class Random(Screen): + """Random Screen class for Ui""" + + is_active = BooleanProperty(False) + checked = StringProperty("") + + def generateaddress(self, navApp): + """Method for Address Generator""" + # entered_label = str(self.ids.lab.text).strip() + entered_label = str(self.ids.add_random_bx.children[0].ids.lab.text).strip() + if not entered_label: + self.ids.add_random_bx.children[0].ids.lab.focus = True + streamNumberForAddress = 1 + eighteenByteRipe = False + nonceTrialsPerByte = 1000 + payloadLengthExtraBytes = 1000 + lables = [BMConfigParser().get(obj, 'label') + for obj in BMConfigParser().addresses()] + if entered_label and entered_label not in lables: + toast('Address Creating...') + queues.addressGeneratorQueue.put(( + 'createRandomAddress', 4, streamNumberForAddress, entered_label, 1, + "", eighteenByteRipe, nonceTrialsPerByte, + payloadLengthExtraBytes)) + self.parent.parent.ids.toolbar.opacity = 1 + self.parent.parent.ids.toolbar.disabled = False + state.kivyapp.loadMyAddressScreen(True) + self.manager.current = 'myaddress' + Clock.schedule_once(self.address_created_callback, 6) + + def address_created_callback(self, dt=0): + """New address created""" + state.kivyapp.loadMyAddressScreen(False) + state.kivyapp.root.ids.sc10.ids.ml.clear_widgets() + state.kivyapp.root.ids.sc10.is_add_created = True + state.kivyapp.root.ids.sc10.init_ui() + self.reset_address_spinner() + toast('New address created') + + def reset_address_spinner(self): + """reseting spinner address and UI""" + addresses = [addr for addr in BMConfigParser().addresses() + if BMConfigParser().get(str(addr), 'enabled') == 'true'] + self.manager.parent.ids.content_drawer.ids.btn.values = [] + self.manager.parent.ids.sc3.children[1].ids.btn.values = [] + self.manager.parent.ids.content_drawer.ids.btn.values = addresses + self.manager.parent.ids.sc3.children[1].ids.btn.values = addresses + + @staticmethod + def add_validation(instance): + """Checking validation at address creation time""" + entered_label = str(instance.text.strip()) + lables = [BMConfigParser().get(obj, 'label') + for obj in BMConfigParser().addresses()] + if entered_label in lables: + instance.error = True + instance.helper_text = 'it is already exist you'\ + ' can try this Ex. ( {0}_1, {0}_2 )'.format( + entered_label) + elif entered_label: + instance.error = False + else: + instance.error = False + instance.helper_text = 'This field is required' + + def reset_address_label(self, n): + """Resetting address labels""" + if not self.ids.add_random_bx.children: + self.ids.add_random_bx.add_widget(RandomBoxlayout()) + + +class Sent(Screen): + """Sent Screen class for kivy Ui""" + + queryreturn = ListProperty() + has_refreshed = True + account = StringProperty() + + def __init__(self, *args, **kwargs): + """Association with the screen""" + super(Sent, self).__init__(*args, **kwargs) + if state.association == '': + if BMConfigParser().addresses(): + state.association = BMConfigParser().addresses()[0] + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method sent accounts""" + self.loadSent() + print(dt) + + def loadSent(self, where="", what=""): + """Load Sent list for Sent messages""" + self.account = state.association + if state.searcing_text: + self.ids.scroll_y.scroll_y = 1.0 + where = ['subject', 'message'] + what = state.searcing_text + xAddress = 'fromaddress' + data = [] + self.ids.tag_label.text = '' + self.sentDataQuery(xAddress, where, what) + if self.queryreturn: + self.ids.tag_label.text = 'Sent' + self.set_sentCount(state.sent_count) + for mail in self.queryreturn: + data.append({ + 'text': mail[1].strip(), + 'secondary_text': (mail[2][:50] + '........' if len( + mail[2]) >= 50 else (mail[2] + ',' + mail[3])[0:50] + '........').replace( + '\t', '').replace(' ', ''), + 'ackdata': mail[5], 'senttime': mail[6]},) + self.set_mdlist(data, 0) + self.has_refreshed = True + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + self.set_sentCount('0') + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="No message found!" if state.searcing_text + else "yet no message for this account!!!!!!!!!!!!!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def sentDataQuery(self, xAddress, where, what, start_indx=0, end_indx=20): + """This method is used to retrieving data from sent table""" + self.queryreturn = kivy_helper_search.search_sql( + xAddress, + self.account, + 'sent', + where, + what, + False, + start_indx, + end_indx) + + def set_mdlist(self, data, set_index=0): + """This method is used to create the mdList""" + total_sent_msg = len(self.ids.ml.children) + for item in data: + meny = TwoLineAvatarIconListItem( + text=item['text'], secondary_text=item['secondary_text'], + theme_text_color='Custom', + text_color=ThemeClsColor) + meny._txt_right_pad = dp(70) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(item['secondary_text'].strip())))) + meny.bind(on_press=partial(self.sent_detail, item['ackdata'])) + meny.add_widget(AddTimeWidget(item['senttime'])) + carousel = Carousel(direction='right') + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text='Delete') + del_btn.background_normal = '' + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial(self.delete, item['ackdata'])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + # ach_btn = Button(text='Achieve') + # ach_btn.background_color = (0, 1, 0, 1) + # ach_btn.bind(on_press=partial(self.archive, item['ackdata'])) + # carousel.add_widget(ach_btn) + carousel.index = 1 + self.ids.ml.add_widget(carousel, index=set_index) + updated_msgs = len(self.ids.ml.children) + self.has_refreshed = True if total_sent_msg != updated_msgs else False + + def update_sent_messagelist(self): + """This method is used to update screen when new mail is sent""" + self.account = state.association + if len(self.ids.ml.children) < 3: + self.ids.ml.clear_widgets() + self.loadSent() + if state.association == state.check_sent_acc: + total_sent = int(state.sent_count) + 1 + state.sent_count = str(int(state.sent_count) + 1) + self.set_sentCount(total_sent) + else: + total_sent = int(state.sent_count) + else: + data = [] + self.sentDataQuery('fromaddress', '', '', 0, 1) + if state.association == state.check_sent_acc: + total_sent = int(state.sent_count) + 1 + state.sent_count = str(int(state.sent_count) + 1) + self.set_sentCount(total_sent) + else: + total_sent = int(state.sent_count) + for mail in self.queryreturn: + data.append({ + 'text': mail[1].strip(), + 'secondary_text': (mail[2][:50] + '........' if len( + mail[2]) >= 50 else (mail[2] + ',' + mail[3])[0:50] + '........').replace( + '\t', '').replace(' ', ''), + 'ackdata': mail[5], 'senttime': mail[6]}) + self.set_mdlist(data, total_sent - 1) + if state.msg_counter_objs and state.association == ( + state.check_sent_acc): + state.all_count = str(int(state.all_count) + 1) + state.msg_counter_objs.allmail_cnt.badge_text = state.all_count + state.check_sent_acc = None + + def check_scroll_y(self, instance, somethingelse): + """Load data on scroll down""" + if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed: + self.ids.scroll_y.scroll_y = 0.06 + total_sent_msg = len(self.ids.ml.children) + self.update_sent_screen_on_scroll(total_sent_msg) + + def update_sent_screen_on_scroll(self, total_sent_msg, where="", what=""): + """This method is used to load more data on scroll down""" + if state.searcing_text: + where = ['subject', 'message'] + what = state.searcing_text + self.sentDataQuery('fromaddress', where, what, total_sent_msg, 5) + data = [] + for mail in self.queryreturn: + data.append({ + 'text': mail[1].strip(), + 'secondary_text': mail[2][:50] + '........' if len( + mail[2]) >= 50 else (mail[2] + ',' + mail[3].replace( + '\n', ''))[0:50] + '........', + 'ackdata': mail[5], 'senttime': mail[6]}) + self.set_mdlist(data, 0) + + @staticmethod + def set_sentCount(total_sent): + """Set the total no. of sent message count""" + src_mng_obj = state.kivyapp.root.ids.content_drawer.ids.send_cnt + state.kivyapp.root.ids.content_drawer.ids.send_cnt.ids.badge_txt.text + if state.association: + src_mng_obj.ids.badge_txt.text = showLimitedCnt(int(total_sent)) + else: + src_mng_obj.ids.badge_txt.text = '0' + + def sent_detail(self, ackdata, *args): + """Load sent mail details""" + state.detailPageType = 'sent' + state.mail_id = ackdata + if self.manager: + src_mng_obj = self.manager + else: + src_mng_obj = self.parent.parent + src_mng_obj.screens[13].clear_widgets() + src_mng_obj.screens[13].add_widget(MailDetail()) + src_mng_obj.current = 'mailDetail' + + def delete(self, data_index, instance, *args): + """Delete sent mail from sent mail listing""" + msg_count_objs = self.parent.parent.ids.content_drawer.ids + if int(state.sent_count) > 0: + msg_count_objs.send_cnt.ids.badge_txt.text = showLimitedCnt(int(state.sent_count) - 1) + msg_count_objs.trash_cnt.ids.badge_txt.text = showLimitedCnt(int(state.trash_count) + 1) + msg_count_objs.allmail_cnt.ids.badge_txt.text = showLimitedCnt(int(state.all_count) - 1) + state.sent_count = str(int(state.sent_count) - 1) + state.trash_count = str(int(state.trash_count) + 1) + state.all_count = str(int(state.all_count) - 1) + if int(state.sent_count) <= 0: + self.ids.tag_label.text = '' + sqlExecute( + "UPDATE sent SET folder = 'trash'" + " WHERE ackdata = ?;", data_index) + self.ids.ml.remove_widget(instance.parent.parent) + toast('Deleted') + self.update_trash() + + def archive(self, data_index, instance, *args): + """Archive sent mail from sent mail listing""" + sqlExecute( + "UPDATE sent SET folder = 'trash'" + " WHERE ackdata = ?;", data_index) + self.ids.ml.remove_widget(instance.parent.parent) + self.update_trash() + + def update_trash(self): + """Update trash screen mails which is deleted from inbox""" + try: + self.parent.screens[4].clear_widgets() + self.parent.screens[4].add_widget(Trash()) + self.parent.screens[16].clear_widgets() + self.parent.screens[16].add_widget(Allmails()) + except Exception: + self.parent.parent.screens[4].clear_widgets() + self.parent.parent.screens[4].add_widget(Trash()) + self.parent.parent.screens[16].clear_widgets() + self.parent.parent.screens[16].add_widget(Allmails()) + + +class Trash(Screen): + """Trash Screen class for kivy Ui""" + + trash_messages = ListProperty() + has_refreshed = True + # delete_index = StringProperty() + table_name = StringProperty() + + def __init__(self, *args, **kwargs): + """Trash method, delete sent message and add in Trash""" + super(Trash, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method trash screen""" + if state.association == '': + if BMConfigParser().addresses(): + state.association = BMConfigParser().addresses()[0] + self.ids.tag_label.text = '' + self.trashDataQuery(0, 20) + if self.trash_messages: + self.ids.tag_label.text = 'Trash' + # src_mng_obj = state.kivyapp.root.children[2].children[0].ids + # src_mng_obj.trash_cnt.badge_text = state.trash_count + self.set_TrashCnt(state.trash_count) + self.set_mdList() + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + self.set_TrashCnt('0') + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="yet no trashed message for this account!!!!!!!!!!!!!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def trashDataQuery(self, start_indx, end_indx): + """Trash message query""" + self.trash_messages = sqlQuery( + "SELECT toaddress, fromaddress, subject, message," + " folder ||',' || 'sent' as folder, ackdata As" + " id, DATE(senttime) As actionTime, senttime as msgtime FROM sent" + " WHERE folder = 'trash' and fromaddress = '{0}' UNION" + " SELECT toaddress, fromaddress, subject, message," + " folder ||',' || 'inbox' as folder, msgid As id," + " DATE(received) As actionTime, received as msgtime FROM inbox" + " WHERE folder = 'trash' and toaddress = '{0}'" + " ORDER BY actionTime DESC limit {1}, {2}".format( + state.association, start_indx, end_indx)) + + def set_TrashCnt(self, Count): # pylint: disable=no-self-use + """This method is used to set trash message count""" + trashCnt_obj = state.kivyapp.root.ids.content_drawer.ids.trash_cnt + trashCnt_obj.ids.badge_txt.text = showLimitedCnt(int(Count)) + + def set_mdList(self): + """This method is used to create the mdlist""" + total_trash_msg = len(self.ids.ml.children) + for item in self.trash_messages: + subject = item[2].decode() if isinstance(item[2], bytes) else item[2] + body = item[3].decode() if isinstance(item[3], bytes) else item[3] + meny = TwoLineAvatarIconListItem( + text=item[1], + secondary_text=(item[2][:50] + '........' if len( + subject) >= 50 else (subject + ',' + body)[0:50] + '........').replace('\t', '').replace(' ', ''), + theme_text_color='Custom', + text_color=ThemeClsColor) + meny._txt_right_pad = dp(70) + img_latter = state.imageDir + '/text_images/{}.png'.format( + subject[0].upper() if (subject[0].upper() >= 'A' and subject[0].upper() <= 'Z') else '!') + meny.add_widget(AvatarSampleWidget(source=img_latter)) + meny.add_widget(AddTimeWidget(item[7])) + meny.add_widget(chipTag('inbox 'if 'inbox' in item[4] else 'sent')) + carousel = Carousel(direction='right') + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text='Delete') + del_btn.background_normal = '' + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial( + self.delete_permanently, item[5], item[4])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + carousel.index = 1 + self.ids.ml.add_widget(carousel) + self.has_refreshed = True if total_trash_msg != len( + self.ids.ml.children) else False + + def check_scroll_y(self, instance, somethingelse): + """Load data on scroll""" + if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed: + self.ids.scroll_y.scroll_y = 0.06 + total_trash_msg = len(self.ids.ml.children) + self.update_trash_screen_on_scroll(total_trash_msg) + + def update_trash_screen_on_scroll(self, total_trash_msg): + """Load more data on scroll down""" + self.trashDataQuery(total_trash_msg, 5) + self.set_mdList() + + def delete_permanently(self, data_index, folder, instance, *args): + """Deleting trash mail permanently""" + self.table_name = folder.split(',')[1] + self.delete_index = data_index + self.delete_confirmation() + + def callback_for_screen_load(self, dt=0): + """This methos is for loading screen""" + self.ids.ml.clear_widgets() + self.init_ui(0) + self.children[1].active = False + toast('Message is permanently deleted') + + def delete_confirmation(self): + """Show confirmation delete popup""" + width = .8 if platform == 'android' else .55 + dialog_box = MDDialog( + text='Are you sure you want to delete this' + ' message permanently from trash?', + size_hint=(width, .25), + buttons=[ + MDFlatButton( + text="Yes", on_release=lambda x: callback_for_delete_msg("Yes") + ), + MDFlatButton( + text="No", on_release=lambda x: callback_for_delete_msg("No"), + ), + ],) + dialog_box.open() + + def callback_for_delete_msg(text_item, *arg): + """Getting the callback of alert box""" + if text_item == 'Yes': + self.delete_message_from_trash() + else: + toast(text_item) + dialog_box.dismiss() + + # def callback_for_delete_msg(self, text_item, *arg): + # """Getting the callback of alert box""" + # if text_item == 'Yes': + # self.delete_message_from_trash() + # else: + # toast(text_item) + + def delete_message_from_trash(self): + """Deleting message from trash""" + self.children[1].active = True + if self.table_name == 'inbox': + sqlExecute( + "DELETE FROM inbox WHERE msgid = ?;", self.delete_index) + elif self.table_name == 'sent': + sqlExecute( + "DELETE FROM sent WHERE ackdata = ?;", self.delete_index) + if int(state.trash_count) > 0: + # msg_count_objs.trash_cnt.badge_text = str( + # int(state.trash_count) - 1) + self.set_TrashCnt(int(state.trash_count) - 1) + state.trash_count = str(int(state.trash_count) - 1) + Clock.schedule_once(self.callback_for_screen_load, 1) + + +class Page(Screen): + """Page Screen class for kivy Ui""" + + +class Create(Screen): + """Creates Screen class for kivy Ui""" + + def __init__(self, **kwargs): + """Getting Labels and address from addressbook""" + super(Create, self).__init__(**kwargs) + Window.softinput_mode = "below_target" + widget_1 = DropDownWidget() + widget_1.ids.txt_input.word_list = [ + addr[1] for addr in sqlQuery( + "SELECT label, address from addressbook")] + widget_1.ids.txt_input.starting_no = 2 + self.add_widget(widget_1) + self.children[0].ids.id_scroll.bind(scroll_y=self.check_scroll_y) + + def check_scroll_y(self, instance, somethingelse): + """show data on scroll down""" + if self.children[1].ids.btn.is_open: + self.children[1].ids.btn.is_open = False + + +class Setting(Screen): + """Setting Screen for kivy Ui""" + exp_text = "By default, if you send a message to someone and he is offline for more than two days, Bitmessage will\ + send the message again after an additional two days. This will be continued with exponential backoff\ + forever; messages will be resent after 5, 10, 20 days ect. until the receiver acknowledges them.\ + Here you may change that behavior by having Bitmessage give up after a certain number of days \ + or months." + + languages = { + 'ar': 'Arabic', + 'cs': 'Czech', + 'da': 'Danish', + 'de': 'German', + 'en': 'English', + 'eo': 'Esperanto', + 'fr': 'French', + 'it': 'Italian', + 'ja': 'Japanese', + 'nl': 'Dutch', + 'no': 'Norwegian', + 'pl': 'Polish', + 'pt': 'Portuguese', + 'ru': 'Russian', + 'sk': 'Slovak', + 'zh': 'Chinese', + } + newlocale = None + + def __init__(self, *args, **kwargs): + """Trash method, delete sent message and add in Trash""" + super(Setting, self).__init__(*args, **kwargs) + if self.newlocale is None: + self.newlocale = l10n.getTranslationLanguage() + lang = locale.normalize(l10n.getTranslationLanguage()) + langs = [ + lang.split(".")[0] + "." + l10n.encoding, + lang.split(".")[0] + "." + 'UTF-8', + lang + ] + if 'win32' in platform or 'win64' in platform: + langs = [l10n.getWindowsLocale(lang)] + for lang in langs: + try: + l10n.setlocale(locale.LC_ALL, lang) + if 'win32' not in platform and 'win64' not in platform: + l10n.encoding = locale.nl_langinfo(locale.CODESET) + else: + l10n.encoding = locale.getlocale()[1] + logger.info("Successfully set locale to %s", lang) + break + except: + logger.error("Failed to set locale to %s", lang, exc_info=True) + + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Initialization for Ui""" + if self.newlocale is None: + self.newlocale = l10n.getTranslationLanguage() + # state.kivyapp.tr = Lang(self.newlocale) + state.kivyapp.tr = Lang(self.newlocale) + menu_items = [{"text": f"{i}"} for i in self.languages.values()] + self.menu = MDDropdownMenu( + caller=self.ids.dropdown_item, + items=menu_items, + position="auto", + width_mult=3.5, + ) + self.menu.bind(on_release=self.set_item) + + def set_item(self, instance_menu, instance_menu_item): + # import pdb;pdb.set_trace() + self.ids.dropdown_item.set_item(instance_menu_item.text) + instance_menu.dismiss() + + def change_language(self): + lang = self.ids.dropdown_item.current_item + for k, v in self.languages.items(): + if v == lang: + BMConfigParser().set('bitmessagesettings', 'userlocale', k) + BMConfigParser().save() + state.kivyapp.tr = Lang(k) + self.children[0].active = True + Clock.schedule_once(partial(self.language_callback, k), 1) + + def language_callback(self, lang, dt=0): + self.children[0].active = False + state.kivyapp.tr = Lang(lang) + toast('Language changed') + + +class NavigateApp(MDApp): + """Navigation Layout of class""" + # pylint: disable=too-many-public-methods,inconsistent-return-statements + + # theme_cls = ThemeManager() + previous_date = ObjectProperty() + obj_1 = ObjectProperty() + variable_1 = ListProperty(addr for addr in BMConfigParser().addresses() + if BMConfigParser().get(str(addr), 'enabled') == 'true') + nav_drawer = ObjectProperty() + state.screen_density = Window.size + window_size = state.screen_density + app_platform = platform + title = "PyBitmessage" + imgstatus = False + count = 0 + manager_open = False + file_manager = None + state.imageDir = os.path.join('./images', 'kivy') + image_path = state.imageDir + tr = Lang("en") # for changing in franch replace en with fr + + def build(self): + """Method builds the widget""" + for kv_file in KVFILES: + Builder.load_file(os.path.join(os.path.dirname(__file__), "kv/{}.kv").format(kv_file)) + self.obj_1 = AddressBook() + kivysignalthread = UIkivySignaler() + kivysignalthread.daemon = True + kivysignalthread.start() + Window.bind(on_keyboard=self.on_key, on_request_close=self.on_request_close) + return Builder.load_file( + os.path.join(os.path.dirname(__file__), 'main.kv')) + + def run(self): + """Running the widgets""" + kivyuisignaler.release() + super(NavigateApp, self).run() + + @staticmethod + def clickNavDrawer(): + state.kivyapp.root.ids.nav_drawer.set_state('toggle') + + @staticmethod + def showmeaddresses(name="text"): + """Show the addresses in spinner to make as dropdown""" + if name == "text": + if BMConfigParser().addresses(): + return BMConfigParser().addresses()[0][:16] + '..' + return "textdemo" + elif name == "values": + if BMConfigParser().addresses(): + return [address[:16] + '..' + for address in BMConfigParser().addresses()] + return "valuesdemo" + + def getCurrentAccountData(self, text): + """Get Current Address Account Data""" + if text != '': + if os.path.exists(state.imageDir + '/default_identicon/{}.png'.format(text)): + self.load_selected_Image(text) + else: + self.set_identicon(text) + self.root.ids.content_drawer.ids.reset_image.opacity = 0 + self.root.ids.content_drawer.ids.reset_image.disabled = True + address_label = self.current_address_label( + BMConfigParser().get(text, 'label'), text) + + self.root_window.children[1].ids.toolbar.title = address_label + state.association = text + state.searcing_text = '' + LoadingPopup().open() + self.set_message_count() + for nav_obj in self.root.ids.content_drawer.children[ + 0].children[0].children[0].children: + nav_obj.active = True if nav_obj.text == 'Inbox' else False + self.fileManagerSetting() + Clock.schedule_once(self.setCurrentAccountData, 0.5) + + def fileManagerSetting(self): + """This method is for file manager setting""" + if not self.root.ids.content_drawer.ids.file_manager.opacity and \ + self.root.ids.content_drawer.ids.file_manager.disabled: + self.root.ids.content_drawer.ids.file_manager.opacity = 1 + self.root.ids.content_drawer.ids.file_manager.disabled = False + + def setCurrentAccountData(self, dt=0): + """This method set the current accout data on all the screens""" + self.root.ids.sc1.ids.ml.clear_widgets() + self.root.ids.sc1.loadMessagelist(state.association) + + self.root.ids.sc4.ids.ml.clear_widgets() + self.root.ids.sc4.children[2].children[2].ids.search_field.text = '' + self.root.ids.sc4.loadSent(state.association) + + self.root.ids.sc16.clear_widgets() + self.root.ids.sc16.add_widget(Draft()) + + self.root.ids.sc5.clear_widgets() + self.root.ids.sc5.add_widget(Trash()) + + self.root.ids.sc17.clear_widgets() + self.root.ids.sc17.add_widget(Allmails()) + + self.root.ids.sc10.ids.ml.clear_widgets() + self.root.ids.sc10.init_ui() + + self.root.ids.scr_mngr.current = 'inbox' + + @staticmethod + def getCurrentAccount(): + """It uses to get current account label""" + if state.association: + return state.association + return "Bitmessage Login" + + # @staticmethod + def addingtoaddressbook(self): + """Adding to address Book""" + width = .85 if platform == 'android' else .8 + self.add_popup = MDDialog( + title='add contact\'s', + type="custom", + size_hint=(width, .23), + content_cls=GrashofPopup(), + buttons=[ + MDRaisedButton( + text="Save", + on_release=self.savecontact, + ), + MDRaisedButton( + text="Cancel", + on_release=self.close_pop, + ), + MDRaisedButton( + text="Scan QR code", + on_release=self.scan_qr_code, + ), + ], + ) + self.add_popup.set_normal_height() + self.add_popup.auto_dismiss = False + self.add_popup.open() + # p = GrashofPopup() + # p.open() + + def scan_qr_code(self, instance): + """this method is used for showing QR code scanner""" + if self.is_camara_attached(): + self.add_popup.dismiss() + self.root.ids.sc23.get_screen(self.root.ids.scr_mngr.current, self.add_popup) + self.root.ids.scr_mngr.current = 'scanscreen' + else: + altet_txt = ( + 'Currently this feature is not avaialbe!' if platform == 'android' else 'Camera is not available!') + self.add_popup.dismiss() + toast(altet_txt) + + def is_camara_attached(self): + """This method is for checking is camera available or not""" + self.root.ids.sc23.check_camera() + is_available = self.root.ids.sc23.camera_avaialbe + return is_available + + def savecontact(self, instance): + """Method is used for saving contacts""" + pupup_obj = self.add_popup.content_cls + label = pupup_obj.ids.label.text.strip() + address = pupup_obj.ids.address.text.strip() + if label == '' and address == '': + pupup_obj.ids.label.focus = True + pupup_obj.ids.address.focus = True + elif address == '': + pupup_obj.ids.address.focus = True + elif label == '': + pupup_obj.ids.label.focus = True + else: + pupup_obj.ids.address.focus = True + # pupup_obj.ids.label.focus = True + + stored_address = [addr[1] for addr in kivy_helper_search.search_sql( + folder="addressbook")] + stored_labels = [labels[0] for labels in kivy_helper_search.search_sql( + folder="addressbook")] + if label and address and address not in stored_address \ + and label not in stored_labels and pupup_obj.valid: + # state.navinstance = self.parent.children[1] + queues.UISignalQueue.put(('rerenderAddressBook', '')) + self.add_popup.dismiss() + sqlExecute("INSERT INTO addressbook VALUES(?,?)", label, address) + try: + rootIds = self.root.ids + except Exception as e: + rootIds = state.kivyapp.root.ids + rootIds.sc11.ids.ml.clear_widgets() + rootIds.sc11.loadAddresslist(None, 'All', '') + rootIds.scr_mngr.current = 'addressbook' + toast('Saved') + + def close_pop(self, instance): + """Pop is Canceled""" + self.add_popup.dismiss() + toast('Canceled') + + def getDefaultAccData(self, instance): + """Getting Default Account Data""" + if BMConfigParser().addresses(): + first_addr = BMConfigParser().addresses()[0] + if BMConfigParser().get(str(first_addr), 'enabled') == 'true': + img = identiconGeneration.generate(first_addr) + # self.createFolder(state.imageDir + '/default_identicon/') + # if platform == 'android': + # # android_path = os.path.expanduser + # # ("~/user/0/org.test.bitapp/files/app/") + # if not os.path.exists(state.imageDir + '/default_identicon/{}.png'.format( + # BMConfigParser().addresses()[0])): + # android_path = os.path.join( + # os.environ['ANDROID_PRIVATE'] + '/app/') + # img.texture.save('{1}/images/kivy/default_identicon/{0}.png'.format( + # BMConfigParser().addresses()[0], android_path)) + # else: + # if not os.path.exists(state.imageDir + '/default_identicon/{}.png'.format( + # BMConfigParser().addresses()[0])): + # img.texture.save(state.imageDir + '/default_identicon/{}.png'.format( + # BMConfigParser().addresses()[0])) + instance.parent.parent.parent.parent.parent.ids.top_box.children[0].texture = ( + img.texture) + return first_addr + instance.parent.parent.parent.parent.parent.ids.top_box.children[0].source = ( + state.imageDir + '/drawer_logo1.png') + return 'Select Address' + + @staticmethod + def addressexist(): + """Checking address existence""" + if BMConfigParser().addresses(): + return True + return False + + def on_key(self, window, key, *args): + # pylint: disable=inconsistent-return-statements, too-many-branches + """Method is used for going on previous screen""" + if key == 27: + if state.in_search_mode and self.root.ids.scr_mngr.current not in [ + "mailDetail", "create"]: + self.closeSearchScreen() + elif self.root.ids.scr_mngr.current == "mailDetail": + self.root.ids.scr_mngr.current = 'sent'\ + if state.detailPageType == 'sent' else 'inbox' \ + if state.detailPageType == 'inbox' else 'draft' + self.back_press() + if state.in_search_mode and state.searcing_text: + toolbar_obj = self.root.ids.toolbar + toolbar_obj.left_action_items = [ + ['arrow-left', lambda x: self.closeSearchScreen()]] + toolbar_obj.right_action_items = [] + self.root.ids.toolbar.title = '' + elif self.root.ids.scr_mngr.current == "create": + self.save_draft() + self.set_common_header() + state.in_composer = False + self.root.ids.scr_mngr.current = 'inbox' + elif self.root.ids.scr_mngr.current == "showqrcode": + self.root.ids.scr_mngr.current = 'myaddress' + elif self.root.ids.scr_mngr.current == "random": + self.root.ids.scr_mngr.current = 'login' + elif self.root.ids.scr_mngr.current == 'pay-options': + self.set_common_header() + self.root.ids.scr_mngr.current = 'payment' + elif self.root.ids.scr_mngr.current == 'chroom': + if state.association: + address_label = self.current_address_label( + BMConfigParser().get( + state.association, 'label'), state.association) + self.root.ids.toolbar.title = address_label + self.set_common_header() + self.root.ids.scr_mngr.transition = FallOutTransition() + self.root.ids.scr_mngr.current = 'chlist' + self.root.ids.scr_mngr.transition = SlideTransition() + else: + if state.kivyapp.variable_1: + self.root.ids.scr_mngr.current = 'inbox' + self.root.ids.scr_mngr.transition.direction = 'right' + self.root.ids.scr_mngr.transition.bind(on_complete=self.reset) + return True + elif key == 13 and state.searcing_text and not state.in_composer: + if state.search_screen == 'inbox': + self.root.ids.sc1.children[1].active = True + Clock.schedule_once(self.search_callback, 0.5) + elif state.search_screen == 'addressbook': + self.root.ids.sc11.children[1].active = True + Clock.schedule_once(self.search_callback, 0.5) + elif state.search_screen == 'myaddress': + self.loadMyAddressScreen(True) + Clock.schedule_once(self.search_callback, 0.5) + elif state.search_screen == 'sent': + self.root.ids.sc4.children[1].active = True + Clock.schedule_once(self.search_callback, 0.5) + + def search_callback(self, dt=0): + """Show data after loader is loaded""" + if state.search_screen == 'inbox': + self.root.ids.sc1.ids.ml.clear_widgets() + self.root.ids.sc1.loadMessagelist(state.association) + self.root.ids.sc1.children[1].active = False + elif state.search_screen == 'addressbook': + self.root.ids.sc11.ids.ml.clear_widgets() + self.root.ids.sc11.loadAddresslist(None, 'All', '') + self.root.ids.sc11.children[1].active = False + elif state.search_screen == 'myaddress': + self.root.ids.sc10.ids.ml.clear_widgets() + self.root.ids.sc10.init_ui() + self.loadMyAddressScreen(False) + else: + self.root.ids.sc4.ids.ml.clear_widgets() + self.root.ids.sc4.loadSent(state.association) + self.root.ids.sc4.children[1].active = False + self.root.ids.scr_mngr.current = state.search_screen + + def loadMyAddressScreen(self, action): + """loadMyAddressScreen method spin the loader""" + if len(self.root.ids.sc10.children) <= 2: + self.root.ids.sc10.children[0].active = action + else: + self.root.ids.sc10.children[1].active = action + + def save_draft(self): + """Saving drafts messages""" + composer_objs = self.root + from_addr = str(self.root.ids.sc3.children[1].ids.ti.text) + # to_addr = str(self.root.ids.sc3.children[1].ids.txt_input.text) + if from_addr and state.detailPageType != 'draft' \ + and not state.in_sent_method: + Draft().draft_msg(composer_objs) + return + + def reset(self, *args): + """Set transition direction""" + self.root.ids.scr_mngr.transition.direction = 'left' + self.root.ids.scr_mngr.transition.unbind(on_complete=self.reset) + + @staticmethod + def status_dispatching(data): + """Dispatching Status acknowledgment""" + ackData, message = data + if state.ackdata == ackData: + state.status.status = message + + def clear_composer(self): + """If slow down, the new composer edit screen""" + self.set_navbar_for_composer() + composer_obj = self.root.ids.sc3.children[1].ids + composer_obj.ti.text = '' + composer_obj.btn.text = 'Select' + composer_obj.txt_input.text = '' + composer_obj.subject.text = '' + composer_obj.body.text = '' + state.in_composer = True + state.in_sent_method = False + + def set_navbar_for_composer(self): + """Clearing toolbar data when composer open""" + self.root.ids.toolbar.left_action_items = [ + ['arrow-left', lambda x: self.back_press()]] + self.root.ids.toolbar.right_action_items = [ + ['refresh', + lambda x: self.root.ids.sc3.children[1].reset_composer()], + ['send', + lambda x: self.root.ids.sc3.children[1].send(self)]] + + def set_toolbar_for_QrCode(self): + """This method is use for setting Qr code toolbar.""" + self.root.ids.toolbar.left_action_items = [ + ['arrow-left', lambda x: self.back_press()]] + self.root.ids.toolbar.right_action_items = [] + + def set_common_header(self): + """Common header for all window""" + self.root.ids.toolbar.right_action_items = [ + ['account-plus', lambda x: self.addingtoaddressbook()]] + # self.root.ids.toolbar.left_action_items = [ + # ['menu', lambda x: self.root.toggle_nav_drawer()]] + self.root.ids.toolbar.left_action_items = [ + ['menu', lambda x: self.root.ids.nav_drawer.set_state("toggle")]] + return + + def back_press(self): + """Method for, reverting composer to previous page""" + if self.root.ids.scr_mngr.current == 'create': + self.save_draft() + if self.root.ids.scr_mngr.current == \ + 'mailDetail' and state.in_search_mode: + toolbar_obj = self.root.ids.toolbar + toolbar_obj.left_action_items = [ + ['arrow-left', lambda x: self.closeSearchScreen()]] + toolbar_obj.right_action_items = [] + self.root.ids.toolbar.title = '' + else: + self.set_common_header() + if self.root.ids.scr_mngr.current == 'chroom' and state.association: + self.root.ids.scr_mngr.transition = FallOutTransition() + address_label = self.current_address_label( + BMConfigParser().get( + state.association, 'label'), state.association) + self.root.ids.toolbar.title = address_label + self.root.ids.scr_mngr.current = 'inbox' \ + if state.in_composer else 'allmails'\ + if state.is_allmail else state.detailPageType\ + if state.detailPageType else 'myaddress'\ + if self.root.ids.scr_mngr.current == 'showqrcode' else 'payment'\ + if self.root.ids.scr_mngr.current == 'pay-options' else 'chlist'\ + if self.root.ids.scr_mngr.current == 'chroom' else 'inbox' + if self.root.ids.scr_mngr.current == 'chlist': + self.root.ids.scr_mngr.transition = SlideTransition() + self.root.ids.scr_mngr.transition.direction = 'right' + self.root.ids.scr_mngr.transition.bind(on_complete=self.reset) + if state.is_allmail or state.detailPageType == 'draft': + state.is_allmail = False + state.detailPageType = '' + state.in_composer = False + + @staticmethod + def get_inbox_count(): + """Getting inbox count""" + state.inbox_count = str(sqlQuery( + "SELECT COUNT(*) FROM inbox WHERE toaddress = '{}' and" + " folder = 'inbox' ;".format(state.association))[0][0]) + + @staticmethod + def get_sent_count(): + """Getting sent count""" + state.sent_count = str(sqlQuery( + "SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and" + " folder = 'sent' ;".format(state.association))[0][0]) + + def set_message_count(self): + """Setting message count""" + msg_counter_objs = state.kivyapp.root.children[0].children[0].ids + # try: + # msg_counter_objs = ( + # self.root_window.children[0].children[2].children[0].ids) + # except Exception: + # msg_counter_objs = ( + # self.root_window.children[2].children[2].children[0].ids) + self.get_inbox_count() + self.get_sent_count() + state.trash_count = str(sqlQuery( + "SELECT (SELECT count(*) FROM sent" + " where fromaddress = '{0}' and folder = 'trash' )" + "+(SELECT count(*) FROM inbox where toaddress = '{0}' and" + " folder = 'trash') AS SumCount".format(state.association))[0][0]) + state.draft_count = str(sqlQuery( + "SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and" + " folder = 'draft' ;".format(state.association))[0][0]) + state.all_count = str(int(state.sent_count) + int(state.inbox_count)) + if msg_counter_objs: + msg_counter_objs.send_cnt.badge_text = state.sent_count + msg_counter_objs.inbox_cnt.badge_text = state.inbox_count + msg_counter_objs.trash_cnt.badge_text = state.trash_count + msg_counter_objs.draft_cnt.badge_text = state.draft_count + msg_counter_objs.allmail_cnt.badge_text = state.all_count + + def on_start(self): + """Setting message count""" + self.set_message_count() + + # @staticmethod + # def on_stop(): + # """On stop methos is used for stoping the runing script""" + # print("*******************EXITING FROM APPLICATION*******************") + # import shutdown + # shutdown.doCleanShutdown() + + @staticmethod + def current_address_label(current_add_label=None, current_addr=None): + """Getting current address labels""" + if BMConfigParser().addresses(): + if current_add_label: + first_name = current_add_label + addr = current_addr + else: + addr = BMConfigParser().addresses()[0] + first_name = BMConfigParser().get(addr, 'label') + if BMConfigParser().get(addr, 'enabled') != 'true': + return '' + f_name = first_name.split() + label = f_name[0][:14].capitalize() + '...' if len( + f_name[0]) > 15 else f_name[0].capitalize() + address = ' (' + addr + ')' + return label + address + return '' + + def searchQuery(self, instance): + """Showing searched mails""" + state.search_screen = self.root.ids.scr_mngr.current + state.searcing_text = str(instance.text).strip() + if instance.focus and state.searcing_text: + toolbar_obj = self.root.ids.toolbar + toolbar_obj.left_action_items = [ + ['arrow-left', lambda x: self.closeSearchScreen()]] + toolbar_obj.right_action_items = [] + self.root.ids.toolbar.title = '' + state.in_search_mode = True + + def closeSearchScreen(self): + """Function for close search screen""" + self.set_common_header() + if state.association: + address_label = self.current_address_label( + BMConfigParser().get( + state.association, 'label'), state.association) + self.root.ids.toolbar.title = address_label + state.searcing_text = '' + self.refreshScreen() + state.in_search_mode = False + + def refreshScreen(self): + """Method show search button only on inbox or sent screen""" + # pylint: disable=unused-variable + state.searcing_text = '' + if state.search_screen == 'inbox': + self.root.ids.sc1.ids.inbox_search.ids.search_field.text = '' + # try: + # self.root.ids.sc1.children[ + # 3].children[2].ids.search_field.text = '' + # except Exception: + # self.root.ids.sc1.children[ + # 2].children[2].ids.search_field.text = '' + self.root.ids.sc1.children[1].active = True + Clock.schedule_once(self.search_callback, 0.5) + elif state.search_screen == 'addressbook': + self.root.ids.sc11.ids.address_search.ids.search_field.text = '' + # self.root.ids.sc11.children[ + # 2].children[2].ids.search_field.text = '' + self.root.ids.sc11.children[ + 1].active = True + Clock.schedule_once(self.search_callback, 0.5) + elif state.search_screen == 'myaddress': + self.root.ids.sc10.ids.search_bar.ids.search_field.text = '' + # try: + # self.root.ids.sc10.children[ + # 1].children[2].ids.search_field.text = '' + # except Exception: + # self.root.ids.sc10.children[ + # 2].children[2].ids.search_field.text = '' + self.loadMyAddressScreen(True) + Clock.schedule_once(self.search_callback, 0.5) + else: + self.root.ids.sc4.ids.sent_search.ids.search_field.text = '' + # self.root.ids.sc4.children[ + # 2].children[2].ids.search_field.text = '' + self.root.ids.sc4.children[1].active = True + Clock.schedule_once(self.search_callback, 0.5) + return + + def set_identicon(self, text): + """Show identicon in address spinner""" + img = identiconGeneration.generate(text) + # self.root.children[0].children[0].ids.btn.children[1].texture = (img.texture) + # below line is for displaing logo + self.root.ids.content_drawer.ids.top_box.children[0].texture = (img.texture) + + def set_mail_detail_header(self): + """Setting the details of the page""" + if state.association and state.in_search_mode: + address_label = self.current_address_label( + BMConfigParser().get( + state.association, 'label'), state.association) + self.root.ids.toolbar.title = address_label + toolbar_obj = self.root.ids.toolbar + toolbar_obj.left_action_items = [ + ['arrow-left', lambda x: self.back_press()]] + delete_btn = ['delete-forever', + lambda x: self.root.ids.sc14.delete_mail()] + dynamic_list = [] + if state.detailPageType == 'inbox': + dynamic_list = [ + ['reply', lambda x: self.root.ids.sc14.inbox_reply()], + delete_btn] + elif state.detailPageType == 'sent': + dynamic_list = [delete_btn] + elif state.detailPageType == 'draft': + dynamic_list = [ + ['pencil', lambda x: self.root.ids.sc14.write_msg(self)], + delete_btn] + toolbar_obj.right_action_items = dynamic_list + + def load_screen(self, instance): + """This method is used for loading screen on every click""" + if instance.text == 'Inbox': + self.root.ids.scr_mngr.current = 'inbox' + self.root.ids.sc1.children[1].active = True + elif instance.text == 'All Mails': + self.root.ids.scr_mngr.current = 'allmails' + try: + self.root.ids.sc17.children[1].active = True + except Exception: + self.root.ids.sc17.children[0].children[1].active = True + Clock.schedule_once(partial(self.load_screen_callback, instance), 1) + + def load_screen_callback(self, instance, dt=0): + """This method is rotating loader for few seconds""" + if instance.text == 'Inbox': + self.root.ids.sc1.ids.ml.clear_widgets() + self.root.ids.sc1.loadMessagelist(state.association) + self.root.ids.sc1.children[1].active = False + elif instance.text == 'All Mails': + # if len(self.root.ids.sc17.ids.ml.children) <= 2: + # self.root.ids.sc17.clear_widgets() + # self.root.ids.sc17.add_widget(Allmails()) + # else: + # self.root.ids.sc17.ids.ml.clear_widgets() + # self.root.ids.sc17.loadMessagelist() + self.root.ids.sc17.clear_widgets() + self.root.ids.sc17.add_widget(Allmails()) + try: + self.root.ids.sc17.children[1].active = False + except Exception: + self.root.ids.sc17.children[0].children[1].active = False + + def on_request_close(self, *args): # pylint: disable=no-self-use + """This method is for app closing request""" + AppClosingPopup().open() + return True + + def file_manager_open(self): + """This method open the file manager of local system""" + from kivymd.uix.filemanager import MDFileManager + + if not self.file_manager: + self.file_manager = MDFileManager( + exit_manager=self.exit_manager, + select_path=self.select_path, + ext=['.png', '.jpg'] + ) + self.file_manager.previous = False + self.file_manager.current_path = '/' + if platform == 'android': + from android.permissions import request_permissions, Permission, check_permission + if check_permission(Permission.WRITE_EXTERNAL_STORAGE) and \ + check_permission(Permission.READ_EXTERNAL_STORAGE): + self.file_manager.show(os.getenv('EXTERNAL_STORAGE')) + self.manager_open = True + else: + request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE]) + else: + self.file_manager.show(os.environ["HOME"]) + self.manager_open = True + + def select_path(self, path): + """This method is used to save the select image""" + try: + from PIL import Image as PilImage + newImg = PilImage.open(path).resize((300, 300)) + if platform == 'android': + android_path = os.path.join( + os.environ['ANDROID_PRIVATE'] + '/app' + '/images' + '/kivy/') + if not os.path.exists(android_path + '/default_identicon/'): + os.makedirs(android_path + '/default_identicon/') + newImg.save('{1}/default_identicon/{0}.png'.format( + state.association, android_path)) + else: + if not os.path.exists(state.imageDir + '/default_identicon/'): + os.makedirs(state.imageDir + '/default_identicon/') + newImg.save(state.imageDir + '/default_identicon/{0}.png'.format(state.association)) + self.load_selected_Image(state.association) + toast('Image changed') + except Exception: + toast('Exit') + self.exit_manager() + + def exit_manager(self, *args): + """Called when the user reaches the root of the directory tree.""" + self.manager_open = False + self.file_manager.close() + + def load_selected_Image(self, curerentAddr): + """This method load the selected image on screen""" + top_box_obj = self.root.ids.content_drawer.ids.top_box.children[0] + # spinner_img_obj = self.root.ids.content_drawer.ids.btn.children[1] + # spinner_img_obj.source = top_box_obj.source ='./images/default_identicon/{0}.png'.format(curerentAddr) + top_box_obj.source = state.imageDir + '/default_identicon/{0}.png'.format(curerentAddr) + self.root.ids.content_drawer.ids.reset_image.opacity = 1 + self.root.ids.content_drawer.ids.reset_image.disabled = False + top_box_obj.reload() + # spinner_img_obj.reload() + + def rest_default_avatar_img(self): + """set default avatar generated image""" + self.set_identicon(state.association) + img_path = state.imageDir + '/default_identicon/{}.png'.format(state.association) + try: + if os.path.exists(img_path): + os.remove(img_path) + self.root.ids.content_drawer.ids.reset_image.opacity = 0 + self.root.ids.content_drawer.ids.reset_image.disabled = True + except Exception as e: + pass + toast('Avatar reset') + + def copy_composer_text(self, text): # pylint: disable=no-self-use + """Copy the data from mail detail page""" + Clipboard.copy(text) + toast('Copied') + + def reset_login_screen(self): + """This method is used for clearing random screen""" + if self.root.ids.sc7.ids.add_random_bx.children: + self.root.ids.sc7.ids.add_random_bx.clear_widgets() + + def open_payment_layout(self, sku): + """It basically open up a payment layout for kivy Ui""" + pml = PaymentMethodLayout() + self.product_id = sku + self.custom_sheet = MDCustomBottomSheet(screen=pml) + self.custom_sheet.open() + + def initiate_purchase(self, method_name): + """initiate_purchase module""" + print("Purchasing {} through {}".format(self.product_id, method_name)) + + def _after_scan(self, text): + if platform == 'android': + text = cast(CharSequence, String(text)) + show_toast(text, Toast.LENGTH_SHORT) + elif self.root.ids.sc23.previous_open_screen == 'composer': + self.root.ids.sc3.children[1].ids.txt_input.text = text + self.root.ids.scr_mngr.current = 'create' + elif self.root.ids.sc23.previous_open_screen: + back_screen = self.root.ids.sc23.previous_open_screen + self.root.ids.scr_mngr.current = 'inbox' if back_screen == 'scanscreen' else back_screen + add_obj = self.root.ids.sc23.pop_up_instance + add_obj.content_cls.ids.address.text = text + Clock.schedule_once(partial(self.open_popup, add_obj), .5) + + def open_popup(self, instance, dt): + """This method is used for opening popup""" + instance.open() + + +class GrashofPopup(BoxLayout): + """GrashofPopup class for kivy Ui""" + + valid = False + + def __init__(self, **kwargs): + """Grash of pop screen settings""" + super(GrashofPopup, self).__init__(**kwargs) + + def checkAddress_valid(self, instance): + """Checking address is valid or not""" + my_addresses = ( + state.kivyapp.root.ids.content_drawer.ids.btn.values) + add_book = [addr[1] for addr in kivy_helper_search.search_sql( + folder="addressbook")] + entered_text = str(instance.text).strip() + if entered_text in add_book: + text = 'Address is already in the addressbook.' + elif entered_text in my_addresses: + text = 'You can not save your own address.' + elif entered_text: + text = self.addressChanged(entered_text) + + if entered_text in my_addresses or entered_text in add_book: + self.ids.address.error = True + self.ids.address.helper_text = text + elif entered_text and self.valid: + self.ids.address.error = False + elif entered_text: + self.ids.address.error = True + self.ids.address.helper_text = text + else: + self.ids.address.error = False + self.ids.address.helper_text = 'This field is required' + + def checkLabel_valid(self, instance): + """Checking address label is unique or not""" + entered_label = instance.text.strip() + addr_labels = [labels[0] for labels in kivy_helper_search.search_sql( + folder="addressbook")] + if entered_label in addr_labels: + self.ids.label.error = True + self.ids.label.helper_text = 'label name already exists.' + elif entered_label: + self.ids.label.error = False + else: + self.ids.label.error = False + self.ids.label.helper_text = 'This field is required' + + def _onSuccess(self, addressVersion, streamNumber, ripe): + pass + + def addressChanged(self, addr): + """Address validation callback, performs validation and gives feedback""" + status, addressVersion, streamNumber, ripe = decodeAddress( + str(addr)) + self.valid = status == 'success' + if self.valid: + text = "Address is valid." + self._onSuccess(addressVersion, streamNumber, ripe) + elif status == 'missingbm': + text = "The address should start with ''BM-''" + elif status == 'checksumfailed': + text = ( + "The address is not typed or copied correctly" + # " (the checksum failed)." + ) + elif status == 'versiontoohigh': + text = ( + "The version number of this address is higher than this" + " software can support. Please upgrade Bitmessage.") + elif status == 'invalidcharacters': + text = "The address contains invalid characters." + elif status == 'ripetooshort': + text = "Some data encoded in the address is too short." + elif status == 'ripetoolong': + text = "Some data encoded in the address is too long." + elif status == 'varintmalformed': + text = "Some data encoded in the address is malformed." + return text + + +class InfoLayout(BoxLayout, RectangularElevationBehavior): + """InfoLayout class for kivy Ui""" + + +class AvatarSampleWidget(ILeftBody, Image): + """AvatarSampleWidget class for kivy Ui""" + + +class IconLeftSampleWidget(ILeftBodyTouch, MDIconButton): + """IconLeftSampleWidget class for kivy Ui""" + + +class IconRightSampleWidget(IRightBodyTouch, MDIconButton): + """IconRightSampleWidget class for kivy Ui""" + + +class TimeTagRightSampleWidget(IRightBodyTouch, MDLabel): + """TimeTagRightSampleWidget class for Ui""" + + +class ToggleBtn(IRightBodyTouch, MDSwitch): + """ToggleBtn class for kivy Ui""" + + +class CheckboxLeftSampleWidget(ILeftBodyTouch, MDCheckbox): + """CheckboxLeftSampleWidget class for kivy Ui""" + + +class MailDetail(Screen): # pylint: disable=too-many-instance-attributes + """MailDetail Screen class for kivy Ui""" + + to_addr = StringProperty() + from_addr = StringProperty() + subject = StringProperty() + message = StringProperty() + status = StringProperty() + page_type = StringProperty() + time_tag = StringProperty() + avatarImg = StringProperty() + + def __init__(self, *args, **kwargs): + """Mail Details method""" + super(MailDetail, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method MailDetail mails""" + self.page_type = state.detailPageType if state.detailPageType else '' + if state.detailPageType == 'sent' or state.detailPageType == 'draft': + data = sqlQuery( + "select toaddress, fromaddress, subject, message, status," + " ackdata, senttime from sent where ackdata = ?;", state.mail_id) + state.status = self + state.ackdata = data[0][5] + self.assign_mail_details(data) + state.kivyapp.set_mail_detail_header() + elif state.detailPageType == 'inbox': + data = sqlQuery( + "select toaddress, fromaddress, subject, message, received from inbox" + " where msgid = ?;", state.mail_id) + self.assign_mail_details(data) + state.kivyapp.set_mail_detail_header() + + def assign_mail_details(self, data): + """Assigning mail details""" + subject = data[0][2].decode() if isinstance(data[0][2], bytes) else data[0][2] + body = data[0][3].decode() if isinstance(data[0][2], bytes) else data[0][3] + self.to_addr = data[0][0] if len(data[0][0]) > 4 else ' ' + self.from_addr = data[0][1] + + self.subject = subject.capitalize( + ) if subject.capitalize() else '(no subject)' + self.message = body + if len(data[0]) == 7: + self.status = data[0][4] + self.time_tag = ShowTimeHistoy(data[0][4]) if state.detailPageType == 'inbox' else ShowTimeHistoy(data[0][6]) + self.avatarImg = state.imageDir + '/avatar.png' if state.detailPageType == 'draft' else ( + state.imageDir + '/text_images/{0}.png'.format(avatarImageFirstLetter(self.subject.strip()))) + self.timeinseconds = data[0][4] if state.detailPageType == 'inbox' else data[0][6] + + def delete_mail(self): + """Method for mail delete""" + msg_count_objs = state.kivyapp.root.ids.content_drawer.ids + state.searcing_text = '' + self.children[0].children[0].active = True + if state.detailPageType == 'sent': + state.kivyapp.root.ids.sc4.ids.sent_search.ids.search_field.text = '' + sqlExecute( + "UPDATE sent SET folder = 'trash' WHERE" + " ackdata = ?;", state.mail_id) + msg_count_objs.send_cnt.ids.badge_txt.text = str(int(state.sent_count) - 1) + state.sent_count = str(int(state.sent_count) - 1) + self.parent.screens[3].ids.ml.clear_widgets() + self.parent.screens[3].loadSent(state.association) + elif state.detailPageType == 'inbox': + state.kivyapp.root.ids.sc1.ids.inbox_search.ids.search_field.text = '' + sqlExecute( + "UPDATE inbox SET folder = 'trash' WHERE" + " msgid = ?;", state.mail_id) + msg_count_objs.inbox_cnt.ids.badge_txt.text = str( + int(state.inbox_count) - 1) + state.inbox_count = str(int(state.inbox_count) - 1) + self.parent.screens[0].ids.ml.clear_widgets() + self.parent.screens[0].loadMessagelist(state.association) + + elif state.detailPageType == 'draft': + sqlExecute("DELETE FROM sent WHERE ackdata = ?;", state.mail_id) + msg_count_objs.draft_cnt.ids.badge_txt.text = str( + int(state.draft_count) - 1) + state.draft_count = str(int(state.draft_count) - 1) + self.parent.screens[15].clear_widgets() + self.parent.screens[15].add_widget(Draft()) + + if state.detailPageType != 'draft': + msg_count_objs.trash_cnt.ids.badge_txt.text = str( + int(state.trash_count) + 1) + msg_count_objs.allmail_cnt.ids.badge_txt.text = str( + int(state.all_count) - 1) + state.trash_count = str(int(state.trash_count) + 1) + state.all_count = str(int(state.all_count) - 1) if int(state.all_count) else '0' + self.parent.screens[4].clear_widgets() + self.parent.screens[4].add_widget(Trash()) + self.parent.screens[16].clear_widgets() + self.parent.screens[16].add_widget(Allmails()) + Clock.schedule_once(self.callback_for_delete, 4) + + def callback_for_delete(self, dt=0): + """Delete method from allmails""" + if state.detailPageType: + self.children[0].children[0].active = False + state.kivyapp.set_common_header() + self.parent.current = 'allmails' \ + if state.is_allmail else state.detailPageType + state.detailPageType = '' + toast('Deleted') + + def inbox_reply(self): + """Reply inbox messages""" + state.in_composer = True + data = sqlQuery( + "select toaddress, fromaddress, subject, message, received from inbox where" + " msgid = ?;", state.mail_id) + composer_obj = self.parent.screens[2].children[1].ids + composer_obj.ti.text = data[0][0] + composer_obj.btn.text = data[0][0] + composer_obj.txt_input.text = data[0][1] + split_subject = data[0][2].split('Re:', 1) + composer_obj.subject.text = 'Re: ' + (split_subject[1] if len(split_subject) > 1 else split_subject[0]) + time_obj = datetime.fromtimestamp(int(data[0][4])) + time_tag = time_obj.strftime("%d %b %Y, %I:%M %p") + # sender_name = BMConfigParser().get(data[0][1], 'label') + sender_name = data[0][1] + composer_obj.body.text = ( + '\n\n --------------On ' + time_tag + ', ' + sender_name + ' wrote:--------------\n' + data[0][3]) + composer_obj.body.focus = True + composer_obj.body.cursor = (0, 0) + state.kivyapp.root.ids.sc3.children[1].ids.rv.data = '' + self.parent.current = 'create' + state.kivyapp.set_navbar_for_composer() + + def write_msg(self, navApp): + """Write on draft mail""" + state.send_draft_mail = state.mail_id + data = sqlQuery( + "select toaddress, fromaddress, subject, message from sent where" + " ackdata = ?;", state.mail_id) + composer_ids = ( + self.parent.parent.ids.sc3.children[1].ids) + composer_ids.ti.text = data[0][1] + composer_ids.btn.text = data[0][1] + composer_ids.txt_input.text = data[0][0] + composer_ids.subject.text = data[0][2] if data[0][2] != '(no subject)' else '' + composer_ids.body.text = data[0][3] + self.parent.current = 'create' + navApp.set_navbar_for_composer() + + def detailedPopup(self): + """Detailed popup""" + obj = SenderDetailPopup() + obj.open() + arg = (self.to_addr, self.from_addr, self.timeinseconds) + obj.assignDetail(*arg) + + @staticmethod + def callback_for_menu_items(text_item, *arg): + """Callback of alert box""" + toast(text_item) + + +class MyaddDetailPopup(BoxLayout): + """MyaddDetailPopup class for kivy Ui""" + + address_label = StringProperty() + address = StringProperty() + + def __init__(self, **kwargs): + """My Address Details screen setting""" + super(MyaddDetailPopup, self).__init__(**kwargs) + + def send_message_from(self): + """Method used to fill from address of composer autofield""" + state.kivyapp.set_navbar_for_composer() + window_obj = state.kivyapp.root.ids + window_obj.sc3.children[1].ids.ti.text = self.address + window_obj.sc3.children[1].ids.btn.text = self.address + window_obj.sc3.children[1].ids.txt_input.text = '' + window_obj.sc3.children[1].ids.subject.text = '' + window_obj.sc3.children[1].ids.body.text = '' + window_obj.scr_mngr.current = 'create' + self.parent.parent.parent.dismiss() + + # @staticmethod + def close_pop(self): + """Pop is Canceled""" + self.parent.parent.parent.dismiss() + toast('Canceled') + + +class AddbookDetailPopup(BoxLayout): + """AddbookDetailPopup class for kivy Ui""" + + address_label = StringProperty() + address = StringProperty() + + def __init__(self, **kwargs): + """Set screen of address detail page""" + super(AddbookDetailPopup, self).__init__(**kwargs) + + def checkLabel_valid(self, instance): + """Checking address label is unique of not""" + entered_label = str(instance.text.strip()) + address_list = kivy_helper_search.search_sql(folder="addressbook") + addr_labels = [labels[0] for labels in address_list] + add_dict = dict(address_list) + if self.address and entered_label in addr_labels \ + and self.address != add_dict[entered_label]: + self.ids.add_label.error = True + self.ids.add_label.helper_text = 'label name already exists.' + elif entered_label: + self.ids.add_label.error = False + else: + self.ids.add_label.error = False + self.ids.add_label.helper_text = 'This field is required' + + +class ShowQRCode(Screen): + """ShowQRCode Screen class for kivy Ui""" + address = StringProperty() + + def qrdisplay(self, instasnce, address): + """Method used for showing QR Code""" + self.ids.qr.clear_widgets() + state.kivyapp.set_toolbar_for_QrCode() + try: + from kivy.garden.qrcode import QRCodeWidget + except Exception: + from kivy_garden.qrcode import QRCodeWidget + self.address = address + self.ids.qr.add_widget(QRCodeWidget(data=address)) + self.ids.qr.children[0].show_border = False + instasnce.parent.parent.parent.dismiss() + toast('Show QR code') + + +class Draft(Screen): + """Draft screen class for kivy Ui""" + + data = ListProperty() + account = StringProperty() + queryreturn = ListProperty() + has_refreshed = True + + def __init__(self, *args, **kwargs): + """Method used for storing draft messages""" + super(Draft, self).__init__(*args, **kwargs) + if state.association == '': + if BMConfigParser().addresses(): + state.association = BMConfigParser().addresses()[0] + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method draft accounts""" + self.sentaccounts() + print(dt) + + def sentaccounts(self): + """Load draft accounts""" + self.account = state.association + self.loadDraft() + + def loadDraft(self, where="", what=""): + """Load draft list for Draft messages""" + xAddress = 'fromaddress' + self.ids.tag_label.text = '' + self.draftDataQuery(xAddress, where, what) + # if state.msg_counter_objs: + # state.msg_counter_objs.draft_cnt.children[0].children[0].text = showLimitedCnt(len(self.queryreturn)) + if self.queryreturn: + self.ids.tag_label.text = 'Draft' + self.set_draftCnt(state.draft_count) + self.set_mdList() + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + self.set_draftCnt('0') + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="yet no message for this account!!!!!!!!!!!!!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def draftDataQuery(self, xAddress, where, what, start_indx=0, end_indx=20): + """This methosd is for retrieving draft messages""" + self.queryreturn = kivy_helper_search.search_sql( + xAddress, self.account, "draft", where, what, + False, start_indx, end_indx) + + def set_draftCnt(self, Count): # pylint: disable=no-self-use + """This method set the count of draft mails""" + draftCnt_obj = state.kivyapp.root.ids.content_drawer.ids.draft_cnt + draftCnt_obj.ids.badge_txt.text = showLimitedCnt(int(Count)) + + def set_mdList(self): + """This method is used to create mdlist""" + data = [] + total_draft_msg = len(self.ids.ml.children) + for mail in self.queryreturn: + third_text = mail[3].replace('\n', ' ') + data.append({ + 'text': mail[1].strip(), + 'secondary_text': mail[2][:10] + '...........' if len( + mail[2]) > 10 else mail[2] + '\n' + " " + ( + third_text[:25] + '...!') if len( + third_text) > 25 else third_text, + 'ackdata': mail[5], 'senttime': mail[6]}) + for item in data: + meny = TwoLineAvatarIconListItem( + text='Draft', secondary_text=item['text'], + theme_text_color='Custom', + text_color=ThemeClsColor) + meny._txt_right_pad = dp(70) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/avatar.png')) + meny.bind(on_press=partial( + self.draft_detail, item['ackdata'])) + meny.add_widget(AddTimeWidget(item['senttime'])) + carousel = Carousel(direction='right') + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text='Delete') + del_btn.background_normal = '' + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial(self.delete_draft, item['ackdata'])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + carousel.index = 1 + self.ids.ml.add_widget(carousel) + updated_msg = len(self.ids.ml.children) + self.has_refreshed = True if total_draft_msg != updated_msg else False + + def check_scroll_y(self, instance, somethingelse): + """Load data on scroll""" + if self.ids.scroll_y.scroll_y <= -0.0 and self.has_refreshed: + self.ids.scroll_y.scroll_y = 0.06 + total_draft_msg = len(self.ids.ml.children) + self.update_draft_screen_on_scroll(total_draft_msg) + + def update_draft_screen_on_scroll(self, total_draft_msg, where='', what=''): + """Load more data on scroll down""" + self.draftDataQuery('fromaddress', where, what, total_draft_msg, 5) + self.set_mdList() + + def draft_detail(self, ackdata, *args): + """Show draft Details""" + state.detailPageType = 'draft' + state.mail_id = ackdata + if self.manager: + src_mng_obj = self.manager + else: + src_mng_obj = self.parent.parent + src_mng_obj.screens[13].clear_widgets() + src_mng_obj.screens[13].add_widget(MailDetail()) + src_mng_obj.current = 'mailDetail' + + def delete_draft(self, data_index, instance, *args): + """Delete draft message permanently""" + sqlExecute("DELETE FROM sent WHERE ackdata = ?;", data_index) + if int(state.draft_count) > 0: + state.draft_count = str(int(state.draft_count) - 1) + self.set_draftCnt(state.draft_count) + if int(state.draft_count) <= 0: + # self.ids.identi_tag.children[0].text = '' + self.ids.tag_label.text = '' + self.ids.ml.remove_widget(instance.parent.parent) + toast('Deleted') + + @staticmethod + def draft_msg(src_object): + """Save draft mails""" + composer_object = state.kivyapp.root.ids.sc3.children[1].ids + fromAddress = str(composer_object.ti.text) + toAddress = str(composer_object.txt_input.text) + subject = str(composer_object.subject.text) + message = str(composer_object.body.text) + encoding = 3 + sendMessageToPeople = True + if sendMessageToPeople: + streamNumber, ripe = decodeAddress(toAddress)[2:] + from addresses import addBMIfNotPresent + toAddress = addBMIfNotPresent(toAddress) + stealthLevel = BMConfigParser().safeGetInt( + 'bitmessagesettings', 'ackstealthlevel') + from helper_ackPayload import genAckPayload + ackdata = genAckPayload(streamNumber, stealthLevel) + sqlExecute( + '''INSERT INTO sent VALUES + (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''', + '', + toAddress, + ripe, + fromAddress, + subject, + message, + ackdata, + int(time.time()), + int(time.time()), + 0, + 'msgqueued', + 0, + 'draft', + encoding, + BMConfigParser().safeGetInt('bitmessagesettings', 'ttl')) + state.msg_counter_objs = src_object.children[2].children[0].ids + state.draft_count = str(int(state.draft_count) + 1) \ + if state.association == fromAddress else state.draft_count + src_object.ids.sc16.clear_widgets() + src_object.ids.sc16.add_widget(Draft()) + toast('Save draft') + return + + +class CustomSpinner(Spinner): + """CustomSpinner class for kivy Ui""" + + def __init__(self, *args, **kwargs): + """Method used for setting size of spinner""" + super(CustomSpinner, self).__init__(*args, **kwargs) + self.dropdown_cls.max_height = Window.size[1] / 3 + self.values = list(addr for addr in BMConfigParser().addresses() + if BMConfigParser().get(str(addr), 'enabled') == 'true') + + +class Allmails(Screen): + """Allmails Screen for kivy Ui""" + + data = ListProperty() + has_refreshed = True + all_mails = ListProperty() + account = StringProperty() + + def __init__(self, *args, **kwargs): + """Method Parsing the address""" + super(Allmails, self).__init__(*args, **kwargs) + if state.association == '': + if BMConfigParser().addresses(): + state.association = BMConfigParser().addresses()[0] + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method all mails""" + self.loadMessagelist() + print(dt) + + def loadMessagelist(self): + """Load Inbox, Sent anf Draft list of messages""" + self.account = state.association + self.ids.tag_label.text = '' + self.allMessageQuery(0, 20) + if self.all_mails: + self.ids.tag_label.text = 'All Mails' + state.kivyapp.get_inbox_count() + state.kivyapp.get_sent_count() + state.all_count = str( + int(state.sent_count) + int(state.inbox_count)) + self.set_AllmailCnt(state.all_count) + self.set_mdlist() + # self.ids.refresh_layout.bind(scroll_y=self.check_scroll_y) + self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) + else: + self.set_AllmailCnt('0') + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="yet no message for this account!!!!!!!!!!!!!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def allMessageQuery(self, start_indx, end_indx): + """Retrieving data from inbox or sent both tables""" + self.all_mails = sqlQuery( + "SELECT toaddress, fromaddress, subject, message, folder, ackdata" + " As id, DATE(senttime) As actionTime, senttime as msgtime FROM sent WHERE" + " folder = 'sent' and fromaddress = '{0}'" + " UNION SELECT toaddress, fromaddress, subject, message, folder," + " msgid As id, DATE(received) As actionTime, received as msgtime FROM inbox" + " WHERE folder = 'inbox' and toaddress = '{0}'" + " ORDER BY actionTime DESC limit {1}, {2}".format( + self.account, start_indx, end_indx)) + + def set_AllmailCnt(self, Count): # pylint: disable=no-self-use + """This method is used to set allmails message count""" + allmailCnt_obj = state.kivyapp.root.ids.content_drawer.ids.allmail_cnt + allmailCnt_obj.ids.badge_txt.text = showLimitedCnt(int(Count)) + + def set_mdlist(self): + """This method is used to create mdList for allmaills""" + data_exist = len(self.ids.ml.children) + for item in self.all_mails: + body = item[3].decode() if isinstance(item[3], bytes) else item[3] + subject = item[2].decode() if isinstance(item[2], bytes) else item[2] + meny = TwoLineAvatarIconListItem( + text=item[1], + secondary_text=(subject[:50] + '........' if len( + subject) >= 50 else ( + subject + ',' + body)[0:50] + '........').replace('\t', '').replace(' ', ''), + theme_text_color='Custom', + text_color=ThemeClsColor) + meny._txt_right_pad = dp(70) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(body.strip())))) + meny.bind(on_press=partial( + self.mail_detail, item[5], item[4])) + meny.add_widget(AddTimeWidget(item[7])) + meny.add_widget(chipTag(item[4])) + carousel = Carousel(direction='right') + carousel.height = meny.height + carousel.size_hint_y = None + carousel.ignore_perpendicular_swipes = True + carousel.data_index = 0 + carousel.min_move = 0.2 + del_btn = Button(text='Delete') + del_btn.background_normal = '' + del_btn.background_color = (1, 0, 0, 1) + del_btn.bind(on_press=partial( + self.swipe_delete, item[5], item[4])) + carousel.add_widget(del_btn) + carousel.add_widget(meny) + carousel.index = 1 + self.ids.ml.add_widget(carousel) + updated_data = len(self.ids.ml.children) + self.has_refreshed = True if data_exist != updated_data else False + + def check_scroll_y(self, instance, somethingelse): + """Scroll fixed length""" + if self.ids.scroll_y.scroll_y <= -0.00 and self.has_refreshed: + self.ids.scroll_y.scroll_y = .06 + load_more = len(self.ids.ml.children) + self.updating_allmail(load_more) + + def updating_allmail(self, load_more): + """This method is used to update the all mail + listing value on the scroll of screen""" + self.allMessageQuery(load_more, 5) + self.set_mdlist() + + def mail_detail(self, unique_id, folder, *args): + """Load sent and inbox mail details""" + state.detailPageType = folder + state.is_allmail = True + state.mail_id = unique_id + if self.manager: + src_mng_obj = self.manager + else: + src_mng_obj = self.parent.parent + src_mng_obj.screens[13].clear_widgets() + src_mng_obj.screens[13].add_widget(MailDetail()) + src_mng_obj.current = 'mailDetail' + + def swipe_delete(self, unique_id, folder, instance, *args): + """Delete inbox mail from all mail listing""" + if folder == 'inbox': + sqlExecute( + "UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", + unique_id) + else: + sqlExecute( + "UPDATE sent SET folder = 'trash' WHERE ackdata = ?;", + unique_id) + self.ids.ml.remove_widget(instance.parent.parent) + try: + msg_count_objs = self.parent.parent.ids.content_drawer.ids + nav_lay_obj = self.parent.parent.ids + except Exception: + msg_count_objs = self.parent.parent.parent.ids.content_drawer.ids + nav_lay_obj = self.parent.parent.parent.ids + if folder == 'inbox': + msg_count_objs.inbox_cnt.ids.badge_txt.text = showLimitedCnt(int(state.inbox_count) - 1) + state.inbox_count = str(int(state.inbox_count) - 1) + nav_lay_obj.sc1.ids.ml.clear_widgets() + nav_lay_obj.sc1.loadMessagelist(state.association) + else: + msg_count_objs.send_cnt.ids.badge_txt.text = showLimitedCnt(int(state.sent_count) - 1) + state.sent_count = str(int(state.sent_count) - 1) + nav_lay_obj.sc4.ids.ml.clear_widgets() + nav_lay_obj.sc4.loadSent(state.association) + if folder != 'inbox': + msg_count_objs.allmail_cnt.ids.badge_txt.text = showLimitedCnt(int(state.all_count) - 1) + state.all_count = str(int(state.all_count) - 1) + msg_count_objs.trash_cnt.ids.badge_txt.text = showLimitedCnt(int(state.trash_count) + 1) + state.trash_count = str(int(state.trash_count) + 1) + if int(state.all_count) <= 0: + self.ids.tag_label.text = '' + nav_lay_obj.sc5.clear_widgets() + nav_lay_obj.sc5.add_widget(Trash()) + nav_lay_obj.sc17.remove_widget(instance.parent.parent) + toast('Deleted') + + def refresh_callback(self, *args): + """Method updates the state of application, + While the spinner remains on the screen""" + def refresh_callback(interval): + """Load the allmails screen data""" + self.ids.ml.clear_widgets() + self.remove_widget(self.children[1]) + try: + screens_obj = self.parent.screens[16] + except Exception: + screens_obj = self.parent.parent.screens[16] + screens_obj.add_widget(Allmails()) + self.ids.refresh_layout.refresh_done() + self.tick = 0 + Clock.schedule_once(refresh_callback, 1) + + +def avatarImageFirstLetter(letter_string): + """This function is used to the first letter for the avatar image""" + try: + if letter_string[0].upper() >= 'A' and letter_string[0].upper() <= 'Z': + img_latter = letter_string[0].upper() + elif int(letter_string[0]) >= 0 and int(letter_string[0]) <= 9: + img_latter = letter_string[0] + else: + img_latter = '!' + except ValueError: + img_latter = '!' + return img_latter if img_latter else '!' + + +class Starred(Screen): + """Starred Screen class for kivy Ui""" + + +class Archieve(Screen): + """Archieve Screen class for kivy Ui""" + + +class Spam(Screen): + """Spam Screen class for kivy Ui""" + + +class LoadingPopup(Popup): + """LoadingPopup class for kivy Ui""" + + def __init__(self, **kwargs): + super(LoadingPopup, self).__init__(**kwargs) + # call dismiss_popup in 2 seconds + Clock.schedule_once(self.dismiss_popup, 0.5) + + def dismiss_popup(self, dt): + """Dismiss popups""" + self.dismiss() + + +class AddressDropdown(OneLineIconListItem): + """AddressDropdown class for kivy Ui""" + + +class BadgeText(IRightBodyTouch, MDLabel): + """BadgeText class for kivy Ui""" + + +class NavigationItem(OneLineAvatarIconListItem): + """NavigationItem class for kivy Ui""" + badge_text = StringProperty() + icon = StringProperty() + active = BooleanProperty(False) + + def currentlyActive(self): + """Currenly active""" + for nav_obj in self.parent.children: + nav_obj.active = False + self.active = True + + +class NavigationDrawerDivider(OneLineListItem): + """ + A small full-width divider that can be placed + in the :class:`MDNavigationDrawer` + """ + + disabled = True + divider = None + _txt_top_pad = NumericProperty(dp(8)) + _txt_bot_pad = NumericProperty(dp(8)) + + def __init__(self, **kwargs): + # pylint: disable=bad-super-call + super(OneLineListItem, self).__init__(**kwargs) + self.height = dp(16) + + +class NavigationDrawerSubheader(OneLineListItem): + """ + A subheader for separating content in :class:`MDNavigationDrawer` + + Works well alongside :class:`NavigationDrawerDivider` + """ + + disabled = True + divider = None + theme_text_color = 'Secondary' + + +class AppClosingPopup(Popup): + """AppClosingPopup class for kivy Ui""" + + def __init__(self, **kwargs): + super(AppClosingPopup, self).__init__(**kwargs) + + def closingAction(self, text): + """Action on closing window""" + if text == 'Yes': + print("*******************EXITING FROM APPLICATION*******************") + import shutdown + shutdown.doCleanShutdown() + else: + self.dismiss() + toast(text) + + +class SenderDetailPopup(Popup): + """SenderDetailPopup class for kivy Ui""" + + to_addr = StringProperty() + from_addr = StringProperty() + time_tag = StringProperty() + + def __init__(self, **kwargs): + """this metthod initialized the send message detial popup""" + super(SenderDetailPopup, self).__init__(**kwargs) + + def assignDetail(self, to_addr, from_addr, timeinseconds): + """Detailes assigned""" + self.to_addr = to_addr + self.from_addr = from_addr + time_obj = datetime.fromtimestamp(int(timeinseconds)) + self.time_tag = time_obj.strftime("%d %b %Y, %I:%M %p") + device_type = 2 if platform == 'android' else 1.5 + pop_height = 1.2 * device_type * (self.ids.sd_label.height + self.ids.dismiss_btn.height) + if len(to_addr) > 3: + self.height = 0 + self.height = pop_height + self.ids.to_addId.size_hint_y = None + self.ids.to_addId.height = 50 + self.ids.to_addtitle.add_widget(ToAddressTitle()) + frmaddbox = ToAddrBoxlayout() + frmaddbox.set_toAddress(to_addr) + self.ids.to_addId.add_widget(frmaddbox) + else: + self.ids.space_1.height = dp(0) + self.ids.space_2.height = dp(0) + self.ids.myadd_popup_box.spacing = dp(8 if platform == 'android' else 3) + self.height = 0 + self.height = pop_height / 1.2 + + +class OneLineListTitle(OneLineListItem): + """OneLineListTitle class for kivy Ui""" + __events__ = ('on_long_press', ) + long_press_time = NumericProperty(1) + + def on_state(self, instance, value): + """On state""" + if value == 'down': + lpt = self.long_press_time + self._clockev = Clock.schedule_once(self._do_long_press, lpt) + else: + self._clockev.cancel() + + def _do_long_press(self, dt): + """Do long press""" + self.dispatch('on_long_press') + + def on_long_press(self, *largs): + """On long press""" + self.copymessageTitle(self.text) + + def copymessageTitle(self, title_text): + """this method is for displaying dialog box""" + self.title_text = title_text + width = .8 if platform == 'android' else .55 + self.dialog_box = MDDialog( + text=title_text, + size_hint=(width, .25), + buttons=[ + MDFlatButton( + text="Copy", on_release=self.callback_for_copy_title + ), + MDFlatButton( + text="Cancel", on_release=self.callback_for_copy_title, + ), + ],) + self.dialog_box.open() + + def callback_for_copy_title(self, instance): + """Callback of alert box""" + if instance.text == 'Copy': + Clipboard.copy(self.title_text) + self.dialog_box.dismiss() + toast(instance.text) + + +class ToAddrBoxlayout(BoxLayout): + """ToAddrBoxlayout class for kivy Ui""" + to_addr = StringProperty() + + def set_toAddress(self, to_addr): + """This method is use to set to address""" + self.to_addr = to_addr + + +class ToAddressTitle(BoxLayout): + """ToAddressTitle class for BoxLayout behaviour""" + + +class RandomBoxlayout(BoxLayout): + """RandomBoxlayout class for BoxLayout behaviour""" + + +def esc_markup(msg): + """this method is for replacing some property""" + return (msg.replace('&', '&') + .replace('[', '&bl;') + .replace(']', '&br;')) + + +class ChatRoom(Screen): + """ChatRoom Screen class for kivy Ui""" + def send_msg(self): + """This method is for sending message""" + msg = self.ids.message.text + if msg: + self.ids.chat_logs.text += ( + '[b][color=2980b9]{}:[/color][/b] {}\n' + .format('Me', esc_markup(msg))) + # obj = MDChip(label=msg, radius=7) + # obj.icon = '' + # self.ids.ml.add_widget(obj) + self.ids.message.text = '' + + +class ChatList(Screen): + """ChatList Screen class for kivy Ui""" + queryreturn = ListProperty() + has_refreshed = True + + def __init__(self, *args, **kwargs): + """Getting ChatList Details""" + super(ChatList, self).__init__(*args, **kwargs) + Clock.schedule_once(self.init_ui, 0) + + def init_ui(self, dt=0): + """Clock Schdule for method ChatList""" + self.loadAddresslist(None, 'All', '') + print(dt) + + def loadAddresslist(self, account="", where="", what=""): + """Clock Schdule for method ChatList""" + self.queryreturn = kivy_helper_search.search_sql( + '', account, "addressbook", where, what, False) + self.queryreturn = [obj for obj in reversed(self.queryreturn)] + if self.queryreturn: + self.set_mdList() + else: + content = MDLabel( + font_style='Caption', + theme_text_color='Primary', + text="No contact found!", + halign='center', + size_hint_y=None, + valign='top') + self.ids.ml.add_widget(content) + + def set_mdList(self): + """Creating the mdList""" + for item in self.queryreturn: + meny = TwoLineAvatarIconListItem( + text=item[0], secondary_text=item[1], theme_text_color='Custom', + text_color=ThemeClsColor) + meny.add_widget(AvatarSampleWidget( + source=state.imageDir + '/text_images/{}.png'.format( + avatarImageFirstLetter(item[0].strip())))) + meny.bind(on_release=partial( + self.redirect_to_chat, item[0], item[1])) + self.ids.ml.add_widget(meny) + + def redirect_to_chat(self, label, addr, *args): + """This method is redirecting on chatroom""" + self.manager.transition = RiseInTransition() + state.kivyapp.set_toolbar_for_QrCode() + label = label[:14].capitalize() + '...' if len(label) > 15 else label.capitalize() + addrs = ' (' + addr + ')' + self.manager.parent.ids.toolbar.title = label + addrs + self.manager.parent.ids.sc21.ids.chat_logs.text = '' + self.manager.current = 'chroom' diff --git a/src/bitmessagekivy/tests/__init__.py b/src/bitmessagekivy/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/bitmessagekivy/tests/common.py b/src/bitmessagekivy/tests/common.py new file mode 100644 index 00000000..14e59609 --- /dev/null +++ b/src/bitmessagekivy/tests/common.py @@ -0,0 +1,17 @@ +import unittest + + +def make_ordered_test(): + order = {} + + def ordered(f): + order[f.__name__] = len(order) + return f + + def compare(a, b): + return [1, -1][order[a] < order[b]] + + return ordered, compare + +ordered, compare = make_ordered_test() +unittest.defaultTestLoader.sortTestMethodsUsing = compare \ No newline at end of file diff --git a/src/bitmessagekivy/tests/telenium_process.py b/src/bitmessagekivy/tests/telenium_process.py new file mode 100644 index 00000000..eafe0ff3 --- /dev/null +++ b/src/bitmessagekivy/tests/telenium_process.py @@ -0,0 +1,63 @@ +import os +import shutil +import tempfile + +from telenium.tests import TeleniumTestCase +from threads import addressGenerator, sqlThread + + +_files = ( + 'keys.dat', 'debug.log', 'messages.dat', 'knownnodes.dat', + '.api_started', 'unittest.lock' +) + +tmp_db_file = ( + 'keys.dat', 'messages.dat' +) + + +def cleanup(home=None, files=_files): + """Cleanup application files""" + if not home: + home = tempfile.gettempdir() + for pfile in files: + try: + os.remove(os.path.join(home, pfile)) + except OSError: + pass + + +def set_temp_data(): + """Set temp data in tmp directory""" + for file in tmp_db_file: + old_source_file = os.path.join( + os.path.abspath(os.path.dirname(__file__)), 'sampleData', file) + new_destination_file = os.path.join(os.environ['BITMESSAGE_HOME'], file) + shutil.copyfile(old_source_file, new_destination_file) + + +class TeleniumTestProcess(TeleniumTestCase): + """Setting Screen Functionality Testing""" + cmd_entrypoint = [os.path.join(os.path.abspath(os.getcwd()), 'main_test.py')] + + @classmethod + def setUpClass(cls): + """Setupclass is for setting temp environment""" + os.environ["BITMESSAGE_HOME"] = tempfile.gettempdir() + set_temp_data() + super(TeleniumTestProcess, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + """Ensures that pybitmessage stopped and removes files""" + cleanup() + cls.cli.app_quit() + cls.process.kill() + + @classmethod + def setUp(self): + pass + + @classmethod + def tearDown(self): + pass diff --git a/src/bitmessagekivy/tests/test_addressbook.py b/src/bitmessagekivy/tests/test_addressbook.py new file mode 100644 index 00000000..d6d3922b --- /dev/null +++ b/src/bitmessagekivy/tests/test_addressbook.py @@ -0,0 +1,105 @@ +import time +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess +from bmconfigparser import BMConfigParser +from .common import ordered + +data = BMConfigParser().addresses() + + +class AddressBook(TeleniumTestProcess): + """AddressBook Screen Functionality Testing""" + + @ordered + def test_save_address(self): + """Save Address On Address Book Screen/Window""" + print("=====================Test -Save Address In Address Book=====================") + self.cli.sleep(6) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(4) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[6]') + self.cli.sleep(4) + self.cli.execute('app.addingtoaddressbook()') + self.cli.sleep(3) + self.cli.click_on('//GrashofPopup/BoxLayout[0]/MDTextField[0]') + self.cli.sleep(4) + self.cli.click_on('//GrashofPopup/BoxLayout[0]/MDTextField[1]') + self.cli.sleep(4) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(4) + self.cli.click_on('//GrashofPopup/BoxLayout[0]/MDTextField[0]') + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[0]','text','peter') + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(4) + self.cli.click_on('//GrashofPopup/BoxLayout[0]/MDTextField[1]') + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[1]','text','sectorAppartment') + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(5) + self.cli.click_on('//GrashofPopup/BoxLayout[0]/MDTextField[1]') + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[1]','text',data[0]) + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[1]','text','') + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(4) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[1]','text','BM-2cX78L9CZpb6GGC3rRVizYiUBwHELMLybd') + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(4) + + @ordered + def test_cancel_address(self): + """Cancel Address""" + print("=====================Test -Cancel Address=====================") + self.cli.sleep(3) + self.cli.execute('app.addingtoaddressbook()') + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[0]','text','prachi') + self.cli.sleep(3) + self.cli.setattr('//GrashofPopup/BoxLayout[0]/MDTextField[1]','text',data[0]) + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[1]') + + @ordered + def test_send_message_to_addressbook(self): + """Directly Send Message To The User""" + print("=====================Test -Directly Send Message To The User=====================") + self.cli.sleep(4) + self.cli.click_on('//AddressBook/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]') + self.cli.sleep(3) + self.cli.click_on('//MDRaisedButton[0]') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]') + self.cli.sleep(2) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput[0]') + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]', 'text', 'Second') + self.cli.sleep(3) + random_label="" + for char in "Hey This is Message From Address Book": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]', 'text', random_label) + self.cli.sleep(0.2) + self.cli.click_on('//MDActionTopAppBarButton[2]') + self.cli.sleep(2) + + @ordered + def test_delete_address_from_address_contact(self): + """Delete Address From Address Book""" + print("=====================Test -Delete Address From Address Book=====================") + self.cli.sleep(3) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[6]') + self.cli.sleep(3) + self.cli.drag('//AddressBook/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//TwoLineAvatarIconListItem[0]/BoxLayout[0]', + '//AddressBook/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//TwoLineAvatarIconListItem[0]/BoxLayout[2]', 2) + self.cli.sleep(2) + self.cli.click_on('//AddressBook/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//Button[0]') + self.cli.sleep(2) diff --git a/src/bitmessagekivy/tests/test_allmail_message.py b/src/bitmessagekivy/tests/test_allmail_message.py new file mode 100644 index 00000000..7efad3f1 --- /dev/null +++ b/src/bitmessagekivy/tests/test_allmail_message.py @@ -0,0 +1,26 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess +from .common import ordered + + +class AllMailMessage(TeleniumTestProcess): + """AllMail Screen Functionality Testing""" + + @ordered + def test_show_allmail_list(self): + """Show All Messages on Mail Screen/Window""" + print("=====================Test -Show Messages Of Mail Screen=====================") + self.cli.sleep(5) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(4) + self.cli.click_on('//NavigationItem[5]') + self.cli.sleep(4) + + @ordered + def test_delete_message_from_allmail_list(self): + """Delete Message From Message body of Mail Screen/Window""" + print("=====================Test -Delete Messages Of Mail Screen=====================") + self.cli.sleep(4) + self.cli.click_on('//Allmails[0]/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]') + self.cli.sleep(5) + self.cli.click_on('//MDToolbar/BoxLayout[2]/MDActionTopAppBarButton[1]') + self.cli.sleep(5) diff --git a/src/bitmessagekivy/tests/test_create_random_address.py b/src/bitmessagekivy/tests/test_create_random_address.py new file mode 100644 index 00000000..ab91af6d --- /dev/null +++ b/src/bitmessagekivy/tests/test_create_random_address.py @@ -0,0 +1,72 @@ +import os +import tempfile + +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess, cleanup +from .common import ordered +from random import choice +from string import ascii_lowercase + + +class CreateRandomAddress(TeleniumTestProcess): + + @classmethod + def setUpClass(cls): + os.environ["BITMESSAGE_HOME"] = tempfile.gettempdir() + cleanup() + super(TeleniumTestProcess, cls).setUpClass() + + @ordered + def test_login_screen(self): + """Clicking on Proceed Button to Proceed to Next Screen.""" + print("=====================Test - Login Screen=====================") + self.cli.sleep(3) + self.cli.wait_click('//Login/BoxLayout[0]/BoxLayout[0]/ScreenManager[0]/Screen[0]/BoxLayout[0]/AnchorLayout[3]/MDFillRoundFlatIconButton[0]') + self.cli.sleep(3) + + @ordered + def test_random_screen(self): + """Creating New Adress For New User.""" + print("=====================Test - Create New Address=====================") + self.cli.click_on('//RandomBoxlayout/BoxLayout[0]/AnchorLayout[1]/MDTextField[0]') + self.cli.sleep(3) + self.cli.wait_click('//RandomBoxlayout/BoxLayout[0]/AnchorLayout[2]/MDFillRoundFlatIconButton[0]') + self.cli.sleep(3) + self.cli.click_on('//RandomBoxlayout/BoxLayout[0]/AnchorLayout[1]/MDTextField[0]') + self.cli.sleep(3) + random_label = "" + for _ in range(10): + random_label += choice(ascii_lowercase) + self.cli.setattr('//RandomBoxlayout/BoxLayout[0]/AnchorLayout[1]/MDTextField[0]', "text", random_label) + self.cli.sleep(0.2) + self.cli.sleep(1) + self.cli.wait_click('//RandomBoxlayout/BoxLayout[0]/AnchorLayout[2]/MDFillRoundFlatIconButton[0]') + self.cli.sleep(5) + + @ordered + def test_create_new_address(self): + """Clicking on Navigation Drawer To Open New Address""" + print("=====================Test - Create New Address=====================") + self.cli.sleep(5) + self.cli.execute('app.root.ids.nav_drawer.set_state("toggle")') + self.cli.sleep(2) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[9]') + self.cli.sleep(4) + self.cli.wait_click('//Login/BoxLayout[0]/BoxLayout[0]/ScreenManager[0]/Screen[0]/BoxLayout[0]/AnchorLayout[3]/MDFillRoundFlatIconButton[0]') + self.test_random_screen() + + @ordered + def test_select_address(self): + """Select First Address From Drawer-Box""" + print("=====================Test - Select First Address From Drawer-Box=======================") + self.cli.sleep(3) + # self.cli.execute('app.root.ids.nav_drawer.set_state("toggle")') + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(2) + self.cli.drag("//NavigationItem[@text=\"Address Book\"]","//NavigationItem[@text=\"Settings\"]",1) + self.cli.sleep(2) + self.cli.click_on('//NavigationItem[0]') + self.cli.sleep(2) + self.cli.click_on('//MySpinnerOption[0]') + self.cli.sleep(3) diff --git a/src/bitmessagekivy/tests/test_draft_message.py b/src/bitmessagekivy/tests/test_draft_message.py new file mode 100644 index 00000000..80c5114b --- /dev/null +++ b/src/bitmessagekivy/tests/test_draft_message.py @@ -0,0 +1,92 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess +from .common import ordered + + +class DraftMessage(TeleniumTestProcess): + """Draft Screen Functionality Testing""" + + @ordered + def test_save_draft_message(self): + """Select A Draft Screen From Navigaion-Drawer-Box Then + Send a drafted message """ + print("=====================Test - Select A Draft Screen From Navigaion-Drawer-Box=====================") + # OPEN NAVIGATION-DRAWER + self.cli.sleep(4) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(2) + # OPEN INBOX SCREEN + self.cli.click_on('//NavigationItem[1]') + self.cli.sleep(2) + # CLICK ON PLUS ICON BUTTON + self.cli.click_on('//Inbox/ComposerButton[0]/MDFloatingActionButton[0]') + self.cli.sleep(3) + # SELECT - TO ADDRESS + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]') + self.cli.sleep(2) + self.cli.click_on('//MyTextInput[0]') + self.cli.sleep(3) + # ADD FROM MESSAGE + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput[0]', "text",'BM-2cSsuH1bUWBski8bvdqnK2DivMqQCeQA1J') + self.cli.sleep(3) + # CLICK BACK-BUTTON + self.cli.click_on('//MDToolbar/BoxLayout[0]/MDActionTopAppBarButton[0]') + self.cli.sleep(5) + self.cli.click_on('//Inbox/ComposerButton[0]/MDFloatingActionButton[0]') + self.cli.sleep(3) + # SELECT - TO ADDRESS + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]') + self.cli.sleep(1) + self.cli.click_on('//MyTextInput[0]') + self.cli.sleep(3) + # ADD FROM MESSAGE + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput[0]', "text",'BM-2cSsuH1bUWBski8bvdqnK2DivMqQCeQA1J') + self.cli.sleep(4) + random_label="" + for char in "Another Draft message": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]', 'text', random_label) + self.cli.sleep(0.2) + # CLICK BACK-BUTTON + self.cli.click_on('//MDToolbar/BoxLayout[0]/MDActionTopAppBarButton[0]') + self.cli.sleep(4) + + @ordered + def test_edit_and_resend_draft_messgae(self): + """Select A Message From List of Messages Then + make changes and send it.""" + print("=====================Test - Edit A Message From Draft Screen=====================") + # OPEN NAVIGATION-DRAWER + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(4) + # OPEN DRAFT SCREEN + self.cli.click_on('//NavigationItem[3]') + self.cli.sleep(4) + # SHOW DRAFT MESSAGE AND SELECT FIRST MESSAGE + self.cli.click_on('//Carousel[0]//TwoLineAvatarIconListItem[0]') + self.cli.sleep(3) + # CLICK EDIT BUTTON + self.cli.click_on('//MDToolbar/BoxLayout[2]/MDActionTopAppBarButton[0]') + self.cli.sleep(5) + random_label="" + for char in "Hey,This is draft Message Body": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]', 'text', random_label) + self.cli.sleep(0.2) + self.cli.sleep(3) + self.cli.click_on('//MDActionTopAppBarButton[2]') + self.cli.sleep(5) + + @ordered + def test_delete_draft_message(self): + """Delete A Message From List of Messages""" + print("=====================Test - Delete A Message From List of Messages=====================") + self.cli.sleep(5) + # self.cli.execute('app.root.ids.nav_drawer.set_state("toggle")') + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(4) + self.cli.click_on('//NavigationItem[3]') + self.cli.sleep(5) + self.cli.click_on('//Carousel[0]//TwoLineAvatarIconListItem[0]') + self.cli.sleep(5) + self.cli.click_on('//MDToolbar/BoxLayout[2]/MDActionTopAppBarButton[1]') + self.cli.sleep(2) diff --git a/src/bitmessagekivy/tests/test_myaddress_screen.py b/src/bitmessagekivy/tests/test_myaddress_screen.py new file mode 100644 index 00000000..7fd7da3e --- /dev/null +++ b/src/bitmessagekivy/tests/test_myaddress_screen.py @@ -0,0 +1,55 @@ +from bmconfigparser import BMConfigParser +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess +from .common import ordered + +data = BMConfigParser().addresses() + + +class MyAddressScreen(TeleniumTestProcess): + """MyAddress Screen Functionality Testing""" + + @ordered + def test_select_myaddress_list(self): + """Select Address From List of Address""" + print("=====================Test -Select Address From List of Address=====================") + self.cli.sleep(4) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[11]') + self.cli.sleep(4) + + @ordered + def test_show_Qrcode(self): + """Show the Qr code of selected address""" + print("=====================Test -Show QR code of selected address=====================") + self.cli.sleep(4) + self.cli.click_on('//MyAddress/BoxLayout[0]/FloatLayout[0]/MDScrollViewRefreshLayout[0]/MDList[0]/CustomTwoLineAvatarIconListItem[0]') + self.cli.sleep(3) + self.cli.click_on('//MyaddDetailPopup/BoxLayout[1]/MDRaisedButton[1]/MDLabel[0]') + self.cli.sleep(3) + self.cli.click_on('//MDToolbar/BoxLayout[0]/MDActionTopAppBarButton[0]') + self.cli.sleep(3) + + @ordered + def test_send_message_from(self): + """Send Message From Send Message From Button""" + print("=====================Test -Send Message From Send Message From Button=====================") + self.cli.sleep(4) + self.cli.click_on('//MyAddress/BoxLayout[0]/FloatLayout[0]/MDScrollViewRefreshLayout[0]/MDList[0]/CustomTwoLineAvatarIconListItem[0]') + self.cli.sleep(4) + self.cli.click_on('//MyaddDetailPopup/BoxLayout[1]/MDRaisedButton[0]/MDLabel[0]') + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput', "text", data[1]) + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]', 'text', 'Hey') + self.cli.sleep(3) + random_label="" + for char in "Hey,i am sending message directly from MyAddress book": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]', 'text', random_label) + self.cli.sleep(0.2) + self.cli.sleep(2) + self.cli.click_on('//MDActionTopAppBarButton[2]') + self.cli.sleep(4) diff --git a/src/bitmessagekivy/tests/test_network_screen.py b/src/bitmessagekivy/tests/test_network_screen.py new file mode 100644 index 00000000..d0185389 --- /dev/null +++ b/src/bitmessagekivy/tests/test_network_screen.py @@ -0,0 +1,18 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess + + +class NetwrokStatusScreen(TeleniumTestProcess): + """NetwrokStatus Screen Functionality Testing""" + + def test_network_status(self): + """Show NetwrokStatus""" + print("=====================Test -Show NetwrokStatus=====================") + self.cli.sleep(4) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[10]') + self.cli.sleep(4) + self.cli.click_on('//NetworkStat/MDTabs[0]/MDTabsBar[0]/MDTabsScrollView[0]/MDGridLayout[0]/MDTabsLabel[1]') + self.cli.sleep(4) diff --git a/src/bitmessagekivy/tests/test_payment_subscription.py b/src/bitmessagekivy/tests/test_payment_subscription.py new file mode 100644 index 00000000..7f8341eb --- /dev/null +++ b/src/bitmessagekivy/tests/test_payment_subscription.py @@ -0,0 +1,25 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess + + +class PaymentScreen(TeleniumTestProcess): + """SubscriptionPayment Screen Functionality Testing""" + + def test_select_subscripton(self): + """Select Subscripton From List of Subscriptons""" + print("=====================Test -Select Subscripton From List of Subscriptons=====================") + self.cli.sleep(4) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[8]') + self.cli.sleep(3) + self.cli.drag('//Payment/BoxLayout[0]/ScrollView[0]/BoxLayout[0]/ProductCategoryLayout[0]/ProductLayout[1]', + '//Payment/BoxLayout[0]/ScrollView[0]/BoxLayout[0]/ProductCategoryLayout[0]/ProductLayout[0]', 1) + self.cli.sleep(2) + self.cli.click_on('//MDRaisedButton[3]') + self.cli.sleep(2) + self.cli.click_on('//ListItemWithLabel[0]') + self.cli.sleep(2) + self.cli.click_on('//MDRaisedButton[3]') + self.cli.sleep(2) diff --git a/src/bitmessagekivy/tests/test_sent_message.py b/src/bitmessagekivy/tests/test_sent_message.py new file mode 100644 index 00000000..6e0b8204 --- /dev/null +++ b/src/bitmessagekivy/tests/test_sent_message.py @@ -0,0 +1,101 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess +from bmconfigparser import BMConfigParser +from .common import ordered + +data = BMConfigParser().addresses() + + +class SendMessage(TeleniumTestProcess): + """Sent Screen Functionality Testing""" + + @ordered + def test_send_message_and_validation(self): + """ + Sending Message From Inbox Screen + opens a pop-up(screen)which send message from sender to reciever + """ + print("=====================Test - Sending Message From Inbox Screen=====================") + self.cli.sleep(3) + # self.cli.execute('app.root.ids.nav_drawer.set_state("toggle")') + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(2) + self.cli.click_on('//NavigationItem[1]') + self.cli.sleep(2) + self.cli.click_on('//Inbox/ComposerButton[0]/MDFloatingActionButton[0]') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/MyMDTextField[0]') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/MyTextInput[0]') + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/MyTextInput[0]', "text", "second add") + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]') + self.cli.sleep(4) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]') + self.cli.sleep(4) + self.cli.click_on('//MDIconButton[2]') + self.cli.sleep(3) + self.cli.click_on('//MDFlatButton[0]') + self.cli.sleep(5) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]') + self.cli.sleep(2) + self.cli.click_on('//MyTextInput[0]') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]') + self.cli.sleep(2) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]', 'text', 'heyyyyyy') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]') + self.cli.sleep(4) + random_label="" + for char in "how are you this is message body": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]','text',random_label) + self.cli.sleep(0.2) + self.cli.sleep(3) + self.cli.click_on('//MDIconButton[2]') + self.cli.sleep(3) + self.cli.click_on('//MDFlatButton[0]') + self.cli.sleep(6) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput[0]',"text", data[0]) + self.cli.sleep(3) + self.cli.click_on('//MDIconButton[2]') + self.cli.sleep(3) + self.cli.click_on('//MDActionTopAppBarButton[2]') + self.cli.sleep(3) + + @ordered + def test_sent_multiple_messages(self): + """ + Sending Second Message From Inbox Screen + for testing the search and delete functionality for two messages on the screen + """ + print("=====================Test - Sending Message From Inbox Screen=====================") + self.cli.sleep(3) + # self.cli.execute('app.root.ids.nav_drawer.set_state("toggle")') + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(5) + self.cli.click_on('//NavigationItem[1]') + self.cli.sleep(3) + self.cli.click_on('//Inbox/ComposerButton[0]/MDFloatingActionButton[0]') + self.cli.sleep(3) + self.cli.click_on('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[0]/BoxLayout[0]/CustomSpinner[0]/ArrowImg[0]') + self.cli.sleep(2) + self.cli.click_on('//MyTextInput[0]') + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/BoxLayout[1]/BoxLayout[0]/MyTextInput[0]', "text", data[0]) + self.cli.sleep(3) + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/MyMDTextField[0]', 'text', 'Second') + self.cli.sleep(3) + random_label="" + for char in "Hey This Is Second Message Body": + random_label += char + self.cli.setattr('//DropDownWidget/ScrollView[0]/BoxLayout[0]/ScrollView[0]/TextInput[0]',"text",random_label) + self.cli.sleep(0.2) + self.cli.sleep(2) + self.cli.click_on('//MDActionTopAppBarButton[2]') + self.cli.sleep(5) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[2]') + self.cli.sleep(3) diff --git a/src/bitmessagekivy/tests/test_setting_screen.py b/src/bitmessagekivy/tests/test_setting_screen.py new file mode 100644 index 00000000..b3773cb3 --- /dev/null +++ b/src/bitmessagekivy/tests/test_setting_screen.py @@ -0,0 +1,16 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess + + +class SettingScreen(TeleniumTestProcess): + """Setting Screen Functionality Testing""" + + def test_setting_screen(self): + """Show Setting Screen""" + print("=====================Test -Show Setting Screen=====================") + self.cli.sleep(3) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(3) + self.cli.drag("//NavigationItem[@text=\"Sent\"]","//NavigationItem[@text=\"Inbox\"]",1) + self.cli.sleep(3) + self.cli.click_on('//NavigationItem[7]') + self.cli.sleep(2) diff --git a/src/bitmessagekivy/tests/test_trash_message.py b/src/bitmessagekivy/tests/test_trash_message.py new file mode 100644 index 00000000..08c27fd4 --- /dev/null +++ b/src/bitmessagekivy/tests/test_trash_message.py @@ -0,0 +1,22 @@ +from bitmessagekivy.tests.telenium_process import TeleniumTestProcess + + +class TrashMessage(TeleniumTestProcess): + """Trash Screen Functionality Testing""" + + def test_delete_trash_message(self): + """Delete Trash message permanently from trash message listing""" + print("=====================Test -Delete Message From Trash Message Listing=====================") + self.cli.sleep(4) + self.cli.execute('app.clickNavDrawer()') + self.cli.sleep(4) + self.cli.click_on('//NavigationItem[4]') + self.cli.sleep(4) + self.cli.drag('//Trash/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//TwoLineAvatarIconListItem[0]/BoxLayout[0]', + '//Trash/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//TwoLineAvatarIconListItem[0]/BoxLayout[2]', 2) + self.cli.sleep(4) + self.cli.click_on('//Trash/BoxLayout[0]/BoxLayout[0]/ScrollView[0]/MDList[0]/Carousel[0]//Button[0]') + self.cli.sleep(2) + # self.cli.click_on('//MDDialog/MDCard[0]/AnchorLayout[0]/MDBoxLayout[0]/MDFlatButton[0]') + self.cli.click_on('//MDDialog/DialogFakeCard[0]/AnchorLayout[0]/MDBoxLayout[0]/MDFlatButton[0]') + self.cli.sleep(4) diff --git a/src/bitmessagekivy/translations/mo/locales/ar/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/ar/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/cs/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/cs/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/da/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/da/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/de/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/de/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/en/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/en/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/eo/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/eo/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/fr/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/fr/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/it/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/it/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/ja/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/ja/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/nl/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/nl/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/no/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/no/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/pl/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/pl/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/pt/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/pt/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/ru/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/ru/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/sk/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/sk/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..396080d2c2a6d5904404e014a2a59ad3157ceb8c GIT binary patch literal 386 zcma)%&rZTX5Qi~(>d~`@J$S>xZ3(8Ve_})uNo*vf;l9AIT`jxK?v%)b@OnOr(+i0= zf613Q%r}#npUaD5k8{RcG1tsFbHjAWnKy2ZxpvMe^WZ;mO)%TQ5<|4!DUl9jvcSd% zf+8BbftS`qD7_NN{G)_PKus*dt0q(;lbHmWLpBy!s^zx@ zbfkuNeV&uayN(29&@R@Rd{Cm$R9S4r(uNh*;$f%h`OEGP10T#2>&~>=Ae5+g|CN=P zI#b(NCB>|m{{3^}9iihB4h{c8_)WJ>t*yHk>q>`+^w`oC^5o=or*1L8)UEx-I-^9s IvXu0G0XtZ1(*OVf literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/mo/locales/zh/LC_MESSAGES/langapp.mo b/src/bitmessagekivy/translations/mo/locales/zh/LC_MESSAGES/langapp.mo new file mode 100644 index 0000000000000000000000000000000000000000..596f636e46ad074bb43883f18fc3819f3adbe32d GIT binary patch literal 386 zcma)%&q~8U5Qi&z%F(ljJ$S2AHz}25{eu__77UgWdf&FwWVPK5yOUxcq_5|*IJpG8 z`Gb!+%s0c#&*jBwz&T^Cm}};oxna7b%o{f|uAS3o?%gM@31%Buq7TMdCE}5c7T7pX zP=v~C;H9kslun6g{!v2iQ4@>sstJ`yWFkSPkYpl>Rgw+mWGq>P1s+Vdu=nC|=gC;a z6E(gY@|=v`bs#9cwqd8qc_j)>wZT>_jbGtTJnS_+f0@H^F_2`!&+Z1@+#Z@O)E+Sq%suC)(Hk1cH>je4&;b&DRRcI`ICR!XER HL($+DH#Ka? literal 0 HcmV?d00001 diff --git a/src/bitmessagekivy/translations/po/bitmessage_ar.po b/src/bitmessagekivy/translations/po/bitmessage_ar.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_ar.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_cs.po b/src/bitmessagekivy/translations/po/bitmessage_cs.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_cs.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_da.po b/src/bitmessagekivy/translations/po/bitmessage_da.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_da.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_de.po b/src/bitmessagekivy/translations/po/bitmessage_de.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_de.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_en.po b/src/bitmessagekivy/translations/po/bitmessage_en.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_en.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_eo.po b/src/bitmessagekivy/translations/po/bitmessage_eo.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_eo.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_fr.po b/src/bitmessagekivy/translations/po/bitmessage_fr.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_fr.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_it.po b/src/bitmessagekivy/translations/po/bitmessage_it.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_it.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_ja.po b/src/bitmessagekivy/translations/po/bitmessage_ja.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_ja.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_nl.po b/src/bitmessagekivy/translations/po/bitmessage_nl.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_nl.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_no.po b/src/bitmessagekivy/translations/po/bitmessage_no.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_no.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_pl.po b/src/bitmessagekivy/translations/po/bitmessage_pl.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_pl.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_pt.po b/src/bitmessagekivy/translations/po/bitmessage_pt.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_pt.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_ru.po b/src/bitmessagekivy/translations/po/bitmessage_ru.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_ru.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_sk.po b/src/bitmessagekivy/translations/po/bitmessage_sk.po new file mode 100644 index 00000000..325d57db --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_sk.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/translations/po/bitmessage_zh.po b/src/bitmessagekivy/translations/po/bitmessage_zh.po new file mode 100644 index 00000000..c99d6899 --- /dev/null +++ b/src/bitmessagekivy/translations/po/bitmessage_zh.po @@ -0,0 +1,367 @@ +# Example for an internationalized Kivy app +# Copyright (C) 2013 Mathieu Virbel +# This file is distributed under the same license as the Kivy package. +# Mathieu Virbel , 2013 +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-08-29 21:29+0530\n" +"PO-Revision-Date: 2013-08-01 15:36+0200\n" +"Last-Translator: Mathieu Virbel \n" +"Language-Team: Mathieu Virbel \n" +"Language: Chinese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:103 +msgid "Accounts" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:131 +msgid "Inbox" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:140 +msgid "Sent" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:147 +msgid "Draft" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:154 +msgid "Trash" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:161 +msgid "All Mails" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:176 +msgid "All labels" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:178 +msgid "Address Book" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:184 +msgid "Settings" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:190 +msgid "Purchase" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:202 +msgid "New address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:209 +msgid "Network status" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/main.kv:215 +msgid "My addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:8 +msgid "User Interface" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:30 +msgid "Start-on-login not yet supported on your OS" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:47 +msgid "Tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:61 +msgid "Start Bitmessage in the tray(don't show main window)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:75 +msgid "Minimize to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:89 +msgid "Close to tray" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:107 +msgid "Hide connection notifications" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:121 +msgid "Show notification when message received" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:135 +msgid "Run in Portable Mode" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:143 +msgid "" +"In portable Mode, messages and config files are stored in the same directory " +"as the program rather then the normal application-data folder. This makes it " +"convenient to run Bitmessage from a USB thumb drive." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:160 +msgid "" +"Willingly include unencrypted destination address when sending to a mobile " +"device" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:174 +msgid "Use identicons" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:187 +msgid "Reply below Quote" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:203 +msgid "Interface Language" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:230 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:476 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:551 +msgid "Apply" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:247 +msgid "Listening port" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:258 +msgid "Listen for connections on port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:265 +msgid "8444" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:280 +msgid "UPnP" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:288 +msgid "Proxy server / Tor" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:299 +msgid "Type:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:318 +msgid "Server hostname:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:323 +msgid "localhost" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:330 +msgid "Port:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:343 +msgid "9050" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:351 +msgid "Username:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:362 +msgid "Pass:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:380 +msgid "Authentication" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:395 +msgid "Listen for incoming connections when using proxy" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:410 +msgid "Only connect to onion services(*.onion)" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:418 +msgid "Bandwidth limit" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:429 +msgid "Maximum download rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:434 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:522 +msgid "0" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:445 +msgid "Maximum upload rate (kB/s):[0:unlimited]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:461 +msgid "Maximum outbound connections:[0:none]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:505 +msgid "Leave these input fields blank for the default behavior." +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:517 +msgid "Give up after" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/settings.kv:528 +msgid "days and" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:28 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:55 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:105 +msgid "Label" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:37 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:74 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:117 +msgid "Address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:145 +msgid "Send message from" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:156 +msgid "Show QR code" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:166 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:227 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:304 +msgid "Cancel" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:192 +msgid "" +"Bitmessage isn't connected to the network.\n" +" If you quit now, it may cause delivery delays.\n" +" Wait until connected and the synchronisation finishes?" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:206 +msgid "Yes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:216 +msgid "No" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:251 +msgid "From :" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:265 +msgid "[b]" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/popup.kv:291 +msgid "Date : " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/maildetail.kv:31 +msgid "to " +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/myaddress.kv:17 +msgid "My Addresses" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/composer.kv:54 +msgid "type, select or scan QR code for recipients address" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:8 +msgid "Total connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:16 +msgid "Total Connections" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:35 +msgid "Processes" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:43 +msgid "person-to-person" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:62 +msgid "Brodcast" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:81 +msgid "publickeys" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/network.kv:100 +msgid "objects" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:31 +msgid "Select method to make an address:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:57 +msgid "Random Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:77 +msgid "Pseudo Number Generator" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:81 +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:188 +msgid "Proceed Next" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/login.kv:163 +msgid "Enter a label to generate address for:" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:10 +msgid "Available Credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/credits.kv:27 +msgid "+Add more credits" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_room.kv:40 +msgid "Send" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:14 +msgid "Chats" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:26 +msgid "No Chat" +msgstr "" + +#: /home/cis/py3porting/Chatroom/PyBitmessage/src/bitmessagekivy/kv/chat_list.kv:50 +msgid "Contacts" +msgstr "" diff --git a/src/bitmessagekivy/uikivysignaler.py b/src/bitmessagekivy/uikivysignaler.py new file mode 100644 index 00000000..35376112 --- /dev/null +++ b/src/bitmessagekivy/uikivysignaler.py @@ -0,0 +1,30 @@ +""" +Ui Singnaler for kivy interface +""" +from threading import Thread + +import queues +import state +from semaphores import kivyuisignaler + + +class UIkivySignaler(Thread): + """Kivy ui signaler""" + + def run(self): + kivyuisignaler.acquire() + while state.shutdown == 0: + try: + command, data = queues.UISignalQueue.get() + if command == 'writeNewAddressToTable': + address = data[1] + state.kivyapp.variable_1.append(address) + # elif command == 'rerenderAddressBook': + # state.kivyapp.obj_1.refreshs() + # Need to discuss this + elif command == 'writeNewpaymentAddressToTable': + pass + elif command == 'updateSentItemStatusByAckdata': + state.kivyapp.status_dispatching(data) + except Exception as e: + print(e) diff --git a/src/main_test.py b/src/main_test.py new file mode 100644 index 00000000..161d4667 --- /dev/null +++ b/src/main_test.py @@ -0,0 +1,26 @@ +"""This module is for thread start.""" +import state +from bitmessagekivy.mpybit import NavigateApp +from threads import addressGenerator, sqlThread + +def main(): + if state.enableObjProc: + # Start the address generation thread + addressGeneratorThread = addressGenerator() + # close the main program even if there are threads left + addressGeneratorThread.daemon = True + addressGeneratorThread.start() + + sqlLookup = sqlThread() + # DON'T close the main program even if there are threads left. + # The closeEvent should command this thread to exit gracefully. + sqlLookup.daemon = False + sqlLookup.start() + + state.kivyapp = NavigateApp() + state.kivyapp.run() + + + +if __name__ == '__main__': + main()