Aktionen

Calibre eBook MultiUser Tool / Funktion

Aus znilwiki

Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Download: CalibreMultiuserStarter.zip

Stichwörter: Calibre Multiuser MultiComputer mehrere Rechner Dropbox SkyDrive GoogleDrive Netzlaufwerk Netzwerk


Ich hatte das Problem das ich mit einem Freund zusammen Calibre ( http://calibre-ebook.com/ ) nutzen wollte - im Netzwerk und in DropBox.
Nun kann Calibre aber empfindlich reagieren wenn es auf 2 oder mehr Rechnern gleichzeitig gestartet wird - schnell kommt es zu "im Konfilkt stehende Kopien" usw. und die Änderungen von einem Rechner sind ersteinmal weg etc.

Nun, so richtig MultiUser fähig kann ich Calibre auch nicht machen - aber ich kann dafür sorgen das Calibre immer nur auf einem Rechner gleichzeitig gestartet ist.


Vorbereitung

Ihr nehmt einen Ordner und "Installiert" Calibre Portable in diesem: http://calibre-ebook.com/download_portable Eure Calibre Library befindet sich dann in diesem Ordner, also das Verzeichnis in dem die ganzen eBooks dann liegen.
Solltet Ihr schon die normale Version von Calibre nutzen - kopiert den Ordner Calibre Library der normalen Installation einfach in diesen und startet einmal die calibre-portable.exe. Es kommt ein kurzes Setup zu eurem Gerät und Email. Später könnt Ihr weitere Geräte etc. hinzufügen.

Wenn Calibre richtig läuft sollte der Ordner so aussehen:

CalibreMultiUser-001.png


Der Ordner kann selbstverständlich auch in einer DropBox etc liegen.

Die "Calibre Portable" Version funktioniert genauso wie die Installationsversion - und hat den Vorteil das auf allen Rechnern automatisch die gleiche Version eingesetzt wird.



MultiUser einrichten

Ladet die CalibreMultiuserStarter.zip herunter und entpackt diese.
Die CalibreMultiuserStarter.exe kopiert Ihr nun in das Verzeichnis in der auch die calibre-portable.exe liegt.
Dann sollte es so aussehen:

CalibreMultiUser-002.png



MultiUser nutzen

Der ganze Trick ist nun das Ihr in Zukunft Calibre über die

CalibreMultiuserStarter.exe


startet.
Diese funktioniert wie folgt:

Calibre ist noch nicht gestartet

  • Sie prüft ob eine CalibreLockFile.txt im gleichen Verzeichnis liegt.
  • Diese existiert nicht und wird mit folgendem Inhalt angelegt:
    • Anmeldename
    • Computername
    • Uhrzeit und Datum
  • Dann wird die calibre-portable.exe gestartet
  • Nun wartet die CalibreMultiuserStarter.exe im Hintergund und prüft alle 3 Sekunden ob es einen calibre-portable.exe oder calibre.exe Prozess gibt.
    • Wenn Ja läuft Calibre noch - weitere 3 Sekunden warten
    • Wenn Nein wird die CalibreLockFile.txt wieder gelöscht und das Programm beendet sich

Calibre ist bereits gestartet

  • Es gibt eine CalibreLockFile.txt im gleichen Verzeichnis.
  • Diese wird ausgelesen und dem Benutzer eine Fehlermeldung angezeigt:
CalibreMultiUser-003.png


  • Calibre wird NICHT gestartet und das Programm beendet sich.



Nachtrag

Die kleine CalibreLockFile.txt ist nur wenige Bytes groß (30 bis 60 Bytes) und somit durch DropBox & Co. in wenigen Sekunden auf die anderen Geräte repliziert.
Da in der Meldung der Anmelde- und Rechnername steht lässt sich leicht ermitteln auf welchen Gerät Calibre noch gestartet ist.
Sollte es eine Fehler geben - Calibre ist auf dem gemeldeten Rechner gar nicht gestartet - löscht Ihr einfach die CalibreLockFile.txt und es funktioniert wieder alles wie gewohnt.



Quellcode

Das Tool wurde in/mit AutoIt geschrieben:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=CalibeIcon.ico
#AutoIt3Wrapper_Res_Description=2013 Bernhard Linz / Bernhard@znil.de / http://znil.net
#AutoIt3Wrapper_Res_Fileversion=1.0.0.3
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=znil.net
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

; CalibeMultiuserStarter
; 2013 von Bernhard Linz
; http://znil.net
; Bernhard@znil.net

Dim Const $s_LockFileName = "CalibreLockFile.txt"
Dim Const $s_CalibreProgramName = "calibre-portable.exe"
Dim Const $s_CalibreMainProgramName = "calibre.exe"
Dim $h_lockfile
Dim $h_Calibre
Dim $b_RunCalibe = False
Dim $a_gelockt_von


If FileExists($s_LockFileName) = 1 Then
    $h_lockfile = FileOpen($s_LockFileName,0)
    $a_gelockt_von = StringSplit(FileReadLine($s_LockFileName), ":", 0)
    FileClose($h_lockfile)
    ; $a_gelockt_von[1] = Benutzername
    ; $a_gelockt_von[2] = Computername
    ; $a_gelockt_von[3] = Stunde
    ; $a_gelockt_von[4] = Minute
    ; $a_gelockt_von[5] = Tag
    ; $a_gelockt_von[6] = Monat
    ; $a_gelockt_von[7] = Jahr
    If $a_gelockt_von[0] = 7 Then
        MsgBox(262160, "Calibre blockiert", "Der Benutzer '" & $a_gelockt_von[1] & "' am Computer '" & $a_gelockt_von[2] & "'" & @CRLF & _
         "hat bereits um " & $a_gelockt_von[3] & ":" & $a_gelockt_von[4] & " Uhr am " & $a_gelockt_von[5] & "." & $a_gelockt_von[6] & "." & $a_gelockt_von[7] & @CRLF & _
         "Calibre gestartet und nimmt eventuell Änderungen vor." & @CRLF & @CRLF & _
         "Programmaufruf ist blockiert!")
    EndIf
    $b_RunCalibe = False
Else
    $h_lockfile = FileOpen($s_LockFileName,2)
    FileWriteLine($h_lockfile, @UserName & ":" & @ComputerName & ":" & @HOUR & ":" & @MIN & ":" & @MDAY & ":" & @MON & ":" & @YEAR & @CRLF)
    FileClose($h_lockfile)
    $b_RunCalibe = True
EndIf

If $b_RunCalibe = False Then
    Exit 1
EndIf

$h_Calibre = Run(@ScriptDir & "\" & $s_CalibreProgramName, @ScriptDir, @SW_MAXIMIZE)
If $h_Calibre = 0 Then
    FileDelete($s_LockFileName)
    MsgBox(16, "Fehler", "Konnte '" & @ScriptDir & "\" & $s_CalibreProgramName & "' nicht starten")
    Exit 1
EndIf

Do
    Sleep(3000)
    If (ProcessExists($h_Calibre) = 0) And (ProcessExists($s_CalibreMainProgramName) = 0) Then
        $b_RunCalibe = False
    EndIf
Until $b_RunCalibe = False

FileDelete($s_LockFileName)
Sleep (3000)

If FileExists($s_LockFileName) = 1 Then
    MsgBox(16,"Warnung", "Konnte das Calibre-Lock-File nicht löschen:" & @CRLF & @ScriptDir & "\" & $s_CalibreProgramName)
    Exit 1
Else
    Exit 0
EndIf



--Bernhard Linz 20:45, 22. Okt. 2013 (CEST)


Loading comments...