[DEV] auto_create bdd when startup and update the sended automatic

This commit is contained in:
Edouard DUPIN 2020-02-26 23:34:39 +01:00
parent 66a016425b
commit 37223596e8
24 changed files with 591 additions and 853 deletions

View File

@ -36,6 +36,7 @@ import data_global_elements
import hashlib
import shutil
import random
tmp_value = 0
@ -58,6 +59,7 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
"visible": True,
},
@ -65,6 +67,7 @@ def add(_app, _name_api):
"name": "size",
"type": "int",
"modifiable": False,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -72,6 +75,7 @@ def add(_app, _name_api):
"name": "sha512",
"type": "str",
"modifiable": False,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -79,6 +83,7 @@ def add(_app, _name_api):
"name": "mime_type",
"type": "str",
"modifiable": False,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -86,6 +91,7 @@ def add(_app, _name_api):
"name": "original_name",
"type": "str",
"modifiable": False,
"creatable": True,
"can_be_null": True,
"visible": False,
},
@ -98,9 +104,9 @@ def add(_app, _name_api):
@doc.description("simply check if the resource is already uploaded.")
@doc.produces(content_type='application/json')
async def check_existance(request, sha512):
value = data_global_elements.get_interface(_name_api).gets_where(select=[["==", "sha512", sha512]], filter=["id"])
value = data_global_elements.get_interface(_name_api).find("sha512", sha512)
if value != None:
return response.json({"found":True, "ids":value})
return response.json(value)
raise ServerError("No data found", status_code=404)
@ -114,8 +120,10 @@ def add(_app, _name_api):
args_with_blank_values = _request.headers
debug.info("List arguments: " + str(args_with_blank_values));
async def streaming(_response):
global tmp_value
#debug.info("streaming " + str(_response));
total_size = 0
tmp_value += random.randint(1,50)
temporary_file = os.path.join(_app.config['REST_TMP_DATA'], str(tmp_value) + ".tmp")
if not os.path.exists(_app.config['REST_TMP_DATA']):
os.makedirs(_app.config['REST_TMP_DATA'])
@ -140,8 +148,7 @@ def add(_app, _name_api):
"size": total_size,
"sha512": str(sha1.hexdigest()),
'original_name': _request.headers["filename"],
'mime_type': _request.headers["mime-type"],
'create_date': datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
'mime_type': _request.headers["mime-type"]
}
# TODO: Check if the element already exist ...

View File

@ -39,24 +39,28 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
},
{
"name": "type",
"type": "string",
"modifiable": False,
"creatable": True,
"can_be_null": False,
},
{
"name": "name",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
},
{
"name": "description",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
}
]
@ -96,10 +100,9 @@ def add(_app, _name_api):
@doc.consumes(DataModel, location='body')#, required=True)
@doc.response_success(status=201, description='If successful created')
async def find_with_name(request):
api = data_global_elements.get_interface(_name_api)
for elem in api.bdd:
if elem["name"] == request.json["name"]:
return response.json({"id": elem["id"]})
value = data_global_elements.get_interface(_name_api).find("name", request.json["name"])
if value != None:
return response.json(value)
raise ServerError("No data found", status_code=404)
@elem_blueprint.get('/' + _name_api + '/<id:int>', strict_slashes=True)

View File

@ -38,6 +38,7 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
"visible": True,
},
@ -45,6 +46,7 @@ def add(_app, _name_api):
"name": "number",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -52,13 +54,15 @@ def add(_app, _name_api):
"name": "description",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
{
"name": "group_id",
"name": "parent_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -69,7 +73,7 @@ def add(_app, _name_api):
class DataModel:
number = int
description = str
group_id = int
parent_id = int
@elem_blueprint.get('/' + _name_api, strict_slashes=True)
@doc.summary("Show saisons")
@ -94,11 +98,9 @@ def add(_app, _name_api):
@doc.consumes(DataModel, location='body')
@doc.response_success(status=201, description='If successful created')
async def find_with_name(request):
api = data_global_elements.get_interface(_name_api)
for elem in api.bdd:
if elem["group_id"] == request.json["group_id"] \
and elem["number"] == request.json["number"]:
return response.json({"id": elem["id"]})
value = data_global_elements.get_interface(_name_api).find2("parent_id", request.json["parent_id"], "name", request.json["name"])
if value != None:
return response.json(value)
raise ServerError("No data found", status_code=404)
@elem_blueprint.get('/' + _name_api + '/<id:int>', strict_slashes=True)

View File

@ -39,6 +39,7 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
"visible": True,
},
@ -46,6 +47,7 @@ def add(_app, _name_api):
"name": "name",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -53,6 +55,7 @@ def add(_app, _name_api):
"name": "description",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},

View File

@ -37,6 +37,7 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
"visible": True,
},
@ -44,6 +45,7 @@ def add(_app, _name_api):
"name": "name",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -51,6 +53,7 @@ def add(_app, _name_api):
"name": "description",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},

View File

@ -78,6 +78,7 @@ def add(_app, _name_api):
"name": "id",
"type": "int",
"modifiable": False,
"creatable": False,
"can_be_null": False,
"visible": True,
},
@ -85,6 +86,7 @@ def add(_app, _name_api):
"name": "data_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": False,
"visible": True,
},
@ -92,6 +94,7 @@ def add(_app, _name_api):
"name": "type_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -99,6 +102,7 @@ def add(_app, _name_api):
"name": "saison_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -106,6 +110,7 @@ def add(_app, _name_api):
"name": "episode",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -113,6 +118,7 @@ def add(_app, _name_api):
"name": "univers_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -120,6 +126,7 @@ def add(_app, _name_api):
"name": "group_id",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -127,6 +134,7 @@ def add(_app, _name_api):
"name": "name",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -134,6 +142,7 @@ def add(_app, _name_api):
"name": "description",
"type": "str",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -141,6 +150,7 @@ def add(_app, _name_api):
"name": "date",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},
@ -148,6 +158,7 @@ def add(_app, _name_api):
"name": "time",
"type": "int",
"modifiable": True,
"creatable": True,
"can_be_null": True,
"visible": True,
},

View File

@ -40,6 +40,10 @@ import data_interface
import data_global_elements
import create_bdd
create_bdd.create_if_needed();
from sanic_cors.extension import cors
app = Sanic(__name__)
spf = SanicPluginsFramework(app)
@ -70,7 +74,7 @@ def add_interface(_name, _base_name, _name_view):
interface = data_interface.DataInterface(_name, _base_name, _name_view)
data_global_elements.add_interface(_name, interface)
add_interface(data_global_elements.API_DATA, data_global_elements.API_DATA, "data")
add_interface(data_global_elements.API_DATA, data_global_elements.API_DATA, "view_data")
add_interface(data_global_elements.API_TYPE, "node", "view_type")
add_interface(data_global_elements.API_UNIVERS, "node", "view_univers")
add_interface(data_global_elements.API_GROUP, "node", "view_serie")

402
back/src/create_bdd.py Executable file
View File

@ -0,0 +1,402 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license MPL v2.0 (see license file)
##
#pip install paho-mqtt --user
from realog import debug
import json
import os
import random
import copy
import config
import tools
from dateutil import parser
import db
import psycopg2
def create_if_needed():
connection = db.connect_bdd();
debug.info("create the table:")
c = connection.cursor()
need_to_create_table = False
try:
c.execute('''
SELECT * FROM object LIMIT 2;
''');
connection.commit()
except psycopg2.errors.UndefinedTable:
need_to_create_table = True
if need_to_create_table == False:
debug.info("Does not need to create the BDD");
connection.commit()
db.remove_connection();
return
connection.commit()
debug.info("Add default BDD format");
c.execute('''
CREATE TYPE node_type AS ENUM ('type', 'univers', 'serie', 'saison', 'media');
CREATE TYPE age_type AS ENUM ('-', '5', '9', '12', '14', '16', '18');
''')
connection.commit()
# Create table
c.execute('''
CREATE SEQUENCE kar_id_sequence;
''')
connection.commit()
# Create table
c.execute('''
CREATE OR REPLACE FUNCTION trigger_set_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.modify_date = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
''')
connection.commit()
aaa = '''
CREATE OR REPLACE FUNCTION check_exist(_table character, _id INTEGER)
RETURNS BOOLEAN AS $$
DECLARE vvv int;
DECLARE eee text;
BEGIN
raise WARNING 'check_exist(%,%)%', _table, _id, E'\n';
IF _id IS NULL THEN
raise WARNING ' ==> return 1 (detect NULL)%', E'\n';
RETURN 1;
END IF;
eee = 'select 1 FROM ' || quote_ident(_table) || ' WHERE id = ' || _id;
raise WARNING 'Execute: % %', eee, E'\n';
EXECUTE 'select 1 FROM ' || quote_ident(_table) || ' WHERE id = ' || _id INTO vvv;
raise WARNING 'Value vvv: % %', vvv, E'\n';
IF vvv = 1 THEN
raise WARNING ' ==> return 1 %', E'\n';
RETURN 1;
ELSE
raise WARNING ' ==> return 0 %', E'\n';
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql;
'''
c.execute('''
CREATE OR REPLACE FUNCTION check_exist(_table character, _id INTEGER)
RETURNS BOOLEAN AS $$
DECLARE vvv int;
DECLARE eee text;
BEGIN
IF _id IS NULL THEN
RETURN 1;
END IF;
EXECUTE 'select 1 FROM ' || quote_ident(_table) || ' WHERE id = ' || _id INTO vvv;
IF vvv = 1 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql;
''')
connection.commit()
c.execute("""
CREATE OR REPLACE FUNCTION check_node_exist(_type character, _id INTEGER)
RETURNS BOOLEAN AS $$
DECLARE vvv int;
DECLARE eee text;
BEGIN
IF _id IS NULL THEN
RETURN 1;
END IF;
EXECUTE 'select 1 FROM node WHERE type = ''' || quote_ident(_type) || ''' AND id = ' || _id INTO vvv;
IF vvv = 1 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql;
""")
connection.commit()
debug.info("Add Main Object interface");
# Create table
c.execute('''
CREATE TABLE object (
id INTEGER PRIMARY KEY default nextval('kar_id_sequence'),
deleted BOOLEAN NOT NULL DEFAULT false,
create_date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
modify_date TIMESTAMPTZ NOT NULL DEFAULT NOW());
COMMENT ON TABLE object IS 'Basic element in this BDD (manage the create and modfy property, the deletion and the unique ID.';
COMMENT ON COLUMN object.id IS 'Unique global ID in the BDD.';
COMMENT ON COLUMN object.deleted IS 'If true the element is dead and must not be shown.';
COMMENT ON COLUMN object.create_date IS 'Creation date of this Object (automatically setup by the BDD).';
COMMENT ON COLUMN object.modify_date IS 'Modify date of this object (automatically updated by the BDD).';
''')
c.execute('''
CREATE TRIGGER set_timestamp
BEFORE UPDATE ON object
FOR EACH ROW
EXECUTE PROCEDURE trigger_set_timestamp();
''')
connection.commit()
debug.info("Add DATA interface");
# Create table
c.execute('''
CREATE TABLE data (
sha512 VARCHAR(129) NOT NULL,
mime_type VARCHAR(128) NOT NULL,
size BIGINT NOT NULL,
original_name TEXT
) INHERITS (object);
COMMENT ON TABLE data IS 'Data basic reference on the big data managed.';
COMMENT ON COLUMN data.sha512 IS 'Unique Sha512 of the file.';
COMMENT ON COLUMN data.mime_type IS 'Type of the object with his mine-type description.';
COMMENT ON COLUMN data.size IS 'Size of the file in Byte.';
COMMENT ON COLUMN data.original_name IS 'Name of the file when upload it in the BDD ==> MUST be remove later.';
''')
connection.commit()
c.execute('''
CREATE TRIGGER set_timestamp_data
BEFORE UPDATE ON data
FOR EACH ROW
EXECUTE PROCEDURE trigger_set_timestamp();
''')
connection.commit()
debug.info("Add NODE interface");
# Create table
c.execute('''
CREATE TABLE node (
type node_type NOT NULL,
name TEXT NOT NULL,
description TEXT,
parent_id INTEGER CHECK(check_exist('node', parent_id))
) INHERITS (object);
COMMENT ON TABLE node IS 'Node is a basic element of what must be hierarchie apears.';
COMMENT ON COLUMN node.name IS 'Name of the Node.';
COMMENT ON COLUMN node.description IS 'Description of the Node.';
''')
connection.commit()
c.execute('''
CREATE TRIGGER set_timestamp_node
BEFORE UPDATE ON node
FOR EACH ROW
EXECUTE PROCEDURE trigger_set_timestamp();
''')
connection.commit()
debug.info("Add Cover interface");
# Create table
c.execute('''
CREATE TABLE cover_link (
node_id INTEGER CHECK(check_exist('node', node_id)),
data_id INTEGER CHECK(check_exist('data', data_id))
) INHERITS (object);
COMMENT ON TABLE cover_link IS 'Link between cover data id and Nodes.';
''')
connection.commit()
c.execute('''
CREATE TRIGGER set_timestamp_cover_link
BEFORE UPDATE ON cover_link
FOR EACH ROW
EXECUTE PROCEDURE trigger_set_timestamp();
''')
connection.commit()
debug.info("Add MEDIA interface");
# Create table
c.execute('''
CREATE TABLE media (
data_id INTEGER CHECK(check_exist('data', data_id)),
type_id INTEGER CHECK(check_node_exist('type', type_id)),
univers_id INTEGER CHECK(check_node_exist('univers', univers_id)),
serie_id INTEGER CHECK(check_node_exist('serie', serie_id)),
saison_id INTEGER CHECK(check_node_exist('saison', saison_id)),
episode INTEGER CHECK(episode >=0),
date INTEGER CHECK(date > 1850),
time INTEGER CHECK(time >= 0),
age_limit age_type NOT NULL DEFAULT '-'
) INHERITS (node);
COMMENT ON TABLE media IS 'Media Media that is visible.';
COMMENT ON COLUMN media.episode IS 'Number of the episode in the saison sequence.';
COMMENT ON COLUMN media.date IS 'Simple date in years of the creation of the media.';
COMMENT ON COLUMN media.time IS 'Time in second of the media';
COMMENT ON COLUMN media.age_limit IS 'Limitation of the age to show the display ("-" for no limitation)';
''')
# Save (commit) the changes
connection.commit()
c.execute('''
CREATE TRIGGER set_timestamp_media
BEFORE UPDATE ON media
FOR EACH ROW
EXECUTE PROCEDURE trigger_set_timestamp();
''')
connection.commit()
debug.info("Add Views models");
c.execute('''
CREATE VIEW view_data AS
SELECT id, sha512, mime_type, size
FROM data
WHERE deleted = false
ORDER BY id;
CREATE VIEW view_type AS
SELECT id, name, description,
array(
SELECT data_id
FROM cover_link
WHERE cover_link.node_id = node.id
) AS covers
FROM node
WHERE deleted = false AND type = 'type'
ORDER BY name;
CREATE VIEW view_univers AS
SELECT id, name, description,
array(
SELECT data_id
FROM cover_link
WHERE cover_link.node_id = node.id
) AS covers
FROM node
WHERE deleted = false AND type = 'univers'
ORDER BY name;
CREATE VIEW view_serie AS
SELECT id, name, description,
array(
SELECT data_id
FROM cover_link
WHERE cover_link.node_id = node.id
) AS covers
FROM node
WHERE deleted = false AND type = 'serie'
ORDER BY name;
CREATE VIEW view_saison AS
SELECT id, name, description, parent_id,
array(
SELECT data_id
FROM cover_link
WHERE cover_link.node_id = node.id
) AS covers
FROM node
WHERE deleted = false AND type = 'saison'
ORDER BY name;
CREATE VIEW view_video AS
SELECT id, name, description, data_id, type_id, univers_id, serie_id, saison_id, episode, date, time, age_limit,
array(
SELECT data_id
FROM cover_link
WHERE cover_link.node_id = media.id
) AS covers
FROM media
WHERE deleted = false AND type = 'media'
ORDER BY name;
''')
connection.commit()
debug.info("Add default type");
default_values_type = [
{
"id": 0,
"name": "Documentary",
"description": "Documentary (annimals, space, earth...)",
"image": "../default_images/type_documentary.svg"
},{
"id": 1,
"name": "Movie",
"description": "Movie with real humans (film)",
"image": "../default_images/type_film.svg"
},{
"id": 2,
"name": "Annimation",
"description": "Annimation movies (film)",
"image": "../default_images/type_annimation.svg"
},{
"id": 3,
"name": "Short movie",
"description": "Small movies (less 2 minutes)",
"image": "../default_images/type_film-short.svg"
},{
"id": 4,
"name": "TV show",
"description": "Tv show form old peoples",
"image": "../default_images/type_tv-show.svg"
}, {
"id": 5,
"name": "Anniation TV show",
"description": "Tv show form young peoples",
"image": "../default_images/type_tv-show-annimation.svg"
}, {
"id": 6,
"name": "Theater",
"description": "recorder theater pices",
"image": "../default_images/type_theater.svg"
}, {
"id": 7,
"name": "One man show",
"description": "Recorded stand up",
"image": "../default_images/type_one-man-show.svg"
}, {
"id": 8,
"name": "Concert",
"description": "Recorded concert",
"image": "../default_images/type_concert.svg"
}, {
"id": 9,
"name": "Opera",
"description": "Recorded Opera",
"image": "../default_images/type_opera.svg"
}
]
tmp_config = config.get_rest_config()
for elem in default_values_type:
debug.info(" add type: " + elem["name"]);
request_insert = (elem["name"], elem["description"])
c.execute('INSERT INTO node (type, name, description) VALUES (\'type\', %s, %s) RETURNING id', request_insert)
elem["id"] = c.fetchone()[0]
connection.commit()
if elem["image"] != None and elem["image"] != "":
# calculate sha512:
local_file_name = os.path.join(tools.get_current_path(__file__), elem["image"])
sha512 = tools.calculate_sha512(local_file_name)
mime_type = "image/svg+xml"
size = tools.file_size(local_file_name)
original_name = local_file_name
c.execute('INSERT INTO data (sha512, mime_type, size, original_name) VALUES (%s, %s, %s, %s) RETURNING id', (sha512, mime_type, size, original_name))
connection.commit()
elem["data_id"] = c.fetchone()[0]
c.execute('INSERT INTO cover_link (node_id, data_id) VALUES (%s, %s)', (elem["id"], elem["data_id"]))
connection.commit()
tools.file_copy(local_file_name, os.path.join(tmp_config["data_media"] , str(elem["data_id"]), "data"))
connection.commit()
# We can also close the connection if we are done with it.
# Just be sure any changes have been committed or they will be lost.
db.remove_connection();

View File

@ -132,6 +132,25 @@ class DataInterface():
#debug.info("get specific data = " + json.dumps(results))
return results;
def find(self, _key, _value):
debug.info("get " + self.name + ": " + str(_value))
cursor = self.connection.cursor(cursor_factory=RealDictCursor)
req = (_value,)
cursor.execute('SELECT * FROM ' + self.name_view + ' WHERE ' + _key + '=%s', req)
results = cursor.fetchone()
self.connection.commit()
#debug.info("get specific data = " + json.dumps(results))
return results;
def find2(self, _key1, _value1, _key2, _value2):
debug.info("get " + self.name + ": " + str(_value1))
cursor = self.connection.cursor(cursor_factory=RealDictCursor)
req = (_value1,_value2)
cursor.execute('SELECT * FROM ' + self.name_view + ' WHERE ' + _key1 + '=%s AND ' + _key2 + '=%s', req)
results = cursor.fetchone()
self.connection.commit()
#debug.info("get specific data = " + json.dumps(results))
return results;
def delete(self, _id):
debug.info("delete " + self.name + ": " + str(_id))
cursor = self.connection.cursor()
@ -141,12 +160,12 @@ class DataInterface():
self.connection.commit()
return True
def is_value_modifiable_and_good_type(self, _key, _value):
def is_value_modifiable_and_good_type(self, _key, _value, _check_with="modifiable"):
if self.model == None:
return True
for elem in self.model:
if _key == elem["name"]:
if elem["modifiable"] == False:
if elem[_check_with] == False:
debug.warning("Try to set an input '" + str(_key) + "' but the element is not modifiable ... ");
raise ServerError("FORBIDDEN Try to set an input '" + str(_key) + "' but the element is not modifiable", status_code=403)
if elem["type"] == "str":
@ -206,7 +225,7 @@ class DataInterface():
for elem in _value.keys():
if elem == "id":
continue
if self.is_value_modifiable_and_good_type(elem, _value[elem]) == False:
if self.is_value_modifiable_and_good_type(elem, _value[elem], "creatable") == False:
return;
if aaa != "":
aaa += " , "

View File

@ -124,11 +124,15 @@ def file_write_data_safe(path, data):
def file_move(path_src, path_dst):
#real write of data:
create_directory_of_file(path_dst)
shutil.move(path_src, path_dst)
return True
def file_copy(path_src, path_dst):
create_directory_of_file(path_dst)
shutil.copyfile(path_src, path_dst)
return True
def list_to_str(list):
if type(list) == type(str()):
@ -139,3 +143,63 @@ def list_to_str(list):
for elem in list:
result += list_to_str(elem)
return result
import hashlib
def str_limit_4(_data):
data = str(_data)
if len(data) >= 4:
return data
if len(data) == 3:
return " " + data
if len(data) == 2:
return " " + data
return " " + data
def int_to_human(_data, _bigger = False):
tera = int(_data/(1024*1024*1024*1024))%1024
giga = int(_data/(1024*1024*1024))%1024
mega = int(_data/(1024*1024))%1024
kilo = int(_data/(1024))%1024
byte = int(_data)%1024
tera_str = str_limit_4(tera)
giga_str = str_limit_4(giga)
mega_str = str_limit_4(mega)
kilo_str = str_limit_4(kilo)
byte_str = str_limit_4(byte)
out = ""
if tera != 0:
out += tera_str + "T"
if _bigger == True:
return out
if giga != 0 or len(out) != 0:
out += giga_str + "G"
if _bigger == True:
return out
if mega != 0 or len(out) != 0:
out += mega_str + "M"
if _bigger == True:
return out
if kilo != 0 or len(out) != 0:
out += kilo_str + "k"
if _bigger == True:
return out
out += byte_str + "B"
return out
def calculate_sha512(_path):
sha1 = hashlib.sha512()
file = open(_path, "rb")
totalsize = os.path.getsize(_path)
current = 0
while True:
body = file.read(10*1024*1024)
if len(body) == 0:
break;
current += len(body)
sha1.update(body)
percent = current/totalsize*100
debug.debug("\r Checking data: {percent:3.0f}% {size} / {total_size}".format(percent=percent, size=int_to_human(current), total_size=int_to_human(totalsize)))
file.close()
return str(sha1.hexdigest())

View File

@ -29,8 +29,8 @@ src_path = folder
dst_path = os.path.join(folder, "..", "zzz_video_push_done")
property = {
"hostname": "192.168.1.157",
#"hostname": "127.0.0.1",
#"hostname": "192.168.1.157",
"hostname": "127.0.0.1",
"port": 15080,
"login": None,
"password": None,
@ -219,6 +219,32 @@ def calculate_sha512(_path):
sys.stderr.write("\n")
return str(sha1.hexdigest())
result_list_types = requests.get(get_base_url() + "type")
debug.info(" List of types *********** : " + str(result_list_types))
#debug.info(" " + str(result_list_types.json()))
result_list_types = result_list_types.json()
def get_type_id(_name):
for elem in result_list_types:
if elem["name"] == _name:
return elem["id"]
return None
def print_list_of_type():
print("List of type:")
for elem in result_list_types:
print(" - '" + elem["name"] + "'")
def get_list_of_type():
print("List of type:")
out = []
for elem in result_list_types:
out.append(elem["name"])
return out
#exit(-1);
def push_video_file(_path, _basic_key={}):
file_name, file_extension = os.path.splitext(_path);
# internal file_extension ...
@ -239,106 +265,9 @@ def push_video_file(_path, _basic_key={}):
if file_name in ["cover_1.jpg","cover_1.png", "cover_1.till", "cover_1.bmp", "cover_1.tga"]:
# find a cover...
debug.warning(" Not send cover Not managed ... : " + _path + " Not manage ...")
"""
result_group_data = requests.post(get_base_url() + "group/find", data=json.dumps({"name":_basic_key["series-name"]}, sort_keys=True, indent=4))
debug.info("Create group ??? *********** : " + str(result_group_data) + " " + result_group_data.text)
if result_group_data.status_code == 404:
result_group_data = requests.post(get_base_url() + "group", data=json.dumps({"name":_basic_key["series-name"]}, sort_keys=True, indent=4))
debug.info("yes we create new group *********** : " + str(result_group_data) + " " + result_group_data.text)
group_id = result_group_data.json()["id"]
os.path.join(_path, it_path)
result_group_data = requests.post(get_base_url() + "group", data=json.dumps({"name":_basic_key["series-name"]}, sort_keys=True, indent=4))
debug.info("yes we create new group *********** : " + str(result_group_data) + " " + result_group_data.text)
"""
"""
debug.info("Send cover for: " + _basic_key["series-name"] + " " + _basic_key["saison"]);
if _basic_key["series-name"] == "":
debug.error(" ==> can not asociate at a specific seri");
return False;
etk::String groupName = _basic_key["series-name"];
if _basic_key["saison"] != "":
groupName += ":" + _basic_key["saison"];
auto sending = _srv.setGroupCover(zeus::File::create(_path.getString(), ""), groupName);
sending.onSignal(progressCallback);
sending.waitFor(echrono::seconds(20000));
"""
return True
"""
if etk::path::exist(_path + ".sha512") == True:
debug.verbose("file sha512 exist ==> read it");
uint64_t time_sha512 = get_modify_time(_path + ".sha512");
uint64_t time_elem = get_modify_time(_path);
storedSha512_file = file_read_data(_path + ".sha512")
debug.verbose("file sha == " + storedSha512_file);
if time_elem > time_sha512:
debug.verbose("file time > sha time ==> regenerate new one ...");
# check the current sha512
storedSha512 = calculate_sha512(_path);
debug.verbose("calculated new sha'" + storedSha512 + "'");
if storedSha512_file != storedSha512:
# need to remove the old sha file
auto idFileToRemove_fut = _srv.gdelta_secondsetId(storedSha512_file).waitFor(echrono::seconds(2));
if idFileToRemove_fut.hasError() == True:
debug.error("can not remove the remote file with sha " + storedSha512_file);
else:
debug.info("Remove old deprecated file: " + storedSha512_file);
_srv.remove(idFileToRemove_fut.get());
# note, no need to wait the call is async ... and the user does not interested with the result ...
# store new sha512 ==> this update tile too ...
file.open(etk::io::OpenMode::Write);
file.writeAll(storedSha512);
file.close();
else:
# store new sha512
/*
storedSha512 = file.readAllString();
file.open(etk::io::OpenMode::Read);
file.writeAll(storedSha512);
file.close();
*/
storedSha512 = storedSha512_file;
debug.verbose("read all sha from the file'" + storedSha512 + "'");
else:
"""
"""
if True:
storedSha512 = calculate_sha512(_path)
file_write_data(_path + ".sha512", storedSha512);
debug.info("calculate and store sha512 '" + storedSha512 + "'");
debug.info("check file existance: sha='" + storedSha512 + "'");
"""
# push only if the file exist
"""
# TODO : Check the metadata updating ...
auto idFile_fut = _srv.getId(storedSha512).waitFor(echrono::seconds(2));
if idFile_fut.hasError() == False:
# media already exit ==> stop here ...
return True;
# TODO: Do it better ==> add the calback to know the push progression ...
debug.verbose("Add File : " + _path + " sha='" + storedSha512 + "'");
auto sending = _srv.add(zeus::File::create(_path, storedSha512));
sending.onSignal(progressCallback);
debug.verbose("Add done ... now waiting ... ");
uint32_t mediaId = sending.waitFor(echrono::seconds(20000)).get();
debug.verbose("END WAITING ... ");
if mediaId == 0:
debug.error("Get media ID = 0 With no error");
return False;
"""
#mime = magic.Magic(mime=True)
#mime_type = mime.from_file(_path)
mime_type = "unknown"
# do it by myself .. it is better ...
filename___, file_extension = os.path.splitext(_path)
@ -370,11 +299,6 @@ def push_video_file(_path, _basic_key={}):
'filename': path_send,
'mime-type': mime_type
}
"""
,
'Connection': "keep-alive"
}
"""
debug.info(" Calculate SHA ...")
local_sha = calculate_sha512(_path)
debug.info(" ==> sha is " + local_sha)
@ -382,11 +306,9 @@ def push_video_file(_path, _basic_key={}):
remote_id_data = None
if result_check_sha.status_code == 200:
debug.info(" Find the data : " + str(result_check_sha) + " " + result_check_sha.text)
if result_check_sha.json()["found"] == True \
and len(result_check_sha.json()["ids"]) != 0:
remote_id_data = result_check_sha.json()["ids"][0]
else:
debug.warning(" Did not find the file ...")
remote_id_data = result_check_sha.json()["id"]
elif result_check_sha.status_code == 404:
debug.info(" Did not find the file ... ==> need to send it")
else:
debug.warning(" error interface ...")
if remote_id_data == None:
@ -394,7 +316,7 @@ def push_video_file(_path, _basic_key={}):
debug.info(" result *********** : " + str(result_send_data) + " " + result_send_data.text)
remote_id_data = result_send_data.json()["id"]
if remote_id_data == None:
debug.warning(" pb in filile sending ....");
debug.warning(" pb in file sending ....");
return
file_name = os.path.basename(file_name)
@ -522,7 +444,6 @@ def push_video_file(_path, _basic_key={}):
finally:
pass
debug.info(" Find a internal mode series: :");
debug.info(" origin : '" + file_name + "'");
saisonPrint = "XX";
@ -610,10 +531,10 @@ def push_video_file(_path, _basic_key={}):
group_id = result_group_data.json()["id"]
data_model["group_id"] = group_id
if "saison" in _basic_key.keys():
result_saison_data = requests.post(get_base_url() + "saison/find", data=json.dumps({"number":_basic_key["saison"], "group_id":group_id}, sort_keys=True, indent=4))
result_saison_data = requests.post(get_base_url() + "saison/find", data=json.dumps({"name":_basic_key["saison"], "parent_id":group_id}, sort_keys=True, indent=4))
debug.info(" Create saison ??? *********** : " + str(result_saison_data) + " " + result_saison_data.text)
if result_saison_data.status_code == 404:
result_saison_data = requests.post(get_base_url() + "saison", data=json.dumps({"number":_basic_key["saison"], "group_id":group_id}, sort_keys=True, indent=4))
result_saison_data = requests.post(get_base_url() + "saison", data=json.dumps({"name":_basic_key["saison"], "parent_id":group_id}, sort_keys=True, indent=4))
debug.info(" yes we create new saison *********** : " + str(result_saison_data) + " " + result_saison_data.text)
saison_id = result_saison_data.json()["id"]
data_model["saison_id"] = saison_id
@ -640,27 +561,9 @@ def install_video_path( _path, _basic_key = {}):
debug.info("Add Sub path: '" + it_path + "'");
if len(basic_key_tmp) == 0:
debug.info("find A '" + it_path + "' " + str(len(basic_key_tmp)));
if it_path == "documentary":
basic_key_tmp["type"] = 0
elif it_path == "film":
basic_key_tmp["type"] = 1
elif it_path == "film-annimation":
basic_key_tmp["type"] = 2
elif it_path == "film-short":
basic_key_tmp["type"] = 3
elif it_path == "tv-show":
basic_key_tmp["type"] = 4
elif it_path == "tv-show-annimation":
basic_key_tmp["type"] = 5
elif it_path == "theater":
basic_key_tmp["type"] = 6
elif it_path == "one-man":
basic_key_tmp["type"] = 7
elif it_path == "concert":
basic_key_tmp["type"] = 8
elif it_path == "opera":
basic_key_tmp["type"] = 9
else:
basic_key_tmp["type"] = get_type_id(it_path);
if basic_key_tmp["type"] == None:
debug.warning("Not supported type: '" + str(it_path) + "' availlable: " + str(get_list_of_type()))
continue
else:
debug.info("find B '" + it_path + "' " + str(len(basic_key_tmp)))
@ -794,6 +697,7 @@ my_args.add("a", "action", list=[
["list","List all the files"],
["push","push a single file"],
["push_path","push a full folder"],
["types","List all the types availlable"],
], desc="possible action")
my_args.add("c", "color", desc="Display message in color")
my_args.add("f", "folder", haveParam=False, desc="Display the folder instead of the git repository name")
@ -1039,6 +943,14 @@ elif requestAction == "push_path":
debug.info("============================================");
debug.info("== DONE ==");
debug.info("============================================");
elif requestAction == "types":
debug.info("============================================");
debug.info("== Display list of types: ");
debug.info("============================================");
print_list_of_type();
debug.info("============================================");
debug.info("== DONE ==");
debug.info("============================================");
else:
debug.info("============================================");
debug.error("== Unknow action: '" + requestAction + "'");

View File

@ -241,6 +241,11 @@ connection.commit()
c.execute('''
CREATE VIEW view_data AS
SELECT id, sha512, mime_type, size
FROM data
WHERE deleted = false
ORDER BY id;
CREATE VIEW view_type AS
SELECT id, name, description,
array(

View File

@ -1,7 +1,7 @@
<div>
<div class="imgContainer-small">
<div *ngIf="imageSource">
<img src="{{imageSource}}" alt="type image" class="miniature-small"/>
<div *ngIf="cover">
<img src="{{cover}}" alt="type image" class="miniature-small"/>
</div>
</div>
<div class="title-small">

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g transform="translate(0.000000,511.000000) scale(0.100000,-0.100000)"><path d="M2917.1,4972.9c-137.3-218.3-598.7-992.5-594.1-997c78.8-58.5,560.4-326.3,591.9-326.3c42.8,0,1348.1,585.1,1334.6,598.7c-9,6.7-1208.5,726.9-1255.8,751.7C2957.7,5017.9,2944.1,5013.5,2917.1,4972.9z"/><path d="M4231.5,3534.8c-351.1-159.8-643.7-297.1-648.2-301.6c-11.3-11.3,672.9-416.4,704.4-416.4c22.5,0,1314.3,576.2,1334.6,596.4c15.8,13.5-677.4,416.4-713.4,416.4C4888.6,3829.6,4584.8,3696.9,4231.5,3534.8z"/><path d="M6065.7,2922.7c-87.8-42.8-344.3-159.8-573.9-263.3c-229.6-103.5-443.4-204.8-477.1-225.1l-63-38.3l96.8-51.8c51.7-29.3,171-105.8,267.8-171c288.1-195.8,411.8-191.3,855.2,33.8c164.3,85.5,414.1,202.5,553.6,261.1c137.3,60.8,252.1,117,252.1,123.8c0,31.5-648.2,405.1-699.9,405.1C6245.7,2996.9,6151.2,2963.2,6065.7,2922.7z"/><path d="M7629.8,2171c-63-18-1303.1-580.6-1305.3-591.9c0-6.8,47.3-36,108-67.5c58.5-31.5,171.1-99,252.1-153c303.8-202.5,366.8-209.3,666.2-65.3c110.3,54,378.1,177.8,594.2,274.6c216,96.8,400.6,182.3,409.6,191.3c15.8,11.3-567.1,373.6-654.9,407.4C7679.3,2173.2,7647.8,2175.5,7629.8,2171z"/><path d="M1384.5,1439.5c-27-110.3-821.5-4998.5-814.7-5005.2c4.5-4.5,877.7-150.8,1942.2-324.1c3459.1-567.2,4786.9-785.4,5093-844c164.3-31.5,328.6-56.3,362.3-56.3h60.8l159.8,974.5c90,533.4,272.3,1642.9,407.4,2462.1l245.3,1487.6l294.8,483.9c162,265.6,294.8,492.9,294.8,504.1s-87.8,69.8-193.5,130.5c-175.6,96.8-200.3,105.8-263.3,83.3c-65.3-20.3-1255.8-562.6-1271.6-578.4c-4.5-2.2,112.5-78.8,258.8-168.8c146.3-90,270.1-166.5,274.6-171c31.5-29.2-47.3-24.8-330.8,22.5c-175.5,27-319.6,47.2-319.6,45c0-2.3,137.3-294.8,306.1-650.4c168.8-355.6,301.6-650.4,294.8-654.9c-6.7-6.7-162,11.3-344.3,40.5c-252.1,38.3-346.6,63-384.9,96.8c-27,24.8-177.8,317.4-333.1,652.7c-155.3,333.1-292.6,616.7-301.6,625.6c-22.5,22.5-789.9,157.5-805.7,144c-4.5-6.7,130.5-301.6,299.3-654.9c168.8-355.6,301.6-650.4,297.1-657.1c-6.7-4.5-90,6.7-189,24.7c-96.8,18-252.1,42.8-344.3,56.3c-92.3,13.5-182.3,36-202.6,51.8c-38.3,31.5-369.1,711.2-463.6,954.3c-110.3,281.3-238.6,391.6-495.1,420.9c-74.3,9-209.3,27-299.3,40.5c-90,13.5-168.8,18-175.6,11.3c-6.7-4.5,123.8-297.1,292.6-648.2c166.5-351.1,299.3-643.7,292.6-648.2c-11.3-13.5-641.4,87.8-702.2,112.5c-38.3,15.7-101.3,123.8-236.3,407.3c-103.5,213.8-216.1,461.4-252.1,546.9c-36,87.8-90,195.8-119.3,240.8c-67.5,103.5-245.3,198-378.1,198c-51.8,0-182.3,15.8-290.3,33.8c-108,20.3-200.3,31.5-202.6,29.3c-2.3-4.5,135-299.3,303.8-659.4c171-357.8,308.3-654.9,306.1-657.2c-2.3-2.2-130.5,15.8-285.8,40.5c-153,24.8-310.6,49.5-348.8,56.3c-38.3,4.5-90,31.5-114.8,60.8c-51.8,54-357.8,697.7-447.9,938.5c-117,308.3-213.8,387.1-528.9,427.6C1443,1502.6,1398,1498.1,1384.5,1439.5z M4818.9-761.5c1737.4-283.6,3186.8-522.1,3218.3-528.9l56.3-13.5l-33.8-211.6c-18-117-45-213.8-56.3-213.8c-65.3-2.2-6418.6,1044.3-6436.6,1060c-11.3,9-6.8,96.8,9,204.8c29.3,198,36,220.5,65.3,220.5C1652.3-243.9,3081.4-475.7,4818.9-761.5z M4476.8-3257.4c1737.4-283.6,3168.8-526.6,3182.3-540.1c22.5-22.5-22.5-400.6-49.5-416.4c-6.7-4.5-155.3,15.8-328.6,42.8c-173.3,29.3-1620.4,267.8-3218.3,528.9c-1595.6,261-2905.5,479.4-2912.2,483.9c-11.3,11.3,42.8,393.8,58.5,423.1c4.5,9,31.5,11.3,58.5,4.5C1294.5-2737.5,2739.4-2973.8,4476.8-3257.4z"/></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,115 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1279.000000pt" height="1280.000000pt" viewBox="0 0 1279.000000 1280.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.15, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,1280.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M8860 12794 c-14 -2 -59 -9 -100 -15 -239 -33 -517 -147 -776 -317
-253 -167 -443 -325 -819 -682 -289 -274 -407 -378 -542 -479 -519 -386 -1257
-658 -2443 -901 l-156 -32 -89 58 c-553 357 -1131 620 -1767 804 -195 57 -477
122 -628 146 -125 19 -378 22 -470 5 -396 -73 -610 -344 -660 -836 -17 -158
-8 -489 20 -755 94 -917 291 -1732 625 -2595 130 -336 155 -428 155 -568 -1
-133 -47 -238 -167 -378 -26 -31 -117 -129 -200 -218 -84 -89 -193 -216 -242
-281 -327 -434 -515 -957 -583 -1620 -17 -164 -17 -713 0 -895 41 -446 102
-807 228 -1360 75 -325 82 -363 100 -490 18 -130 46 -197 103 -251 33 -32 139
-89 148 -80 2 1 -15 56 -37 122 -331 981 -467 2193 -345 3069 63 449 180 794
364 1066 84 125 155 206 249 283 417 340 958 352 1592 35 731 -366 1229 -927
1365 -1539 26 -118 31 -375 10 -501 -81 -484 -404 -847 -863 -971 -121 -33
-373 -37 -520 -9 -458 88 -858 409 -1068 857 -25 55 -62 131 -80 171 -64 135
-170 194 -224 125 -50 -62 -4 -272 106 -482 83 -160 174 -280 324 -431 228
-229 457 -359 755 -427 138 -32 259 -42 645 -52 374 -10 459 -19 603 -65 115
-37 218 -87 326 -159 133 -89 222 -165 476 -406 251 -238 343 -317 469 -402
118 -79 219 -129 347 -171 94 -32 188 -52 609 -132 404 -78 626 -196 775 -414
l46 -68 -25 -89 c-67 -241 -97 -383 -87 -403 12 -22 107 -61 151 -61 58 0 66
17 130 273 86 350 118 437 206 568 110 164 210 287 348 425 394 392 882 646
1363 709 611 80 1175 -201 1482 -740 132 -232 196 -482 189 -743 l-3 -132 30
-12 c96 -40 221 27 261 139 18 52 17 209 -2 318 -47 272 -223 638 -431 895
-61 75 -221 235 -320 320 l-53 45 236 415 c707 1245 769 1347 864 1433 94 85
219 109 337 65 78 -28 185 -136 231 -229 96 -197 82 -365 -63 -767 -116 -325
-141 -460 -132 -720 8 -257 61 -471 177 -711 149 -307 359 -552 628 -732 123
-83 235 -137 379 -185 180 -61 272 -48 338 45 l30 43 -2 236 c-4 659 -168
1348 -472 1977 -103 213 -190 365 -326 570 -138 207 -243 342 -456 585 -195
223 -275 333 -340 465 -66 136 -89 237 -89 395 0 160 16 253 94 563 104 407
141 633 155 939 22 501 -50 960 -239 1510 -33 97 -128 346 -211 555 -364 913
-411 1112 -454 1933 -24 472 -43 684 -76 880 -79 471 -251 842 -508 1101 -185
185 -377 292 -623 345 -70 15 -326 27 -378 18z m310 -389 c418 -154 764 -684
909 -1391 108 -528 85 -1038 -69 -1488 -33 -99 -38 -156 -15 -200 8 -15 57
-85 109 -155 564 -762 742 -1203 850 -2111 61 -511 54 -960 -25 -1530 -45
-325 -135 -704 -195 -821 -7 -15 -50 -134 -95 -265 -44 -131 -103 -288 -130
-349 -194 -433 -500 -797 -942 -1118 -234 -171 -447 -291 -883 -498 -1049
-498 -1480 -649 -1998 -700 -175 -17 -564 -6 -736 20 -370 58 -792 181 -1245
363 -458 184 -929 419 -971 483 -24 37 -11 67 55 124 33 29 83 84 112 124 29
40 73 99 97 132 54 72 105 178 127 260 23 84 30 291 16 411 -18 141 -54 305
-116 526 -122 439 -218 648 -386 848 -30 36 -77 94 -104 130 -28 36 -78 96
-112 133 -96 105 -96 126 1 238 35 41 100 116 145 168 219 254 389 514 675
1034 277 502 376 870 445 1652 40 444 37 631 -13 829 -44 172 -163 438 -242
542 -49 64 -64 98 -64 149 0 41 5 51 45 94 95 102 276 168 815 299 380 93 898
177 1175 191 102 5 150 12 177 25 68 33 188 172 323 374 71 106 165 237 209
290 104 125 381 407 508 520 360 316 881 621 1175 686 109 25 279 16 373 -19z
m-7618 -2080 c128 -22 260 -69 398 -142 439 -231 634 -454 690 -793 32 -188
-30 -385 -184 -590 -123 -164 -422 -426 -566 -497 -173 -85 -303 -10 -472 273
-146 245 -255 484 -322 707 -44 145 -122 492 -136 601 -29 233 80 406 280 445
72 14 220 12 312 -4z"/>
<path d="M8851 11829 c-71 -12 -216 -61 -288 -98 -259 -131 -535 -391 -766
-724 -137 -196 -187 -308 -187 -419 0 -132 69 -206 275 -293 50 -21 252 -119
449 -218 198 -98 387 -190 420 -202 177 -66 342 -72 461 -17 221 104 336 414
322 872 -6 190 -21 294 -86 585 -44 196 -55 235 -96 314 -85 168 -265 239
-504 200z m64 -342 c64 -67 101 -182 179 -547 47 -223 67 -393 69 -586 2 -146
0 -164 -17 -183 -37 -41 -114 -24 -335 70 -210 90 -382 193 -576 344 -163 127
-194 188 -142 284 37 70 256 350 350 448 138 143 260 212 376 213 51 0 57 -3
96 -43z"/>
<path d="M8896 7075 c-33 -13 -110 -58 -170 -98 -61 -41 -150 -100 -197 -131
-98 -63 -185 -152 -220 -223 -35 -72 -38 -174 -7 -232 36 -68 87 -103 153
-109 53 -4 57 -3 89 32 23 24 48 72 76 143 69 180 119 240 260 306 113 54 177
42 294 -55 32 -27 73 -56 90 -66 42 -22 141 -22 184 1 69 37 92 129 53 206
-30 58 -123 137 -215 181 -156 75 -282 90 -390 45z"/>
<path d="M10005 6115 c-133 -23 -455 -129 -567 -186 -47 -24 -78 -64 -78 -101
0 -39 32 -100 70 -132 51 -42 99 -36 233 29 98 48 126 57 222 71 86 12 126 24
184 52 85 43 92 55 95 159 1 60 -2 75 -19 91 -28 28 -60 31 -140 17z"/>
<path d="M4960 5864 c-14 -2 -52 -9 -85 -15 -143 -25 -289 -131 -389 -282
-146 -222 -157 -309 -46 -384 44 -31 106 -30 151 0 21 14 49 50 74 97 52 97
186 236 266 274 115 55 216 53 379 -9 109 -41 160 -44 221 -12 84 45 90 109
18 191 -61 70 -113 91 -289 120 -93 16 -261 27 -300 20z"/>
<path d="M10045 5513 c-332 -90 -336 -92 -371 -128 -34 -37 -49 -87 -34 -115
5 -10 24 -23 41 -29 58 -20 114 -13 226 30 99 38 117 41 223 45 146 5 244 21
263 42 40 45 32 125 -18 177 -29 31 -38 35 -81 34 -27 -1 -139 -26 -249 -56z"/>
<path d="M7263 5475 c-261 -47 -493 -195 -623 -396 -63 -98 -77 -186 -41 -264
42 -90 132 -142 318 -181 267 -56 316 -74 332 -117 19 -49 62 -389 62 -490 0
-96 -4 -117 -37 -217 -58 -176 -123 -258 -246 -315 -193 -88 -433 -28 -636
159 -51 46 -108 90 -127 96 -53 18 -98 -8 -131 -76 -23 -48 -26 -63 -22 -124
8 -113 72 -196 203 -262 158 -81 327 -113 544 -105 286 10 431 83 523 260 77
148 159 236 242 258 36 10 49 9 106 -12 59 -22 84 -24 260 -27 107 -2 253 1
324 7 156 13 204 32 295 117 35 32 107 95 159 139 127 106 138 128 164 331 12
92 17 175 13 201 -8 55 -51 106 -103 121 -53 16 -155 15 -195 -2 -62 -26 -70
-45 -78 -179 -9 -136 -37 -262 -70 -309 -30 -42 -101 -85 -184 -111 -89 -28
-266 -30 -365 -4 -151 40 -271 128 -304 222 -8 26 -20 93 -27 149 -21 189 10
317 129 534 116 209 135 255 140 341 3 71 2 79 -26 123 -58 90 -226 148 -422
147 -58 0 -137 -7 -177 -14z"/>
<path d="M9828 4739 c-44 -13 -88 -60 -88 -95 0 -40 25 -88 61 -118 32 -27 36
-28 99 -20 142 18 180 12 282 -39 102 -51 140 -57 193 -31 43 20 135 117 135
142 0 56 -99 111 -257 143 -115 23 -369 34 -425 18z"/>
<path d="M4855 4609 c-171 -59 -384 -188 -478 -289 -56 -60 -86 -123 -74 -154
11 -29 57 -39 114 -28 68 14 505 196 566 236 68 45 76 168 15 234 -27 28 -64
28 -143 1z"/>
<path d="M4830 3973 c-14 -2 -60 -15 -102 -29 -195 -64 -340 -225 -308 -343
14 -52 62 -108 101 -116 43 -10 125 33 185 96 27 28 58 56 69 62 12 6 71 11
140 12 104 0 126 4 162 23 70 37 88 93 54 167 -46 102 -162 151 -301 128z"/>
<path d="M4955 3331 c-46 -21 -106 -77 -227 -215 -117 -131 -132 -191 -66
-256 89 -89 261 -41 354 100 35 52 61 67 144 85 139 29 180 62 180 146 0 57
-18 80 -85 109 -47 20 -188 50 -234 50 -14 0 -44 -9 -66 -19z"/>
<path d="M3003 4475 c-34 -15 -37 -23 -33 -95 5 -94 71 -212 180 -320 86 -87
153 -125 201 -115 42 9 95 59 109 100 15 46 3 83 -59 177 -95 145 -182 220
-290 252 -65 19 -67 19 -108 1z"/>
<path d="M2341 4194 c-13 -9 -29 -32 -37 -50 -25 -60 -19 -78 47 -136 70 -60
99 -106 133 -205 45 -131 81 -159 188 -147 83 9 102 29 95 98 -10 94 -53 189
-118 260 -98 107 -222 196 -271 196 -8 0 -24 -7 -37 -16z"/>
<path d="M1684 3875 c-26 -40 -14 -104 34 -177 56 -87 87 -157 116 -267 14
-52 33 -102 41 -110 10 -10 33 -16 61 -16 40 0 50 5 79 36 83 91 38 290 -100
438 -108 115 -195 151 -231 96z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="225"
height="225"
viewBox="0 0 225 225"
sodipodi:docname="type_documentary.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1038"
id="namedview4"
showgrid="false"
inkscape:zoom="2.0977778"
inkscape:cx="69.686932"
inkscape:cy="51.888857"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:22.32067108;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="rect821"
width="189.09904"
height="194.34268"
x="19.142218"
y="14.375268"
ry="28.992929" />
<path
style="fill:none;stroke:#000000;stroke-width:8.39999962;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 68.167373,163.98305 19.544491,-54.34322 25.264826,30.03178 41.47246,-63.877119 33.84534,85.805089"
id="path825"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:12.19999981;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 17.161017,161.59958 H 212.60593"
id="path823"
inkscape:connector-curvature="0" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:12.69999981;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="path827"
cx="58.633472"
cy="56.25"
r="19.544491" />
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
width="100"
height="100"
viewBox="0 0 99.999999 99.999999"
xml:space="preserve"
sodipodi:docname="type_film-short.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1038"
id="namedview39"
showgrid="true"
inkscape:zoom="4.7895499"
inkscape:cx="73.393795"
inkscape:cy="42.536152"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1"><inkscape:grid
type="xygrid"
id="grid871" /></sodipodi:namedview>
<g
id="g8"
transform="translate(0,-457.47101)">
</g>
<g
id="g10"
transform="translate(0,-457.47101)">
</g>
<g
id="g12"
transform="translate(0,-457.47101)">
</g>
<g
id="g14"
transform="translate(0,-457.47101)">
</g>
<g
id="g16"
transform="translate(0,-457.47101)">
</g>
<g
id="g18"
transform="translate(0,-457.47101)">
</g>
<g
id="g20"
transform="translate(0,-457.47101)">
</g>
<g
id="g22"
transform="translate(0,-457.47101)">
</g>
<g
id="g24"
transform="translate(0,-457.47101)">
</g>
<g
id="g26"
transform="translate(0,-457.47101)">
</g>
<g
id="g28"
transform="translate(0,-457.47101)">
</g>
<g
id="g30"
transform="translate(0,-457.47101)">
</g>
<g
id="g32"
transform="translate(0,-457.47101)">
</g>
<g
id="g34"
transform="translate(0,-457.47101)">
</g>
<g
id="g36"
transform="translate(0,-457.47101)">
</g>
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.77471006;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 5 5 L 5 95 L 95 95 L 95 5 L 5 5 z M 40 27 L 60 27 L 60 33 L 40 33 L 40 27 z M 40 67 L 60 67 L 60 73 L 40 73 L 40 67 z "
id="rect869" /><rect
style="fill:#d5d5d5;fill-opacity:0.70980394;stroke:none;stroke-width:0.77471006;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="rect869-2"
width="70"
height="20"
x="15"
y="5"
ry="0" /><rect
style="fill:#d5d5d5;fill-opacity:0.70980394;stroke:none;stroke-width:0.94586086;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="rect869-2-3"
width="70"
height="29.81303"
x="15"
y="35"
ry="0" /><rect
style="fill:#d5d5d5;fill-opacity:0.70980394;stroke:none;stroke-width:0.77471006;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="rect869-2-7"
width="70"
height="20"
x="15"
y="75"
ry="0" /></svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,118 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
width="100"
height="100"
viewBox="0 0 99.999999 99.999999"
xml:space="preserve"
sodipodi:docname="type_film.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1038"
id="namedview39"
showgrid="true"
inkscape:zoom="76.632798"
inkscape:cx="15.14015"
inkscape:cy="5.9693833"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1"><inkscape:grid
type="xygrid"
id="grid871" /></sodipodi:namedview>
<g
id="g8"
transform="translate(0,-457.47101)">
</g>
<g
id="g10"
transform="translate(0,-457.47101)">
</g>
<g
id="g12"
transform="translate(0,-457.47101)">
</g>
<g
id="g14"
transform="translate(0,-457.47101)">
</g>
<g
id="g16"
transform="translate(0,-457.47101)">
</g>
<g
id="g18"
transform="translate(0,-457.47101)">
</g>
<g
id="g20"
transform="translate(0,-457.47101)">
</g>
<g
id="g22"
transform="translate(0,-457.47101)">
</g>
<g
id="g24"
transform="translate(0,-457.47101)">
</g>
<g
id="g26"
transform="translate(0,-457.47101)">
</g>
<g
id="g28"
transform="translate(0,-457.47101)">
</g>
<g
id="g30"
transform="translate(0,-457.47101)">
</g>
<g
id="g32"
transform="translate(0,-457.47101)">
</g>
<g
id="g34"
transform="translate(0,-457.47101)">
</g>
<g
id="g36"
transform="translate(0,-457.47101)">
</g>
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.77471006;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 3,5 V 95 H 16 V 85 H 84 V 95 H 97 V 5 H 84 V 15 H 16 V 5 Z m 4,2 h 5 v 8 H 7 Z m 81,0 h 5 v 8 H 88 Z M 7,20 h 5 v 8 H 7 Z m 9,0 H 84 V 80 H 16 Z m 72,0 h 5 v 8 H 88 Z M 7,33 h 5 v 8 H 7 Z m 81,0 h 5 v 8 H 88 Z M 7,46 h 5 v 8 H 7 Z m 81,0 h 5 v 8 H 88 Z M 7,59 h 5 v 8 H 7 Z m 81,0 h 5 v 8 H 88 Z M 7,72 h 5 v 8 H 7 Z m 81,0 h 5 v 8 H 88 Z M 7,85 h 5 v 8 H 7 Z m 81,0 h 5 v 8 h -5 z"
id="rect869"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /><path
style="fill:#dddddd;fill-opacity:0.67843137;stroke:none;stroke-width:1.34183729;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 16,5 V 15 H 84 V 5 Z m 0,15 V 80 H 84 V 20 Z m 0,65 V 95 H 84 V 85 Z"
id="rect869-2-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccc" /></svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,84 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
width="100"
height="100"
viewBox="0 0 100 100"
enable-background="new 0 0 612 792"
xml:space="preserve"
sodipodi:docname="type_one-man-show.svg"
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
id="metadata15"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs13" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1038"
id="namedview11"
showgrid="false"
inkscape:zoom="6.7425131"
inkscape:cx="53.136368"
inkscape:cy="20.736479"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<g
id="g8"
transform="matrix(0.16745942,0,0,0.17111299,-0.7543833,-17.546408)">
<path
d="m 250.576,444.206 c -6.72,-1.069 -13.312,-0.929 -19.757,1.501 C 149.234,476.476 91.05,555.361 91.05,647.579 c 0,5.51 4.468,9.978 9.978,9.978 h 411.356 c 5.51,0 9.978,-4.468 9.978,-9.978 0,-91.746 -57.589,-170.295 -138.517,-201.396 -5.753,-2.211 -11.624,-2.637 -17.6,-2.025 z"
id="path2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccssssccc" />
<path
d="m 428.313,323.066 8.053,-21.844 -41.488,-15.296 39.978,-108.437 -114.511,-42.217 -39.978,108.437 -41.488,-15.296 -8.053,21.844 z"
id="path6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
</g>
<ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="path825"
cx="50.352142"
cy="44.011974"
rx="15.572829"
ry="15.276203" /><ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="path827"
cx="44.19717"
cy="39.859219"
rx="3.7078164"
ry="3.0404093" /><ellipse
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="path829"
cx="57.174526"
cy="41.935596"
rx="1.7055955"
ry="2.0022209" /><path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 48.475092,62.720751 0.926955,2.940843 -1.325449,19.51173 3.034532,7.973073 2.71766,-8.101926 -2.573992,-19.420297 1.260658,-2.908793 -2.065856,-2.042716 z"
id="path831"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" /></svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,61 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M501.801,445.935h-18.359v-31.618c0-5.632-4.567-10.199-10.199-10.199h-10.08l-9.129-233.698l6.826-21.914h12.383
c5.632,0,10.199-4.567,10.199-10.199V115.48h12.239c4.897,0,9.102-3.479,10.019-8.289c0.916-4.81-1.713-9.592-6.266-11.394
L259.752,0.945c-2.41-0.955-5.094-0.955-7.506,0L12.565,95.798c-4.553,1.801-7.182,6.584-6.266,11.394
c0.917,4.81,5.122,8.289,10.019,8.289h12.239v22.827c0,5.632,4.566,10.199,10.199,10.199h12.383l6.826,21.912l-9.128,233.699
h-10.08c-5.633,0-10.199,4.567-10.199,10.199v31.617H10.199C4.566,445.934,0,450.501,0,456.133v45.438
c0,5.632,4.566,10.199,10.199,10.199h491.602c5.632,0,10.199-4.567,10.199-10.199v-45.438
C512,450.502,507.433,445.935,501.801,445.935z M48.956,128.109v-12.628h286.598c5.632,0,10.199-4.567,10.199-10.199
s-4.567-10.199-10.199-10.199H69.808L256,21.398l207.216,82.005l-0.172,24.706H48.956z M411.43,179.262h22.536l8.784,224.858
h-40.102L411.43,179.262z M405.901,148.508h33.594l-3.226,10.355h-27.142L405.901,148.508z M391.36,170.419l-9.128,233.699h-30.2
l-9.129-233.698l6.826-21.914h34.806L391.36,170.419z M300.298,179.262h22.536l8.784,224.858h-40.103L300.298,179.262z
M294.768,148.508h33.595l-3.226,10.355h-27.143L294.768,148.508z M231.771,170.419l6.826-21.912h34.806l6.826,21.914
L271.1,404.119h-30.201v-0.001L231.771,170.419z M189.167,179.262h22.536l8.784,224.858h-40.103L189.167,179.262z
M183.638,148.508h33.594l-3.226,10.355h-27.142L183.638,148.508z M169.099,170.419l-9.129,233.699h-30.201l-9.129-233.699
l6.826-21.912h34.807L169.099,170.419z M78.034,179.262h22.536l8.784,224.858H69.251L78.034,179.262z M72.505,148.507h33.594
l-3.226,10.355H75.731L72.505,148.507z M48.956,424.517h414.088v21.418H48.956V424.517z M491.602,491.374H20.398v-25.04h471.203
V491.374z"/>
</g>
</g>
<g>
<g>
<path d="M383.49,95.083h-9.179c-5.632,0-10.199,4.567-10.199,10.199c0,5.632,4.567,10.199,10.199,10.199h9.179
c5.632,0,10.199-4.567,10.199-10.199C393.689,99.65,389.122,95.083,383.49,95.083z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g transform="translate(0.000000,511.000000) scale(0.100000,-0.100000)"><path d="M1916.9,4475c-63.3-8.4-179.4-40.1-257.4-69.6c-386.2-145.6-664.7-436.8-810.3-846.2l-59.1-168.8l-6.3-1470.8l-6.3-1472.9h504.3c489.6,0,510.7,2.1,671.1,54.9C3265.4,938.3,4447.1,2540,4799.5,4356.9l27.4,141.4l-1397-2.1C2663.9,4494,1982.3,4485.6,1916.9,4475z"/><path d="M5202.6,4346.3c147.7-774.5,466.4-1553.1,905.3-2211.5c542.3-814.6,1236.6-1399.1,1939.3-1633.3c160.4-52.8,181.5-54.9,668.9-54.9h504.4v1388.5c-2.1,1470.8-6.3,1574.2-103.4,1814.8c-145.6,363-438.9,637.3-835.7,778.7l-168.8,59.1l-1468.7,6.3l-1470.8,6.3L5202.6,4346.3z"/><path d="M4917.7,1250.6c-16.9-10.6-88.6-194.2-160.4-407.3l-130.8-386.2l-413.6-10.6c-365.1-8.4-415.7-14.8-455.8-50.6c-48.5-44.3-59.1-135.1-16.9-185.7c12.7-16.9,164.6-135.1,337.6-257.4c170.9-124.5,310.2-227.9,310.2-230c0-2.1-52.8-164.6-116.1-362.9c-63.3-196.3-116.1-388.3-116.1-426.3c0-73.8,61.2-132.9,137.2-132.9c23.2,0,192,107.6,373.5,240.5l331.3,242.7l331.3-242.7c183.6-132.9,352.4-240.5,377.7-240.5c76,0,137.2,59.1,137.2,132.9c0,38-52.8,225.8-116.1,415.7S5612-296.2,5612-289.9c0,8.4,139.3,118.2,312.3,242.7c170.9,122.4,322.9,240.6,337.6,257.4c44.3,57,29.6,145.6-29.6,192c-52.8,42.2-84.4,44.3-460,44.3l-403.1,2.1l-116.1,360.9c-63.3,198.4-132.9,384.1-154,411.5C5059.1,1271.7,4972.6,1284.4,4917.7,1250.6z"/><path d="M779.5-1070.7v-1179.6l280.7-8.5c261.7-6.3,287-10.5,420-73.9c160.4-76,325-219.5,411.5-356.6c33.8-50.6,65.4-92.8,71.7-92.8c6.3,0,23.2,23.2,33.8,48.5c54.9,118.2,263.8,310.2,424.2,388.3c154.1,76,170.9,80.2,411.5,88.6l251.1,6.3l-14.8,109.7c-42.2,320.8-217.3,873.6-379.8,1194.4C2505.7-579,2197.6-199.2,1914.8,14l-126.6,94.9h-504.3H779.5V-1070.7z"/><path d="M8085.2,14c-287-215.3-595.1-599.3-780.8-970.7c-162.5-329.2-327.1-848.3-373.5-1183.9l-14.8-109.7l251.1-8.5c227.9-6.3,261.7-12.7,390.4-73.9c158.3-73.9,325-217.3,411.5-356.6c33.8-50.6,65.4-92.8,71.7-92.8c6.3,0,23.2,23.2,33.8,48.5c54.9,118.2,263.8,310.2,424.2,388.3c156.2,78.1,164.6,80.2,441,86.5l280.7,8.5v1179.6V108.9h-504.4h-504.3L8085.2,14z"/><path d="M593.8-2632.3c-137.2-48.6-280.7-181.5-352.4-329.2c-101.3-208.9-120.3-329.2-130.8-837.8L100-4280.4h848.3h848.3l-10.6,481.1c-10.5,510.7-29.6,628.9-130.8,839.9c-73.9,151.9-230,293.3-371.4,333.4C1123.5-2577.4,741.5-2581.6,593.8-2632.3z"/><path d="M2619.6-2632.3c-137.2-48.6-280.7-181.5-352.4-329.2c-101.3-208.9-120.3-329.2-130.8-837.8l-10.5-481.1h848.3h848.3l-10.6,481.1c-10.6,510.7-29.6,628.9-130.8,839.9c-73.9,151.9-230,293.3-371.4,333.4C3149.3-2577.4,2767.4-2581.6,2619.6-2632.3z"/><path d="M4645.5-2632.3c-204.7-69.6-379.8-299.6-447.4-582.4c-12.7-57-29.5-320.8-35.9-584.6l-10.6-481.1H5000h848.3l-10.5,481.1c-10.5,510.7-29.6,628.9-130.8,839.9c-73.9,151.9-230,293.3-371.4,333.4C5175.1-2577.4,4793.2-2581.6,4645.5-2632.3z"/><path d="M6671.3-2632.3c-137.2-48.6-280.7-181.5-352.4-329.2c-101.3-208.9-120.3-329.2-130.8-837.8l-10.5-481.1h848.3h848.3l-10.5,481.1c-10.6,510.7-29.6,628.9-130.8,839.9c-73.9,151.9-230,293.3-371.4,333.4C7201-2577.4,6819-2581.6,6671.3-2632.3z"/><path d="M8697.2-2632.3c-137.2-48.6-280.7-181.5-352.4-329.2c-101.3-208.9-120.3-329.2-130.8-837.8l-10.6-481.1h848.3H9900l-10.6,481.1c-10.5,510.7-29.6,628.9-130.8,839.9c-73.9,151.9-230,293.3-371.4,333.4C9226.8-2577.4,8844.9-2581.6,8697.2-2632.3z"/></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
<g><g><path d="M837.3,816.4c26.2,120.4-104.5,146.5-162.1,130.8c-57.6-15.7-175-18.3-175-18.3s-117.8,2.6-175.3,18.3c-57.6,15.8-188.4-10.4-162.3-130.8C188.7,696.1,303.9,701.3,335.4,539c31.5-162.3,164.9-151.8,164.9-151.8S633.4,376.7,664.9,539C696.2,701.3,811.2,696,837.3,816.4z M621,376.6c70.9,20.5,149.1-35.5,174.9-124.9c25.8-89.4-10.7-178.4-81.5-198.8c-70.9-20.5-149.1,35.5-174.9,124.9C513.7,267.1,550.2,356.2,621,376.6z M914.7,344.1c-68.2-27.9-152,19.4-187.2,105.6c-35.2,86.2-8.4,178.6,59.9,206.4c68.2,27.8,152-19.4,187.2-105.6C1009.7,464.2,982.9,371.9,914.7,344.1z M378.9,376.6c70.9-20.5,107.3-109.5,81.5-198.8C434.6,88.4,356.2,32.5,285.5,52.9C214.7,73.4,178.2,162.4,204,251.8C229.8,341.1,308,397.1,378.9,376.6z M212.7,656c68.2-27.9,95-120.3,59.9-206.4c-35.2-86.1-119-133.4-187.2-105.6c-68.2,27.9-95,120.3-59.9,206.4C60.6,636.6,144.4,683.9,212.7,656z"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,82 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="100"
viewBox="0 0 100 100"
version="1.1"
id="svg857"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="type_tv-show.svg">
<defs
id="defs851" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="43.300441"
inkscape:cy="51.246657"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
inkscape:window-width="1918"
inkscape:window-height="1038"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid5105" />
</sodipodi:namedview>
<metadata
id="metadata854">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-270.54167)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#00001d;stroke-width:6.53200006;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
id="rect5107"
width="80"
height="55.000015"
x="10"
y="285.54166"
ry="5.0000134"
rx="5" />
<path
style="fill:none;stroke:#000000;stroke-width:7.70200014;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 24.873731,353.44586 h 50"
id="path5109"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:4.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 40,300.54167 v 20 l 20,-10 z"
id="path5111"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB