From b7dc2b2ce3c3e8206e28e38298e3c1fd3ecc6902 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 23 Jun 2014 12:09:28 +0200 Subject: [PATCH] turkishcine.ma config --- config.jsonc | 913 ++++++++++++++++++++++++++++++ install.py | 56 ++ scripts/poster.py | 226 ++++++++ static/png/icon.turkishcinema.png | Bin 0 -> 8150 bytes static/png/logo.turkishcinema.png | Bin 0 -> 35364 bytes 5 files changed, 1195 insertions(+) create mode 100644 config.jsonc create mode 100755 install.py create mode 100755 scripts/poster.py create mode 100644 static/png/icon.turkishcinema.png create mode 100644 static/png/logo.turkishcinema.png diff --git a/config.jsonc b/config.jsonc new file mode 100644 index 0000000..0ba9871 --- /dev/null +++ b/config.jsonc @@ -0,0 +1,913 @@ +/* + turkishcine.ma Settings + + You can edit this file. +*/ + +{ + "annotations": { + "showUsers": true + }, + "cantPlay": { + "icon": "NoCopyright", + "link": "/rights", + "text": "This movie is still under copyright." + }, + /* + Capabilities are per user level. + They can either be general: + {level: true} means a user of that level has the capability) + or related to items: + {level: x} means a user of that level has the capability + for items of a rights level up to and including x + */ + "capabilities": { + "canAddItems": {"researcher": true, "staff": true, "admin": true}, + "canDownloadVideo": {"guest": -1, "member": -1, "researcher": 3, "staff": 3, "admin": 3}, + "canEditAnnotations": {"staff": true, "admin": true}, + "canEditDocuments": {"researcher": true, "staff": true, "admin": true}, + "canEditEvents": {"researcher": true, "staff": true, "admin": true}, + "canEditFeaturedEdits": {"researcher": true, "staff": true, "admin": true}, + "canEditFeaturedLists": {"researcher": true, "staff": true, "admin": true}, + "canEditFeaturedTexts": {"researcher": true, "staff": true, "admin": true}, + "canEditMedia": {"researcher": true, "staff": true, "admin": true}, + "canEditMetadata": {"researcher": true, "staff": true, "admin": true}, + "canEditPlaces": {"researcher": true, "staff": true, "admin": true}, + "canEditRightsLevel": {"researcher": true, "staff": true, "admin": true}, + "canEditSitePages": {"staff": true, "admin": true}, + "canEditUsers": {"staff": true, "admin": true}, + "canImportAnnotations": {"researcher": true, "staff": true, "admin": true}, + "canManageDocuments": {"member": true, "researcher": true, "staff": true, "admin": true}, + "canManagePlacesAndEvents": {"member": true, "researcher": true, "staff": true, "admin": true}, + "canManageTitlesAndNames": {"member": true, "researcher": true, "staff": true, "admin": true}, + "canManageUsers": {"staff": true, "admin": true}, + "canPlayClips": {"guest": 3, "member": 3, "researcher": 3, "staff": 3, "admin": 3}, + "canPlayVideo": {"guest": 1, "member": 1, "researcher": 3, "staff": 3, "admin": 3}, + "canReadText": {"guest": 0, "member": 0, "researcher": 1, "staff": 1, "admin": 1}, + "canRemoveItems": {"staff": true, "admin": true}, + "canSeeAccessed": {"researcher": true, "staff": true, "admin": true}, + "canSeeDebugMenu": {"researcher": true, "staff": true, "admin": true}, + "canSeeExtraItemViews": {"researcher": true, "staff": true, "admin": true}, + "canSeeMedia": {"researcher": true, "staff": true, "admin": true}, + "canSeeItem": {"guest": 3, "member": 3, "researcher": 3, "staff": 3, "admin": 3}, + "canSeeSize": {"researcher": true, "staff": true, "admin": true}, + "canSeeSoftwareVersion": {"researcher": true, "staff": true, "admin": true}, + "canSendMail": {"staff": true, "admin": true} + }, + /* + clipKeys are the properties that clips can be sorted by. + If sortOperator is not specified, it will be + for strings and - for numbers. + */ + "clipKeys": [ + {"id": "text", "title": "Text", "type": "string"}, + {"id": "position", "title": "Position", "type": "float", "sortOperator": "+"}, + {"id": "duration", "title": "Duration", "type": "float"}, + {"id": "hue", "title": "Hue", "type": "float", "sortOperator": "+"}, + {"id": "saturation", "title": "Saturation", "type": "float"}, + {"id": "lightness", "title": "Lightness", "type": "float"}, + {"id": "volume", "title": "Volume", "type": "float"} + ], + /* + clipLayers is the ordered list of public layers that will appear as the + text of clips. Excluding a layer from this list means it will not be + included in find annotations. + */ + "clipLayers": ["subtitles", "keywords", "notes"], + "flags": false, + "help": [ + {"id": "help", "title": "Help"}, + {"id": "accounts", "title": "Accounts"}, + {"id": "navigation", "title": "Navigation"}, + {"id": "views", "title": "Views"}, + {"id": "timelines", "title": "Timelines"}, + {"id": "clips", "title": "Clips"}, + {"id": "maps", "title": "Maps"}, + {"id": "calendars", "title": "Calendars"}, + {"id": "find", "title": "Find"}, + {"id": "filters", "title": "Filters"}, + {"id": "lists", "title": "Lists"}, + {"id": "player", "title": "Player"}, + {"id": "editor", "title": "Editor"}, + {"id": "documents", "title": "Documents"}, + {"id": "edits", "title": "Edits"}, + {"id": "texts", "title": "Texts"}, + {"id": "embeds", "title": "Embeds"} + ], + /* + An itemKey must have the following properties: + id: The id of the key (as known by the server) + title: The title of the key (as displayed by the client) + type: text, string, float, integer, or array of any of these + and can have any of the following properties: + autocomplete: If true, find element will autocomplete + autocompleteSort: Sort order of autocomplete suggestions + capability: A capability required to see this key + columnRequired: If true, the column can't be removed + columnWidth: Default column width in px + filter: If true, one can filter results by this key + find: If true, this key will appear as a find option + format: {type: "...", args: [...]}, for special formatting + (Ox.formatType(args) will be called) + secondaryId: If true, loading /value will redirect to the item + sort: If true, one can sort results by this key + sortOperator: sort operator (+, -), in case it differs from the + default for the key's type (+ for strings, - for numbers) + sortType: special sort type (title, person) + value: {key: "...", type: "..."}, for keys that are derived + from other keys (like number of actors), or "capability" + */ + "itemKeys": [ + { + "id": "*", + "title": "All", + "type": "text", + "find": true + }, + { + "id": "title", + "title": "Title", + "type": "string", + "additionalSort": [{"key": "year", "operator": "+"}, {"key": "director", "operator": "+"}], + "autocomplete": true, + "autocompleteSort": [{"key": "year", "operator": "+"}], + "columnRequired": true, + "columnWidth": 180, + "find": true, + "sort": true, + "sortType": "title" + }, + { + "id": "director", + "title": "Director", + "type": ["string"], + "additionalSort": [{"key": "year", "operator": "+"}, {"key": "title", "operator": "-"}], + "autocomplete": true, + "columnRequired": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "country", + "title": "Country", + "type": ["string"], + "autocomplete": true, + "columnWidth": 120, + "find": true, + "sort": true + }, + { + "id": "year", + "title": "Year", + "type": "year", + "additionalSort": [{"key": "director", "operator": "+"}, {"key": "title", "operator": "+"}], + "autocomplete": true, + "columnWidth": 60, + "filter": true, + "find": true, + "sort": true, + "sortOperator": "+" + }, + { + "id": "language", + "title": "Language", + "type": ["string"], + "autocomplete": true, + "columnWidth": 120, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "runtime", + "title": "Runtime", + "type": "time", + "columnWidth": 60, + "format": {"type": "duration", "args": [0, "short"]}, + "sort": true + }, + { + "id": "color", + "title": "Color", + "type": ["string"], + "columnWidth": 120, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "sound", + "title": "Sound", + "type": ["string"], + "columnWidth": 120, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "productionCompany", + "title": "Studio", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "description": true, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "producer", + "title": "Producer", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "codirector", + "title": "Co-Director", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "writer", + "title": "Writer", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "cinematographer", + "title": "Cinematographer", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "editor", + "title": "Editor", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "composer", + "title": "Composer", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "lyricist", + "title": "Lyricist", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true, + "sortType": "person" + }, + { + "id": "actor", + "title": "Cast", + "type": ["string"], + "autocomplete": true, + "filter": true, + "find": true, + "sortType": "person" + }, + { + "id": "numberofactors", + "title": "Number of Actors", + "type": "integer", + "columnWidth": 60, + "sort": true, + "value": {"key": "actor", "type": "length"} + }, + { + "id": "name", + "title": "Name", + "type": ["string"], + "autocomplete": true, + "description": true, + "find": true + }, + { + "id": "genre", + "title": "Genre", + "type": ["string"], + "autocomplete": true, + "columnWidth": 120, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "keyword", + "title": "Keyword", + "type": ["string"], + "autocomplete": true, + "filter": true, + "find": true + }, + { + "id": "summary", + "title": "Summary", + "type": "text", + "find": true + }, + { + "id": "id", + "title": "ID", + "type": "string", + "columnWidth": 90, + "sort": true + }, + { + "id": "encyclopedia", + "title": "Encyclopedia", + "type": "string", + "capability": "canEditMetadata" + }, + { + "id": "wiki", + "title": "Wiki", + "type": "string", + "capability": "canEditMetadata" + }, + { + "id": "imdbId", + "title": "IMDb ID", + "type": "string", + "columnWidth": 90, + "secondaryId": true, + "sort": true + }, + { + "id": "comments", + "title": "Comments", + "type": "text", + "capability": "canEditMetadata" + }, + { + "id": "annotations", + "title": "Annotations", + "type": "string", // fixme: not the best type for this magic key + "find": true + }, + { + "id": "keywords", + "title": "Keywords", + "type": "layer", + "find": true + }, + { + "id": "notes", + "title": "Notes", + "type": "layer", + "find": true + }, + { + "id": "subtitles", + "title": "Subtitles", + "type": "layer", + "find": true + }, + { + "id": "duration", + "title": "Duration", + "type": "time", + "columnWidth": 90, + "format": {"type": "duration", "args": []}, + "sort": true + }, + { + "id": "resolution", + "title": "Resolution", + "type": ["integer"], + "capability": "canSeeMedia", + "columnWidth": 90, + "format": {"type": "resolution", "args": ["px"]}, + "sort": true + }, + { + "id": "aspectratio", + "title": "Aspect Ratio", + "type": "float", + "columnWidth": 90, + "format": {"type": "unit", "args": [":1", 3]}, + "sort": true + }, + { + "id": "pixels", + "title": "Pixels", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 90, + "format": {"type": "value", "args": ["px"]}, + "sort": true + }, + { + "id": "hue", + "title": "Hue", + "type": "float", + "columnWidth": 90, + "format": {"type": "color", "args": ["hue"]}, + "sort": true, + "sortOperator": "+" + }, + { + "id": "saturation", + "title": "Saturation", + "type": "float", + "columnWidth": 90, + "format": {"type": "color", "args": ["saturation"]}, + "sort": true + }, + { + "id": "lightness", + "title": "Lightness", + "type": "float", + "columnWidth": 90, + "format": {"type": "color", "args": ["lightness"]}, + "sort": true + }, + { + "id": "volume", + "title": "Volume", + "type": "float", + "columnWidth": 60, + "format": {"type": "color", "args": ["lightness"]}, + "sort": true + }, + { + "id": "numberofcuts", + "title": "Number of Cuts", + "type": "integer", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true, + "value": {"key": "cuts", "type": "length"} + }, + { + "id": "cutsperminute", + "title": "Cuts per Minute", + "type": "float", + "columnWidth": 60, + "format": {"type": "number", "args": [3]}, + "sort": true, + "value": {"key": "cuts", "type": "lengthperminute"} + }, + { + "id": "words", + "title": "Number of Words", + "type": "integer", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true, + "value": {"layer": "subtitles", "type": "words"} + }, + { + "id": "wordsperminute", + "title": "Words per Minute", + "type": "float", + "columnWidth": 60, + "format": {"type": "number", "args": [3]}, + "sort": true, + "value": {"layer": "subtitles", "type": "wordsperminute"} + }, + { + "id": "numberofdocuments", + "title": "Number of Documents", + "type": "integer", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true, + "value": {"key": "documents", "type": "length"} + }, + { + "id": "size", + "title": "Size", + "type": "integer", + "capability": "canSeeSize", + "columnWidth": 60, + "format": {"type": "value", "args": ["B"]}, + "sort": true + }, + { + "id": "bitrate", + "title": "Bitrate", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 60, + "format": {"type": "value", "args": ["bps"]}, + "sort": true + }, + { + "id": "parts", + "title": "Number of Parts", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 60, + "sort": true + }, + { + "id": "numberoffiles", + "title": "Number of Files", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 60, + "sort": true, + "value": {"key": "files", "type": "length"} + }, + { + "id": "filename", + "title": "Filename", + "type": ["string"], + "capability": "canSeeMedia" + }, + { + "id": "created", + "title": "Date Created", + "type": "date", + "columnWidth": 150, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "modified", + "title": "Last Modified", + "type": "date", + "columnWidth": 150, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "accessed", + "title": "Last Accessed", + "type": "date", + "capability": "canSeeAccessed", + "columnWidth": 150, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "timesaccessed", + "title": "Times Accessed", + "type": "integer", + "capability": "canSeeAccessed", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true + }, + { + "id": "rightslevel", + "title": "Rights Level", + "type": "enum", + "columnWidth": 90, + "format": {"type": "ColorLevel", "args": [ + ["Public", "Out of Copyright", "Under Copyright", "Private"] + ]}, + "sort": true, + "sortOperator": "+", + "values": ["Public", "Out of Copyright", "Under Copyright", "Private", "Unknown"] + }, + { + "id": "canplayvideo", + "title": "Can Play Video", + "type": "boolean", + "value": "capability" + }, + { + "id": "canplayclips", + "title": "Can Play Clips", + "type": "boolean", + "value": "capability" + }, + { + "id": "random", + "title": "Random", + "type": "integer", + "sort": true + } + ], + /* + itemName specifies how items are being referred to. + Anything excessively long may cause layout errors. + */ + "itemName": { + "singular": "Movie", + "plural": "Movies" + }, + "itemRequiresVideo": false, + "itemViews": [ + {"id": "info", "title": "Info"}, + {"id": "documents", "title": "Documents"}, + {"id": "player", "title": "Player"}, + {"id": "editor", "title": "Editor"}, + {"id": "timeline", "title": "Timeline"}, + {"id": "clips", "title": "Clips"}, + {"id": "map", "title": "Map"}, + {"id": "calendar", "title": "Calendar"}, + {"id": "data", "title": "Data"}, + {"id": "media", "title": "Media"} + ], + "language": "en", + "languages": ["ar", "el", "en", "hi"], + // fixme: should be renamed to annotationLayers + "layers": [ + { + "id": "keywords", + "title": "Keywords", + "canAddAnnotations": {"member": true, "researcher": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "item": "Keyword", + "overlap": true, + "type": "string" + }, + { + "id": "notes", + "title": "Notes", + "canAddAnnotations": {"member": true, "researcher": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "item": "Note", + "overlap": true, + "showInfo": true, + "type": "text" + }, + { + "id": "subtitles", + "title": "Subtitles", + "canAddAnnotations": {"researcher": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "isSubtitles": true, + "item": "Subtitle", + "type": "text" + } + ], + "listViews": [ + {"id": "list", "title": "as List"}, + {"id": "grid", "title": "as Grid"}, + {"id": "timelines", "title": "with Timelines"}, + {"id": "clips", "title": "with Clips"}, + {"id": "clip", "title": "as Clips"}, + //{"id": "video", "title": "as Videos"}, + {"id": "map", "title": "on Map"}, + {"id": "calendar", "title": "on Calendar"} + ], + "media": { + "importPosters": false, + "importFrames": false + }, + "menuExtras": [ + "user", + //"locale", + "reload" + ], + "personalLists": [ + {"title": "Favorites"}, + {"title": "Black & White Films", "query": {"conditions": [{"key": "color", "value": "Black and White", "operator": "=="}], "operator": "&"}}, + {"title": "Silent Films", "query": {"conditions": [{"key": "language", "value": "None", "operator": "=="}, {"key": "sound", "value": "Silent", "operator": "=="}], "operator": "|"}} + ], + "posters": { + "ratio": 0.6875 + }, + "rightsLevel": {"member": 3, "researcher": 3, "staff": 3, "admin": 3}, + "rightsLevels": [ + {"name": "Public", "color": [128, 255, 128]}, + {"name": "Out of Copyright", "color": [212, 255, 128]}, + {"name": "Under Copyright", "color": [255, 212, 128]}, + {"name": "Private", "color": [255, 128, 128]} + ], + "sendReferrer": true, + "site": { + "description": "turkishcine.ma - A Project by Pad.ma", + // FIXME: "from" and "to" would be more intuitive as keys here + "email": { + // E-mail address in contact form (to) + "contact": "turkishcine.ma@turkishcine.ma", + "footer": "-- \nturkishcine.ma - https://turkishcine.ma", + "prefix": "turkishcine.ma News -", + // E-mail address uses by the system (from) + "system": "system@turkishcine.ma" + }, + "folderdepth": 4, + "https": true, + "id": "turkishcinema", + "name": "turkishcine.ma", + "url": "turkishcine.ma", + "videoprefix": "" + }, + "sitePages": [ + {"id": "about", "title": "About"}, + {"id": "news", "title": "News"}, + {"id": "faq", "title": "Frequently Asked Questions"}, + {"id": "terms", "title": "Terms of Service"}, + {"id": "copyrights", "title": "Copyrights"}, + {"id": "contact", "title": "Contact"} + ], + "sites": [ + {"name": "Pad.ma", "url": "pad.ma", "https": true}, + {"name": "OxDB", "url": "0xdb.org", "https": true} + ], + "textRightsLevels": [ + {"name": "Public", "color": [128, 255, 128]}, + {"name": "Private", "color": [255, 128, 128]} + ], + "themes": ["oxlight", "oxmedium", "oxdark"], + "timelines": [ + {"id": "antialias", "title": "Anti-Alias"}, + {"id": "slitscan", "title": "Slit-Scan"}, + {"id": "keyframes", "title": "Keyframes"}, + {"id": "audio", "title": "Waveform"} + ], + "totals": [ + {"id": "items"}, + {"id": "runtime"}, + {"id": "files", "admin": true}, + {"id": "duration", "admin": true}, + {"id": "size", "admin": true}, + {"id": "pixels"} + ], + "tv": { + "showLogo": false + }, + "user": { + "level": "guest", + "newsletter": true, + "ui": { + "annotationsCalendarSize": 128, + "annotationsMapSize": 128, + "annotationsRange": "all", + "annotationsSize": 256, + "annotationsSort": "position", + "calendarFind": "", + "calendarSelection": "", + "clipColumns": 2, + "columns": { + "Colors": { + "columns": ["title", "director", "country", "year", "hue", "saturation", "brightness"], + "columnWidth": {} + } + }, + "document": "", + "documents": {}, + "documentSize": 256, + "documentsSelection": {}, + "documentsSort": [{"key": "name", "operator": "+"}], + "documentsView": "grid", + "edit": "", + "edits": {}, + "editSelection": [], + "editSort": [ + {"key": "index", "operator": "+"}, + {"key": "year", "operator": "+"}, + {"key": "director", "operator": "+"}, + {"key": "title", "operator": "+"}, + {"key": "position", "operator": "+"}, + {"key": "duration", "operator": "+"} + ], + "editView": "list", + "embedSize": 256, + "filters": [ + {"id": "director", "sort": [{"key": "items", "operator": "-"}]}, + {"id": "year", "sort": [{"key": "name", "operator": "+"}]}, + {"id": "language", "sort": [{"key": "items", "operator": "-"}]}, + {"id": "productionCompany", "sort": [{"key": "items", "operator": "-"}]}, + {"id": "actor", "sort": [{"key": "items", "operator": "-"}]} + ], + "filtersSize": 176, + "find": {"conditions": [], "operator": "&"}, + "followPlayer": true, + "help": "", + "icons": "posters", + "infoIconSize": 256, + "item": "", + "itemFind": "", + "itemSort": [{"key": "position", "operator": "+"}], + "itemView": "info", + "listColumns": ["title", "director", "year", "language", "runtime", "productionCompany"], + "listColumnWidth": {}, + "listSelection": [], + "listSort": [ + {"key": "year", "operator": "+"}, + {"key": "director", "operator": "+"}, + {"key": "title", "operator": "+"} + ], + "listView": "grid", + "lists": {}, + "locale": "en", + "mapFind": "", + "mapSelection": "", + "onload": "", + "page": "", + "part": { + "api": "", + "documents": "", + "faq": "", + "help": "", + "news": "", + "preferences": "", + "tv": "" + }, + "section": "items", + "sequenceMode": "shape", + "sequenceSort": [{"key": "director", "operator": "+"}], + "showAdvancedEmbedOptions": false, + "showAnnotations": true, + "showAnnotationsCalendar": true, + "showAnnotationsMap": true, + "showBrowser": true, + "showCalendarControls": true, // fixme: should be false + "showClips": true, + "showDocument": true, + "showFilters": true, + "showIconBrowser": false, + "showInfo": true, + "showLayers": { + "keywords": true, + "notes": true, + "subtitles": true + }, + "showMapControls": false, + "showMapLabels": false, + "showFolder": { + "edits": { + "personal": true, + "favorite": true, + "featured": true + }, + "items": { + "personal": true, + "favorite": true, + "featured": true, + "volumes": true + }, + "texts": { + "personal": true, + "favorite": true, + "featured": true + } + }, + "showReflections": true, + "showSidebar": true, + "showSitePosters": false, + "showTimeline": true, + "sidebarSize": 256, + "text": "", + "texts": {}, + "theme": "oxmedium", + "updateAdvancedFindResults": false, + "videoLoop": false, + "videoMuted": false, + "videoPoints": {}, + "videoResolution": 240, + "videoScale": "fit", + "videoSize": "small", + "videoSubtitles": true, + "videoTimeline": "slitscan", + "videoView": "player", + "videoVolume": 1 + }, + "username": "", + "volumes": [] + }, + // fixme: this should include colors + "userLevels": ["guest", "member", "researcher", "staff", "admin"], + "video": { + "torrent": false, + "formats": ["webm", "mp4"], + "previewRatio": 1.375, + "resolutions": [240, 480] + } +} diff --git a/install.py b/install.py new file mode 100755 index 0000000..8ba9ae1 --- /dev/null +++ b/install.py @@ -0,0 +1,56 @@ +#!/usr/bin/python + +import os +from os.path import join, abspath, basename, dirname + +name = 'turkishcinema' +base = abspath(dirname(__file__)) +os.chdir(base) + +for root, folders, files in os.walk(join(base, 'static')): + for f in files: + src = join(root, f) + target = src.replace(base, '/srv/pandora') + rel_src = os.path.relpath(src, dirname(target)) + if os.path.exists(target): + os.unlink(target) + os.symlink(rel_src, target) + +overwrite = ( + ('home', 'indiancinema'), + ('infoView', 'indiancinema'), +) + +os.chdir('/srv/pandora/static/js') +for filename, sitename in overwrite: + src = '%s.%s.js' % (filename, sitename) + target = '%s.%s.js' % (filename, name) + if os.path.exists(target): + os.unlink(target) + os.symlink(src, target) + +os.chdir(base) +src = join(base, 'config.jsonc') +target = '/srv/pandora/pandora/config.%s.jsonc' % name +rel_src = os.path.relpath(src, dirname(target)) +if os.path.exists(target): + os.unlink(target) +os.symlink(rel_src, target) +t = '/srv/pandora/pandora/config.jsonc' +if os.path.exists(t): + os.unlink(t) +os.symlink(basename(target), t) + +for root, folders, files in os.walk(join(base, 'scripts')): + for f in files: + src = join(root, f) + target = src.replace(base, '/srv/pandora') + rel_src = os.path.relpath(src, dirname(target)) + if os.path.exists(target): + os.unlink(target) + os.symlink(rel_src, target) + +#todo +#custom python module etc +#local_settings.py? + diff --git a/scripts/poster.py b/scripts/poster.py new file mode 100755 index 0000000..38040c5 --- /dev/null +++ b/scripts/poster.py @@ -0,0 +1,226 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 +from __future__ import division +import os + +root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +# using virtualenv's activate_this.py to reorder sys.path +activate_this = os.path.join(root_dir, 'bin', 'activate_this.py') +execfile(activate_this, dict(__file__=activate_this)) + +import Image +import ImageDraw +import json +from optparse import OptionParser +import ox +from ox.image import getRGB, drawText, wrapText +import sys + +static_root = os.path.join(os.path.dirname(__file__), 'data') + +def render_poster(data, poster): + + title = ox.decode_html(data.get('title', '')) + director = ox.decode_html(u', '.join(data.get('director', []))) + year = str(data.get('year', '')) + frame = data.get('frame') + timeline = data.get('timeline') + + poster_width = 704 + poster_height = 1024 + frame_height = 512 + frame_ratio = poster_width / frame_height + timeline_height = 64 + text_margin = 16 + text_width = poster_width - 2 * text_margin + poster_image = Image.new('RGB', (poster_width, poster_height)) + draw = ImageDraw.Draw(poster_image) + font_file = os.path.join(static_root, 'SourceSansProSemibold.ttf') + font_size = {'cinema': 111, 'director': 32, 'title': 48, 'year': 426} + font_lightness = {'cinema': 0.7, 'director': 0.8, 'title': 0.8, 'year': 0.6} + poster_lightness = {'image': 0.2, 'text': 0.4} + + if year: + hue = int(year) % 100 / 100 * 360 + saturation = 1 + else: + hue = 0 + saturation = 0 + + # background + draw.rectangle( + [(0, frame_height), (poster_width, poster_height - timeline_height)], + fill=getRGB((hue, saturation, poster_lightness['text'])) + ) + + # year + if year: + drawText( + poster_image, + (-93, poster_height - timeline_height - font_size['year'] + 6), + year, + font_file, + font_size['year'], + getRGB((hue, saturation, font_lightness['year'])) + ) + + # cinema + for y in [-1, 1]: + for x in [-1, 1]: + drawText( + poster_image, + (-10 + x, poster_height - timeline_height - font_size['cinema'] + 1 + y), + 'turkishcine.ma', + font_file, + font_size['cinema'], + getRGB((hue, saturation, poster_lightness['text'])) + ) + drawText( + poster_image, + (-10, poster_height - timeline_height - font_size['cinema'] + 1), + 'turkishcine.ma', + font_file, + font_size['cinema'], + getRGB((hue, saturation, font_lightness['cinema'])) + ) + + # director and title + offset_top = frame_height + text_margin + if not director: + title_max_lines = 8 + else: + title_max_lines = min(len(wrapText( + title, + text_width, + 0, + font_file, + font_size['title'] + )), 7) + director_max_lines = 11 - int((title_max_lines * 3 - 1) / 2) + + # director + if director: + lines = wrapText( + director, + text_width, + director_max_lines, + font_file, + font_size['director'] + ) + for line in lines: + for y in [-1, 1]: + for x in [-1, 1]: + drawText( + poster_image, + (text_margin + x, offset_top + y), + line, + font_file, + font_size['director'], + getRGB((hue, saturation, poster_lightness['text'])) + ) + size = drawText( + poster_image, + (text_margin, offset_top), + line, + font_file, + font_size['director'], + getRGB((hue, saturation, font_lightness['director'])) + ) + offset_top += font_size['director'] + 2 + offset_top += size[1] - font_size['director'] - 2 + + # title + lines = wrapText( + title, + text_width, + title_max_lines, + font_file, + font_size['title'] + ) + for line in lines: + for y in [-1, 1]: + for x in [-1, 1]: + drawText( + poster_image, + (text_margin + x, offset_top + y), + line, + font_file, + font_size['title'], + getRGB((hue, saturation, poster_lightness['text'])) + ) + drawText( + poster_image, + (text_margin, offset_top), + line, + font_file, + font_size['title'], + getRGB((hue, saturation, font_lightness['title'])) + ) + offset_top += font_size['title'] + 3 + + # frame + if frame: + frame_image = Image.open(frame) + frame_image_ratio = frame_image.size[0] / frame_image.size[1] + if frame_ratio < frame_image_ratio: + frame_image = frame_image.resize( + (int(frame_height * frame_image_ratio), frame_height), + Image.ANTIALIAS + ) + left = int((frame_image.size[0] - poster_width) / 2) + frame_image = frame_image.crop( + (left, 0, left + poster_width, frame_height) + ) + else: + frame_image = frame_image.resize( + (poster_width, int(poster_width / frame_image_ratio)), + Image.ANTIALIAS + ) + top = int((frame_image.size[1] - frame_height) / 2) + frame_image = frame_image.crop( + (0, top, poster_width, top + frame_height) + ) + poster_image.paste(frame_image, (0, 0)) + else: + draw.rectangle( + [(0, 0), (poster_width, frame_height)], + fill=getRGB((hue, saturation, poster_lightness['image'])) + ) + + # timeline + if timeline: + timeline_image = Image.open(timeline) + timeline_image = timeline_image.resize( + (poster_width, timeline_height), + Image.ANTIALIAS + ) + poster_image.paste(timeline_image, (0, poster_height - timeline_height)) + else: + draw.rectangle( + [(0, poster_height - timeline_height), (poster_width, poster_height)], + fill=getRGB((hue, saturation, poster_lightness['image'])) + ) + + poster_image.save(poster, quality=100) + +def main(): + parser = OptionParser() + parser.add_option('-d', '--data', dest='data', help='json file with metadata', default=None) + parser.add_option('-p', '--poster', dest='poster', help='Poster (image file to be written)') + (options, args) = parser.parse_args() + if None in (options.data, options.poster): + parser.print_help() + sys.exit() + + if options.data == '-': + data = json.load(sys.stdin) + else: + with open(options.data) as f: + data = json.load(f) + + render_poster(data, options.poster) + +if __name__ == "__main__": + main() diff --git a/static/png/icon.turkishcinema.png b/static/png/icon.turkishcinema.png new file mode 100644 index 0000000000000000000000000000000000000000..034c9d4eafea07a321dd51be5b6ccc724285bb72 GIT binary patch literal 8150 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 literal 0 HcmV?d00001 diff --git a/static/png/logo.turkishcinema.png b/static/png/logo.turkishcinema.png new file mode 100644 index 0000000000000000000000000000000000000000..c120ad802b14bdf206e73b1639188b571e04ed1e GIT binary patch literal 35364 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

;p|pf_i8P3GqjU%Y0s_)40s_+A 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 literal 0 HcmV?d00001