Merge
This commit is contained in:
commit
86d289218d
9 changed files with 41 additions and 43 deletions
|
@ -13,4 +13,6 @@
|
||||||
"networks_write":[],
|
"networks_write":[],
|
||||||
"formats_read":[],
|
"formats_read":[],
|
||||||
"formats_write":[],
|
"formats_write":[],
|
||||||
"generic_name":["Social Media", "Photo Sharing", "Client"]}
|
"generic_name":["Instagram Client",
|
||||||
|
"Image Sharing",
|
||||||
|
"Social Network"]}
|
||||||
|
|
|
@ -16,4 +16,4 @@
|
||||||
"ActivityPub"],
|
"ActivityPub"],
|
||||||
"formats_read":[],
|
"formats_read":[],
|
||||||
"formats_write":[],
|
"formats_write":[],
|
||||||
"generic_name":["Social Media", "Photo Sharing", "Fediverse"]}
|
"generic_name":["Social Network", "Image Sharing", "Messanger", "Fediverse"]}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -9,34 +9,11 @@
|
||||||
from modules import search
|
from modules import search
|
||||||
import json
|
import json
|
||||||
|
|
||||||
def isFree(licenses):
|
|
||||||
matches = 0
|
|
||||||
with open("licenses.json", "r") as data:
|
|
||||||
all_licenses = json.load(data)
|
|
||||||
for license in licenses:
|
|
||||||
for license2 in all_licenses["licenses"]:
|
|
||||||
if license2 == license:
|
|
||||||
matches = matches + 1
|
|
||||||
break
|
|
||||||
if matches == len(licenses):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def html(page, json):
|
def html(page, json):
|
||||||
|
|
||||||
# This function adds a rendering of the json into the page
|
# This function adds a rendering of the json into the page
|
||||||
|
|
||||||
# TODO: Add a more complex algorithm of checking if software is
|
free = search.is_free(json)
|
||||||
# free or not. There are plenty of semi-free software like
|
|
||||||
# Unreal Engine. They have licenses but they do not give the users
|
|
||||||
# the four essential freedoms.
|
|
||||||
|
|
||||||
free = False
|
|
||||||
has_license = False
|
|
||||||
if "licenses" in json and json["licenses"]:
|
|
||||||
has_license = True
|
|
||||||
free = isFree(json["licenses"])
|
|
||||||
page = page + "\n <h1>"
|
page = page + "\n <h1>"
|
||||||
try:
|
try:
|
||||||
page = page + '\n<img src="'+ json["links"]["icon"] + '" alt="Logo" style="width:50px;">'
|
page = page + '\n<img src="'+ json["links"]["icon"] + '" alt="Logo" style="width:50px;">'
|
||||||
|
@ -128,20 +105,22 @@ def suggestions(page, json):
|
||||||
|
|
||||||
# This function will render suggestions
|
# This function will render suggestions
|
||||||
|
|
||||||
page = page + "<br><br><h1>Free Competitors:</h1><br><br>"
|
page = page + "<h1>Free Competitors:</h1>"
|
||||||
|
|
||||||
found = search.suggest(json)
|
found = search.suggest(json)
|
||||||
|
|
||||||
|
biggest = 0
|
||||||
for i in found:
|
for i in found:
|
||||||
|
if i[0] > biggest:
|
||||||
|
biggest = i[0]
|
||||||
|
|
||||||
free = False
|
for i in found:
|
||||||
if "licenses" in i[-1] and i[-1]["licenses"]:
|
free = search.is_free(i[-1])
|
||||||
has_license = True
|
|
||||||
free = isFree(i[-1]["licenses"])
|
|
||||||
|
|
||||||
if not i[0] or i[-1] == json or not free:
|
if not i[0] or i[-1] == json or not free:
|
||||||
continue
|
continue
|
||||||
page = page + "<br><br>"
|
|
||||||
|
page = page + "<hr><br>Features match: " + str(int(i[0]/biggest*100)) + "%"
|
||||||
page = html(page, i[-1])
|
page = html(page, i[-1])
|
||||||
|
|
||||||
return page
|
return page
|
||||||
|
@ -163,7 +142,7 @@ def source_code_link(page):
|
||||||
|
|
||||||
# Adds a source code link
|
# Adds a source code link
|
||||||
|
|
||||||
page = page + "<br><br><p>This website is under the GNU AGPL license.</p>"
|
page = page + "<br><br><hr><p>This website is under the GNU AGPL license.</p>"
|
||||||
page = page + """
|
page = page + """
|
||||||
<form action=https://notabug.org/jyamihud/FreeCompetitors>
|
<form action=https://notabug.org/jyamihud/FreeCompetitors>
|
||||||
<button type="submit">Source Code</button>
|
<button type="submit">Source Code</button>
|
||||||
|
|
|
@ -46,19 +46,22 @@ def search_app(name):
|
||||||
match = m
|
match = m
|
||||||
|
|
||||||
if closest:
|
if closest:
|
||||||
return closest
|
return closest, match
|
||||||
|
|
||||||
|
match = 0
|
||||||
|
closest = {}
|
||||||
|
|
||||||
# Round 2. By Generic name
|
# Round 2. By Generic name
|
||||||
|
|
||||||
for i in all_apps:
|
for i in all_apps:
|
||||||
for n in i.get("generic_name",[]):
|
for n in i.get("generic_name",[]):
|
||||||
m = similar(n.lower(), name.lower())
|
m = similar(n.lower(), name.lower())
|
||||||
if m > match:
|
if m > match and is_free(i):
|
||||||
closest = i
|
closest = i
|
||||||
match = m
|
match = m
|
||||||
|
|
||||||
if closest:
|
if closest:
|
||||||
return closest
|
return closest, match
|
||||||
|
|
||||||
def suggest(json_data):
|
def suggest(json_data):
|
||||||
|
|
||||||
|
@ -97,3 +100,17 @@ def suggest(json_data):
|
||||||
fount = []
|
fount = []
|
||||||
|
|
||||||
return found
|
return found
|
||||||
|
|
||||||
|
def is_free(app):
|
||||||
|
if "licenses" in app and app["licenses"]:
|
||||||
|
matches = 0
|
||||||
|
with open("licenses.json", "r") as data:
|
||||||
|
all_licenses = json.load(data)
|
||||||
|
for license in app["licenses"]:
|
||||||
|
for license2 in all_licenses["licenses"]:
|
||||||
|
if license2 == license:
|
||||||
|
matches = matches + 1
|
||||||
|
break
|
||||||
|
if matches == len(app["licenses"]):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
10
server.py
10
server.py
|
@ -55,9 +55,9 @@ class handler(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
# If the user is at the front page, let him get only the search bar
|
# If the user is at the front page, let him get only the search bar
|
||||||
|
|
||||||
page = ""
|
page = "<center><br><br><br><h1>Free Competitors</h1>"
|
||||||
page = render.search_widget(page)
|
page = render.search_widget(page)
|
||||||
page = page + "<p>Please search for any software to which you would like to find a Free Software replacement.</p>"
|
page = page + "<p>Please search for any software to which you would like to find a Free Software replacement.</p></center>"
|
||||||
page = render.source_code_link(page)
|
page = render.source_code_link(page)
|
||||||
self.send(page)
|
self.send(page)
|
||||||
|
|
||||||
|
@ -76,10 +76,10 @@ class handler(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
software = self.path.replace("/", "").replace("+", " ")
|
software = self.path.replace("/", "").replace("+", " ")
|
||||||
|
|
||||||
software_data = search.search_app(software)
|
software_data, match = search.search_app(software)
|
||||||
page = ""
|
|
||||||
page = render.search_widget(page)
|
|
||||||
|
|
||||||
|
page = render.search_widget("")
|
||||||
|
page = page +"Search match: "+ str(int(match*100))+"%"
|
||||||
# Let's add the found software to the page
|
# Let's add the found software to the page
|
||||||
page = render.html(page, software_data)
|
page = render.html(page, software_data)
|
||||||
page = render.suggestions(page, software_data)
|
page = render.suggestions(page, software_data)
|
||||||
|
|
Loading…
Reference in a new issue