diff --git a/data/assets/langs/Arabic.ini b/data/assets/langs/Arabic.ini index acb66de..5f8bdad 100644 --- a/data/assets/langs/Arabic.ini +++ b/data/assets/langs/Arabic.ini @@ -113,7 +113,7 @@ STR_DOWNLOAD_INSTALL_MSG=تثبيت الحزمة عن بعد غير ممكن. ه STR_CHECKING_REMOTE_SERVER_MSG=التحقق من الخادم البعيد لتثبيت الحزمة عن بعد. STR_ENABLE_RPI=RPI STR_ENABLE_RPI_FTP_SMB_MSG=يتيح هذا الخيار تثبيت الحزمة عن بُعد عبر خادم الويب المضمن. -STR_ENABLE_RPI_WEBDAV_MSG==يتيح هذا الخيار تثبيت الحزمة عن بُعد عبر خادم الويب المضمن. +STR_ENABLE_RPI_WEBDAV_MSG=يتيح هذا الخيار تثبيت الحزمة عن بُعد عبر خادم الويب المضمن. STR_FILES=الملفات STR_EDITOR=المحرر STR_SAVE=حفظ diff --git a/data/assets/langs/English.ini b/data/assets/langs/English.ini index 0d57bed..a9e941c 100644 --- a/data/assets/langs/English.ini +++ b/data/assets/langs/English.ini @@ -112,8 +112,8 @@ STR_CANNOT_CONNECT_REMOTE_MSG=Remote HTTP Server not reachable. STR_DOWNLOAD_INSTALL_MSG=Remote Package Install not possible. Would you like to download package and install instead? STR_CHECKING_REMOTE_SERVER_MSG=Checking remote server for Remote Package Install. STR_ENABLE_RPI=RPI -STR_ENABLE_RPI_FTP_SMB_MSG=This option enables Remote Package Installation via embedded Web Server. -STR_ENABLE_RPI_WEBDAV_MSG==This option enables Remote Package Installation via embedded Web Server. +STR_ENABLE_RPI_FTP_SMB_MSG=This option enables Remote Package Installation via embedded Web Server proxy. +STR_ENABLE_RPI_WEBDAV_MSG=This option enables Remote Package Installation via embedded Web Server proxy. STR_FILES=Files STR_EDITOR=Editor STR_SAVE=Save @@ -160,4 +160,7 @@ STR_LANGUAGE=Language STR_TEMP_DIRECTORY=Temp Directory STR_REALDEBRID=Real-Debrid STR_BACKGROUND_INSTALL_INPROGRESS=Package install is running in the background. Don't close the app while install is in progress -STR_ENABLE_DISC_CACHE_MSG=Enable disk caching. Can improve package install speed in cases where connection to remote is slow +STR_ENABLE_DISC_CACHE_MSG=Enable disk caching. Can improve Remote Package Install speed in cases where connection to remote is slow, but breaks resuming of install +STR_ENABLE_ALLDEBRID_MSG=Install Via AllDebrid +STR_ENABLE_REALDEBRID_MSG=Install Via RealDebrid +STR_ENABLE_DISKCACHE_DESC=Enable Disk Cache \ No newline at end of file diff --git a/data/assets/langs/Korean.ini b/data/assets/langs/Korean.ini index 043a60c..afaa703 100644 --- a/data/assets/langs/Korean.ini +++ b/data/assets/langs/Korean.ini @@ -25,7 +25,7 @@ STR_FILE=파일 STR_TYPE=종류 STR_NAME=이름 STR_SIZE=크기 -STR_DATE=일시 +STR_DATE=날짜 STR_NEW_FOLDER=새 폴더 STR_RENAME=이름 변경 STR_DELETE=삭제 @@ -39,7 +39,7 @@ STR_OVERWRITE=덮어쓰기 STR_DONT_OVERWRITE=덮어쓰기 금지 STR_ASK_FOR_CONFIRM=수락여부를 질문 STR_DONT_ASK_CONFIRM=수락여부를 묻지 않음 -STR_ALLWAYS_USE_OPTION=두번다시 묻지 않고 항상 이 설정을 사용 +STR_ALLWAYS_USE_OPTION=두 번 다시 묻지 않고 항상 이 설정을 사용 STR_ACTIONS=실행 STR_CONFIRM=확인 STR_OVERWRITE_OPTIONS=덮어쓰기 옵션 @@ -59,3 +59,75 @@ STR_FAIL_DEL_DIR_MSG=디렉토리 삭제에 실패하였습니다. STR_DELETING=삭제 중 STR_FAIL_DEL_FILE_MSG=파일 삭제에 실패하였습니다. STR_DELETED=삭제됨 +STR_LINK=링크 +STR_SHARE=공유 +STR_FAILED=310 실패함 +STR_FAIL_CREATE_LOCAL_FILE_MSG=310 로컬에서 파일을 만들기 실패함 +STR_INSTALL=설치 +STR_INSTALLING=설치 중 +STR_INSTALL_SUCCESS=성공 +STR_INSTALL_FAILED=실패함 +STR_INSTALL_SKIPPED=건너뜀 +STR_CHECK_HTTP_MSG=원격 HTTP 서버에 대한 연결 확인 +STR_FAILED_HTTP_CHECK=HTTP 서버에 연결에 실패함 +STR_REMOTE_NOT_HTTP=원격이 HTTP 서버가 아님 +STR_INSTALL_FROM_DATA_MSG=패키지가 /data 또는 /mnt/usbX 폴더에 없음 +STR_ALREADY_INSTALLED_MSG=패키지가 이미 설치되었음 +STR_INSTALL_FROM_URL=URL에서 설치 +STR_CANNOT_READ_PKG_HDR_MSG=패키지 헤더 정보를 읽을 수 없음 +STR_FAVORITE_URLS=즐겨찾기 URL +STR_SLOT=슬롯 +STR_EDIT=편집 +STR_ONETIME_URL=한 번만 Url +STR_NOT_A_VALID_PACKAGE=유효하지 않은 패키지 +STR_WAIT_FOR_INSTALL_MSG=패키지 설치가 완료되기를 기다리는 중 +STR_FAIL_INSTALL_TMP_PKG_MSG=pkg 파일을 설치하지 못했습니다. tmp pkg를 수동으로 삭제하세요. +STR_AUTO_DELETE_TMP_PKG=설치 후 임시로 다운로드한 pkg 파일을 자동으로 삭제 +STR_PROTOCOL_NOT_SUPPORTED=지원되지 않는 프로토콜 +STR_COULD_NOT_RESOLVE_HOST=호스트 이름을 확인할 수 없음 +STR_EXTRACT=압축 해제 +STR_EXTRACTING=압축 해제 중 +STR_FAILED_TO_EXTRACT=압축 해제 실패함 +STR_EXTRACT_LOCATION=압축 해제 위치 +STR_COMPRESS=압축 +STR_ZIP_FILE_PATH=Zip 파일 이름 +STR_COMPRESSING=압축 중 +STR_ERROR_CREATE_ZIP=zip 파일을 만드는 동안 오류 발생 +STR_UNSUPPORTED_FILE_FORMAT=지원되지 않는 압축 파일 형식 +STR_CUT=잘라내기 +STR_COPY=복사 +STR_PASTE=붙여넣기 +STR_MOVING=이동 중 +STR_COPYING=복사 중 +STR_FAIL_MOVE_MSG=파일 이동 실패함 +STR_FAIL_COPY_MSG=파일 복사 실패함 +STR_CANT_MOVE_TO_SUBDIR_MSG=상위 디렉토리를 하위 디렉토리로 이동할 수 없음 +STR_CANT_COPY_TO_SUBDIR_MSG=상위 디렉토리를 하위 디렉토리로 복사할 수 없음 +STR_UNSUPPORTED_OPERATION_MSG=지원되지 않는 작업 +STR_HTTP_PORT=Http 포트 +STR_REINSTALL_CONFIRM_MSG=콘텐츠가 이미 설치되었습니다. 설치를 계속할까요? +STR_REMOTE_NOT_SUPPORT_MSG=보호된 서버에서는 원격 패키지 설치가 지원되지 않습니다. +STR_CANNOT_CONNECT_REMOTE_MSG=원격 HTTP 서버에 연결할 수 없습니다. +STR_DOWNLOAD_INSTALL_MSG=원격 패키지 설치가 불가능합니다. 패키지를 다운로드하여 설치할까요? +STR_CHECKING_REMOTE_SERVER_MSG=원격 패키지 설치를 위해 원격 서버를 확인하고 있습니다. +STR_FILES=파일 +STR_EDITOR=편집기 +STR_SAVE=저장 +STR_MAX_EDIT_FILE_SIZE_MSG=다음보다 큰 파일을 편집할 수 없음 +STR_DELETE_LINE=선택한 줄 삭제 +STR_INSERT_LINE=선택한 줄 아래에 삽입 +STR_MODIFIED=수정됨 +STR_FAIL_GET_TOKEN_MSG=다음에서 접속 토큰을 얻는데 실패함 +STR_GET_TOKEN_SUCCESS_MSG=로그인에 성공했습니다. 브라우저를 닫고 애플리케이션으로 돌아갈 수 있음 +STR_NEW_FILE=새 파일 +STR_SETTINGS=설정 +STR_GLOBAL=글로벌 +STR_COPY_LINE=선택한 줄 복사 +STR_PASTE_LINE=선택한 줄에 붙여넣기 +STR_SHOW_HIDDEN_FILES=숨겨진 파일 표시 +STR_SET_DEFAULT_DIRECTORY=기본 폴더 설정 +STR_SET_DEFAULT_DIRECTORY_MSG=기본 디렉터리로 설정됨 +STR_NFS_EXP_PATH_MISSING_MSG=URL에 NFS 내보내기 경로 없음 +STR_FAIL_INIT_NFS_CONTEXT=NFS 컨텍스트를 초기화 실패함 +STR_FAIL_MOUNT_NFS_MSG=NFS 공유를 마운트 실패함 +STR_VIEW_IMAGE=이미지 보기 diff --git a/data/assets/langs/Turkish.ini b/data/assets/langs/Turkish.ini index 2812832..3eaca30 100644 --- a/data/assets/langs/Turkish.ini +++ b/data/assets/langs/Turkish.ini @@ -1,75 +1,133 @@ STR_CONNECTION_SETTINGS=Bağlantı Ayarları STR_SITE=Site STR_LOCAL=Yerel -STR_REMOTE=Uzaktan +STR_REMOTE=Uzak STR_MESSAGES=Mesajlar STR_UPDATE_SOFTWARE=Yazılımı Güncelle STR_CONNECT=Bağlan -STR_DISCONNECT=Bağlantıyı kes -STR_SEARCH=Ara +STR_DISCONNECT=Bağlantıyı Kes +STR_SEARCH=Arama STR_REFRESH=Yenile STR_SERVER=Sunucu STR_USERNAME=Kullanıcı Adı -STR_PASSWORD=Şifre +STR_PASSWORD=Parola STR_PORT=Port -STR_PASV=Pasv +STR_PASV=Pasif STR_DIRECTORY=Dizin STR_FILTER=Filtre STR_YES=Evet STR_NO=Hayır STR_CANCEL=İptal -STR_CONTINUE=Devam +STR_CONTINUE=Devam Et STR_CLOSE=Kapat STR_FOLDER=Klasör STR_FILE=Dosya -STR_TYPE=Tip +STR_TYPE=Tür STR_NAME=Ad STR_SIZE=Boyut STR_DATE=Tarih STR_NEW_FOLDER=Yeni Klasör STR_RENAME=Yeniden Adlandır STR_DELETE=Sil -STR_UPLOAD=Karşıya Yükle +STR_UPLOAD=Yükle STR_DOWNLOAD=İndir -STR_SELECT_ALL=Tümünü Seç -STR_CLEAR_ALL=Tümünü Temizle -STR_UPLOADING=Karşıya Yükleniyor +STR_SELECT_ALL=Hepsini Seç +STR_CLEAR_ALL=Hepsini Temizle +STR_UPLOADING=Yükleniyor STR_DOWNLOADING=İndiriliyor -STR_OVERWRITE=Üzerine yaz -STR_DONT_OVERWRITE=Üzerine yazma -STR_ASK_FOR_CONFIRM=Onaylamak için sor -STR_DONT_ASK_CONFIRM=Onaylamak için sorma -STR_ALLWAYS_USE_OPTION=Daima bu seçeneği kullan ve bir daha sorma -STR_ACTIONS=Eylemler +STR_OVERWRITE=Üzerine Yaz +STR_DONT_OVERWRITE=Üzerine Yazma +STR_ASK_FOR_CONFIRM=Onay İste +STR_DONT_ASK_CONFIRM=Onay İsteme +STR_ALLWAYS_USE_OPTION=Bu seçeneği her zaman kullan ve bir daha sorma +STR_ACTIONS=İşlemler STR_CONFIRM=Onayla -STR_OVERWRITE_OPTIONS=Ayarların üzerine yaz +STR_OVERWRITE_OPTIONS=Üzerine Yazma Seçenekleri STR_PROPERTIES=Özellikler -STR_PROGRESS=Durum +STR_PROGRESS=İlerleme STR_UPDATES=Güncellemeler STR_DEL_CONFIRM_MSG=Bu dosya(ları)/klasör(leri) silmek istediğinizden emin misiniz? -STR_CANCEL_ACTION_MSG=İptal ediliyor. Son işlemin tamamlanması bekleniyor -STR_FAIL_UPLOAD_MSG=Dosya karşıya yükleme başarısız -STR_FAIL_DOWNLOAD_MSG=Dosya indirme başarısız -STR_FAIL_READ_LOCAL_DIR_MSG=Dizindeki içerikler okunamadı ya da öyle bir klasör yok -STR_CONNECTION_CLOSE_ERR_MSG=426 Bağlantı kesildi. -STR_REMOTE_TERM_CONN_MSG=426 Uzaktan Sunucu bağlantıyı kesti. -STR_FAIL_LOGIN_MSG=300 Giriş başarısız. Lütfen kullanıcı adınızı ve şifrenizi kontrol edin. +STR_CANCEL_ACTION_MSG=İptal ediliyor. Son eylemin tamamlanması bekleniyor +STR_FAIL_UPLOAD_MSG=Dosya yüklenemedi +STR_FAIL_DOWNLOAD_MSG=Dosya indirilemedi +STR_FAIL_READ_LOCAL_DIR_MSG=Yerel dizinin içeriği okunamadı veya klasör mevcut değil. +STR_CONNECTION_CLOSE_ERR_MSG=426 Bağlantı kapatıldı. +STR_REMOTE_TERM_CONN_MSG=426 Uzak Sunucu bağlantıyı sonlandırdı. +STR_FAIL_LOGIN_MSG=300 Giriş Başarısız. Lütfen kullanıcı adınızı veya şifrenizi kontrol edin. STR_FAIL_TIMEOUT_MSG=426 Başarısız. Bağlantı zaman aşımına uğradı. -STR_FAIL_DEL_DIR_MSG=Dizin silme başarısız +STR_FAIL_DEL_DIR_MSG=Dizin silinemedi STR_DELETING=Siliniyor -STR_FAIL_DEL_FILE_MSG=Dosya silme başarısız +STR_FAIL_DEL_FILE_MSG=Dosya silinemedi STR_DELETED=Silindi -STR_LINK=Link +STR_LINK=Bağlantı STR_SHARE=Paylaş STR_FAILED=310 Başarısız -STR_FAIL_CREATE_LOCAL_FILE_MSG=310 Yerelde dosya oluşturulumu başarısız -STR_INSTALL=Yükle -STR_INSTALLING=Yükleniyor +STR_FAIL_CREATE_LOCAL_FILE_MSG=310 Yerelde dosya oluşturulamadı +STR_INSTALL=Kur +STR_INSTALLING=Kuruluyor STR_INSTALL_SUCCESS=Başarılı STR_INSTALL_FAILED=Başarısız STR_INSTALL_SKIPPED=Atlandı -STR_CHECK_HTTP_MSG=Uzaktan HTTP Sunucusu bağlantısı kontrol ediliyor -STR_FAILED_HTTP_CHECK=HTTP Sunucusuna bağlantı başarısız -STR_REMOTE_NOT_HTTP=Uzaktaki HTTP Sunucusu değil -STR_INSTALL_FROM_DATA_MSG=Paket /data ya da /mnt/usbX dizininde değil +STR_CHECK_HTTP_MSG=Uzak HTTP Sunucusuna bağlantı kontrol ediliyor +STR_FAILED_HTTP_CHECK=HTTP Sunucusuna bağlanılamadı +STR_REMOTE_NOT_HTTP=Uzak bir HTTP Sunucusu değil +STR_INSTALL_FROM_DATA_MSG=Paket /data veya /mnt/usbX klasöründe değil STR_ALREADY_INSTALLED_MSG=Paket zaten kurulu +STR_INSTALL_FROM_URL=URL'den Kur +STR_CANNOT_READ_PKG_HDR_MSG=Paket başlık bilgisi okunamadı +STR_FAVORITE_URLS=Favori URL'ler +STR_SLOT=Yuva +STR_EDIT=Düzenle +STR_ONETIME_URL=Tek Seferlik URL +STR_NOT_A_VALID_PACKAGE=Geçerli bir Paket değil +STR_WAIT_FOR_INSTALL_MSG=Paketin kurulmasının tamamlanması bekleniyor +STR_FAIL_INSTALL_TMP_PKG_MSG=Geçici paketin kurulumu başarısız. Lütfen geçici paketi manuel olarak silin +STR_AUTO_DELETE_TMP_PKG=Kurulumdan sonra geçici indirilen paketi otomatik olarak sil +STR_PROTOCOL_NOT_SUPPORTED=Protokol desteklenmiyor +STR_COULD_NOT_RESOLVE_HOST=Ana bilgisayar adı çözülemedi +STR_EXTRACT=Çıkart +STR_EXTRACTING=Çıkartılıyor +STR_FAILED_TO_EXTRACT=Çıkartma başarısız oldu +STR_EXTRACT_LOCATION=Çıkartılacak Konum +STR_COMPRESS=Sıkıştır +STR_ZIP_FILE_PATH=Zip Dosya Adı +STR_COMPRESSING=Sıkıştırılıyor +STR_ERROR_CREATE_ZIP=Zip oluşturulurken hata oluştu +STR_UNSUPPORTED_FILE_FORMAT=Desteklenmeyen sıkıştırılmış dosya formatı +STR_CUT=Kes +STR_COPY=Kopyala +STR_PASTE=Yapıştır +STR_MOVING=Taşınıyor +STR_COPYING=Kopyalanıyor +STR_FAIL_MOVE_MSG=Dosya taşınamadı +STR_FAIL_COPY_MSG=Dosya kopyalanamadı +STR_CANT_MOVE_TO_SUBDIR_MSG=Ana dizin alt dizinine taşınamaz +STR_CANT_COPY_TO_SUBDIR_MSG=Ana dizin alt dizinine kopyalanamaz +STR_UNSUPPORTED_OPERATION_MSG=Desteklenmeyen işlem +STR_HTTP_PORT=Http Portu +STR_REINSTALL_CONFIRM_MSG=İçerik zaten kurulu. Kuruluma devam etmek istiyor musunuz? +STR_REMOTE_NOT_SUPPORT_MSG=Korunan sunucular için uzak paket kurulumu desteklenmiyor. +STR_CANNOT_CONNECT_REMOTE_MSG=Uzak HTTP Sunucusuna bağlanılamıyor. +STR_DOWNLOAD_INSTALL_MSG=Uzak Paket Kurulumu mümkün değil. Paketi indirip kurmak ister misiniz? +STR_CHECKING_REMOTE_SERVER_MSG=Uzak Paket Kurulumu için uzak sunucu kontrol ediliyor. +STR_FILES=Dosyalar +STR_EDITOR=Düzenleyici +STR_SAVE=Kaydet +STR_MAX_EDIT_FILE_SIZE_MSG=Boyutu şu büyüklükten büyük dosyalar düzenlenemez +STR_DELETE_LINE=Seçili Satırı Sil +STR_INSERT_LINE=Seçili Satırın Altına Ekle +STR_MODIFIED=Değiştirildi +STR_FAIL_GET_TOKEN_MSG=Erişim token'ı alınamadı +STR_GET_TOKEN_SUCCESS_MSG=Giriş Başarılı. Tarayıcıyı kapatıp uygulamaya dönebilirsiniz +STR_NEW_FILE=Yeni Dosya +STR_SETTINGS=Ayarlar +STR_GLOBAL=Genel +STR_COPY_LINE=Seçili satırı kopyala +STR_PASTE_LINE=Seçili satıra yapıştır +STR_SHOW_HIDDEN_FILES=Gizli dosyaları göster +STR_SET_DEFAULT_DIRECTORY=Varsayılan Klasörü Ayarla +STR_SET_DEFAULT_DIRECTORY_MSG=varsayılan dizin olarak ayarlandı +STR_NFS_EXP_PATH_MISSING_MSG=URL'de NFS dışa aktarma yolu eksik +STR_FAIL_INIT_NFS_CONTEXT=NFS bağlamı başlatılamadı +STR_FAIL_MOUNT_NFS_MSG=NFS paylaşımı bağlanamadı +STR_VIEW_IMAGE=Görüntüyü Görüntüle diff --git a/data/assets/langs/Vietnamese.ini b/data/assets/langs/Vietnamese.ini new file mode 100644 index 0000000..15aadd9 --- /dev/null +++ b/data/assets/langs/Vietnamese.ini @@ -0,0 +1,133 @@ +STR_CONNECTION_SETTINGS=Cài đặt kết nối +STR_SITE=Vị trí +STR_LOCAL=Thiết bị +STR_REMOTE=Máy đích +STR_MESSAGES=Tin nhắn +STR_UPDATE_SOFTWARE=Cập nhật phần mềm +STR_CONNECT=Kết nối +STR_DISCONNECT=Ngắt kết nối +STR_SEARCH=Tìm kiếm +STR_REFRESH=Làm mới +STR_SERVER=Máy chủ +STR_USERNAME=Tên đăng nhập +STR_PASSWORD=Mật khẩu +STR_PORT=Cổng +STR_PASV=Pasv +STR_DIRECTORY=Thư mục +STR_FILTER=Bộ lọc +STR_YES=Đồng ý +STR_NO=Không +STR_CANCEL=Hủy bỏ +STR_CONTINUE=Tiếp tục +STR_CLOSE=Đóng +STR_FOLDER=Thư mục +STR_FILE=Tập tin +STR_TYPE=Loại +STR_NAME=Tên +STR_SIZE=Kích thước +STR_DATE=Ngày tháng +STR_NEW_FOLDER=Thư mục mới +STR_RENAME=Đổi tên +STR_DELETE=Xóa +STR_UPLOAD=Tải lên +STR_DOWNLOAD=Tải xuống +STR_SELECT_ALL=Chọn tất cả +STR_CLEAR_ALL=Bỏ chọn tất cả +STR_UPLOADING=Đang tải lên +STR_DOWNLOADING=Đang tải xuống +STR_OVERWRITE=Ghi đè +STR_DONT_OVERWRITE=Không ghi đè +STR_ASK_FOR_CONFIRM=Hỏi xác nhận +STR_DONT_ASK_CONFIRM=Không hỏi xác nhận +STR_ALLWAYS_USE_OPTION=Luôn dùng tùy chọn này và không hỏi lại +STR_ACTIONS=Hành động +STR_CONFIRM=Xác nhận +STR_OVERWRITE_OPTIONS=Tùy chọn ghi đè +STR_PROPERTIES=Thuộc tính +STR_PROGRESS=Tiến trình +STR_UPDATES=Cập nhật +STR_DEL_CONFIRM_MSG=Bạn có chắc chắn muốn xóa (những) tập tin / thư mục này không? +STR_CANCEL_ACTION_MSG=Hủy bỏ. Chờ hành động cuối cùng hoàn tất.Canceling. +STR_FAIL_UPLOAD_MSG=Không thể tải file lên +STR_FAIL_DOWNLOAD_MSG=Không thể tải file +STR_FAIL_READ_LOCAL_DIR_MSG=Không đọc được nội dung của thư mục hoặc thư mục không tồn tại. +STR_CONNECTION_CLOSE_ERR_MSG=426 Kết nối đã đóng. +STR_REMOTE_TERM_CONN_MSG=426 Máy chủ đã ngắt kết nối. +STR_FAIL_LOGIN_MSG=300 Đăng nhập thất bại. Vui lòng kiểm tra lại tên đăng nhập hoặc mật khẩu. +STR_FAIL_TIMEOUT_MSG=426 Thất bại. Quá thời gian kết nối. +STR_FAIL_DEL_DIR_MSG=Không thể xóa thư mục +STR_DELETING=Đang xóa +STR_FAIL_DEL_FILE_MSG=Không thể xóa tập tin +STR_DELETED=Đã xóa +STR_LINK=Liên kết +STR_SHARE=Chia sẻ +STR_FAILED=310 Lỗi +STR_FAIL_CREATE_LOCAL_FILE_MSG=310 Không thể tạo file trên máy này +STR_INSTALL=Cài đặt +STR_INSTALLING=Đang cài đặt +STR_INSTALL_SUCCESS=Thành công +STR_INSTALL_FAILED=Thất bại +STR_INSTALL_SKIPPED=Bỏ qua +STR_CHECK_HTTP_MSG=Đang kiểm tra kết nối tới máy chủ HTTP +STR_FAILED_HTTP_CHECK=Không thể kết nối tới máy chủ HTTP +STR_REMOTE_NOT_HTTP=Máy đích không phải máy chủ HTTP +STR_INSTALL_FROM_DATA_MSG=Package không có trong thư mục /data hoặc /mnt/usbX +STR_ALREADY_INSTALLED_MSG=Package đã được cài đặt +STR_INSTALL_FROM_URL=Cài từ địa chỉ URL +STR_CANNOT_READ_PKG_HDR_MSG=Không thể đọc được thông tin header của package +STR_FAVORITE_URLS=URLs yêu thích +STR_SLOT=Vị trí +STR_EDIT=Sửa +STR_ONETIME_URL=Url một lần +STR_NOT_A_VALID_PACKAGE=Package không đúng +STR_WAIT_FOR_INSTALL_MSG=Đợi Package kết thúc cài đặt +STR_FAIL_INSTALL_TMP_PKG_MSG=Không thể cài file pkg. Vui lòng xóa tmp pkg thủ công +STR_AUTO_DELETE_TMP_PKG=Tự động xóa file pkg được tải về tạm thời sau khi cài xong +STR_PROTOCOL_NOT_SUPPORTED=Protocol không được hỗ trợ +STR_COULD_NOT_RESOLVE_HOST=Không thể phân giải tên máy chủ +STR_EXTRACT=Giải nén +STR_EXTRACTING=Đang giải nén +STR_FAILED_TO_EXTRACT=Giải nén thất bại +STR_EXTRACT_LOCATION=Vị trí giải nén +STR_COMPRESS=Nén +STR_ZIP_FILE_PATH=Tên file Zip +STR_COMPRESSING=Đang nén +STR_ERROR_CREATE_ZIP=Lỗi khi tạo file zip +STR_UNSUPPORTED_FILE_FORMAT=Phần mở rộng file không được hỗ trợ +STR_CUT=Cắt +STR_COPY=Sao chép +STR_PASTE=Dán +STR_MOVING=Đang di chuyển +STR_COPYING=Đang copy +STR_FAIL_MOVE_MSG=Không thể di chuyển file +STR_FAIL_COPY_MSG=Không thể sao chép file +STR_CANT_MOVE_TO_SUBDIR_MSG=Không thể di chuyển thư mục cha vào bên trong thư mục con +STR_CANT_COPY_TO_SUBDIR_MSG=Không thể sao chép thư mục cha vào bên trong thư mục con +STR_UNSUPPORTED_OPERATION_MSG=Hành động không được hỗ trợ +STR_HTTP_PORT=Cổng Http +STR_REINSTALL_CONFIRM_MSG=Nội dung đã được cài đặt. Bạn có muốn tiếp tục cài đặt không? +STR_REMOTE_NOT_SUPPORT_MSG=Cài đặt gói từ xa không được hỗ trợ cho các máy chủ được bảo vệ. +STR_CANNOT_CONNECT_REMOTE_MSG=Máy chủ HTTP đích không thể truy cập được. +STR_DOWNLOAD_INSTALL_MSG=Không thể cài đặt package từ xa. Bạn có muốn tải package xuống và cài đặt không? +STR_CHECKING_REMOTE_SERVER_MSG=Đang kiểm tra máy chủ đích để cài đặt package từ xa. +STR_FILES=Tập tin +STR_EDITOR=Trình soạn thảo +STR_SAVE=Lưu +STR_MAX_EDIT_FILE_SIZE_MSG=Không thể chỉnh sửa các tập tin lớn hơn +STR_DELETE_LINE=Xóa dòng đã chọn +STR_INSERT_LINE=Chèn bên dưới dòng đã chọn +STR_MODIFIED=Đã sửa đổi +STR_FAIL_GET_TOKEN_MSG=Không thể lấy được access token từ +STR_GET_TOKEN_SUCCESS_MSG=Đăng nhập thành công. Bạn có thể đóng trình duyệt và quay lại ứng dụng +STR_NEW_FILE=Tập tin mới +STR_SETTINGS=Cài đặt +STR_GLOBAL=Toàn cục +STR_COPY_LINE=Sao chép dòng đã chọn +STR_PASTE_LINE=Dán vào dòng đã chọn +STR_SHOW_HIDDEN_FILES=Hiển thị các tập tin ẩn +STR_SET_DEFAULT_DIRECTORY=Đặt thư mục mặc định +STR_SET_DEFAULT_DIRECTORY_MSG=đã được thiết lập làm thư mục mặc định +STR_NFS_EXP_PATH_MISSING_MSG=Đường dẫn NFS bị thiếu trong URL +STR_FAIL_INIT_NFS_CONTEXT=Không khởi tạo được ngữ cảnh NFS +STR_FAIL_MOUNT_NFS_MSG=Không thể mount NFS share +STR_PROMOTING=Promoting diff --git a/myrient.jpg b/myrient.jpg new file mode 100644 index 0000000..609404e Binary files /dev/null and b/myrient.jpg differ diff --git a/source/actions.cpp b/source/actions.cpp index 47b0e17..68d249c 100644 --- a/source/actions.cpp +++ b/source/actions.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,7 @@ #include "clients/rclone.h" #include "clients/sftpclient.h" #include "filehost/filehost.h" +#include "server/http_server.h" #include "common.h" #include "fs.h" #include "config.h" @@ -1108,7 +1110,7 @@ namespace Actions } } - void *InstallUrlPkgThread(void *argp) + void *InstallLocalUrlPkgThread(void *argp) { bytes_transfered = 0; sceRtcGetCurrentTick(&prev_tick); @@ -1119,10 +1121,10 @@ namespace Actions OrbisTick tick; sceRtcGetCurrentClockLocalTime(&now); sceRtcGetTick(&now, &tick); - sprintf(filename, "%s/%lu.pkg", DATA_PATH, tick.mytick); + sprintf(filename, "%s/%lu.pkg", TMP_FOLDER_PATH, tick.mytick); std::string full_url = std::string(install_pkg_url.url); - FileHost *filehost = FileHost::getFileHost(full_url); + FileHost *filehost = FileHost::getFileHost(full_url, install_pkg_url.enable_alldebrid, install_pkg_url.enable_realdebrid); if (!filehost->IsValidUrl()) { sprintf(status_message, "%s", lang_strings[STR_FAIL_TO_OBTAIN_GG_DL_MSG]); @@ -1145,7 +1147,7 @@ namespace Actions std::string host = full_url.substr(0, path_pos); std::string path = full_url.substr(path_pos); - WebDAVClient tmp_client; + BaseClient tmp_client; tmp_client.Connect(host.c_str(), install_pkg_url.username, install_pkg_url.password); sprintf(activity_message, "%s URL to %s", lang_strings[STR_DOWNLOADING], filename); @@ -1153,7 +1155,7 @@ namespace Actions memset(&header, 0, s); int ret = tmp_client.Size(path, &bytes_to_download); - if (!ret) + if (ret == 0) { sprintf(status_message, "%s - %s", lang_strings[STR_FAILED], lang_strings[STR_CANNOT_READ_PKG_HDR_MSG]); tmp_client.Quit(); @@ -1163,7 +1165,7 @@ namespace Actions } file_transfering = 1; - int is_performed = tmp_client.Get(path, filename); + int is_performed = tmp_client.Get(filename, path); if (is_performed == 0) { @@ -1216,10 +1218,70 @@ namespace Actions return NULL; } + void *InstallRpiUrlPkgThread(void *argp) + { + json_object *params = json_object_new_object(); + json_object_object_add(params, "url", json_object_new_string(install_pkg_url.url)); + json_object_object_add(params, "use_alldebrid", json_object_new_boolean(install_pkg_url.enable_alldebrid)); + json_object_object_add(params, "use_realdebrid", json_object_new_boolean(install_pkg_url.enable_realdebrid)); + json_object_object_add(params, "use_disk_cache", json_object_new_boolean(install_pkg_url.enable_disk_cache)); + + const char *params_str = json_object_to_json_string(params); + + char host[128]; + sprintf(host, "http://127.0.0.1:%d", http_server_port); + + httplib::Client tmp_client(host); + tmp_client.set_keep_alive(true); + tmp_client.set_follow_location(true); + tmp_client.set_connection_timeout(30); + tmp_client.set_read_timeout(30); + tmp_client.enable_server_certificate_verification(false); + + auto res = tmp_client.Post("/__local__/install_url", params_str, strlen(params_str), "application/json"); + if (res != nullptr && HTTP_SUCCESS(res->status)) + { + json_object *jobj = json_tokener_parse(res->body.c_str()); + if (jobj != nullptr) + { + json_object *result = json_object_object_get(jobj, "result"); + if (result != nullptr) + { + bool success = json_object_get_boolean(json_object_object_get(result, "success")); + if (!success) + { + const char* error_message = json_object_get_string(json_object_object_get(result, "error")); + sprintf(status_message, "%s", error_message); + activity_inprogess = false; + Windows::SetModalMode(false); + } + } + } + else + { + activity_inprogess = false; + Windows::SetModalMode(false); + } + } + else + { + activity_inprogess = false; + Windows::SetModalMode(false); + } + + return NULL; + } + void InstallUrlPkg() { + int res; sprintf(status_message, "%s", ""); - int res = pthread_create(&bk_activity_thid, NULL, InstallUrlPkgThread, NULL); + + if (!install_pkg_url.enable_rpi) + res = pthread_create(&bk_activity_thid, NULL, InstallLocalUrlPkgThread, NULL); + else + res = pthread_create(&bk_activity_thid, NULL, InstallRpiUrlPkgThread, NULL); + if (res != 0) { activity_inprogess = false; diff --git a/source/actions.h b/source/actions.h index 14982aa..6c111c0 100644 --- a/source/actions.h +++ b/source/actions.h @@ -99,7 +99,8 @@ namespace Actions void InstallRemotePkgs(); void *InstallLocalPkgsThread(void *argp); void InstallLocalPkgs(); - void *InstallUrlPkgThread(void *argp); + void *InstallLocalUrlPkgThread(void *argp); + void *InstallRpiUrlPkgThread(void *argp); void InstallUrlPkg(); void *KeepAliveThread(void *argp); void *ExtractZipThread(void *argp); diff --git a/source/config.cpp b/source/config.cpp index 9efc6fa..28457fd 100644 --- a/source/config.cpp +++ b/source/config.cpp @@ -152,12 +152,15 @@ namespace CONFIG FS::MkDirs(DATA_PATH); } + memset(&install_pkg_url, 0, sizeof(install_pkg_url)); + install_pkg_url.enable_rpi = true; + sites = {"Site 1", "Site 2", "Site 3", "Site 4", "Site 5", "Site 6", "Site 7", "Site 8", "Site 9", "Site 10", "Site 11", "Site 12", "Site 13", "Site 14", "Site 15", "Site 16", "Site 17", "Site 18", "Site 19", "Site 20"}; langs = { "Default", "Arabic", "Catalan", "Croatian", "Dutch", "English", "Euskera", "French", "Galego", "German", "Greek", "Hungarian", "Indonesian", "Italiano", "Japanese", "Korean", "Polish", "Portuguese_BR", "Russian", "Romanian", "Ryukyuan", "Spanish", "Turkish", - "Simplified Chinese", "Traditional Chinese", "Thai", "Ukrainian"}; + "Simplified Chinese", "Traditional Chinese", "Thai", "Ukrainian", "Vietnamese"}; http_servers = {HTTP_SERVER_APACHE, HTTP_SERVER_MS_IIS, HTTP_SERVER_NGINX, HTTP_SERVER_NPX_SERVE, HTTP_SERVER_RCLONE, HTTP_SERVER_ARCHIVEORG, HTTP_SERVER_MYRIENT}; text_file_extensions = { ".txt", ".ini", ".log", ".json", ".xml", ".html", ".xhtml", ".conf", ".config" }; diff --git a/source/config.h b/source/config.h index 60bfae5..271886c 100644 --- a/source/config.h +++ b/source/config.h @@ -121,6 +121,10 @@ struct PackageUrlInfo char url[512]; char username[33]; char password[25]; + bool enable_alldebrid; + bool enable_realdebrid; + bool enable_disk_cache; + bool enable_rpi; }; extern std::vector sites; diff --git a/source/lang.cpp b/source/lang.cpp index face292..4a48d9d 100644 --- a/source/lang.cpp +++ b/source/lang.cpp @@ -172,8 +172,11 @@ char lang_strings[LANG_STRINGS_NUM][LANG_STR_SIZE] = { "Temp Directory", // STR_TEMP_DIRECTORY "Real-Debrid", // STR_REALDEBRID "Package install is running in the background. Don't close the app while install is in progress", // STR_BACKGROUND_INSTALL_INPROGRESS - "Enable disk caching. Can improve package install speed in cases where connection to remote is slow", // STR_ENABLE_DISC_CACHE_MSG + "Enable disk caching. Can improve package install speed in cases where connection to remote is slow, but breaks resuming of install", // STR_ENABLE_DISC_CACHE_MSG "DC", // STR_ENABLE_DISK_CACHE + "Install Via AllDebrid", // STR_ENABLE_ALLDEBRID_MSG + "Install Via RealDebrid", // STR_ENABLE_REALDEBRID_MSG + "Enable Disk Cache", // STR_ENABLE_DISKCACHE_DESC }; bool needs_extended_font = false; diff --git a/source/lang.h b/source/lang.h index 1216aba..2408b7c 100644 --- a/source/lang.h +++ b/source/lang.h @@ -167,7 +167,10 @@ FUNC(STR_REALDEBRID) \ FUNC(STR_BACKGROUND_INSTALL_INPROGRESS) \ FUNC(STR_ENABLE_DISC_CACHE_MSG) \ - FUNC(STR_ENABLE_DISK_CACHE) + FUNC(STR_ENABLE_DISK_CACHE) \ + FUNC(STR_ENABLE_ALLDEBRID_MSG) \ + FUNC(STR_ENABLE_REALDEBRID_MSG) \ + FUNC(STR_ENABLE_DISKCACHE_DESC) #define GET_VALUE(x) x, #define GET_STRING(x) #x, @@ -177,7 +180,7 @@ enum FOREACH_STR(GET_VALUE) }; -#define LANG_STRINGS_NUM 164 +#define LANG_STRINGS_NUM 167 #define LANG_ID_SIZE 64 #define LANG_STR_SIZE 384 extern char lang_identifiers[LANG_STRINGS_NUM][LANG_ID_SIZE]; diff --git a/source/main.cpp b/source/main.cpp index de60173..7e209b9 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -139,41 +139,43 @@ void InitImgui() sceSystemServiceParamGetInt( ORBIS_SYSTEM_SERVICE_PARAM_ID_LANG, &lang_idx ); lang = Util::Trim(lang, " "); - if (lang.compare("Korean") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_KOREAN)) + bool use_system_lang = lang.empty() || lang.compare("Default") == 0; + + if (lang.compare("Korean") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_KOREAN)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, io.Fonts->GetGlyphRangesKorean()); } - else if (lang.compare("Simplified Chinese") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_CHINESE_S)) + else if (lang.compare("Simplified Chinese") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_CHINESE_S)) { ImFontConfig config; config.OversampleH = 1; config.OversampleV = 1; io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, &config, io.Fonts->GetGlyphRangesChineseFull()); } - else if (lang.compare("Traditional Chinese") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_CHINESE_T)) + else if (lang.compare("Traditional Chinese") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_CHINESE_T)) { ImFontConfig config; config.OversampleH = 1; config.OversampleV = 1; io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, &config, io.Fonts->GetGlyphRangesChineseFull()); } - else if (lang.compare("Japanese") == 0 || lang.compare("Ryukyuan") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_JAPANESE)) + else if (lang.compare("Japanese") == 0 || lang.compare("Ryukyuan") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_JAPANESE)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); } - else if (lang.compare("Thai") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_THAI)) + else if (lang.compare("Thai") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_THAI)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, io.Fonts->GetGlyphRangesThai()); } - else if (lang.compare("Vietnamese") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_VIETNAMESE)) + else if (lang.compare("Vietnamese") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_VIETNAMESE)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, io.Fonts->GetGlyphRangesVietnamese()); } - else if (lang.compare("Greek") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_GREEK)) + else if (lang.compare("Greek") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_GREEK)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, io.Fonts->GetGlyphRangesGreek()); } - else if (lang.compare("Arabic") == 0 || (lang.empty() && lang_idx == ORBIS_SYSTEM_PARAM_LANG_ARABIC)) + else if (lang.compare("Arabic") == 0 || (use_system_lang && lang_idx == ORBIS_SYSTEM_PARAM_LANG_ARABIC)) { io.Fonts->AddFontFromFileTTF("/app0/assets/fonts/Roboto_ext.ttf", 26.0f, NULL, arabic); } diff --git a/source/server/http_server.cpp b/source/server/http_server.cpp index b2ac4a0..e3a25ae 100644 --- a/source/server/http_server.cpp +++ b/source/server/http_server.cpp @@ -1177,6 +1177,12 @@ namespace HttpServer SplitPkgInstallData *pkg_data = INSTALLER::GetSplitPkgInstallData(hash); + if (pkg_data == nullptr) + { + failed(res, 500, "Cannot resume split_inst"); + return; + } + if (req.method == "HEAD") { res.status = 204; diff --git a/source/windows.cpp b/source/windows.cpp index b47483c..14e5327 100644 --- a/source/windows.cpp +++ b/source/windows.cpp @@ -450,7 +450,7 @@ namespace Windows } if (ImGui::IsItemHovered()) { - ImGui::SetNextWindowSize(ImVec2(450, 70)); + ImGui::SetNextWindowSize(ImVec2(450, 110)); ImGui::BeginTooltip(); ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + 440); ImGui::Text("%s", lang_strings[STR_ENABLE_RPI_FTP_SMB_MSG]); @@ -469,7 +469,7 @@ namespace Windows } if (ImGui::IsItemHovered()) { - ImGui::SetNextWindowSize(ImVec2(550, 85)); + ImGui::SetNextWindowSize(ImVec2(550, 110)); ImGui::BeginTooltip(); ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + 540); ImGui::Text("%s", lang_strings[STR_ENABLE_DISC_CACHE_MSG]); @@ -1498,7 +1498,52 @@ namespace Windows { ImVec2 cur_pos = ImGui::GetCursorPos(); char id[128]; - if (ImGui::Button(lang_strings[STR_ONETIME_URL], ImVec2(535, 0))) + + ImGui::Checkbox("##enable_alldebrid_install_uril", &install_pkg_url.enable_alldebrid); + ImGui::SameLine(); + ImGui::Text("%s", lang_strings[STR_ENABLE_ALLDEBRID_MSG]); + + ImGui::SameLine(); + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+40); + ImGui::Checkbox("##enable_realdebrid_install_uril", &install_pkg_url.enable_realdebrid); + ImGui::SameLine(); + ImGui::Text("%s", lang_strings[STR_ENABLE_REALDEBRID_MSG]); + + ImGui::SameLine(); + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+40); + ImGui::Checkbox("##enable_rpi_install_url", &install_pkg_url.enable_rpi); + if (ImGui::IsItemHovered()) + { + ImGui::SetNextWindowSize(ImVec2(550, 110)); + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + 540); + ImGui::Text("%s", lang_strings[STR_ENABLE_RPI_WEBDAV_MSG]); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + ImGui::SameLine(); + ImGui::Text("%s", lang_strings[STR_ENABLE_RPI]); + + if (install_pkg_url.enable_rpi) + { + ImGui::SameLine(); + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+40); + ImGui::Checkbox("##enable_diskcache_install_uril", &install_pkg_url.enable_disk_cache); + if (ImGui::IsItemHovered()) + { + ImGui::SetNextWindowSize(ImVec2(550, 110)); + ImGui::BeginTooltip(); + ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + 540); + ImGui::Text("%s", lang_strings[STR_ENABLE_DISC_CACHE_MSG]); + ImGui::PopTextWrapPos(); + ImGui::EndTooltip(); + } + ImGui::SameLine(); + ImGui::Text("%s", lang_strings[STR_ENABLE_DISKCACHE_DESC]); + } + + ImGui::Separator(); + if (ImGui::Button(lang_strings[STR_ONETIME_URL], ImVec2(1070, 0))) { ResetImeCallbacks(); sprintf(install_pkg_url.url, "%s", ""); @@ -1512,14 +1557,6 @@ namespace Windows SetModalMode(false); ImGui::CloseCurrentPopup(); } - ImGui::SameLine(); - sprintf(id, "%s##favoriteurl", lang_strings[STR_CANCEL]); - if (ImGui::Button(id, ImVec2(535, 0))) - { - select_url_inprogress = false; - SetModalMode(false); - ImGui::CloseCurrentPopup(); - } ImGui::Separator(); for (int j = 0; j < MAX_FAVORITE_URLS; j++) @@ -1567,6 +1604,13 @@ namespace Windows } } + if (ImGui::IsKeyPressed(ImGuiKey_GamepadFaceRight, false)) + { + select_url_inprogress = false; + SetModalMode(false); + ImGui::CloseCurrentPopup(); + } + ImGui::EndPopup(); } }