Calibre eBook MultiUser Tool / Funktion
Aus znilwiki
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:
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:
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 einencalibre-portable.exe
odercalibre.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:
- 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)