Entirely rewrote title tree backend

Title trees are now model-based rather than item based. Coming with this is proper item metadata, so the data and UI are finally disconnected, making future development much easier. There are also some minor visual improvements as a result of using a TreeView instead of a TreeWidget.
vWii System Menus now have public versions defined in the database. Public version display code has also been entirely rewritten, as the version displayed in the interface and the version used by the code are no longer the same.
This commit is contained in:
2024-12-13 22:39:09 -05:00
parent c1eb80fbb6
commit 62fa5ef7b1
14 changed files with 638 additions and 602 deletions

View File

@@ -4,7 +4,7 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../../NUSGet.py" line="103"/>
<location filename="../../NUSGet.py" line="96"/>
<source>NUSGet v{nusget_version}
Developed by NinjaCheetah
Powered by libWiiPy {libwiipy_version}
@@ -27,124 +27,132 @@ Titlurile marcate cu bifă sunt gratuite și au un tichet disponibil și pot fi
Titlurile vor fi descărcate într-un folder numit NUSGet în fișierul dvs. de download.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="211"/>
<location filename="../../NUSGet.py" line="156"/>
<source>NUSGet Update Available</source>
<translation type="unfinished">Actualizare NUSGet disponibilă</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="212"/>
<location filename="../../NUSGet.py" line="157"/>
<source>There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished">O nouă versiune NUSGet este disponibilă!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="293"/>
<location filename="../../NUSGet.py" line="233"/>
<source>No Output Selected</source>
<translation type="unfinished">Nu s-a selectat un output.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="294"/>
<location filename="../../NUSGet.py" line="234"/>
<source>You have not selected any format to output the data in!</source>
<translation type="unfinished">Nu ați selectat niciun format de ieșire.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="296"/>
<location filename="../../NUSGet.py" line="236"/>
<source>Please select at least one option for how you would like the download to be saved.</source>
<translation type="unfinished"> rugăm selectați cel puțin o opțiune pentru modul în care doriți salvați datele descărcate.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="328"/>
<location filename="../../NUSGet.py" line="267"/>
<source>Invalid Title ID</source>
<translation type="unfinished">Title ID invalid</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="329"/>
<location filename="../../NUSGet.py" line="268"/>
<source>The Title ID you have entered is not in a valid format!</source>
<translation type="unfinished">Title ID pe care l-ați introdus este invalid!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="331"/>
<location filename="../../NUSGet.py" line="270"/>
<source>Title IDs must be 16 digit strings of numbers and letters. Please enter a correctly formatted Title ID, or select one from the menu on the left.</source>
<translation type="unfinished">Title ID-urile trebuie conțină exact 16 cifre și/sau litere. rugăm introduceți un Title ID corect, sau selectați unul din meniul din stânga.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="333"/>
<location filename="../../NUSGet.py" line="272"/>
<source>Title ID/Version Not Found</source>
<translation type="unfinished">Title ID/Versiunea nu a fost găsită</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="334"/>
<location filename="../../NUSGet.py" line="273"/>
<source>No title with the provided Title ID or version could be found!</source>
<translation type="unfinished">Niciun titlu care corespundă cu Title ID sau cu versiunea introdusă nu a fost găsit!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="336"/>
<location filename="../../NUSGet.py" line="275"/>
<source>Please make sure that you have entered a valid Title ID, or selected one from the title database, and that the provided version exists for the title you are attempting to download.</source>
<translation type="unfinished"> rugăm asigurați ați introdus un Title ID valid sau selectat din baza de date cu titluri, și versiunea introdusă există pentru titlul pe care încercați îl descărcați.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<location filename="../../NUSGet.py" line="277"/>
<source>Content Decryption Failed</source>
<translation type="unfinished">Decriptarea conținutului a eșuat.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="339"/>
<location filename="../../NUSGet.py" line="278"/>
<source>Content decryption was not successful! Decrypted contents could not be created.</source>
<translation type="unfinished">Decriptarea conținutului nu a reușit. Nu s-a putut crea conținutul decriptat.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="342"/>
<location filename="../../NUSGet.py" line="281"/>
<source>Your TMD or Ticket may be damaged, or they may not correspond with the content being decrypted. If you have checked &quot;Use local files, if they exist&quot;, try disabling that option before trying the download again to fix potential issues with local data.</source>
<translation type="unfinished">TMD-ul sau Ticket-ul dvs. sunt corupte, sau nu corespund cu conținutul de decriptat. Dacă ați bifat Folosiți fișiere locale, dacă există, încercați debifați această opțiune înainte de a descărca din nou pentru a rezolva potențiale probleme cu datele existente local.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="345"/>
<location filename="../../NUSGet.py" line="284"/>
<source>Ticket Not Available</source>
<translation type="unfinished">Ticket-ul nu este valabil</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="346"/>
<location filename="../../NUSGet.py" line="285"/>
<source>No Ticket is Available for the Requested Title!</source>
<translation type="unfinished">Niciun Ticket nu este valabil pentru titlul dorit.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="349"/>
<location filename="../../NUSGet.py" line="288"/>
<source>A ticket could not be downloaded for the requested title, but you have selected &quot;Pack installable archive&quot; or &quot;Create decrypted contents&quot;. These options are not available for titles without a ticket. Only encrypted contents have been saved.</source>
<translation type="unfinished">Nu se poate descărca un tichet pentru titlul cerut, dar ați selectat Împachetați arhiva instalabilă sau Creați conținut decriptat. Aceste opțiuni nu sunt valabile pentru titluri fărătichet. Doar conținuturile criptate au fost salvate.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="351"/>
<location filename="../../NUSGet.py" line="290"/>
<source>Unknown Error</source>
<translation type="unfinished">Eroare necunoscută</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="352"/>
<location filename="../../NUSGet.py" line="291"/>
<source>An Unknown Error has Occurred!</source>
<translation type="unfinished">S-a produs o eroare necunoscută!</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="354"/>
<location filename="../../NUSGet.py" line="293"/>
<source>Please try again. If this issue persists, please open a new issue on GitHub detailing what you were trying to do when this error occurred.</source>
<translation type="unfinished"> rugăm încercați din nou. Dacă problema persistă, rugăm deschideți un issue pe GitHub în care explicați ce ați încercat faceți atunci când această eroare a apărut.</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="399"/>
<location filename="../../NUSGet.py" line="337"/>
<source>Script Download Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="338"/>
<source>Open NUS script</source>
<translation type="unfinished">Deschideți script NUS</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="400"/>
<location filename="../../NUSGet.py" line="339"/>
<source>NUS Scripts (*.nus *.txt)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../NUSGet.py" line="398"/>
<source>Script Failure</source>
<translation type="unfinished">Eșuare Script</translation>
<location filename="../../NUSGet.py" line="346"/>
<source>The script could not be opened.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Script Failure</source>
<translation type="obsolete">Eșuare Script</translation>
</message>
<message>
<location filename="../../NUSGet.py" line="407"/>
<source>Failed to open the script.</source>
<translation type="unfinished">Nu s-a putut deschide script-ul.</translation>
<translation type="obsolete">Nu s-a putut deschide script-ul.</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="26"/>
@@ -162,97 +170,97 @@ Titlurile vor fi descărcate într-un folder numit „NUSGet” în fișierul dv
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="103"/>
<location filename="../../qt/ui/MainMenu.ui" line="82"/>
<source>vWii</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="134"/>
<location filename="../../qt/ui/MainMenu.ui" line="92"/>
<source>DSi</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="174"/>
<location filename="../../qt/ui/MainMenu.ui" line="117"/>
<source>Title ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="181"/>
<location filename="../../qt/ui/MainMenu.ui" line="124"/>
<source>v</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="194"/>
<location filename="../../qt/ui/MainMenu.ui" line="137"/>
<source>Version</source>
<translation type="unfinished">Versiune</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="201"/>
<location filename="../../qt/ui/MainMenu.ui" line="144"/>
<source>Console:</source>
<translation type="unfinished">Consolă</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="237"/>
<location filename="../../qt/ui/MainMenu.ui" line="180"/>
<source>Start Download</source>
<translation type="unfinished">Începeți descărcarea</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="250"/>
<location filename="../../qt/ui/MainMenu.ui" line="193"/>
<source>Run Script</source>
<translation type="unfinished">Rulați script</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="277"/>
<location filename="../../qt/ui/MainMenu.ui" line="220"/>
<source>General Settings</source>
<translation type="unfinished">Setări Generale</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="308"/>
<location filename="../../qt/ui/MainMenu.ui" line="251"/>
<source>Pack installable archive (WAD/TAD)</source>
<translation type="unfinished">Împachetați arhiva instalabilă (WAD/TAD)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="323"/>
<location filename="../../qt/ui/MainMenu.ui" line="266"/>
<source>File Name</source>
<translation type="unfinished">Nume fișier</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="357"/>
<location filename="../../qt/ui/MainMenu.ui" line="300"/>
<source>Keep encrypted contents</source>
<translation type="unfinished">Păstrați conținuturile encriptate</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="393"/>
<location filename="../../qt/ui/MainMenu.ui" line="336"/>
<source>Create decrypted contents (*.app)</source>
<translation type="unfinished">Creați conținuturi decriptate (*.app)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="432"/>
<location filename="../../qt/ui/MainMenu.ui" line="375"/>
<source>Use local files, if they exist</source>
<translation type="unfinished">Folosiți fișiere locale, dacă există</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="477"/>
<location filename="../../qt/ui/MainMenu.ui" line="420"/>
<source>Use the Wii U NUS (faster, only effects Wii/vWii)</source>
<translation type="unfinished">Folosiți Wii U NUS (mai rapid, doar pentru Wii/vWii)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="519"/>
<location filename="../../qt/ui/MainMenu.ui" line="462"/>
<source>Apply patches to IOS (Applies to WADs only)</source>
<translation type="unfinished">Aplicați patch-uri pentru IOS (se aplică doar pe WAD-uri)</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="575"/>
<location filename="../../qt/ui/MainMenu.ui" line="518"/>
<source>vWii Title Settings</source>
<translation type="unfinished">vWII Setări titlu</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<location filename="../../qt/ui/MainMenu.ui" line="552"/>
<source>Re-encrypt title using the Wii Common Key</source>
<translation type="unfinished">Re-encriptați titlul folosind cheia comună Wii</translation>
</message>
<message>
<location filename="../../qt/ui/MainMenu.ui" line="666"/>
<location filename="../../qt/ui/MainMenu.ui" line="609"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -264,21 +272,21 @@ li.checked::marker { content: &quot;\2612&quot;; }
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../modules/core.py" line="26"/>
<location filename="../../modules/core.py" line="25"/>
<source>
Could not check for updates.</source>
<translation type="unfinished">Nu s-a putut verifica dacă există actualizări.</translation>
</message>
<message>
<location filename="../../modules/core.py" line="34"/>
<location filename="../../modules/core.py" line="33"/>
<source>
There&apos;s a newer version of NUSGet available!</source>
<translation type="unfinished">O nouă versiune de NUSGet este valabilă!</translation>
</message>
<message>
<location filename="../../modules/core.py" line="36"/>
<location filename="../../modules/core.py" line="35"/>
<source>
You&apos;re running the latest release of NUSGet.</source>