"
- ""
- "");
-}
-
class ProgressTracker {
public:
- ProgressTracker(int sessionId) : sessionId_(sessionId) {
+ ProgressTracker(int sessionId, s64 totalSize) : sessionId_(sessionId) {
std::lock_guard guard(g_webServerLock);
- g_uploadsInProgress[sessionId_] = UploadProgress();
+ g_uploadsInProgress[sessionId_] = UploadProgress{totalSize};
}
~ProgressTracker() {
std::lock_guard guard(g_webServerLock);
@@ -531,10 +524,9 @@ public:
void SetFile(std::string_view filename, size_t size) {
std::lock_guard guard(g_webServerLock);
auto &upload = g_uploadsInProgress[sessionId_];
- upload.currentFilename = filename;
+ upload.filename = filename;
upload.currentFileSize = size;
- upload.uploadedFiles++;
- upload.totalBytesBeforeCurrentFile = upload.uploadedBytes;
+ upload.uploadedBytes = 0;
}
void AddBytes(size_t bytes) {
std::lock_guard guard(g_webServerLock);
@@ -559,6 +551,8 @@ static MultiPartResult HandleMultipartPart(const http::ServerRequest &request, s
}
std::string disposition = request.In()->ReadLine();
+
+ INFO_LOG(Log::HTTP, "Disposition: %s", disposition.c_str());
std::vector parts;
SplitString(disposition, ';', parts);
if (parts.size() < 2 || !startsWith(parts[0], "Content-Disposition: form-data")) {
@@ -621,7 +615,7 @@ static MultiPartResult HandleMultipartPart(const http::ServerRequest &request, s
}
}
- progress.SetFile(filename);
+ progress.SetFile(filename, 0);
u64 bytesTransferred = 0;
char buffer[net::InputSink::BUFFER_SIZE];
while (true) {
@@ -631,6 +625,8 @@ static MultiPartResult HandleMultipartPart(const http::ServerRequest &request, s
if (fwrite(buffer, 1, readBytes, fp) != readBytes) {
ERROR_LOG(Log::HTTP, "Failed to write %d bytes to destination file '%s' - disk full?", (int)readBytes, destPath.ToVisualString().c_str());
fclose(fp);
+ // Delete the partially written file, so the user doesn't try to play it.
+ File::Delete(destPath);
return MultiPartResult::RequestError;
}
}
@@ -647,7 +643,8 @@ static MultiPartResult HandleMultipartPart(const http::ServerRequest &request, s
fclose(fp);
}
- g_OSD.Show(OSDType::, StringFromFormat("Uploaded '%s' (%d bytes)", filename.c_str(), (int)bytesTransferred), 5.0f);
+ auto n = GetI18NCategory(I18NCat::NETWORKING);
+ g_OSD.Show(OSDType::MESSAGE_SUCCESS, ApplySafeSubstitutions(n->T("File transfer complete: %1"), filename));
// NOTE: We already read the boundary above.
// However if this is the last part, the boundary will have "--\r\n" after it, otherwise there will be a line break.
@@ -708,7 +705,7 @@ static void HandleUploadPost(const http::ServerRequest &request) {
}
const std::string boundary = contentType.substr(bpos + strlen("boundary="));
- // The total length of the entire multipart thing.
+ // The total length of the entire multipart thing. This is just above the full size of the upload, so let's use it for progress.
u64 contentLength = request.Header().content_length;
if (contentLength == 0) {
WARN_LOG(Log::HTTP, "Bad content length");
@@ -717,7 +714,7 @@ static void HandleUploadPost(const http::ServerRequest &request) {
const int sessionId = g_uploadSessionId.fetch_add(1);
- ProgressTracker progress(sessionId);
+ ProgressTracker progress(sessionId, contentLength);
while (true) {
MultiPartResult result = HandleMultipartPart(request, boundary, uploadPath, progress);
switch (result) {
@@ -728,7 +725,6 @@ static void HandleUploadPost(const http::ServerRequest &request) {
return;
case MultiPartResult::LocalError:
request.WriteHttpResponseHeader("1.0", 500, -1, "text/plain"); // Server error
- // Disk full etc.
return;
case MultiPartResult::MoveToNext:
// Else just continue to the next part.
diff --git a/Core/WebServer.h b/Core/WebServer.h
index 36e2bf4e3f..9fd1f4f807 100644
--- a/Core/WebServer.h
+++ b/Core/WebServer.h
@@ -44,12 +44,10 @@ void WebServerSetUploadPath(const Path &path);
int WebServerPort();
struct UploadProgress {
- s64 uploadedBytes = 0;
s64 totalBytes = 0;
- s64 uploadedFiles = 0; // we don't know the count ahead of time
+ s64 uploadedBytes = 0;
s64 currentFileSize = 0;
- s64 totalBytesBeforeCurrentFile = 0;
- std::string currentFilename;
+ std::string filename;
};
std::vector GetUploadsInProgress();
diff --git a/UI/GameInfoCache.cpp b/UI/GameInfoCache.cpp
index 6b0a5a8388..87da296dad 100644
--- a/UI/GameInfoCache.cpp
+++ b/UI/GameInfoCache.cpp
@@ -150,6 +150,7 @@ bool GameInfo::Delete() {
case IdentifiedFileType::ARCHIVE_RAR:
case IdentifiedFileType::ARCHIVE_ZIP:
case IdentifiedFileType::ARCHIVE_7Z:
+ case IdentifiedFileType::UNKNOWN:
case IdentifiedFileType::PPSSPP_GE_DUMP:
{
const Path &fileToRemove = filePath_;
diff --git a/UI/UIAtlas.cpp b/UI/UIAtlas.cpp
index 673a084939..9a57a20777 100644
--- a/UI/UIAtlas.cpp
+++ b/UI/UIAtlas.cpp
@@ -141,6 +141,8 @@ static const ImageMeta imageIDs[] = {
{"I_FOLDER_UPLOAD", false},
{"I_FILE", false},
{"I_FILE_COPY", false},
+ {"I_WEB_BROWSER", false},
+ {"I_WIFI", false},
};
static std::string PNGNameFromID(std::string_view id) {
diff --git a/UI/UploadScreen.cpp b/UI/UploadScreen.cpp
index 3a04bcef49..bea69b4a0c 100644
--- a/UI/UploadScreen.cpp
+++ b/UI/UploadScreen.cpp
@@ -1,9 +1,52 @@
+#include
#include "Common/Net/Resolve.h"
#include "Common/System/Request.h"
#include "Common/File/DiskFree.h"
-#include "UI/UploadScreen.h"
#include "Common/StringUtils.h"
+#include "Common/Data/Text/Parsers.h"
#include "Core/WebServer.h"
+#include "UI/UploadScreen.h"
+
+// Compound view, showing a text with an icon.
+class TextWithImage : public UI::LinearLayout {
+public:
+ TextWithImage(ImageID imageID, std::string_view text, UI::LinearLayoutParams *layoutParams = nullptr);
+};
+
+TextWithImage::TextWithImage(ImageID imageID, std::string_view text, UI::LinearLayoutParams *layoutParams) : UI::LinearLayout(UI::ORIENT_HORIZONTAL, layoutParams) {
+ using namespace UI;
+ SetSpacing(8.0f);
+ if (!layoutParams) {
+ layoutParams_->width = FILL_PARENT;
+ layoutParams_->height = ITEM_HEIGHT;
+ }
+ if (imageID.isValid()) {
+ Add(new ImageView(imageID, "", UI::IS_DEFAULT, new LinearLayoutParams(0.0f, UI::Gravity::G_VCENTER)));
+ }
+ Add(new TextView(text, new LinearLayoutParams(1.0f, UI::Gravity::G_VCENTER)));
+}
+
+// Compound view, showing a copyable string.
+class CopyableText : public UI::LinearLayout {
+public:
+ CopyableText(ImageID imageID, std::string_view text, UI::LinearLayoutParams *layoutParams = nullptr);
+};
+
+CopyableText::CopyableText(ImageID imageID, std::string_view text, UI::LinearLayoutParams *layoutParams) : UI::LinearLayout(UI::ORIENT_HORIZONTAL, layoutParams) {
+ using namespace UI;
+ SetSpacing(8.0f);
+ if (!layoutParams) {
+ layoutParams_->width = FILL_PARENT;
+ layoutParams_->height = ITEM_HEIGHT;
+ }
+ if (imageID.isValid()) {
+ Add(new ImageView(imageID, "", UI::IS_DEFAULT, new LinearLayoutParams(0.0f, UI::Gravity::G_VCENTER)));
+ }
+ Add(new TextView(text, new LinearLayoutParams(1.0f, UI::Gravity::G_VCENTER)))->SetBig(true);
+ Add(new Choice(ImageID("I_FILE_COPY"), new LinearLayoutParams()))->OnClick.Add([text](UI::EventParams &) {
+ System_CopyStringToClipboard(text);
+ });
+}
UploadScreen::UploadScreen(const Path &targetFolder) : targetFolder_(targetFolder) {
net::GetLocalIP4List(localIPs_);
@@ -17,36 +60,47 @@ UploadScreen::~UploadScreen() {
void UploadScreen::CreateViews() {
using namespace UI;
- auto co = GetI18NCategory(I18NCat::NETWORKING);
+ auto n = GetI18NCategory(I18NCat::NETWORKING);
root_ = new LinearLayout(ORIENT_VERTICAL);
- LinearLayout *topBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
- topBar->Add(new Choice(ImageID("I_NAVIGATE_BACK"), new LinearLayoutParams()))->OnClick.Handle(this, &UIScreen::OnBack);
+ LinearLayout *topBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
root_->Add(topBar);
+ topBar->Add(new Choice(ImageID("I_NAVIGATE_BACK"), new LinearLayoutParams()))->OnClick.Handle(this, &UIScreen::OnBack);
+
+ LinearLayout *container = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(500, FILL_PARENT, 0.0f, UI::Gravity::G_HCENTER, Margins(10)));
+ root_->Add(container);
+
+ container->Add(new TextWithImage(ImageID("I_FOLDER_UPLOAD"), targetFolder_.ToVisualString()));
+ container->Add(new Spacer(20.0f));
+
if (prevRunning_) {
- root_->Add(new TextView(co->T("On your other device, connect to the same network, then go to this URL:")));
+ container->Add(new TextWithImage(ImageID("I_WIFI"), n->T("With a web browser on the same network, go to:")));
for (const auto &ip : localIPs_) {
std::string url = StringFromFormat("http://%s:%d/upload", ip.c_str(), WebServerPort());
- root_->Add(new TextView(url));
- root_->Add(new Choice(ImageID("I_FILE_COPY")))->OnClick.Add([url](UI::EventParams &) {
- System_CopyStringToClipboard(url);
- });
+ container->Add(new CopyableText(ImageID("I_WEB_BROWSER"), url));
}
- } else {
- root_->Add(new TextView(co->T("Connecting...")));
}
- root_->Add(new TextView(std::string(co->T("Uploading to: ")) + targetFolder_.ToVisualString()));
+ statusContainer_ = new LinearLayout(ORIENT_VERTICAL);
+ container->Add(statusContainer_);
+}
+void UploadScreen::RecreateStatus() {
+ if (!statusContainer_) {
+ return;
+ }
+
+ using namespace UI;
+ statusContainer_->Clear();
// Show information about current upload streams (there can be multiple, but normally it's just one
// where files are uploaded sequentially).
std::vector uploads = GetUploadsInProgress();
for (const auto &upload : uploads) {
- std::string uploadText = StringFromFormat("%zu / %zu total bytes (%zu files). Current: %s",
- upload.uploadedBytes, upload.totalBytes, upload.uploadedFiles,
- upload.currentFilename.c_str());
- root_->Add(new TextView(uploadText));
+ int percent = upload.totalBytes == 0 ? 0 : (int)(ceil(100.0 * (double)upload.uploadedBytes / (double)upload.totalBytes));
+ std::string uploadText = StringFromFormat("%s: %s/%s (%d%%)", upload.filename.c_str(),
+ NiceSizeFormat(upload.uploadedBytes).c_str(), NiceSizeFormat(upload.totalBytes).c_str(), percent);
+ statusContainer_->Add(new TextWithImage(ImageID("I_FILE"), uploadText));
}
}
@@ -58,9 +112,9 @@ void UploadScreen::update() {
RecreateViews();
}
- // Update in-progress uploads approximately every half second.
- if (lastUpdate_.ElapsedSeconds() > 0.5) {
- RecreateViews();
+ // Update in-progress uploads approximately every quarter of a second.
+ if (lastUpdate_.ElapsedSeconds() > 0.25) {
+ RecreateStatus();
lastUpdate_ = Instant::Now();
}
}
diff --git a/UI/UploadScreen.h b/UI/UploadScreen.h
index 8e17d7cdaa..b5acafe555 100644
--- a/UI/UploadScreen.h
+++ b/UI/UploadScreen.h
@@ -43,8 +43,10 @@ protected:
const char *tag() const override { return "Upload"; }
private:
+ void RecreateStatus();
bool prevRunning_ = false;
std::vector localIPs_;
Path targetFolder_;
Instant lastUpdate_;
+ UI::ViewGroup *statusContainer_ = nullptr;
};
diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini
index 502c3566f3..a61c80e46e 100644
--- a/assets/lang/ar_AE.ini
+++ b/assets/lang/ar_AE.ini
@@ -975,6 +975,7 @@ Error = فشل
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = اکتمال نقل الملف: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = اسم المستضيف
@@ -1008,6 +1009,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = باستخدام متصفح ويب على نفس الشبكة، انتقل إلى:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini
index 979e521c3b..77e56211e3 100644
--- a/assets/lang/az_AZ.ini
+++ b/assets/lang/az_AZ.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Fail köçürməsi tamamlandı: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Eyni şəbəkədə veb brauzer ilə daxil olun:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/be_BY.ini b/assets/lang/be_BY.ini
index d95ed362b7..b35bed2e71 100644
--- a/assets/lang/be_BY.ini
+++ b/assets/lang/be_BY.ini
@@ -934,6 +934,7 @@ Error = Памылка
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Перадача файла завершана: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Імя хаста
@@ -967,6 +968,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = Можа працаваць не на ўсіх прыладах або ў гульнях, глядзіце вікі.
Validating address... = Праверка адраса...
+With a web browser on the same network, go to: = З дапамогай вэб-браўзера ў той жа сетцы, перайдзіце па адрасе:
WLAN Channel = Канал WLAN
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini
index 94ecd8534d..411fc83378 100644
--- a/assets/lang/bg_BG.ini
+++ b/assets/lang/bg_BG.ini
@@ -967,6 +967,7 @@ Error = Грешка
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Пренос на файл завършен: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = С веб браузър в същата мрежа, отидете на:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini
index 34c83fcd23..42d391b01f 100644
--- a/assets/lang/ca_ES.ini
+++ b/assets/lang/ca_ES.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Transferència de fitxer completada: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Amb un navegador web a la mateixa xarxa, ves a:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini
index 59b47a6773..43c15efac4 100644
--- a/assets/lang/cz_CZ.ini
+++ b/assets/lang/cz_CZ.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Přenos souboru dokončen: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = S webovým prohlížečem ve stejné síti přejděte na:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini
index 25ea6e4986..c03df4f9aa 100644
--- a/assets/lang/da_DK.ini
+++ b/assets/lang/da_DK.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Filoverførsel færdig: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Med en webbrowser på det samme netværk, gå til:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini
index c2ef28e4b5..495ca54e00 100644
--- a/assets/lang/de_DE.ini
+++ b/assets/lang/de_DE.ini
@@ -957,6 +957,7 @@ Error = Fehler
Failed to Bind Localhost IP = Localhost-IP konnte nicht gebunden werden
Failed to Bind Port = Port konnte nicht gebunden werden
Failed to connect to Adhoc Server = Verbindung zum Ad-hoc-Server fehlgeschlagen
+File transfer completed: %1 = Dateiübertragung abgeschlossen: %1
Forced First Connect = Erzwungene erste Verbindung (Schneller Verbinden)
GM: Data from Unknown Port = GM: Daten von unbekanntem Port
Hostname = Hostname
@@ -990,6 +991,7 @@ UPnP need to be reinitialized = UPnP muss neu initialisiert werden
UPnP use original port = UPnP-Original-Port verwenden (aktiviert = PSP-Kompatibilität)
UseOriginalPort Tip = Funktioniert möglicherweise nicht mit allen Geräten oder Spielen. Siehe Wiki.
Validating address... = Adresse wird validiert...
+With a web browser on the same network, go to: = Öffnen Sie mit einem Webbrowser im gleichen Netzwerk:
WLAN Channel = WLAN-Kanal
You're in Offline Mode, go to lobby or online hall = Du bist im Offline-Modus. Gehe in die Lobby oder Online-Halle.
diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini
index 00408e5741..ea82720019 100644
--- a/assets/lang/dr_ID.ini
+++ b/assets/lang/dr_ID.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Transfer file selesai: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Dengan browser web di jaringan yang sama, pergi ke:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini
index 76855bfde8..5b01601bf6 100644
--- a/assets/lang/en_US.ini
+++ b/assets/lang/en_US.ini
@@ -958,6 +958,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = File transfer completed: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -991,6 +992,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = With a web browser on the same network, go to:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini
index 8e13be0f04..8f42aeae43 100644
--- a/assets/lang/es_ES.ini
+++ b/assets/lang/es_ES.ini
@@ -968,6 +968,7 @@ Error = Error
Failed to Bind Localhost IP = Error al unirse a la IP localhost
Failed to Bind Port = Error al vincular puerto
Failed to connect to Adhoc Server = Error al conectar al servidor Ad-Hoc
+File transfer completed: %1 = Transferencia de archivo completada: %1
Forced First Connect = Primera conexión forzada (más rápida)
GM: Data from Unknown Port = GM: Datos de puerto desconocido
Hostname = Nombre de host
@@ -1001,6 +1002,7 @@ UPnP need to be reinitialized = Es necesario reiniciar UPnP
UPnP use original port = UPnP usa puerto original (activado = compatibilidad PSP)
UseOriginalPort Tip = Puede que no funcione con todos los dispositivos o juegos, consulta la wiki.
Validating address... = Validando dirección...
+With a web browser on the same network, go to: = Con un navegador web en la misma red, ve a:
WLAN Channel = Canal WLAN
You're in Offline Mode, go to lobby or online hall = Estás en modo offline, ve al lobby o a la sala online
diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini
index 4378e1e82e..b09a1f7b2f 100644
--- a/assets/lang/es_LA.ini
+++ b/assets/lang/es_LA.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Fallo al unirse a la IP localhost
Failed to Bind Port = Fallo al unir puerto
Failed to connect to Adhoc Server = Fallo al conectar al servidor Adhoc
+File transfer completed: %1 = Transferencia de archivo completada: %1
Forced First Connect = Primera conexión forzada (más rápida)
GM: Data from Unknown Port = GM: Datos de puerto desconocido
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = La función de UPnP debe reinicializarse.
UPnP use original port = Usar puerto UPnP de PSP (activado = más compatible con PSP )
UseOriginalPort Tip = Puede que no funcione para todos los dispositivos o juegos, consulte la wiki.
Validating address... = Validando dirección ...
+With a web browser on the same network, go to: = Con un navegador web en la misma red, dirígete a:
WLAN Channel = Canal WLAN
You're in Offline Mode, go to lobby or online hall = Estás en modo fuera de línea, ve al lobby o sala en línea
diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini
index f051092e78..8fbe820a16 100644
--- a/assets/lang/fa_IR.ini
+++ b/assets/lang/fa_IR.ini
@@ -967,6 +967,7 @@ Error = خطا
Failed to Bind Localhost IP = اتصال به IP localhost شکست خورد
Failed to Bind Port = اتصال به درگاه شکست خورد
Failed to connect to Adhoc Server = اتصال به سرور ادهاک شکست خورد
+File transfer completed: %1 = انتقال فایل تمام شد: %1
Forced First Connect = اتصال اول اجباری (اتصال سریع تر)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = نام میزبان
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP باید بازراهاندازی شود
UPnP use original port = استفاده از درگاه اصلی UPnP (فعال = سازگاری با PSP)
UseOriginalPort Tip = ممکن است برای همه دستگاه ها یا بازی ها کار نکند، ویکی را ببینید.
Validating address... = اعتبارسنجی نشانی...
+With a web browser on the same network, go to: = با یک مرورگر وب در همان شبکه، به:
WLAN Channel = کانال WLAN
You're in Offline Mode, go to lobby or online hall = شما در حالت آفلاین هستید، به لابی یا سالن آنلاین بروید.
diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini
index d969dfc00d..d6a83e07ad 100644
--- a/assets/lang/fi_FI.ini
+++ b/assets/lang/fi_FI.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Tiedostonsiirto valmis: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Selaimessa, joka on samassa verkossa, siirry:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini
index 3d41c91e2b..237519a3ba 100644
--- a/assets/lang/fr_FR.ini
+++ b/assets/lang/fr_FR.ini
@@ -967,6 +967,7 @@ Error = Erreur
Failed to Bind Localhost IP = Échec de liaison de l'IP localhost
Failed to Bind Port = Échec de liaison du port
Failed to connect to Adhoc Server = Échec de connexion au serveur ad hoc
+File transfer completed: %1 = Transfert de fichier terminé : %1
Forced First Connect = Première connexion forcée (connexion plus rapide)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP doit être réinitialisé
UPnP use original port = Utiliser les ports originaux avec UPnP (activé = compatibilité PSP)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validation de l'adresse...
+With a web browser on the same network, go to: = Avec un navigateur web sur le même réseau, allez à :
WLAN Channel = Canal WLAN
You're in Offline Mode, go to lobby or online hall = Vous êtes en mode hors ligne, allez dans le hall en ligne.
diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini
index ea389a5e94..78da604080 100644
--- a/assets/lang/gl_ES.ini
+++ b/assets/lang/gl_ES.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Transferencia de ficheiro completada: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Con un navegador web na mesma rede, vai a:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini
index 8922198139..bed0ecc463 100644
--- a/assets/lang/gr_EL.ini
+++ b/assets/lang/gr_EL.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Η μεταφορά αρχείου ολοκληρώθηκε: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Επικύρωση διεύθυνσης...
+With a web browser on the same network, go to: = Με έναν περιηγητή ιστού στο ίδιο δίκτυο, πηγαίνετε σε:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini
index 3e9a068f90..80eb460aa8 100644
--- a/assets/lang/he_IL.ini
+++ b/assets/lang/he_IL.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = העברת קובץ הושלמה: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = עם דפדפן אינטרנט באותה הרשת, עבור אל:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini
index d19a0bd496..77067679bc 100644
--- a/assets/lang/he_IL_invert.ini
+++ b/assets/lang/he_IL_invert.ini
@@ -964,6 +964,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = הושלמה העברת קובץ: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -997,6 +998,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = עם דפדפן אינטרנט באותה הרשת, עבור אל:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini
index 5a647dbc87..6365cdc094 100644
--- a/assets/lang/hr_HR.ini
+++ b/assets/lang/hr_HR.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Prenos datoteke završen: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Provjeravanje adrese...
+With a web browser on the same network, go to: = S web preglednikom na istoj mreži, idite na:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = Trenutno si u "Offline",idi u lobby ili online hall
diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini
index ae0e35d374..414fdf9341 100644
--- a/assets/lang/hu_HU.ini
+++ b/assets/lang/hu_HU.ini
@@ -967,6 +967,7 @@ Error = Hiba
Failed to Bind Localhost IP = Nem sikerült a localhost IP kötése
Failed to Bind Port = Nem sikerült a porthoz kötés
Failed to connect to Adhoc Server = Nem sikerült csatlakozni az ad hoc szerverhez
+File transfer completed: %1 = Fájlátvitel befejeződött: %1
Forced First Connect = Kényszerített első csatlakozás (gyorsabb csatlakozás)
GM: Data from Unknown Port = GM: ismeretlen portról származó adat
Hostname = Hostnév
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP újra-inicializálás szükséges
UPnP use original port = UPnP eredeti portot használja (be = PSP kompatibilitás)
UseOriginalPort Tip = Lehet, hogy nem működik az összes eszközön vagy játékhoz, lásd a wiki oldalt.
Validating address... = Cím ellenőrzése...
+With a web browser on the same network, go to: = Azonos hálózaton lévő webböngészővel, lépjen a következőre:
WLAN Channel = WLAN csatorna
You're in Offline Mode, go to lobby or online hall = Offline üzemmódban vagy, menj a lobbiba vagy az online terembe!
diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini
index 4667e4a6dc..67a6d48d38 100644
--- a/assets/lang/id_ID.ini
+++ b/assets/lang/id_ID.ini
@@ -967,6 +967,7 @@ Error = Kesalahan
Failed to Bind Localhost IP = Gagal memuat IP host lokal
Failed to Bind Port = Gagal memuat port
Failed to connect to Adhoc Server = Gagal terhubung ke server Ad Hoc
+File transfer completed: %1 = Transfer file selesai: %1
Forced First Connect = Sambungan pertama paksa (koneksi lebih cepat)
GM: Data from Unknown Port = GM: Data dari port tidak dikenal
Hostname = Nama Host
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP perlu diinisialisasi ulang
UPnP use original port = UPnP menggunakan port asli (diaktifkan = kompatibilitas PSP)
UseOriginalPort Tip = Mungkin tidak berfungsi untuk semua perangkat atau permainan, lihat wiki.
Validating address... = Validasi alamat...
+With a web browser on the same network, go to: = Dengan browser web di jaringan yang sama, buka:
WLAN Channel = Saluran WLAN
You're in Offline Mode, go to lobby or online hall = Anda dalam mode offline, pergi ke lobi atau aula online
diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini
index 74ca54009f..44fa97c751 100644
--- a/assets/lang/it_IT.ini
+++ b/assets/lang/it_IT.ini
@@ -935,6 +935,7 @@ Error = Errore
Failed to Bind Localhost IP = Impossibile correlare l'IP localhost
Failed to Bind Port = Impossibile correlare la porta
Failed to connect to Adhoc Server = Impossibile connettersi al sever ad hoc
+File transfer completed: %1 = Trasferimento file completato: %1
Forced First Connect = Prima connessione forzata (connessione più rapida)
GM: Data from Unknown Port = GM: Dati da porta sconosciuta
Hostname = Nome host
@@ -968,6 +969,7 @@ UPnP need to be reinitialized = UPnP dev'essere reinizializzato
UPnP use original port = Usa la porta originale di UPnP (attiva = compatibilità PSP)
UseOriginalPort Tip = Potrebbe non funzionare per tutti i dispositivi o giochi, controlla la wiki.
Validating address... = Convalida indirizzo...
+With a web browser on the same network, go to: = Con un browser web sulla stessa rete, vai a:
WLAN Channel = Canale WLAN
You're in Offline Mode, go to lobby or online hall = Sei in modalità offline, vai alla lobby online.
diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini
index 3fc3a60578..1fbba2c237 100644
--- a/assets/lang/ja_JP.ini
+++ b/assets/lang/ja_JP.ini
@@ -934,6 +934,7 @@ Error = エラー
Failed to Bind Localhost IP = ローカルホストIPのバインドに失敗しました
Failed to Bind Port = ポートのバインドに失敗しました
Failed to connect to Adhoc Server = アドホックサーバーに接続できませんでした
+File transfer completed: %1 = ファイル転送が完了しました: %1
Forced First Connect = 強制初期接続 (より速い接続)
GM: Data from Unknown Port = GM: 不明なポートからのデータ
Hostname = ホストネーム
@@ -967,6 +968,7 @@ UPnP need to be reinitialized = UPnPの再初期化が必要です
UPnP use original port = UPnPでオリジナルのポートを使用する (有効 = PSP互換)
UseOriginalPort Tip = デバイスやゲームによっては動作しない場合がありますので、wikiを参照してください。
Validating address... = アドレスを検証しています...
+With a web browser on the same network, go to: = 同じネットワークのWebブラウザで、次のアドレスにアクセスしてください:
WLAN Channel = WLANチャネル
You're in Offline Mode, go to lobby or online hall = オフラインモードです。ロビーかホールに移動してください
diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini
index ec077f004f..4064dabb58 100644
--- a/assets/lang/jv_ID.ini
+++ b/assets/lang/jv_ID.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Transfer berkas rampung: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Kanthi browser web ing jaringan sing padha, bukak:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini
index a0ee5ef023..e1955cc777 100644
--- a/assets/lang/ko_KR.ini
+++ b/assets/lang/ko_KR.ini
@@ -934,6 +934,7 @@ Error = 오류
Failed to Bind Localhost IP = 로컬 호스트 IP를 바인딩하지 못했습니다.
Failed to Bind Port = 포트를 바인딩하지 못했습니다.
Failed to connect to Adhoc Server = Ad Hoc 서버에 연결하지 못했습니다.
+File transfer completed: %1 = 파일 전송 완료: %1
Forced First Connect = 강제 첫 번째 연결 (빠른 연결)
GM: Data from Unknown Port = GM: 알 수 없는 포트의 데이터
Hostname = 호스트 이름
@@ -967,6 +968,7 @@ UPnP need to be reinitialized = UPnP를 다시 초기화해야 합니다.
UPnP use original port = UPnP는 원래 포트를 사용합니다 (활성화됨 = PSP 호환성)
UseOriginalPort Tip = 일부 기기나 게임에서는 작동하지 않을 수 있으므로, 위키를 참조하세요.
Validating address... = 주소 검증하는 중...
+With a web browser on the same network, go to: = 같은 네트워크의 웹 브라우저에서 다음으로 이동하세요:
WLAN Channel = 무선랜 채널
You're in Offline Mode, go to lobby or online hall = 오프라인 모드입니다. 로비 또는 온라인 홀으로 이동합니다.
diff --git a/assets/lang/ku_SO.ini b/assets/lang/ku_SO.ini
index 8682aa56bb..e542822427 100644
--- a/assets/lang/ku_SO.ini
+++ b/assets/lang/ku_SO.ini
@@ -948,6 +948,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Guhertina pelî bi serketinî: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -981,6 +982,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Bi kevneşopê webê li ser heman torê, bibe:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini
index 7ca1efabde..69843b4b71 100644
--- a/assets/lang/lo_LA.ini
+++ b/assets/lang/lo_LA.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = ການໂອນເຟຊ໌ແລ້ວແລ້ວ: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = ກັບບຣາວເຊີບເວບເລັ່ງໃນເຄື່ອນເຊື່ອມໃນສຽງດຽວ, ເຂົ້າໄປທີ່:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini
index c2ed213fee..9f98475cf2 100644
--- a/assets/lang/lt-LT.ini
+++ b/assets/lang/lt-LT.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Failo perkėlimas baigtas: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Naudodamiesi žiniatinklio naršykle toje pačioje tinkle, eikite į:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini
index 38be643cb7..da0272ab79 100644
--- a/assets/lang/ms_MY.ini
+++ b/assets/lang/ms_MY.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Pemindahan fail selesai: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Dengan pelayar web pada rangkaian yang sama, pergi ke:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini
index 258b3d706c..8acd608053 100644
--- a/assets/lang/nl_NL.ini
+++ b/assets/lang/nl_NL.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Bestandsoverdracht voltooid: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Ga met een webbrowser op hetzelfde netwerk naar:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini
index 7262814ff1..49196ba2b9 100644
--- a/assets/lang/no_NO.ini
+++ b/assets/lang/no_NO.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Filoverføring fullført: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Med en nettleser på samme nettverk, gå til:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini
index dd07e30aa0..d94aee36ff 100644
--- a/assets/lang/pl_PL.ini
+++ b/assets/lang/pl_PL.ini
@@ -962,6 +962,7 @@ Error = Błąd
Failed to Bind Localhost IP = Błąd przy przypisywaniu adresu IP lokalnego hosta
Failed to Bind Port = Błąd przy przypisywaniu portu
Failed to connect to Adhoc Server = Błąd przy łączeniu z serwerem Ad-Hoc
+File transfer completed: %1 = Transfer pliku zakończony: %1
Forced First Connect = Wymuszenie pierwszego połączenie (szybsze łączenie)
#GM = Dane z nieznanego portu
GM: Data from Unknown Port = GM: Dane z nieznanego portu
@@ -996,6 +997,7 @@ UPnP need to be reinitialized = Należy ponownie zainicjować UPnP
UPnP use original port = UPnP używa oryginalnego portu (włączone = kompatybilność z PSP)
UseOriginalPort Tip = Może nie działać ze wszystkimi grami i/lub urządzeniami. Po więcej informacji udaj się na wiki.
Validating address... = Uwierzytelnianie addresu...
+With a web browser on the same network, go to: = Za pomocą przeglądarki internetowej w tej samej sieci, przejdź do:
WLAN Channel = Kanał WLAN
You're in Offline Mode, go to lobby or online hall = Jesteś w trybie offline; wejdź do lobby lub pokoju online
diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini
index 698ac2d80f..e972e62422 100644
--- a/assets/lang/pt_BR.ini
+++ b/assets/lang/pt_BR.ini
@@ -957,6 +957,7 @@ Error = Erro
Failed to Bind Localhost IP = Falhou em associar com o IP do hospedeiro local
Failed to Bind Port = Falhou em associar com a porta
Failed to connect to Adhoc Server = Falhou em conectar ao servidor ad hoc
+File transfer completed: %1 = Transferência de arquivo concluída: %1
Forced First Connect = Primeira conexão forçada (conexão mais rápida)
GM: Data from Unknown Port = GM: Dados da Porta Desconhecida
Hostname = Nome do hospedeiro
@@ -990,6 +991,7 @@ UPnP need to be reinitialized = O UPnP precisa ser reinicializado
UPnP use original port = O UPnP usa a porta original (ativado = compatibilidade com o PSP)
UseOriginalPort Tip = Pode não funcionar com todos os dispositivos ou jogos, veja o wiki.
Validating address... = Validando endereço...
+With a web browser on the same network, go to: = Com um navegador web na mesma rede, vá para:
WLAN Channel = Canal do WLAN
You're in Offline Mode, go to lobby or online hall = Você está no modo offline, vá pro lobby ou pro salão online
diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini
index 5de2f3c604..4f29715dc3 100644
--- a/assets/lang/pt_PT.ini
+++ b/assets/lang/pt_PT.ini
@@ -959,6 +959,7 @@ Error = Erro
Failed to Bind Localhost IP = Erro ao conectar ao IP do hospedeiro local
Failed to Bind Port = Erro ao conectar a porta
Failed to connect to Adhoc Server = Erro ao conectar ao servidor Adhoc
+File transfer completed: %1 = Transferência de arquivo concluída: %1
Forced First Connect = Primeira conexão forçada (conexão mais rápida)
GM: Data from Unknown Port = GM: Dados da Porta Desconhecida
Hostname = Nome do Hospedeiro
@@ -993,6 +994,7 @@ UPnP use original port = O UPnP usa a porta original (ativado = compatibilidade
UseOriginalPort Tip = May not work for all devices or games, see wiki.
UseOriginalPort Tip = Poderá não funcionar com todos os dispositivos/jogos, para mais informações, vê a wiki.
Validating address... = A validar Endereço...
+With a web browser on the same network, go to: = Com um navegador web na mesma rede, dirija-se a:
WLAN Channel = Canal do WLAN
You're in Offline Mode, go to lobby or online hall = Estás no modo Offline, vai para o lobby/salão Online
diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini
index eb6e54a107..9fde751ec4 100644
--- a/assets/lang/ro_RO.ini
+++ b/assets/lang/ro_RO.ini
@@ -968,6 +968,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Transferul de fișiere s-a finalizat: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1001,6 +1002,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Cu un browser web pe aceeași rețea, accesați:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini
index 1cf42b4d2c..d8078f91e1 100644
--- a/assets/lang/ru_RU.ini
+++ b/assets/lang/ru_RU.ini
@@ -934,6 +934,7 @@ Error = Ошибка
Failed to Bind Localhost IP = Не удалось привязать адрес для localhost
Failed to Bind Port = Не удалось привязать порт
Failed to connect to Adhoc Server = Не удалось подключиться к ad-hoc серверу
+File transfer completed: %1 = Передача файла завершена: %1
Forced First Connect = Принудительное первое подключение (быстрое подключение)
GM: Data from Unknown Port = GM: Данные с неизвестного порта
Hostname = Имя хоста
@@ -967,6 +968,7 @@ UPnP need to be reinitialized = Необходимо перезапустить
UPnP use original port = Использовать оригинальный порт UPnP (включено = совместимость с PSP)
UseOriginalPort Tip = Может не работать для всех устройств или игр, смотрите wiki.
Validating address... = Проверка адреса...
+With a web browser on the same network, go to: = С веб-браузером в той же сети, перейдите по адресу:
WLAN Channel = Канал WLAN
You're in Offline Mode, go to lobby or online hall = Вы в автономном режиме, зайдите в лобби или в комнату в Интернете
diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini
index 00e661119f..4115076fd6 100644
--- a/assets/lang/sv_SE.ini
+++ b/assets/lang/sv_SE.ini
@@ -935,6 +935,7 @@ Error = Fel
Failed to Bind Localhost IP = Misslyckades binda localhost-IP
Failed to Bind Port = Misslyckades binda port
Failed to connect to Adhoc Server = Misslyckades koppla upp till adhoc-servern
+File transfer completed: %1 = Filöverföring slutförd: %1
Forced First Connect = Tvingad första uppkopplining (snabbare uppkoppling)
GM: Data from Unknown Port = GM: Data från okänd port
Hostname = Hostname
@@ -968,6 +969,7 @@ UPnP need to be reinitialized = UPnP behöver ominitialiseras
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = Funkar eventuellt inte för alla enheter eller spel, se wiki.
Validating address... = Bekräftar adress...
+With a web browser on the same network, go to: = Med en webbläsare på samma nätverk, gå till:
WLAN Channel = WLAN-kanal
You're in Offline Mode, go to lobby or online hall = Du är i offline-läge, gå till lobbyn eller online-hallen
diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini
index 73f299c8c9..08e2fc4f20 100644
--- a/assets/lang/tg_PH.ini
+++ b/assets/lang/tg_PH.ini
@@ -968,6 +968,7 @@ Error = Error
Failed to Bind Localhost IP = Nabigong i-bind ang localhost IP
Failed to Bind Port = Nabigong i-bind ang port
Failed to connect to Adhoc Server = Nabigong kumonekta sa ad hoc server
+File transfer completed: %1 = Мубодилаи файл анҷомид: %1
Forced First Connect = Pinilit muna kumonekta (mabilis kumonekta)
GM: Data from Unknown Port = GM: Data mula sa Hindi Kilalang Port
Hostname = Pangalan ng host
@@ -1001,6 +1002,7 @@ UPnP need to be reinitialized = Kailangang muling simulan ang UPnP
UPnP use original port = Gamitin ang orihinal na port ng UPnP (enabled = PSP compatibility)
UseOriginalPort Tip = Maaaring hindi gumana para sa lahat ng device o laro, tingnan ang wiki.
Validating address... = Pinapatunayan ang address...
+With a web browser on the same network, go to: = Бо браузери веб дар шабаκаи ҳамон, гузаред ба:
WLAN Channel = Channel ng WLAN
You're in Offline Mode, go to lobby or online hall = Nasa offline mode ka, pumunta sa lobby o online hall
diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini
index b3419d66dc..d51524a129 100644
--- a/assets/lang/th_TH.ini
+++ b/assets/lang/th_TH.ini
@@ -986,6 +986,7 @@ Error = มีข้อผิดพลาด
Failed to Bind Localhost IP = เชื่อมโยง Localhost IP ไม่สำเร็จ
Failed to Bind Port = ล้มเหลวในการเชื่อมโยงพอร์ต
Failed to connect to Adhoc Server = ล้มเหลวในการเชื่อมต่อกับเซิร์ฟเวอร์ Adhoc
+File transfer completed: %1 = การถ่ายโอนไฟล์เสร็จสิ้น: %1
Forced First Connect = บังคับการเชื่อมต่อในครั้งแรกสุด
GM: Data from Unknown Port = GM: ข้อมูลมาจากพอร์ตที่ไม่รู้จัก
Hostname = ชื่อหัวห้อง
@@ -1019,6 +1020,7 @@ UPnP need to be reinitialized = UPnP จำเป็นต้องเริ่
UPnP use original port = UPnP ใช้พอร์ตค่าเริ่มต้น (เปิดใช้งาน = เล่นกับเครื่อง PSP)
UseOriginalPort Tip = อาจจะใช้ไม่ได้ในทุกอุปกรณ์หรือในบางเกม โปรดดูข้อมูลเพิ่มเติมที่ Wiki
Validating address... = กำลังตรวจสอบที่อยู่...
+With a web browser on the same network, go to: = ด้วยเว็บเบราว์เซอร์ในเครือข่ายเดียวกัน ไปที่:
WLAN Channel = ช่องสัญญาณ WLAN
You're in Offline Mode, go to lobby or online hall = คุณอยู่ในโหมดออฟไลน์ ต้องเข้าไปในล็อบบี้หรือออนไลน์ฮอลล์ก่อน
diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini
index ffd103ed8d..b442e19ea0 100644
--- a/assets/lang/tr_TR.ini
+++ b/assets/lang/tr_TR.ini
@@ -969,6 +969,7 @@ Error = Hata
Failed to Bind Localhost IP = Yerel ana makine IP'si bağlanamadı
Failed to Bind Port = Port bağlanamadı
Failed to connect to Adhoc Server = Adhoc sunucusuna bağlanılamadı
+File transfer completed: %1 = Dosya aktarımı tamamlandı: %1
Forced First Connect = Zorunlu İlk Bağlantı
GM: Data from Unknown Port = GM: Bilinmeyen Porttan Veri
Hostname = Ana makine adı
@@ -1002,6 +1003,7 @@ UPnP need to be reinitialized = UPnP yeniden başlatılmalı
UPnP use original port = UPnP Orijinal Port Kullan
UseOriginalPort Tip = Tüm cihazlar veya oyunlarda çalışmayabilir, wiki'ye bakın.
Validating address... = Adres doğrulanıyor...
+With a web browser on the same network, go to: = Aynı ağda bir web tarayıcısı ile şu adrese gidin:
WLAN Channel = WLAN Kanalı
You're in Offline Mode, go to lobby or online hall = Çevrimdışı moddasınız, lobiye veya çevrimiçi salona gidin
diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini
index bdc16e8576..5634b3282b 100644
--- a/assets/lang/uk_UA.ini
+++ b/assets/lang/uk_UA.ini
@@ -967,6 +967,7 @@ Error = Помилка
Failed to Bind Localhost IP = Не вдалося прив’язати локальний хост IP
Failed to Bind Port = Не вдалося прив’язати порт
Failed to connect to Adhoc Server = Не вдалося підключитися до ad hoc сервера
+File transfer completed: %1 = Передача файлу завершена: %1
Forced First Connect = Примусове перше підключення (швидше підключення)
GM: Data from Unknown Port = GM: Дані з невідомого порту
Hostname = Ім'я хоста
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP необхідно повторно іні
UPnP use original port = UPnP використовує оригінальний порт (увімкнуто = PSP сумісність)
UseOriginalPort Tip = Може працювати не для всіх пристроїв чи ігор, подив. вікі.
Validating address... = Підтвердження адреси...
+With a web browser on the same network, go to: = За допомогою веб-браузера в тій же мережі перейдіть за адресою:
WLAN Channel = WLAN канал
You're in Offline Mode, go to lobby or online hall = Ви перебуваєте в офлайн-режимі, переходите у лоббі чи онлайн-режим
diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini
index a21b769f8f..390c7971b8 100644
--- a/assets/lang/vi_VN.ini
+++ b/assets/lang/vi_VN.ini
@@ -967,6 +967,7 @@ Error = Error
Failed to Bind Localhost IP = Failed to bind localhost IP
Failed to Bind Port = Failed to bind port
Failed to connect to Adhoc Server = Failed to connect to ad hoc server
+File transfer completed: %1 = Chuyển file hoàn tất: %1
Forced First Connect = Forced first connect (faster connect)
GM: Data from Unknown Port = GM: Data from Unknown Port
Hostname = Hostname
@@ -1000,6 +1001,7 @@ UPnP need to be reinitialized = UPnP need to be reinitialized
UPnP use original port = UPnP use original port (enabled = PSP compatibility)
UseOriginalPort Tip = May not work for all devices or games, see wiki.
Validating address... = Validating address...
+With a web browser on the same network, go to: = Với trình duyệt web trong cùng một mạng, hãy đi tới:
WLAN Channel = WLAN channel
You're in Offline Mode, go to lobby or online hall = You're in offline mode, go to lobby or online hall
diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini
index 8ae75be2d7..96dafdb873 100644
--- a/assets/lang/zh_CN.ini
+++ b/assets/lang/zh_CN.ini
@@ -967,6 +967,7 @@ Error = 错误
Failed to Bind Localhost IP = 无法绑定本地主机IP
Failed to Bind Port = 无法绑定端口
Failed to connect to Adhoc Server = 无法连接Adhoc服务器
+File transfer completed: %1 = 文件传输完成:%1
Forced First Connect = 快速初始化连接 (耗时更短)
GM: Data from Unknown Port = GM:来自未知端口的数据
Hostname = 主机名
@@ -1001,6 +1002,7 @@ UPnP need to be reinitialized = UPnP 需要重新初始化
UPnP use original port = UPnP 使用原始端口 (启用=兼容PSP)
UseOriginalPort Tip = 可能不适合某些游戏或设备,详见百科页面
Validating address... = 正在验证地址…
+With a web browser on the same network, go to: = 在同一网络的Web浏览器中,访问:
WLAN Channel = WLAN信道
You're in Offline Mode, go to lobby or online hall = 您现在处于离线模式,请进入房间或在线大厅
diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini
index 39a9c992cc..b89b500e55 100644
--- a/assets/lang/zh_TW.ini
+++ b/assets/lang/zh_TW.ini
@@ -934,6 +934,7 @@ Error = 錯誤
Failed to Bind Localhost IP = 無法繫結本機主機 IP
Failed to Bind Port = 無法繫結連接埠
Failed to connect to Adhoc Server = 無法連線至臨機操作伺服器
+File transfer completed: %1 = 檔案傳輸完成:%1
Forced First Connect = 強制首次連線 (更快連線)
GM: Data from Unknown Port = GM:來自不明連接埠的資料
Hostname = 主機名稱
@@ -967,6 +968,7 @@ UPnP need to be reinitialized = UPnP 需要重新初始化
UPnP use original port = UPnP 使用原始連接埠 (已啟用 = PSP 相容性)
UseOriginalPort Tip = 可能不適用於所有裝置或遊戲,請參閱維基。
Validating address... = 正在驗證位址…
+With a web browser on the same network, go to: = 在同一網絡的網頁瀏覽器上,前往:
WLAN Channel = WLAN 頻道
You're in Offline Mode, go to lobby or online hall = 您目前處於離線模式,請前往大廳或線上大廳
diff --git a/assets/ui_images/images.svg b/assets/ui_images/images.svg
index 1c0450333c..35e7a2d517 100644
--- a/assets/ui_images/images.svg
+++ b/assets/ui_images/images.svg
@@ -24,9 +24,9 @@
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
- inkscape:zoom="8.0000002"
- inkscape:cx="297.18749"
- inkscape:cy="545.18749"
+ inkscape:zoom="2.0000001"
+ inkscape:cx="355.74999"
+ inkscape:cy="544.74999"
inkscape:window-width="3379"
inkscape:window-height="1941"
inkscape:window-x="-9"
@@ -3941,14 +3941,14 @@
id="I_FLAG_US"
transform="matrix(8.4810893e-4,0,0,0.00107427,3.571875,87.312501)">
+
+
+
+
+
+ d="m 151.0159,123.87219 c -0.0724,0 -0.13541,0.0498 -0.15205,0.12023 l -0.13584,0.57634 c -0.22788,0.0528 -0.44164,0.14237 -0.63434,0.2626 l -0.5036,-0.3112 c -0.0616,-0.038 -0.14136,-0.0288 -0.1924,0.0221 l -0.26658,0.26659 c -0.0513,0.0513 -0.0606,0.13083 -0.0225,0.1924 l 0.31148,0.50388 c -0.12024,0.19282 -0.21006,0.40617 -0.26289,0.63405 l -0.57606,0.13614 c -0.0704,0.0167 -0.1205,0.0795 -0.1205,0.15175 v 0.37685 c 0,0.0725 0.05,0.13542 0.1205,0.15205 l 0.57606,0.13612 c 0.0528,0.22789 0.14266,0.44124 0.26289,0.63406 l -0.31148,0.50359 c -0.038,0.0616 -0.0286,0.14165 0.0225,0.19269 l 0.2663,0.26629 c 0.0513,0.0513 0.13101,0.0606 0.19268,0.0225 l 0.5036,-0.31119 c 0.19272,0.12024 0.40646,0.20977 0.63434,0.2626 l 0.13584,0.57635 c 0.0167,0.0705 0.0797,0.12022 0.15205,0.12022 h 0.37685 c 0.0722,0 0.13541,-0.0497 0.15205,-0.12022 l 0.13583,-0.57635 c 0.22778,-0.0528 0.4416,-0.14236 0.63434,-0.2626 l 0.5036,0.31119 c 0.0616,0.0381 0.14126,0.0287 0.1924,-0.0225 l 0.26658,-0.26629 c 0.0512,-0.0512 0.0606,-0.13082 0.0225,-0.1924 l -0.31148,-0.50388 c 0.12024,-0.19273 0.20977,-0.40626 0.26261,-0.63406 l 0.57634,-0.13612 c 0.0706,-0.0167 0.12022,-0.0797 0.12022,-0.15205 v -0.37656 c -1e-5,-0.0724 -0.0497,-0.13541 -0.12022,-0.15204 l -0.57634,-0.13585 c -0.0528,-0.22788 -0.14237,-0.44153 -0.26261,-0.63434 l 0.31148,-0.50388 c 0.0381,-0.0617 0.0288,-0.14116 -0.0225,-0.1924 l -0.26658,-0.2663 c -0.0512,-0.0512 -0.13074,-0.0606 -0.1924,-0.0225 l -0.5036,0.31119 c -0.19282,-0.12023 -0.40646,-0.20977 -0.63434,-0.2626 l -0.13583,-0.57635 c -0.0167,-0.0704 -0.0798,-0.12022 -0.15205,-0.12022 z m 0.18842,1.30078 c 0.79691,0 1.44259,0.64585 1.44259,1.4426 0,0.79672 -0.64568,1.44286 -1.44259,1.44286 -0.79664,0 -1.44259,-0.64614 -1.44259,-1.44286 0,-0.79674 0.64595,-1.4426 1.44259,-1.4426 z m 0,0.68264 c -0.41969,0 -0.75995,0.34019 -0.75995,0.75996 0,0.41976 0.34026,0.76022 0.75995,0.76022 0.41977,0 0.75994,-0.34045 0.75994,-0.76022 0,-0.41978 -0.34017,-0.75996 -0.75994,-0.75996 z" />
diff --git a/assets/upload/index.html b/assets/upload/index.html
index febdd98621..b24ff6fb53 100644
--- a/assets/upload/index.html
+++ b/assets/upload/index.html
@@ -8,7 +8,7 @@
Upload files to {{ device_name }}
-
To folder:
{{ upload_path }}
+
Destination folder: {{ upload_path }}
+
+
+ 📁 Drop files here or use the buttons above
+
+
+
+
+
Uploaded Files:
+
+
+
@@ -144,11 +180,37 @@
const uploadBtn = document.getElementById("uploadBtn");
const resetBtn = document.getElementById("resetBtn");
const fileListDiv = document.getElementById("fileList");
+ const uploadedSection = document.getElementById("uploadedSection");
+ const uploadedListDiv = document.getElementById("uploadedList");
+ const dropZone = document.getElementById("dropZone");
const progressBar = document.getElementById("progressBar");
const statusDiv = document.getElementById("status");
const errorDiv = document.getElementById("error");
let files = [];
+ let uploadedFiles = [];
+ let droppedFiles = [];
+
+ // Feature detection for drag and drop support
+ function isDragDropSupported() {
+ // Check for basic drag and drop API support
+ const div = document.createElement('div');
+ const hasBasicSupport = ('draggable' in div) && ('ondrop' in div);
+
+ // Check if it's a mobile device (where drag/drop from file system is limited)
+ const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+
+ // Check if it's a touch-only device
+ const isTouchOnly = ('ontouchstart' in window) && !window.matchMedia('(pointer: fine)').matches;
+
+ return hasBasicSupport && !isMobile && !isTouchOnly;
+ }
+
+ // Show drop zone only if drag and drop is supported
+ if (isDragDropSupported()) {
+ dropZone.style.display = 'block';
+ }
+
function formatBytes(bytes, decimals = 2) {
if (bytes === 0) return '0 B';
const k = 1024;
@@ -157,8 +219,28 @@
const size = parseFloat((bytes / Math.pow(k, i)).toFixed(decimals));
return `${size} ${units[i]}`;
}
+
+ function updateUploadedList() {
+ uploadedListDiv.innerHTML = "";
+ if (uploadedFiles.length > 0) {
+ uploadedSection.style.display = "block";
+ const list = document.createElement("ul");
+ uploadedFiles.forEach(f => {
+ const li = document.createElement("li");
+ const formattedBytes = formatBytes(f.size, 2);
+ const name = f.webkitRelativePath || f.name;
+ li.textContent = `${name} (${formattedBytes}) - ✓ Uploaded`;
+ li.style.color = "#2d7a2d";
+ list.appendChild(li);
+ });
+ uploadedListDiv.appendChild(list);
+ } else {
+ uploadedSection.style.display = "none";
+ }
+ }
+
function updateFileList() {
- files = [...fileInput.files, ...folderInput.files];
+ files = [...fileInput.files, ...folderInput.files, ...droppedFiles];
fileListDiv.innerHTML = "";
if (files.length > 0) {
uploadBtn.disabled = false;
@@ -181,13 +263,62 @@
fileInput.addEventListener("change", updateFileList);
folderInput.addEventListener("change", updateFileList);
+ // Drag and drop functionality
+ dropZone.addEventListener("dragover", (e) => {
+ e.preventDefault();
+ dropZone.classList.add("drag-over");
+ });
+
+ dropZone.addEventListener("dragleave", (e) => {
+ e.preventDefault();
+ dropZone.classList.remove("drag-over");
+ });
+
+ dropZone.addEventListener("drop", (e) => {
+ e.preventDefault();
+ dropZone.classList.remove("drag-over");
+
+ const dt = e.dataTransfer;
+ const allFiles = Array.from(dt.files);
+
+ // Filter out zero-byte entries (usually folders or invalid entries)
+ const validFiles = allFiles.filter(file => file.size > 0);
+
+ // Show a message if some files were filtered out
+ if (allFiles.length > validFiles.length) {
+ const filteredCount = allFiles.length - validFiles.length;
+ statusDiv.textContent = `Note: ${filteredCount} folder(s) or empty file(s) were skipped. Only files can be drag/dropped.`;
+ setTimeout(() => {
+ if (statusDiv.textContent.includes("folder(s) or empty file(s) were skipped")) {
+ statusDiv.textContent = "";
+ }
+ }, 8000);
+ }
+
+ // Add valid dropped files to the existing array
+ droppedFiles = [...droppedFiles, ...validFiles];
+ updateFileList();
+ });
+
+ // Also handle drag/drop on the entire document to prevent browser default behavior
+ document.addEventListener("dragover", (e) => {
+ e.preventDefault();
+ });
+
+ document.addEventListener("drop", (e) => {
+ e.preventDefault();
+ });
+
resetBtn.addEventListener("click", () => {
// Clear the file inputs
fileInput.value = "";
folderInput.value = "";
- // Clear the files array and update the display
+ // Clear all arrays and update displays
files = [];
+ droppedFiles = [];
+ uploadedFiles = [];
updateFileList();
+ updateUploadedList();
});
uploadBtn.addEventListener("click", async () => {
@@ -199,13 +330,27 @@
progressBar.style.display = "block";
progressBar.value = 0;
- for (let i = 0; i < files.length; i++) {
- const file = files[i];
- statusDiv.textContent = `Uploading ${file.webkitRelativePath || file.name} (${i + 1}/${files.length})`;
+ const filesToUpload = [...files]; // Create a copy to iterate over
+
+ // Clear all file sources so files disappear from pending list as they upload
+ fileInput.value = "";
+ folderInput.value = "";
+ droppedFiles = [];
+ files = [];
+
+ for (let i = 0; i < filesToUpload.length; i++) {
+ const file = filesToUpload[i];
+ statusDiv.textContent = `Uploading ${file.webkitRelativePath || file.name} (${i + 1}/${filesToUpload.length})`;
try {
await uploadFile(file);
+ // Move successfully uploaded file to uploaded list
+ uploadedFiles.push(file);
+ updateUploadedList();
} catch (err) {
+ // If upload fails, add remaining files back to pending list
+ files = filesToUpload.slice(i);
+ updateFileList();
errorDiv.textContent = err.message;
progressBar.style.display = "none";
uploadBtn.disabled = false;
@@ -213,9 +358,11 @@
}
}
+ // Update the pending files list (should be empty now)
+ updateFileList();
statusDiv.textContent = "All files uploaded successfully.";
progressBar.style.display = "none";
- uploadBtn.disabled = false;
+ // Note: uploadBtn state is managed by updateFileList() - disabled when no files
});
function uploadFile(file) {
@@ -226,6 +373,7 @@
// Add custom metadata headers if needed:
xhr.setRequestHeader("X-Client-Version", "1.0");
xhr.setRequestHeader("X-Upload-Timestamp", new Date().toISOString());
+ xhr.setRequestHeader("X-File-Size", file.size.toString());
xhr.upload.onprogress = e => {
if (e.lengthComputable) {
@@ -252,7 +400,6 @@
// Try to preserve any directory structure, if supported.
const formData = new FormData();
formData.append("file", file, file.webkitRelativePath || file.name);
- formData.append("fileSize", file.size.toString());
xhr.send(formData);
});
}