package fr.free.nrw.commons import android.os.Parcelable import fr.free.nrw.commons.location.LatLng import kotlinx.android.parcel.Parcelize import org.wikipedia.page.PageTitle import java.util.* @Parcelize class Media constructor( /** * @return pageId for the current media object * Wikibase Identifier associated with media files */ val pageId: String = UUID.randomUUID().toString(), val thumbUrl: String? = null, /** * Gets image URL * @return Image URL */ val imageUrl: String? = null, /** * Gets the name of the file. * @return file name as a string */ val filename: String? = null, /** * Gets the file description. * @return file description as a string */ // monolingual description on input... /** * Sets the file description. * @param fallbackDescription the new description of the file */ var fallbackDescription: String? = null, /** * Gets the upload date of the file. * Can be null. * @return upload date as a Date */ val dateUploaded: Date? = null, /** * Gets the license name of the file. * @return license as a String */ /** * Sets the license name of the file. * * @param license license name as a String */ var license: String? = null, val licenseUrl: String? = null, /** * Gets the name of the creator of the file. * @return creator name as a String */ /** * Sets the creator name of the file. * @param creator creator name as a string */ var creator: String? = null, /** * Gets the categories the file falls under. * @return file categories as an ArrayList of Strings */ val categories: List? = null, /** * Gets the coordinates of where the file was created. * @return file coordinates as a LatLng */ val coordinates: LatLng? = null, val captions: Map = emptyMap(), val descriptions: Map = emptyMap(), val depictionIds: List = emptyList() ) : Parcelable { constructor( captions: Map, categories: List?, filename: String?, fallbackDescription: String?, creator: String? ) : this( filename = filename, fallbackDescription = fallbackDescription, dateUploaded = Date(), creator = creator, categories = categories, captions = captions ) /** * Gets media display title * @return Media title */ val displayTitle: String get() = if (filename != null) pageTitle.displayTextWithoutNamespace.replaceFirst("[.][^.]+$".toRegex(), "") else "" /** * Gets file page title * @return New media page title */ val pageTitle: PageTitle get() = Utils.getPageTitle(filename!!) /** * Returns wikicode to use the media file on a MediaWiki site * @return */ val wikiCode: String get() = String.format("[[%s|thumb|%s]]", filename, mostRelevantCaption) val mostRelevantCaption: String get() = captions[Locale.getDefault().language] ?: captions.values.firstOrNull() ?: displayTitle }