idk
This commit is contained in:
commit
a569fb75f6
43 changed files with 6844 additions and 72 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1 +1,2 @@
|
|||
port.json
|
||||
port.json
|
||||
*.pyc
|
||||
|
|
136
README.md
136
README.md
|
@ -4,13 +4,18 @@
|
|||
|
||||
**Free Competitors** - is a server software to make websites that help users find [Free Software](https://gnu.org) replacements to proprietary software. And search Free Software alternatives to other Free Software.
|
||||
|
||||
# Instances
|
||||
|
||||
http://5wxkwfl6n4abwjsqv5r6roebwbc7fnc22dq3clpooojzdmdnzzo3amad.onion/
|
||||
|
||||
|
||||
# Name
|
||||
|
||||
FSF likes the word "Replacement" more then "Alternative" since "Alternative" means that both are equally good. And non-free software is not good. But in my opinion both "Alternative" and "Replacement" tells the user that Non-Free Software is the default option. While I want to shatter this idea a bit by using "Competitor". I think it's the best I can do yet. But perhaps there is a better word. Please tell me if you know one.
|
||||
|
||||
# License
|
||||
|
||||
This software is under the terms of AGPLv3 or any later version. So image GPLv3 or later with one more requirement. You need to publish the source code of the website, if you are serving it. It has a handy button for source if you change nothing. If you change something, please upload your own version to some place and link to your source instead. Please see LICENSE file for more info.
|
||||
This software is under the terms of AGPLv3 or any later version. So imagine GPLv3 or later with one more requirement. You need to publish the source code of the website, if you are hosting it. It has a handy button for source if you change nothing. If you change something, please upload your own version to some place and link to your source instead. Please see LICENSE file for more info.
|
||||
|
||||
# Installation
|
||||
|
||||
|
@ -18,9 +23,11 @@ The software is built on Python. So you will need to have python3 installed. The
|
|||
|
||||
`python3 server.py`
|
||||
|
||||
It will prompt you to select a `PORT`. To which on your end to bind the server. For now it binds it to your localhost. You can edit that part. We are using a standard SimpleHTTPServer python module for it.
|
||||
It will prompt you to select a `PORT` to which on your end to bind the server. For now it binds it to your localhost. You can edit that part. We are using a standard SimpleHTTPServer python module for it.
|
||||
|
||||
# How it works
|
||||
Please tell us if you start an instance. We want to add it's link here.
|
||||
|
||||
# How it works?
|
||||
|
||||
In [apps](apps) folder there are a bunch of .json files with different data about various software. When the user types in the name of the software, it looks for a closest match of the name. So the user can slightly misspell the name and it will give him the software. Like somebody can type "What's Up" and get "WhatsApp".
|
||||
|
||||
|
@ -28,16 +35,123 @@ Next, based on the other data, like features, file formats and supported network
|
|||
|
||||
The algorithm avoids recommending Non-Free Software. So if you type "WhatsApp" it will recommend you "Element" and other Free Software messengers. But if you write "Element" it will recommend you only Free Software messengers. "WhatsApp" will be excluded. It is done by referencing the "licenses" data-point.
|
||||
|
||||
# API
|
||||
|
||||
When talking to an instance over the normal HTTP insert a `/json/` between the domain name and the search request. So instead of `domainmane.site/youtube` do `domainname.site/json/youtube` and it will give you the same results but formatted as a json.
|
||||
|
||||
# Adding new software
|
||||
|
||||
Do add software let's look at two examples from the [apps](apps) folder:
|
||||
|
||||
This is the json for Blender.
|
||||
|
||||
```
|
||||
{"names":["Blender"],
|
||||
"comment":"Blender is a Free Software 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.",
|
||||
"links":{"website":"https://www.blender.org/",
|
||||
"git":"https://git.blender.org/gitweb/gitweb.cgi/blender.git",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Blender_(software)",
|
||||
"documentation":"https://docs.blender.org/manual/en/latest/",
|
||||
"icon":"https://download.blender.org/branding/square/blender_icon_64x64.png"},
|
||||
"licenses":["GPL-2.0-or-later"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS",
|
||||
"BSD",
|
||||
"AmigaOS",
|
||||
"Solaris"],
|
||||
"interface":["opengl"],
|
||||
"languages":["C"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":["blend",
|
||||
"dae",
|
||||
"abc",
|
||||
"usd",
|
||||
"usdc",
|
||||
"usda",
|
||||
"svg",
|
||||
"bvh",
|
||||
"ply",
|
||||
"stl",
|
||||
"fbx",
|
||||
"glb",
|
||||
"obj",
|
||||
"x3d",
|
||||
"wrl"],
|
||||
"formats_write":["blend",
|
||||
"dae",
|
||||
"abc",
|
||||
"usd",
|
||||
"usdc",
|
||||
"usda",
|
||||
"svg",
|
||||
"pdf",
|
||||
"obj",
|
||||
"ply",
|
||||
"stl",
|
||||
"fbx",
|
||||
"glb",
|
||||
"gltf",
|
||||
"x3d"],
|
||||
"generic_name":["Text Editor",
|
||||
"Video Editor",
|
||||
"3D Modeling",
|
||||
"3D Rigging",
|
||||
"3D Animation",
|
||||
"3D Rendering",
|
||||
"Compositing",
|
||||
"Motion Tracking"]}
|
||||
```
|
||||
|
||||
Since it's Free Software it's important to give the users links to it's core things. Like the Website where they get a copy and learn more about it. Like the git ( or other version control ) repository of source code. Like the documentation.
|
||||
|
||||
Notice the `icon` datapoint. It links to `download.blender.org`. This way we give away some of the website's load to other websites. Usually Wikipedia has a lot of icons for a lot of software.
|
||||
|
||||
It's also very important to list at least the core file formats / networks that it supports. If you are adding something like Emacs or Gedit which are text editors that can edit text with any extension, please then list the text encoding that it supports. Like `ASCII` or `UTF-8`. Usually they are listed in Save or Open menus.
|
||||
|
||||
The idea here is not to document the software precisely. We are not making a Wikipedia. The idea is to compare features between software to give users a relevant replacement / alternative.
|
||||
|
||||
Also note the `licenses`. You should be careful. In the [data](data) folder there is a licenses list file. We use it to see if the license is Free or not. So please make sure you are using the correct formatting of the license's name. Use `licenseId` preferably.
|
||||
|
||||
Not let's look at a proprietary program YouTube:
|
||||
|
||||
```
|
||||
{"names":["YouTube",
|
||||
"You Tube",
|
||||
"youtube.com",
|
||||
"youtu.be"],
|
||||
"comment":"A platform for uploading and watching videos.",
|
||||
"links":{"website":"https://youtube.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/YouTube",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/YouTube_full-color_icon_%282017%29.svg/120px-YouTube_full-color_icon_%282017%29.svg.png"},
|
||||
"platforms":["Android",
|
||||
"iOS",
|
||||
"Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["JavaScript"],
|
||||
"networks_read":["youtube"],
|
||||
"networks_write":["youtube"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Video Player",
|
||||
"YouTube Client",
|
||||
"Music Player",
|
||||
"Publication"],
|
||||
"issues":["Surveillance",
|
||||
"Non-Free Software",
|
||||
"Non-Free JavaScript",
|
||||
"DRM"]}
|
||||
```
|
||||
|
||||
With surveillance software we try to avoid linking it's icon from the website itself. It should not even try to connect to the bad website. We don't know what they are doing with the server logs. So here it's very important to use Wikipedia. Alternatively you can host the logo yourself somewhere. Perhaps on LBRY. And use a spee.ch link to it.
|
||||
|
||||
Also notice the additional `issues` datapoint. It's important to have a list of Anti-Features. Try looking at F-droid.org for inspiration of this. Telegram, by the way, has Anti-Features even though it's Free Software. So we list them.
|
||||
|
||||
Again, remember, we are looking for similarities of data. Not documenting everything. Things like `generic_name` plays a big role in finding the replacements / alternatives. File formats and networks play a bit role too. If in `photoshop.json` it will have a generic name "Image Editor" and in `gimp.json` it will have "Editor of Images" it will fail to find the match. So please study the files before adding a new one.
|
||||
|
||||
It is quite important to fill as much as possible data about Non-Free Software too. Even though the data will never be shown to the user. Because we want to compare the features and the formats to find Competitors. And later other functions may be added that use such a data.
|
||||
|
||||
# Help this project!
|
||||
|
||||
To help this project you may do one of three things:
|
||||
|
||||
- **Host it:** Open a website with this server software and make it be available to the public. Please tell us if you do it, we will include you in here.
|
||||
- **Add software:** Add more software into the database. See the files in [apps](apps) for it. Please study multiple files before making new ones. And please check them by running the server and going to `localhost:[port]` in your browser. Sometimes you may make syntax errors in the json. It will fail to load the file. If there will be an error like this, it will output the filename and the line where the error occurred into the terminal.
|
||||
- **Contribute to Server Software:** We need things like CSS work, better looks. One requirement: it has to not have any JavaScript what so ever. But as long as it HTML5 and CSS it's fine. Also please look at the algorithms themselves. They may need a bit of work.
|
||||
|
||||
# Contact info
|
||||
|
||||
We hang out on [matrix] in `#freecompetitors:matrix.org`
|
||||
|
|
17
apps/android.json
Normal file
17
apps/android.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{"names":["Android"],
|
||||
"comment":"A Mobile Operating System developed mostly by Google.",
|
||||
"links":{"website":"https://www.android.com/",
|
||||
"git":"https://android.googlesource.com/",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Android_(operating_system)",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/3/31/Android_robot_head.svg"},
|
||||
"licenses":["GPL-2.0", "Apache-2.0"],
|
||||
"platforms":["Mobile"],
|
||||
"interface":["Touch"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Mobile Operating System", "Android/Linux"],
|
||||
"issues":["Surveillance",
|
||||
"Includes Non-Free Software",
|
||||
"Relies on Non-Free Services"]}
|
|
@ -4,7 +4,7 @@
|
|||
"git":"https://git.sr.ht/~cadence/bibliogram",
|
||||
"documentation":"https://git.sr.ht/~cadence/bibliogram-docs/tree/master/docs",
|
||||
"icon":"https://bibliogram.art/favicon-32x32.png"},
|
||||
"licenses":["AGPL3"],
|
||||
"licenses":["AGPL-3.0"],
|
||||
"platforms":["Web"],
|
||||
"interface":["Touch",
|
||||
"HTML"],
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{"names":["Blender"],
|
||||
"comment":"Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.",
|
||||
"comment":"Blender is a Free Software 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.",
|
||||
"links":{"website":"https://www.blender.org/",
|
||||
"git":"https://git.blender.org/gitweb/gitweb.cgi/blender.git",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Blender_(software)",
|
||||
"documentation":"https://docs.blender.org/manual/en/latest/",
|
||||
"icon":"https://download.blender.org/branding/square/blender_icon_64x64.png"},
|
||||
"licenses":["GPL3+"],
|
||||
"licenses":["GPL-2.0-or-later"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS",
|
||||
|
@ -16,6 +16,41 @@
|
|||
"languages":["C"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Text Editor", "Video Editor", "3D Modeling tool"]}
|
||||
"formats_read":["blend",
|
||||
"dae",
|
||||
"abc",
|
||||
"usd",
|
||||
"usdc",
|
||||
"usda",
|
||||
"svg",
|
||||
"bvh",
|
||||
"ply",
|
||||
"stl",
|
||||
"fbx",
|
||||
"glb",
|
||||
"obj",
|
||||
"x3d",
|
||||
"wrl"],
|
||||
"formats_write":["blend",
|
||||
"dae",
|
||||
"abc",
|
||||
"usd",
|
||||
"usdc",
|
||||
"usda",
|
||||
"svg",
|
||||
"pdf",
|
||||
"obj",
|
||||
"ply",
|
||||
"stl",
|
||||
"fbx",
|
||||
"glb",
|
||||
"gltf",
|
||||
"x3d"],
|
||||
"generic_name":["Text Editor",
|
||||
"Video Editor",
|
||||
"3D Modeling",
|
||||
"3D Rigging",
|
||||
"3D Animation",
|
||||
"3D Rendering",
|
||||
"Compositing",
|
||||
"Motion Tracking"]}
|
||||
|
|
15
apps/dragora.json
Normal file
15
apps/dragora.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["Dragora GNU/Linux-Libre",
|
||||
"Dragora"],
|
||||
"comment":"Dragora is a complete and reliable distribution of the GNU/Linux operating system that is entirely free software.",
|
||||
"links":{"website":"https://dragora.org/en/index.html",
|
||||
"git":"https://notabug.org/dragora/dragora",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Dragora",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/f/f1/Dragora_logo.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["IceWM"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux"]}
|
|
@ -5,7 +5,7 @@
|
|||
"git":"https://github.com/vector-im",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Element_(software)",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Element_%28software%29_logo.svg/54px-Element_%28software%29_logo.svg.png?20200716131352"},
|
||||
"licenses":["Apache2.0"],
|
||||
"licenses":["Apache-2.0"],
|
||||
"platforms":["GNU/Linux",
|
||||
"MacOS",
|
||||
"Windows",
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
{"names":["GNU emacs"],
|
||||
"comment":"An extensibe free/libre text editor and more.",
|
||||
{"names":["GNU emacs",
|
||||
"Emacs"],
|
||||
"comment":"An extensibe free/libre text editor and a religion.",
|
||||
"links":{"website":"https://www.gnu.org/software/emacs/",
|
||||
"git":"https://git.savannah.gnu.org/cgit/emacs.git",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/GNU_Emacs",
|
||||
"documentation":"https://www.gnu.org/software/emacs/documentation.html",
|
||||
"icon":"https://www.gnu.org/software/emacs/images/emacs.png"},
|
||||
"licenses":["GPL3+"],
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS",
|
||||
|
@ -18,6 +19,6 @@
|
|||
"lisp"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Text Editor", "Opperating System", "Productivity Tool"]}
|
||||
"formats_read":["ascii","utf-8","utf-16"],
|
||||
"formats_write":["ascii","utf-8","utf-16"],
|
||||
"generic_name":["Text Editor", "Operating System", "Productivity Tool"]}
|
||||
|
|
20
apps/fast-lbry.json
Normal file
20
apps/fast-lbry.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{"names":["Fast LBRY",
|
||||
"flbry"],
|
||||
"comment":"A fast client to LBRY",
|
||||
"links":{"git":"https://notabug.org/jyamihud/FastLBRY-terminal",
|
||||
"icon":"https://notabug.org/jyamihud/FastLBRY-terminal/raw/master/icon.png"},
|
||||
"licenses":["GPL-3.0-or-later", "AGPL-3.0-or-later"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Web"],
|
||||
"interface":["Terminal",
|
||||
"GTK",
|
||||
"HTML5"],
|
||||
"languages":["Python"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Publication",
|
||||
"Marketplace",
|
||||
"Crypto"]}
|
|
@ -8,7 +8,7 @@
|
|||
"wikipedia":"https://en.wikipedia.org/wiki/GIMP",
|
||||
"documentation":"https://www.gimp.org/docs/",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/The_GIMP_icon_-_gnome.svg/64px-The_GIMP_icon_-_gnome.svg.png"},
|
||||
"licenses":["GPL3+"],
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS",
|
||||
|
|
15
apps/guix.json
Normal file
15
apps/guix.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["GNU Guix",
|
||||
"Guix"],
|
||||
"comment":"Guix comes with thousands of packages which include applications, system tools, documentation, fonts, and other digital goods readily available for installing with the GNU Guix package manager.",
|
||||
"links":{"website":"https://guix.gnu.org/",
|
||||
"git":"https://git.savannah.gnu.org/cgit/guix/maintenance.git",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/GNU_Guix",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Guix_logo.svg/200px-Guix_logo.svg.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["Gnome 3"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux"]}
|
15
apps/hyperbola.json
Normal file
15
apps/hyperbola.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["Hyperbola GNU/Linux-libre",
|
||||
"Hyperbola"],
|
||||
"comment":"A fully free, stable, secure, simple, lightweight and long-term support distribution.",
|
||||
"links":{"website":"https://www.hyperbola.info/",
|
||||
"git":"https://git.hyperbola.info:50100/",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Hyperbola_GNU/Linux-libre",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Hyperbola_GNU%2BLinux-libre_logo.svg/250px-Hyperbola_GNU%2BLinux-libre_logo.svg.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["i3"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux"]}
|
|
@ -3,7 +3,7 @@
|
|||
"links":{"website":"https://invidious.io/",
|
||||
"git":"https://github.com/iv-org/invidious#invidious",
|
||||
"icon":"https://invidious.io/invidious-colored-vector.svg"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["Crystal"],
|
||||
|
|
16
apps/ios.json
Normal file
16
apps/ios.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{"names":["iOS"],
|
||||
"comment":"A proprietary Mobile Operating System from Apple. Used in iPhones.",
|
||||
"links":{"website":"apple.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/iOS",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/a/ab/Icon-Mac.svg"},
|
||||
"platforms":["iPhone", "iPad"],
|
||||
"interface":["iOS"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Mobile Operating System"],
|
||||
"issues":["Surveillance",
|
||||
"Subscription",
|
||||
"Non-Free Software",
|
||||
"DRM"]}
|
|
@ -5,7 +5,7 @@
|
|||
"wikipedia":"https://en.wikipedia.org/wiki/Krita",
|
||||
"documentation":"https://invent.kde.org/graphics/krita",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Calligrakrita-base.svg/1024px-Calligrakrita-base.svg.png"},
|
||||
"licenses":["GPL3"],
|
||||
"licenses":["GPL-3.0"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS",
|
||||
|
@ -16,6 +16,44 @@
|
|||
"languages":["C++"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Image Editor", "Drawing Tool", "Raster"]}
|
||||
"formats_read":["bmp",
|
||||
"csv",
|
||||
"exr",
|
||||
"gbr",
|
||||
"gif",
|
||||
"gih",
|
||||
"heif",
|
||||
"avif",
|
||||
"jpg",
|
||||
"kpl",
|
||||
"kra",
|
||||
"ora",
|
||||
"pbm",
|
||||
"pgm",
|
||||
"ppm",
|
||||
"pdf",
|
||||
"png",
|
||||
"psd",
|
||||
"svg",
|
||||
"tiff"],
|
||||
"formats_write":["bmp",
|
||||
"csv",
|
||||
"exr",
|
||||
"gbr",
|
||||
"gif",
|
||||
"gih",
|
||||
"heif",
|
||||
"avif",
|
||||
"jpg",
|
||||
"kpl",
|
||||
"kra",
|
||||
"ora",
|
||||
"pbm",
|
||||
"pgm",
|
||||
"ppm",
|
||||
"pdf",
|
||||
"png",
|
||||
"psd",
|
||||
"svg",
|
||||
"tiff"],
|
||||
"generic_name":["Image Editor", "Image Converter", "Painting Program"]}
|
||||
|
|
21
apps/lbry-android.json
Normal file
21
apps/lbry-android.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{"names":["LBRY Android",
|
||||
"LBRY"],
|
||||
"comment":"A mobile app, front end for LBRY network",
|
||||
"links":{"website":"https://lbry.com/",
|
||||
"git":"https://github.com/lbryio/lbry-android",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/LBRY",
|
||||
"icon":"https://camo.githubusercontent.com/47bb8236694444cb1e10faccdb75da0c0a51809d5b2612d5d66d734781f4d6ce/68747470733a2f2f6d69726f2e6d656469756d2e636f6d2f6d61782f353139382f312a625456754c325448475f306d70776d452d6e37457a672e706e67"},
|
||||
"licenses":["MIT"],
|
||||
"platforms":["Android"],
|
||||
"interface":["Touch"],
|
||||
"languages":["Java"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Publication",
|
||||
"Video Player",
|
||||
"Music Player",
|
||||
"Marketplace",
|
||||
"Crypto"]}
|
23
apps/lbry-desktop.json
Normal file
23
apps/lbry-desktop.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{"names":["LBRY Desktop",
|
||||
"LBRY"],
|
||||
"comment":"A desktop app, front end for LBRY network",
|
||||
"links":{"website":"https://lbry.com/",
|
||||
"git":"https://github.com/lbryio/lbry-desktop",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/LBRY",
|
||||
"icon":"https://camo.githubusercontent.com/47bb8236694444cb1e10faccdb75da0c0a51809d5b2612d5d66d734781f4d6ce/68747470733a2f2f6d69726f2e6d656469756d2e636f6d2f6d61782f353139382f312a625456754c325448475f306d70776d452d6e37457a672e706e67"},
|
||||
"licenses":["MIT"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS"],
|
||||
"interface":["Electron"],
|
||||
"languages":["JavaScript"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Publication",
|
||||
"Video Player",
|
||||
"Music Player",
|
||||
"Marketplace",
|
||||
"Crypto"]}
|
22
apps/lbry-sdk.json
Normal file
22
apps/lbry-sdk.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{"names":["LBRY SDK",
|
||||
"LBRY"],
|
||||
"comment":"The official SDK for LBRY network",
|
||||
"links":{"website":"https://lbry.com/",
|
||||
"git":"https://github.com/lbryio/lbry-sdk",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/LBRY",
|
||||
"icon":"https://camo.githubusercontent.com/47bb8236694444cb1e10faccdb75da0c0a51809d5b2612d5d66d734781f4d6ce/68747470733a2f2f6d69726f2e6d656469756d2e636f6d2f6d61782f353139382f312a625456754c325448475f306d70776d452d6e37457a672e706e67"},
|
||||
"licenses":["MIT"],
|
||||
"platforms":["GNU/Linux",
|
||||
"Windows",
|
||||
"MacOS"],
|
||||
"interface":["Terminal",
|
||||
"API"],
|
||||
"languages":["Python"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Publication",
|
||||
"Marketplace",
|
||||
"Crypto"]}
|
16
apps/librarian.json
Normal file
16
apps/librarian.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{"names":["Librarian"],
|
||||
"comment":"A minimal web-instance for LBRY",
|
||||
"links":{"website":"https://lbry.bcow.xyz/",
|
||||
"git":"https://codeberg.org/librarian/librarian",
|
||||
"icon":"https://codeberg.org/librarian/librarian/raw/branch/main/static/img/librarian.svg"},
|
||||
"licenses":["AGPL-3.0"],
|
||||
"platforms":["Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["Go"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Video Player",
|
||||
"Music Player"]}
|
18
apps/macos.json
Normal file
18
apps/macos.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{"names":["macOS",
|
||||
"OSX",
|
||||
"macOS X"],
|
||||
"comment":"A proprietary Operating System from Apple.",
|
||||
"links":{"website":"apple.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/MacOS",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/a/ab/Icon-Mac.svg"},
|
||||
"platforms":["PC"],
|
||||
"interface":["macOS"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System"],
|
||||
"issues":["Surveillance",
|
||||
"Subscription",
|
||||
"Non-Free Software",
|
||||
"DRM"]}
|
17
apps/macos.json~
Normal file
17
apps/macos.json~
Normal file
|
@ -0,0 +1,17 @@
|
|||
{"names":["Windows",
|
||||
"Microsoft Windows"],
|
||||
"comment":"A proprietary Operating System from Microsoft.",
|
||||
"links":{"website":"microsoft.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Windows",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/9/94/M_box.svg"},
|
||||
"platforms":["PC"],
|
||||
"interface":["windows"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System"],
|
||||
"issues":["Surveillance",
|
||||
"Subscription",
|
||||
"Non-Free Software",
|
||||
"DRM"]}
|
|
@ -4,7 +4,7 @@
|
|||
"git":"https://github.com/mastodon/mastodon",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Mastodon_(software)",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Mastodon_Logotype_%28Simple%29.svg/60px-Mastodon_Logotype_%28Simple%29.svg.png"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["Ruby",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"git":"https://github.com/TeamNewPipe/NewPipe",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/NewPipe",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/NewPipelogo.svg/220px-NewPipelogo.svg.png"},
|
||||
"licenses":["GPL3+"],
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["Android"],
|
||||
"interface":["Touch"],
|
||||
"languages":["Java",
|
||||
|
|
28
apps/odysee.json
Normal file
28
apps/odysee.json
Normal file
|
@ -0,0 +1,28 @@
|
|||
{"names":["Odysee",
|
||||
"LBRY.tv"],
|
||||
"comment":"A web based front end for LBRY network",
|
||||
"links":{"website":"https://odysee.com/",
|
||||
"git":"https://github.com/OdyseeTeam/odysee-frontend",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Odysee.com",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/en/thumb/7/7c/Odyssey_logo_1.svg/220px-Odyssey_logo_1.svg.png"},
|
||||
"licenses":["MIT"],
|
||||
"platforms":["Web",
|
||||
"Android",
|
||||
"iOS"],
|
||||
"interface":["Touch",
|
||||
"JavaScript"],
|
||||
"languages":["JavaScript"],
|
||||
"networks_read":["LBRY"],
|
||||
"networks_write":["LBRY"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["LBRY Client",
|
||||
"Publication",
|
||||
"Video Player",
|
||||
"Music Player",
|
||||
"Marketplace",
|
||||
"Crypto"],
|
||||
"issues":["Google Analytics",
|
||||
"Relies on YouTube for streaming",
|
||||
"Relies on Google Services ( Android )",
|
||||
"Subscription ( Premium )"]}
|
15
apps/parabola.json
Normal file
15
apps/parabola.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["Parabola GNU/Linux-libre",
|
||||
"Parabola"],
|
||||
"comment":"A fully free, simple, and lightweight operating system.",
|
||||
"links":{"website":"https://www.parabola.nu/",
|
||||
"git":"https://git.parabola.nu/",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Parabola_GNU/Linux-libre",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Parabola_Gnu_Linux-libre.svg/250px-Parabola_Gnu_Linux-libre.svg.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["LXDE"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux"]}
|
|
@ -3,7 +3,7 @@
|
|||
"links":{"website":"https://joinpeertube.org",
|
||||
"git":"https://github.com/Chocobozzz/PeerTube#--------",
|
||||
"icon":"https://joinpeertube.org/img/icons/favicon.png"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["JavaScript"],
|
||||
"languages":["TypeScript"],
|
||||
|
|
57
apps/photoshop.json
Normal file
57
apps/photoshop.json
Normal file
|
@ -0,0 +1,57 @@
|
|||
{"names":["Photoshop",
|
||||
"Adobe Photoshop",
|
||||
"Photo Shop"],
|
||||
"comment":"An image editor by Adobe.",
|
||||
"links":{"website":"https://adobe.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Photoshop",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Adobe_Photoshop_CC_icon.svg/66px-Adobe_Photoshop_CC_icon.svg.png"},
|
||||
"platforms":["Windows",
|
||||
"MacOS"],
|
||||
"interface":["Custom"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":["webp",
|
||||
"bmp",
|
||||
"cin",
|
||||
"gif",
|
||||
"dcm",
|
||||
"heif",
|
||||
"heic",
|
||||
"tiff",
|
||||
"jpg",
|
||||
"jp2",
|
||||
"psb",
|
||||
"exr",
|
||||
"pcx",
|
||||
"dcs",
|
||||
"pdf",
|
||||
"psd",
|
||||
"raw",
|
||||
"pict",
|
||||
"png",
|
||||
"pbf",
|
||||
"tga"],
|
||||
"formats_write":["webp",
|
||||
"bmp",
|
||||
"cin",
|
||||
"gif",
|
||||
"dcm",
|
||||
"heif",
|
||||
"heic",
|
||||
"tiff",
|
||||
"jpg",
|
||||
"jp2",
|
||||
"psb",
|
||||
"exr",
|
||||
"pcx",
|
||||
"dcs",
|
||||
"pdf",
|
||||
"psd",
|
||||
"raw",
|
||||
"pict",
|
||||
"png",
|
||||
"pbf",
|
||||
"tga"],
|
||||
"generic_name":["Image Editor", "Image Converter", "Painting Program"],
|
||||
"issues":["Surveillance",
|
||||
"Subscription"]}
|
|
@ -3,7 +3,7 @@
|
|||
"links":{"git":"https://github.com/TeamPiped/Piped#piped",
|
||||
"website":"https://piped.kavin.rocks",
|
||||
"icon":"https://piped.kavin.rocks/img/icons/logo.svg"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["JavaScript"],
|
||||
"languages":["Vue"],
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"git":"https://github.com/pixelfed/pixelfed",
|
||||
"documentation":"https://docs.pixelfed.org/",
|
||||
"icon":"https://pixelfed.org/img/logo.svg"},
|
||||
"licenses":["AGPL3"],
|
||||
"licenses":["AGPL-3.0"],
|
||||
"platforms":["Web"],
|
||||
"interface":["Touch",
|
||||
"JavaScript",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"links":{"website":"https://pleroma.social/",
|
||||
"git":"https://git.pleroma.social/pleroma/pleroma/",
|
||||
"icon":"https://pleroma.social/images/pleroma_logo_vector_nobg_nopan.svg"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["Elixer"],
|
||||
|
|
15
apps/pureOS.json
Normal file
15
apps/pureOS.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["PureOS",
|
||||
"PureOS GNU/Linux"],
|
||||
"comment":"A fully-convergent, user friendly, secure and freedom respecting OS for your daily usage.",
|
||||
"links":{"website":"https://www.pureos.net/",
|
||||
"git":"https://repo.pureos.net/pureos/pool/main/",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/PureOS"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["Gnome 3"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux",
|
||||
"Mobile Operating System"]}
|
14
apps/replicant.json
Normal file
14
apps/replicant.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{"names":["Replicant"],
|
||||
"comment":"Replicant is a fully free Android distribution running on several devices, a free software mobile operating system putting the emphasis on freedom and privacy/security",
|
||||
"links":{"website":"https://replicant.us/",
|
||||
"git":"https://git.replicant.us/replicant",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Replicant_(operating_system)",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Replicant_logo_alpha.svg/120px-Replicant_logo_alpha.svg.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["Mobile"],
|
||||
"interface":["Touch"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Mobile Operating System", "Android/Linux"]}
|
|
@ -4,7 +4,7 @@
|
|||
"git":"https://github.com/telegramdesktop/tdesktop",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Telegram_(software)",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Telegram_2019_Logo.svg/121px-Telegram_2019_Logo.svg.png"},
|
||||
"licenses":["GPLv2+", "GPLv3", "Proprietary"],
|
||||
"licenses":["GPL-2.0-or-later", "GPL-3.0", "Proprietary"],
|
||||
"platforms":["GNU/Linux",
|
||||
"MacOS",
|
||||
"Windows",
|
||||
|
|
15
apps/trisquel.json
Normal file
15
apps/trisquel.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{"names":["Trisquel",
|
||||
"Trisquel GNU/Linux"],
|
||||
"comment":"Trisquel GNU/Linux is a fully free operating system for home users, small enterprises and educational centers.",
|
||||
"links":{"website":"https://trisquel.info/",
|
||||
"git":"https://gitlab.trisquel.org/trisquel",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Trisquel",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Logo-Trisquel.svg/65px-Logo-Trisquel.svg.png"},
|
||||
"licenses":["GPL-3.0-or-later"],
|
||||
"platforms":["PC"],
|
||||
"interface":["MATE"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System", "GNU/Linux"]}
|
23
apps/twitter.json
Normal file
23
apps/twitter.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{"names":["Twitter",
|
||||
"twitter.com"],
|
||||
"comment":"A microblogging social network.",
|
||||
"links":{"website":"https://facebook.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Twitter",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Twitter-logo.svg/100px-Twitter-logo.svg.png"},
|
||||
"platforms":["Android",
|
||||
"iOS",
|
||||
"Web"],
|
||||
"interface":["JavaScript"],
|
||||
"networks_read":["twitter"],
|
||||
"networks_write":["twitter"],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Blogger",
|
||||
"Microblogger",
|
||||
"Social Network",
|
||||
"Publication",
|
||||
"Twitter Client"],
|
||||
"issues":["Surveillance",
|
||||
"Non-Free Software",
|
||||
"Non-Free JavaScript"]}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
"links":{"website":"https://viewtube.io",
|
||||
"git":"https://github.com/ViewTube/viewtube-vue#viewtube",
|
||||
"icon":"https://dev.viewtube.io/_nuxt/img/icon.dc8b72c.svg"},
|
||||
"licenses":["AGPL3+"],
|
||||
"licenses":["AGPL-3.0-or-later"],
|
||||
"platforms":["Web"],
|
||||
"interface":["HTML5"],
|
||||
"languages":["Vue",
|
||||
|
|
17
apps/windows.json
Normal file
17
apps/windows.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{"names":["Windows",
|
||||
"Microsoft Windows"],
|
||||
"comment":"A proprietary Operating System from Microsoft.",
|
||||
"links":{"website":"microsoft.com",
|
||||
"wikipedia":"https://en.wikipedia.org/wiki/Windows",
|
||||
"icon":"https://upload.wikimedia.org/wikipedia/commons/9/94/M_box.svg"},
|
||||
"platforms":["PC"],
|
||||
"interface":["windows"],
|
||||
"networks_read":[],
|
||||
"networks_write":[],
|
||||
"formats_read":[],
|
||||
"formats_write":[],
|
||||
"generic_name":["Operating System"],
|
||||
"issues":["Surveillance",
|
||||
"Subscription",
|
||||
"Non-Free Software",
|
||||
"DRM"]}
|
6138
data/licenses.json
Normal file
6138
data/licenses.json
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
|
@ -12,20 +12,10 @@ def html(page, json):
|
|||
|
||||
# This function adds a rendering of the json into the page
|
||||
|
||||
# TODO: Add a more complex algorithm of checking if software is
|
||||
# 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
|
||||
if "licenses" in json and json["licenses"]:
|
||||
free = True
|
||||
|
||||
|
||||
|
||||
free = search.is_free(json)
|
||||
page = page + "\n <h1>"
|
||||
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="height:50px;">'
|
||||
except:
|
||||
pass
|
||||
name = json.get("names",["Unknown"])[0]
|
||||
|
@ -33,17 +23,24 @@ def html(page, json):
|
|||
page = page + "</h1>"
|
||||
|
||||
# Few words about it
|
||||
page = page + "<p>"+json.get("comment","")+"</p>"
|
||||
comment = json.get("comment","")
|
||||
if "open source" in comment.lower():
|
||||
# Well... Here is a thing. Free Software, not open source.
|
||||
where = comment.lower().find("open source")
|
||||
os = comment[where:where+11]
|
||||
comment = comment.replace(os,
|
||||
"<a href=\"https://www.gnu.org/philosophy/open-source-misses-the-point.en.html\">"+os+"</a>")
|
||||
page = page + "<p>"+comment+"</p>"
|
||||
|
||||
# I want to show nothing else from if it's proprietary
|
||||
if not free:
|
||||
|
||||
if "issues" in json:
|
||||
l = json.get("issues", [])
|
||||
page = page +"<h2>Anti-Features / Problems:</h2>"
|
||||
|
||||
for i in l:
|
||||
page = page + "<br> "+i
|
||||
page = page + " "+i+"<br>"
|
||||
|
||||
if not free:
|
||||
return page
|
||||
|
||||
|
||||
|
@ -90,7 +87,6 @@ def html(page, json):
|
|||
"networks_write":"Interacts / Publishes to",
|
||||
"formats_read":"Opens from File-Formats",
|
||||
"formats_write":"Saves to File-Formats",
|
||||
"issues":"Anti-Features / Problems",
|
||||
"interface":"Interface",
|
||||
"languages":"Programming Languages"}
|
||||
|
||||
|
@ -117,18 +113,32 @@ def suggestions(page, json):
|
|||
page = page + "<h1>Free Competitors:</h1>"
|
||||
|
||||
found = search.suggest(json)
|
||||
|
||||
|
||||
biggest = 0
|
||||
for i in found:
|
||||
|
||||
free = False
|
||||
if "licenses" in i[-1] and i[-1]["licenses"]:
|
||||
free = True
|
||||
if i[0] > biggest:
|
||||
biggest = i[0]
|
||||
more = False
|
||||
for i in found:
|
||||
free = search.is_free(i[-1])
|
||||
|
||||
if not i[0] or i[-1] == json or not free:
|
||||
continue
|
||||
#page = page + "<br><br>"
|
||||
page = html(page, i[-1])
|
||||
try:
|
||||
frac = int(i[0]/biggest*100)
|
||||
except:
|
||||
frac = 0
|
||||
|
||||
if frac < 40 and not more: # Below 40% features match
|
||||
page = page + """<hr><details>
|
||||
<summary><h1 title="Click to show more / less.">Problematic Competitors:</h1></summary>"""
|
||||
more = True
|
||||
|
||||
page = page + "<hr><br>Features match: " + str(frac) + "%"
|
||||
page = html(page, i[-1])
|
||||
|
||||
if more:
|
||||
page = page + "</details>"
|
||||
return page
|
||||
|
||||
def search_widget(page):
|
||||
|
|
|
@ -41,19 +41,22 @@ def search_app(name):
|
|||
for i in all_apps:
|
||||
for n in i.get("names",[]):
|
||||
m = similar(n.lower(), name.lower())
|
||||
if m > match and m > 0.49:
|
||||
if m > match and m > 0.6:
|
||||
closest = i
|
||||
match = m
|
||||
|
||||
if closest:
|
||||
return closest, match
|
||||
|
||||
match = 0
|
||||
closest = {}
|
||||
|
||||
# Round 2. By Generic name
|
||||
|
||||
for i in all_apps:
|
||||
for n in i.get("generic_name",[]):
|
||||
m = similar(n.lower(), name.lower())
|
||||
if m > match:
|
||||
if m > match and is_free(i):
|
||||
closest = i
|
||||
match = m
|
||||
|
||||
|
@ -74,7 +77,6 @@ def suggest(json_data):
|
|||
with open("apps/"+i) as json_file:
|
||||
idata = json.load(json_file)
|
||||
except Exception as e:
|
||||
print("Error!", i, e)
|
||||
idata = {}
|
||||
|
||||
all_apps.append(idata)
|
||||
|
@ -86,7 +88,12 @@ def suggest(json_data):
|
|||
for b in json_data.get(c, []):
|
||||
if b in i.get(c, []):
|
||||
score += 1
|
||||
|
||||
|
||||
# If software has issues of any kind we move it down.
|
||||
if "issues" in i and score:
|
||||
score = max(0.1, score - len(i["issues"]))
|
||||
|
||||
|
||||
found.append([score, i])
|
||||
|
||||
try:
|
||||
|
@ -97,3 +104,15 @@ def suggest(json_data):
|
|||
fount = []
|
||||
|
||||
return found
|
||||
|
||||
def is_free(app):
|
||||
if "licenses" in app and app["licenses"]:
|
||||
with open("data/licenses.json", "r") as data:
|
||||
all_licenses = json.load(data)["licenses"]
|
||||
for al in all_licenses: # Making longer loop once
|
||||
for l in app["licenses"]:
|
||||
if l in [al.get("licenseId",""),al.get("name","")]\
|
||||
and al.get("isFsfLibre", False):
|
||||
return True
|
||||
print("License Error! "+app.get("names",[])[0], "Check with data/licenses.json 'licenseId'")
|
||||
return False
|
||||
|
|
27
server.py
27
server.py
|
@ -35,7 +35,10 @@ class handler(BaseHTTPRequestHandler):
|
|||
|
||||
def start_page(self):
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type', 'text/html')
|
||||
if "/json/" not in self.path:
|
||||
self.send_header('Content-type', 'text/html')
|
||||
else:
|
||||
self.send_header('Content-type', 'application/json')
|
||||
self.end_headers()
|
||||
|
||||
def send(self, text):
|
||||
|
@ -50,14 +53,28 @@ class handler(BaseHTTPRequestHandler):
|
|||
|
||||
def do_GET(self):
|
||||
|
||||
if self.path.startswith("/json/"):
|
||||
|
||||
if self.path == "/":
|
||||
# API CALL
|
||||
|
||||
|
||||
term = self.path[6:]
|
||||
software_data, match = search.search_app(term)
|
||||
data = {"found":{"data":software_data,"match":match}}
|
||||
data["suggestions"] = search.suggest(software_data)
|
||||
text = json.dumps(data, indent = 2)
|
||||
|
||||
self.start_page()
|
||||
self.wfile.write(text.encode("utf-8"))
|
||||
|
||||
|
||||
elif self.path == "/":
|
||||
|
||||
# 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 = 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)
|
||||
self.send(page)
|
||||
|
||||
|
@ -79,7 +96,7 @@ class handler(BaseHTTPRequestHandler):
|
|||
software_data, match = search.search_app(software)
|
||||
|
||||
page = render.search_widget("")
|
||||
page = page +"Match: "+ str(match*100)+"%"
|
||||
page = page +"Search match: "+ str(int(match*100))+"%"
|
||||
# Let's add the found software to the page
|
||||
page = render.html(page, software_data)
|
||||
page = render.suggestions(page, software_data)
|
||||
|
|
Loading…
Reference in a new issue