BackupProfile.uc.js - div. Fragen dazu

  • hab mein post editiert danach.

    :thumbup:


    nach user.js gesucht.

    Ergänzend.

    Änderungen in about:config sollte man immer über diese Datei machen.

    Vorteil, man weiß auch später noch genau was man mal geändert hat.

    PS:

    Für evtl. Fragen dazu dann bitte einen neuen Thread erstellen, danke.

    Mit freundlichem Gruß
    Andreas
    Mein Laptop  Meine Add-ons

    Einmal editiert, zuletzt von 2002Andreas (22. November 2021 um 15:28) aus folgendem Grund: Ein Beitrag von 2002Andreas mit diesem Beitrag zusammengefügt.

  • Hallo,

    ich habe an der BackupProfile.uc.js gestrickt und geistiges Material aus verschiedenen Quellen verbaut.

    Es wird die volle Versionsnummer einer Release-Version ermittelt (alle Stellen).

    Datum und Zeit wurden angepasst. Weil ich nur 1 Punkt im Dateinamen anstrebe, sieht das dann so aus:

    Firefox_94-0-2_Standardbrowser_2021-11-24_14-16-07.zip

    Namen zu anderen Profilen und Speicherorten, müssen natürlich individuell angepasst werden.

    Wen es interessiert, hier der Code:

    13 Mal editiert, zuletzt von oldman53 (24. November 2021 um 23:36) aus folgendem Grund: Korrekturen u. Probleme beim Einfügen des Codes

  • Hello,

    Wunderbares Skript, sehr nützlich. Mir ist diese Besonderheit aufgefallen. Wenn die Versionsnummer 4 Ziffern enthält, hat das erstellte Backup den ersten Namen. Wenn die Versionsnummer 5-stellig ist, erhält das Backup einen zweiten Namen:

    Profiles_v115.0.undefined_esr_2023-07-04_13-51-35.zip

    Profiles_v115.0.1_esr_2023-07-07_18-26-19.zip

    Das Skript erkennt nicht, dass 4 Ziffern in der Nummer auch OK sind. Kann dies behoben werden?

  • Versuch mal diese Version:

    Speicherpfad, Archivname und das Icon mußt du dir natürlich anpassen... ;)

  • Bei mir will das nicht klappen mit dem Backup. Ich sehe zwar das Script im CS Manager und aktiv ist es auch, aber einen Button sehe ich keinen noch wird ein Backup erstellt. Pfad und Icon habe ich angepasst, Namen vom Backup erst mal nicht.

    Spoiler anzeigen


    // ==UserScript==
    // Name BackupProfile.uc.js
    // Namespace BackupProfile.github.com
    // @description Schaltfläche zum Sichern des Firefoxprofils
    // @charset UTF-8
    // @author ywzhaiqi、defpt
    // @version v2018.01.10
    // @note Vorlage Script von ywzhaiqi (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21)
    // @note Sicherungsdatei enthaelt auch Profilname
    // @reviewURL http://bbs.kafan.cn/thread-1758785-1-1.html
    (function () {
    ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
    CustomizableUI.createWidget({
    id : "Backup-button",
    defaultArea : CustomizableUI.AREA_NAVBAR,
    label : "Profilsicherung",
    tooltiptext : "Sichern der aktuellen TEST-Konfiguration",
    onClick: function(){
    // Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
    var path = "D:\\Software_Tools\\Browser\\Firefox\\Backup\\";
    // var path = "";
    // Ausschlussliste
    var excludes = 'bookmarkbackups *cache* crashes fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml content-prefs.sqlite directoryLinks.json mimeTypes.rdf compatibility.ini parent.lock formhistory.sqlite';


    if (!path) {
    var nsIFilePicker = Ci.nsIFilePicker;
    var FP = Cc['@http://mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    FP.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);

    if (FP.show() == nsIFilePicker.returnOK) {
    path = FP.file.path;
    } else {
    return false;
    }
    }

    excludes = excludes.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\s+/g, '|');
    excludes = new RegExp(excludes, 'i');

    var zw = Cc['@http://mozilla.org/zipwriter;1'].createInstance(Ci.nsIZipWriter);
    var pr = {PR_RDONLY: 0x01, PR_WRONLY: 0x02, PR_RDWR: 0x04, PR_CREATE_FILE: 0x08, PR_APPEND: 0x10, PR_TRUNCATE: 0x20, PR_SYNC: 0x40, PR_EXCL: 0x80};
    var fu = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils;
    var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[]));
                
    let d = new Date();
    d = d.getDate().toString().padStart(2, '0') + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear() + ' - ' + d.getHours().toString().padStart(2, '0') + '\u2236' + d.getMinutes().toString().padStart(2, '0');

    // Die folgende Zeile formt den Archivnamen
    var archiveName = 'Profil RALF ' + AppConstants.MOZ_APP_VERSION_DISPLAY + ' - ' + d + '.zip'; /* 'd' ersetzt 'localnow' */
            
    var xpi = fu.File(path + '\\' + archiveName);

    zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
    var dirArr = [dir];
    for (var i=0; i<dirArr.length; i++) {
    var dirEntries = dirArr[i].directoryEntries;
    while (dirEntries.hasMoreElements()) {
    var entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
    if (entry.path == xpi.path) {
    continue;
    }

    if (entry.isDirectory()) {
    dirArr.push(entry);
    }

    var relPath = entry.path.replace(dirArr[0].path, '');
    if (relPath.match(excludes)) {
    continue;
    }

    var saveInZipAs = relPath.substr(1);
    saveInZipAs = saveInZipAs.replace(/\\/g,'/');
    // Konfigurationsdateien können gesperrt werden
    try {
    zw.addEntryFile(saveInZipAs, Ci.nsIZipWriter.COMPRESSION_FASTEST, entry, false);
    } catch (e) {}
    }
    }
    zw.close();
    alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path);

    function alert(aString, aTitle) {
    Cc['@http://mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlertNotification("", aTitle, aString, false, "", null);
    }

    function bupgetCurrentProfileName(){
    function readFile(aFile){
    var stream = Cc["@http://mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); stream.init(aFile, 0x01, 0, 0);
    var cvstream = Cc["@http://mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
    cvstream.init(stream, "UTF-8", 1024, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
    var content = "", data = {};
    while (cvstream.readString(4096, data)) {
    content += data.value;
    }
    cvstream.close();
    return content.replace(/\r\n?/g, "\n");
    }
    var PrefD = Components.classes["@http://mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("PrefD", Components.interfaces.nsIFile);
    var ini = Components.classes["@http://mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("AppRegD", Components.interfaces.nsIFile);

    ini.append("profiles.ini");
    var ini = readFile(ini);
    var profiles = ini.match(/Name=.+/g);
    var profilesD = ini.match(/Path=.+/g);
    for ( var i = 0; i < profiles.length;i++) {
    if ((profilesD[i]+"$").indexOf(PrefD.leafName+"$") >= 0) {
    profiles[i].match(/Name=(.+)$/);
    return RegExp.$1;
    }
    }
    return null;
    }
    },
    });

    var cssStr = '@-moz-document url("chrome://browser/content/browser.xhtml"){'
    + '#Backup-button .toolbarbutton-icon {'
    + 'list-style-image: url("file:///D:/Software_Tools/Browser/Firefox/firefox.png")'
    + '}}';
    var sss = Cc["@http://mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    var ios = Cc["@http://mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    sss.loadAndRegisterSheet(ios.newURI("data:text/css;base64," + btoa(cssStr), null, null), sss.USER_SHEET);
    })();

  • habe auch ein Icon vom CS Manager wo das Backup Script aufscheint und mit einem Haken aktiviert ist.

    Was genau meinst du damit :/

    So muss das im Ordner chrome ausssehen:

    Funktioniert dieses Skript bei dir?

    Das erstellt diesen Button:

  • Ich denke mir, dass das Problem in der vorletzten Zeile liegen könnte. Die CSS-Verarbeitung erwartet da Base64 und vorher war, wenn ich mich recht erinnere, mit list-style-image ein Base64-Code angegeben.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • Sieht so aus jetzt:

    War nur eine Vermutung. Ich dachte, das base64 muss doch in der Zeile eine Bewandtnis haben.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • Wir können hier eh nur fragen bzw. vermuten.

    Ich meinte erst einmal damit, dass ich keine Ahnung habe, ob sich da im Skript wirklich ein Fehler verbirgt. Was Schrotty74 bisher gemacht hat und noch macht, steht dann auf einem anderen Blatt.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • ob sich da im Skript wirklich ein Fehler verbirgt.

    Da bin ich auch überfragt, aber zumindest hat es mit dem anderen Icon hier funktioniert.

    Ok, die Größe und die Abstände passen damit nicht ganz richtig ;)


    So sieht das mit einem base64 Eintrag aus:

    Auch nicht wirklich anders.

    Mit freundlichem Gruß
    Andreas
    Mein Laptop  Meine Add-ons

    Einmal editiert, zuletzt von 2002Andreas (14. Juli 2023 um 15:09) aus folgendem Grund: Ein Beitrag von 2002Andreas mit diesem Beitrag zusammengefügt.

  • Ok, die Größe und die Abstände passen damit nicht ganz richtig

    Für die Abstände kannst du ja background statt list-style-image verwenden und dann zwei Werte für background-position angeben, und sicherheitshalber no-repeat.

    Die Größe sollte eigentlich 16px x 16px sein.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • Sorry hatte gestern keine Zeit mehr daher kann ich erst jetzt wieder Antworten. Meine das so mit diesen Script Manger:

    So sieht es aus bei mir:

    Das Script mit dem Restart Button geht und nach dem ich das Script hinzugefügt hatte, war auf einmal auch das Backup Symbo da. Verstehe ich nicht. Habe nur denn Cache auch wieder gelöscht gehabt nach dem hinzufügen was ich gestern aber auch paar mal gemacht hatte. Sieht jetzt so aus:

    Wie man sieht ist jetzt das Restat Symbo, und daneben das Firefox Symbol was das Backup sein soll. Das Symbol wird noch getauscht. Diese Sache mit den Scripts finde ich spannend. Muss mal schauen was es da so alles gibt. Gibt es eine Seite wo man Scripts findet welche man empfehlen kann?

    Was auch komisch ist. es wird mir zwar jetzt angezeigt aber so bald ich eines der beiden Scripte lösche so das nur noch eines vorhanden ist, geht es nicht mehr. Sprich es müssen immer 2 Scripts da sein, das es geht.

    5 Mal editiert, zuletzt von Schrotty74 (15. Juli 2023 um 08:56)