import java.net.URL;

import com.google.gdata.client.photos.PicasawebService;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.photos.AlbumFeed;
import com.google.gdata.data.photos.CommentEntry;
import com.google.gdata.data.photos.PhotoEntry;
import com.google.gdata.data.photos.PhotoFeed;

println new Date()

// Dateinamen einlesen
def picDir = new File('/Users/tilman/Desktop/Dia-Projekt/Fotos')
def picFiles = []
picDir.eachFile {
	if (it.name.size() > 16) {
		picFiles << it.name.substring(0, 16)
	}
}
picFiles = picFiles.sort()
println picFiles.size() + " Bilder im Verzeichnis"

// Liste mit Bildunterschriften einlesen
List picInfo = new File('resources/Liste.txt').readLines()
println picInfo.size() + " Bildunterschriften"

def lastTitle = ''
def title = ''

def filename = ''
def fileIndex = 0
def descriptionMap = [:]

picInfo.each { line ->
	
	if (line.length() > 0) {
		
		// Sofern dem Titel direkt eine Bilddatei zugeordnet ist, den Dateinamen extrahieren.
		// Wenn kein Dateiname in der Zeile steht, wird die nächste Datei in der Liste genommen
		if (line.contains('//')) {
			filename =  line.substring(line.indexOf('Scan-'), line.length()).trim().substring(0, 16)
			fileIndex = picFiles.indexOf(filename)
			line = line.substring(0, line.indexOf('//')).trim()
		}
		else {
			fileIndex++
			filename = picFiles[fileIndex]
		}
		
		// Marker für "Neues Magazin" entfernen
		if (line.startsWith('NM')) {
			line = line.substring(2, line.length()).trim()
		}
		
		// Wiederholte Beschreibung einsetzen
		if (line.contains('"')) {
			line = line.replace('"', lastTitle)
		}
		
		// Anführungszeichen ersetzen
		if (line.contains("''")) {
			line = line.replace("''", '"')
		}
		
		line = line.trim()
		
		descriptionMap.put(filename, line)
		
		lastTitle = line
	}
}

def service = new PicasawebService("de.tilman.picasa.MetadataUploader");
service.setUserCredentials('twalther@gmx.net', 'Gr4m80tt')
def albumFeed = service.getFeed(new URL("https://picasaweb.google.com/data/feed/api/user/default/albumid/5582737983461580705"), AlbumFeed.class);
def descSetCount = 0
def noDescCount = 0

for (PhotoEntry photo : albumFeed.getPhotoEntries()) {
	filename = photo.getTitle().getPlainText().substring(0, 16)
	def description = descriptionMap.get(filename)
	if (description != null) {
		println 'Setze Beschreibung für Bild ' + photo.getTitle().getPlainText() + ' auf "' + description + '"'
		photo.setDescription(new PlainTextConstruct(description))
		photo.update()
		
		// Warten, um Fehler REJECTED_USER_LIMIT zu vermeiden
		Thread.sleep(200)
		
		descSetCount++
	}
	else {
		noDescCount++
		println 'Keine Beschreibung für Bild ' + photo.getTitle().getPlainText()
	}
}

println descSetCount + ' Beschreibungen gesetzt'
println noDescCount + ' Bilder, für die keine Beschreibung gefunden wurde'

println new Date()
