diff --git a/bin/cardvault b/bin/cardvault
deleted file mode 100644
index 0e47180..0000000
--- a/bin/cardvault
+++ /dev/null
@@ -1,2 +0,0 @@
-from cardvault import application
-application.main()
\ No newline at end of file
diff --git a/build.py b/build.py
new file mode 100644
index 0000000..44d7c55
--- /dev/null
+++ b/build.py
@@ -0,0 +1,17 @@
+"""
+Package cardvault using zipapp into an executable zip archive
+"""
+import os
+import zipapp
+
+INTERPRETER = '/usr/bin/env python3'
+TARGET_FILENAME = 'cardvault'
+
+# The bundled file should be placed into the build directory
+target_path = os.path.join(os.path.dirname(__file__), 'build')
+# Make sure it exists
+if not os.path.isdir(target_path):
+ os.mkdir(target_path)
+target = os.path.join(target_path, TARGET_FILENAME)
+# Create archive
+zipapp.create_archive(source='cardvault', target=target, interpreter=INTERPRETER)
diff --git a/cardvault/__init__.py b/cardvault/__init__.py
deleted file mode 100644
index 5315975..0000000
--- a/cardvault/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from cardvault import application
\ No newline at end of file
diff --git a/cardvault/__main__.py b/cardvault/__main__.py
new file mode 100644
index 0000000..95c7f99
--- /dev/null
+++ b/cardvault/__main__.py
@@ -0,0 +1,10 @@
+import sys
+
+import os.path
+path = os.path.realpath(os.path.abspath(__file__))
+sys.path.insert(0, os.path.dirname(path))
+
+from cv_gtk3 import gtk_ui
+
+if __name__ == '__main__':
+ gtk_ui.main()
\ No newline at end of file
diff --git a/cv_engine/__init__.py b/cardvault/cv_engine/__init__.py
similarity index 100%
rename from cv_engine/__init__.py
rename to cardvault/cv_engine/__init__.py
diff --git a/cv_engine/database.py b/cardvault/cv_engine/database.py
similarity index 100%
rename from cv_engine/database.py
rename to cardvault/cv_engine/database.py
diff --git a/cv_engine/engine.py b/cardvault/cv_engine/engine.py
similarity index 59%
rename from cv_engine/engine.py
rename to cardvault/cv_engine/engine.py
index bb99f97..e79824a 100644
--- a/cv_engine/engine.py
+++ b/cardvault/cv_engine/engine.py
@@ -1,4 +1,3 @@
-import json
import os
import itertools
@@ -8,8 +7,7 @@ from cv_engine.util import EngineConfig, EngineConstants, Utilities
class CardvaultEngine:
def __init__(self, config_file=False):
- """
- Create a new cv_engine instance
+ """ Create a new cv_engine instance
:param config_file: File path of the configuration file
"""
if config_file:
@@ -18,23 +16,20 @@ class CardvaultEngine:
self.database = CardvaultDB(db_file_path)
def get_card(self, card_id):
- """
- Load a card object from database
+ """ Load a card object from database
:param card_id: multiverse id of a card
:return: an cv_engine.model.Card object
"""
return self.database.card_load(card_id)
def get_library(self) -> list:
- """
- Get the complete library of cards
+ """ Get the complete library of cards
:return: Alphabetically ordered list of all cards in library
"""
return self.database.lib_get_all()
def get_all_categories(self) -> dict:
- """
- Get all categories an the cards that are contained within them
+ """ Get all categories an the cards that are contained within them
:return: A dict with the category names and cv_engine.models.Card objects as values
"""
categories = self.database.category_get_all()
@@ -54,25 +49,5 @@ class CardvaultEngine:
if __name__ == "__main__":
+ # Test code
engine = CardvaultEngine()
-
- # Insert Data into Datasbase
- # print("Database insert test:")
- # engine.database.db_clear_data_card()
- # cards = Utilities.parse_mtgjson_cards(json.load(open("/home/luxick/Downloads/AllSets-x.json")))
- # engine.database.card_insert_many(cards)
-
- # Compare JSON Data to Data in Database
- # for card in Utilities.parse_mtgjson_cards(json.load(open("/home/luxick/Downloads/AllSets-x.json"))):
- # if card.multiverse_id:
- # print('From JSON: {}'.format(card.names))
- # print('From DB: {}\n'.format(engine.database.card_load(card.multiverse_id).names))
-
- # Search test
- # term = 'fire'
- # for result in engine.database.card_search_by_name(term):
- # print(str(result), end='\n\n')
- # Fast load test
- # engine.database.card_fast_load()
- # all_ids = engine.database.db_all_multiverse_ids()
- # print('Loaded IDs: {}'.format(len(all_ids)))
diff --git a/cv_engine/models.py b/cardvault/cv_engine/models.py
similarity index 100%
rename from cv_engine/models.py
rename to cardvault/cv_engine/models.py
diff --git a/cv_engine/util.py b/cardvault/cv_engine/util.py
similarity index 84%
rename from cv_engine/util.py
rename to cardvault/cv_engine/util.py
index 0a17f50..99219f6 100644
--- a/cv_engine/util.py
+++ b/cardvault/cv_engine/util.py
@@ -35,14 +35,6 @@ class EngineConstants:
config_path = os.path.join(os.path.expanduser('~'), '.config', 'cardvault')
-class GTKConstants:
- """
- Constants for the GTK Ui
- """
- # Directory in witch glade ui files are stored
- glade_files = '/gui'
-
-
class MTGConstants:
"""
This class contains constants that can be used within the whole program
@@ -98,13 +90,3 @@ class Utilities:
cards.append(c)
output = output + cards
return output
-
- @staticmethod
- def expand_file_path(base_file, sub_dirs) -> str:
- """
- Get absolute file path relative to another file
- :param base_file: Current file from witch to expand
- :param sub_dirs: List of sub directories to desired file
- :return: Full file path of chosen file
- """
- return os.path.join(os.path.dirname(base_file), *sub_dirs)
\ No newline at end of file
diff --git a/cv_gtk3/__init__.py b/cardvault/cv_gtk3/__init__.py
similarity index 100%
rename from cv_gtk3/__init__.py
rename to cardvault/cv_gtk3/__init__.py
diff --git a/cv_gtk3/card_view.py b/cardvault/cv_gtk3/card_view.py
similarity index 94%
rename from cv_gtk3/card_view.py
rename to cardvault/cv_gtk3/card_view.py
index b9e36d6..985f980 100644
--- a/cv_gtk3/card_view.py
+++ b/cardvault/cv_gtk3/card_view.py
@@ -8,9 +8,8 @@ from cv_engine.util import MTGConstants
class CardView(Gtk.ScrolledWindow):
""" Class for displaying a list of cards in an GTKTreeView """
- def __init__(self, ui_file, filtered):
+ def __init__(self, filtered):
""" Constructor for a card list display
- :param ui_file: Full path to an CardView glade file
:param filtered: Should the card list be filterable
"""
self.filtered = filtered
@@ -21,12 +20,13 @@ class CardView(Gtk.ScrolledWindow):
self.set_vexpand(True)
# Build UI
self.ui = Gtk.Builder()
- self.ui.add_from_file(ui_file)
+ self.ui.add_from_string(GTKUtilities.load_ui_resource('cardtree.glade'))
self.tree = self.ui.get_object('cardTree')
self.store = self.ui.get_object('cardStore')
self.store.set_sort_func(4, self.compare_rarity, None)
# Add the TreeView
self.add(self.tree)
+ #self.tree.connect("row-activated", self.on_row_double_click)
def get_selected_cards(self):
""" Get the currently selected cards in the TreeView
diff --git a/cv_gtk3/signal_handlers/__init__.py b/cardvault/cv_gtk3/dialogs.py
similarity index 100%
rename from cv_gtk3/signal_handlers/__init__.py
rename to cardvault/cv_gtk3/dialogs.py
diff --git a/cv_gtk3/gtkui.py b/cardvault/cv_gtk3/gtk_ui.py
similarity index 84%
rename from cv_gtk3/gtkui.py
rename to cardvault/cv_gtk3/gtk_ui.py
index a429ed7..ba22d7c 100644
--- a/cv_gtk3/gtkui.py
+++ b/cardvault/cv_gtk3/gtk_ui.py
@@ -1,6 +1,7 @@
-import gi
import os
+import gi
+
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
@@ -17,13 +18,11 @@ class CardvaultGTK(MainWindowFunctions):
def __init__(self):
# Start engine (without config file)
self.engine = engine.CardvaultEngine()
- # Set Glade file location
- GUISettings.glade_file_path = os.path.join(os.path.dirname(__file__), 'gui')
# Load Glade files
glade_files = ['mainwindow.glade', 'search.glade', 'overlays.glade']
self.ui = Gtk.Builder()
for file in glade_files:
- self.ui.add_from_file(os.path.join(GUISettings.glade_file_path, file))
+ self.ui.add_from_string(GTKUtilities.load_ui_resource(file))
# Set pages for the ui to use
GUISettings.pages = {
"search": self.ui.get_object("searchView"),
@@ -34,8 +33,7 @@ class CardvaultGTK(MainWindowFunctions):
if not os.path.isdir(util.EngineConfig.icon_cache_path):
os.mkdir(util.EngineConfig.icon_cache_path)
# Load single mana icons
- GTKUtilities.mana_icons = GTKUtilities.load_icon_cache(os.path.join(os.path.dirname(__file__), 'resources',
- 'mana'))
+ GTKUtilities.mana_icons = GTKUtilities.load_icon_cache(os.path.join(GTKUtilities.resources_path, 'mana'))
# Load the the pre constructed icon cache
GTKUtilities.precon_icon_cache = GTKUtilities.load_icon_cache(util.EngineConfig.icon_cache_path)
# Call constructor of superclasses
@@ -48,7 +46,12 @@ class CardvaultGTK(MainWindowFunctions):
self.hide_initial_widgets()
self.switch_page('search')
-if __name__ == '__main__':
+
+def main():
CardvaultGTK()
Gtk.main()
+if __name__ == '__main__':
+ main()
+
+
diff --git a/cardvault/cv_gtk3/gtk_util.py b/cardvault/cv_gtk3/gtk_util.py
new file mode 100644
index 0000000..730912c
--- /dev/null
+++ b/cardvault/cv_gtk3/gtk_util.py
@@ -0,0 +1,176 @@
+import os
+import re
+
+from gi.repository import GdkPixbuf
+from zipfile import ZipFile
+
+try:
+ from PIL import Image
+except ImportError as err:
+ print('PIL imaging library is not installed')
+
+from cv_engine.util import EngineConfig
+
+
+class GTKUtilities:
+ """ Access to image caches and utilities for use in the GTK application """
+ # Loaded mana symbols Format: {'B': GDKPixbuf, '3': GDKPixbuf}
+ mana_icons = {}
+ # Cache for combined mana cost icons
+ precon_icon_cache = {}
+ # Path of Gtk resources relative to cardvault base package
+ resources_path = os.path.join('cv_gtk3', 'resources')
+
+ @staticmethod
+ def get_path_from_base_dir(*dirs):
+ return os.path.join(os.path.dirname(os.path.dirname(__file__)), *dirs)
+
+ @staticmethod
+ def get_mana_icons(mana_string):
+ """ Return the combined mana symbols for a mana string
+ :param mana_string: String in the format '{3}{U}{B}'
+ :return: GdkPixbuf containing the combined symbols
+ """
+ if not mana_string:
+ return
+ icon_list = re.findall("{(.*?)}", mana_string.replace("/", "-"))
+ icon_name = "_".join(icon_list)
+ try:
+ icon = GTKUtilities.precon_icon_cache[icon_name]
+ except KeyError:
+ icon = GTKUtilities.create_mana_icons(mana_string)
+ GTKUtilities.precon_icon_cache[icon_name] = icon
+ # Scale icon for display
+ if icon:
+ icon = icon.scale_simple(icon.get_width() / 5, icon.get_height() / 5, GdkPixbuf.InterpType.HYPER)
+ return icon
+
+ @staticmethod
+ def create_mana_icons(mana_string):
+ # Convert the string to a List
+ glyphs = re.findall("{(.*?)}", mana_string)
+ if len(glyphs) == 0:
+ return
+ # Compute horizontal size for the final image
+ size = len(glyphs) * 105
+ image = Image.new("RGBA", (size, 105))
+ for index, icon in enumerate(glyphs):
+ x_pos = index * 105
+ try:
+ # Try loading mana icon and converting to PIL.Image for combining
+ loaded = GTKUtilities.pixbuf_to_image(GTKUtilities.mana_icons[icon])
+ except KeyError:
+ print('Mana icon "{}" is not loaded.'.format(icon))
+ return
+ image.paste(loaded, (x_pos, 0))
+ # Save pre build icon file
+ path = os.path.join(EngineConfig.icon_cache_path, "_".join(glyphs) + ".png")
+ image.save(path)
+ try:
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(path)
+ except Exception as ex:
+ print(ex)
+ return
+ return pixbuf
+
+ @staticmethod
+ def pixbuf_to_image(pix):
+ """Convert gdkpixbuf to PIL image"""
+ data = pix.get_pixels()
+ w = pix.props.width
+ h = pix.props.height
+ stride = pix.props.rowstride
+ mode = "RGB"
+ if pix.props.has_alpha:
+ mode = "RGBA"
+ im = Image.frombytes(mode, (w, h), data, "raw", mode, stride)
+
+ return im
+
+ @staticmethod
+ def load_ui_resource(resource_name):
+ """ Load GUI resource depending on the execution mode (from a directory or from a zip file)
+ :param resource_name: Name of the glade file
+ :return: String content of the resource file
+ """
+ if os.path.isdir(os.path.dirname(__file__)):
+ return GTKUtilities.load_ui_resource_file(os.path.join(GTKUtilities.resources_path, 'gui', resource_name))
+ else:
+ zip_path = os.path.dirname(os.path.dirname(__file__))
+ return GTKUtilities.load_ui_resource_zip(zip_path,
+ os.path.join(GTKUtilities.resources_path, 'gui', resource_name))
+
+ @staticmethod
+ def load_ui_resource_file(resource_path):
+ """ LOad GUI resource from file path
+ :param resource_path: Relative path of the resource based on the cardvault base package
+ :return: String content of the resource file
+ """
+ full_path = GTKUtilities.get_path_from_base_dir(resource_path)
+ with open(full_path, 'r') as file:
+ return file.read()
+
+ @staticmethod
+ def load_ui_resource_zip(archive_file, resource_path):
+ """ Load GUI resource from a zip archive (for usage in release mode)
+ :param archive_file: Full path of the archive file
+ :param resource_path: Path of the resources within the archive
+ :return: String representation of the file content
+ """
+ with ZipFile(archive_file, 'r') as archive:
+ return archive.read(resource_path).decode('utf-8')
+
+ @staticmethod
+ def load_icon_cache(icon_path):
+ """ Get a dictionary with all available mana icons
+ :param icon_path: Relative path of icon resource files
+ :return: Dict with icon names and Gdkpixbuf objects
+ """
+ if os.path.isdir(GTKUtilities.get_path_from_base_dir(icon_path)):
+ return GTKUtilities.load_icon_cache_file(GTKUtilities.get_path_from_base_dir(icon_path))
+ else:
+ zip_path = os.path.dirname(os.path.dirname(__file__))
+ return GTKUtilities.load_icon_cache_zip(zip_path)
+
+ @staticmethod
+ def load_icon_cache_file(icon_path):
+ """ Load icon cache from absolute paths at file system
+ :param icon_path: Relative path of icon resource files
+ :return: Dict with icon names and Gdkpixbuf object
+ """
+ icons = {}
+ files = os.listdir(icon_path)
+ for file in files:
+ try:
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.path.join(icon_path, file))
+ # Strip filename extension
+ icon_name = os.path.splitext(file)[0]
+ icons[icon_name] = pixbuf
+ except Exception as ex:
+ print('Error while loading icon file "{}"'.format(ex))
+ return icons
+
+ @staticmethod
+ def load_icon_cache_zip(zip_path):
+ """ Load icon cache from zipped archive
+ :param zip_path: Full path of the zip archive
+ :return: Dict with icon names and Gdkpixbuf object
+ """
+ with ZipFile(zip_path, 'r') as archive:
+ icon_path = os.path.join('cv_gtk3', 'resources', 'mana')
+ files = [path for path in archive.namelist() if os.path.isfile(path.startswith(icon_path))]
+ icons = {}
+ for file in files:
+ with archive.open(file) as data:
+ try:
+ loader = GdkPixbuf.PixbufLoader()
+ loader.write(data.read())
+ pixbuf = loader.get_pixbuf()
+ loader.close()
+ # Strip filename extension
+ icon_name = os.path.splitext(file)[0]
+ icons[icon_name] = pixbuf
+ except Exception as ex:
+ print('Error while loading icon file "{0}"\n{1}'.format(file, ex))
+ return icons
+
diff --git a/cv_gtk3/main_window.py b/cardvault/cv_gtk3/main_window.py
similarity index 100%
rename from cv_gtk3/main_window.py
rename to cardvault/cv_gtk3/main_window.py
diff --git a/cardvault/gui/cardtree.glade b/cardvault/cv_gtk3/resources/gui/cardtree.glade
similarity index 100%
rename from cardvault/gui/cardtree.glade
rename to cardvault/cv_gtk3/resources/gui/cardtree.glade
diff --git a/cardvault/gui/detailswindow.glade b/cardvault/cv_gtk3/resources/gui/detailswindow.glade
similarity index 100%
rename from cardvault/gui/detailswindow.glade
rename to cardvault/cv_gtk3/resources/gui/detailswindow.glade
diff --git a/cardvault/gui/dialogs.glade b/cardvault/cv_gtk3/resources/gui/dialogs.glade
similarity index 100%
rename from cardvault/gui/dialogs.glade
rename to cardvault/cv_gtk3/resources/gui/dialogs.glade
diff --git a/cardvault/gui/library.glade b/cardvault/cv_gtk3/resources/gui/library.glade
similarity index 100%
rename from cardvault/gui/library.glade
rename to cardvault/cv_gtk3/resources/gui/library.glade
diff --git a/cv_gtk3/gui/mainwindow.glade b/cardvault/cv_gtk3/resources/gui/mainwindow.glade
similarity index 99%
rename from cv_gtk3/gui/mainwindow.glade
rename to cardvault/cv_gtk3/resources/gui/mainwindow.glade
index e44902d..3d44db3 100644
--- a/cv_gtk3/gui/mainwindow.glade
+++ b/cardvault/cv_gtk3/resources/gui/mainwindow.glade
@@ -6,7 +6,7 @@
Card Vault
False
Card Vault
- 900
+ 1200
700
cardvault
diff --git a/cardvault/gui/overlays.glade b/cardvault/cv_gtk3/resources/gui/overlays.glade
similarity index 100%
rename from cardvault/gui/overlays.glade
rename to cardvault/cv_gtk3/resources/gui/overlays.glade
diff --git a/cv_gtk3/gui/search.glade b/cardvault/cv_gtk3/resources/gui/search.glade
similarity index 100%
rename from cv_gtk3/gui/search.glade
rename to cardvault/cv_gtk3/resources/gui/search.glade
diff --git a/cardvault/gui/wants.glade b/cardvault/cv_gtk3/resources/gui/wants.glade
similarity index 100%
rename from cardvault/gui/wants.glade
rename to cardvault/cv_gtk3/resources/gui/wants.glade
diff --git a/cardvault/resources/images/demo.jpg b/cardvault/cv_gtk3/resources/images/demo.jpg
similarity index 100%
rename from cardvault/resources/images/demo.jpg
rename to cardvault/cv_gtk3/resources/images/demo.jpg
diff --git a/cardvault/resources/images/dummy.jpg b/cardvault/cv_gtk3/resources/images/dummy.jpg
similarity index 100%
rename from cardvault/resources/images/dummy.jpg
rename to cardvault/cv_gtk3/resources/images/dummy.jpg
diff --git a/cardvault/resources/images/dummy_315x450.png b/cardvault/cv_gtk3/resources/images/dummy_315x450.png
similarity index 100%
rename from cardvault/resources/images/dummy_315x450.png
rename to cardvault/cv_gtk3/resources/images/dummy_315x450.png
diff --git a/cardvault/resources/mana/0.png b/cardvault/cv_gtk3/resources/mana/0.png
similarity index 100%
rename from cardvault/resources/mana/0.png
rename to cardvault/cv_gtk3/resources/mana/0.png
diff --git a/cardvault/resources/mana/1.png b/cardvault/cv_gtk3/resources/mana/1.png
similarity index 100%
rename from cardvault/resources/mana/1.png
rename to cardvault/cv_gtk3/resources/mana/1.png
diff --git a/cardvault/resources/mana/10.png b/cardvault/cv_gtk3/resources/mana/10.png
similarity index 100%
rename from cardvault/resources/mana/10.png
rename to cardvault/cv_gtk3/resources/mana/10.png
diff --git a/cardvault/resources/mana/11.png b/cardvault/cv_gtk3/resources/mana/11.png
similarity index 100%
rename from cardvault/resources/mana/11.png
rename to cardvault/cv_gtk3/resources/mana/11.png
diff --git a/cardvault/resources/mana/12.png b/cardvault/cv_gtk3/resources/mana/12.png
similarity index 100%
rename from cardvault/resources/mana/12.png
rename to cardvault/cv_gtk3/resources/mana/12.png
diff --git a/cardvault/resources/mana/13.png b/cardvault/cv_gtk3/resources/mana/13.png
similarity index 100%
rename from cardvault/resources/mana/13.png
rename to cardvault/cv_gtk3/resources/mana/13.png
diff --git a/cardvault/resources/mana/14.png b/cardvault/cv_gtk3/resources/mana/14.png
similarity index 100%
rename from cardvault/resources/mana/14.png
rename to cardvault/cv_gtk3/resources/mana/14.png
diff --git a/cardvault/resources/mana/15.png b/cardvault/cv_gtk3/resources/mana/15.png
similarity index 100%
rename from cardvault/resources/mana/15.png
rename to cardvault/cv_gtk3/resources/mana/15.png
diff --git a/cardvault/resources/mana/16.png b/cardvault/cv_gtk3/resources/mana/16.png
similarity index 100%
rename from cardvault/resources/mana/16.png
rename to cardvault/cv_gtk3/resources/mana/16.png
diff --git a/cardvault/resources/mana/17.png b/cardvault/cv_gtk3/resources/mana/17.png
similarity index 100%
rename from cardvault/resources/mana/17.png
rename to cardvault/cv_gtk3/resources/mana/17.png
diff --git a/cardvault/resources/mana/18.png b/cardvault/cv_gtk3/resources/mana/18.png
similarity index 100%
rename from cardvault/resources/mana/18.png
rename to cardvault/cv_gtk3/resources/mana/18.png
diff --git a/cardvault/resources/mana/19.png b/cardvault/cv_gtk3/resources/mana/19.png
similarity index 100%
rename from cardvault/resources/mana/19.png
rename to cardvault/cv_gtk3/resources/mana/19.png
diff --git a/cardvault/resources/mana/2.png b/cardvault/cv_gtk3/resources/mana/2.png
similarity index 100%
rename from cardvault/resources/mana/2.png
rename to cardvault/cv_gtk3/resources/mana/2.png
diff --git a/cardvault/resources/mana/20.png b/cardvault/cv_gtk3/resources/mana/20.png
similarity index 100%
rename from cardvault/resources/mana/20.png
rename to cardvault/cv_gtk3/resources/mana/20.png
diff --git a/cardvault/resources/mana/2b.png b/cardvault/cv_gtk3/resources/mana/2b.png
similarity index 100%
rename from cardvault/resources/mana/2b.png
rename to cardvault/cv_gtk3/resources/mana/2b.png
diff --git a/cardvault/resources/mana/2g.png b/cardvault/cv_gtk3/resources/mana/2g.png
similarity index 100%
rename from cardvault/resources/mana/2g.png
rename to cardvault/cv_gtk3/resources/mana/2g.png
diff --git a/cardvault/resources/mana/2r.png b/cardvault/cv_gtk3/resources/mana/2r.png
similarity index 100%
rename from cardvault/resources/mana/2r.png
rename to cardvault/cv_gtk3/resources/mana/2r.png
diff --git a/cardvault/resources/mana/2u.png b/cardvault/cv_gtk3/resources/mana/2u.png
similarity index 100%
rename from cardvault/resources/mana/2u.png
rename to cardvault/cv_gtk3/resources/mana/2u.png
diff --git a/cardvault/resources/mana/2w.png b/cardvault/cv_gtk3/resources/mana/2w.png
similarity index 100%
rename from cardvault/resources/mana/2w.png
rename to cardvault/cv_gtk3/resources/mana/2w.png
diff --git a/cardvault/resources/mana/3.png b/cardvault/cv_gtk3/resources/mana/3.png
similarity index 100%
rename from cardvault/resources/mana/3.png
rename to cardvault/cv_gtk3/resources/mana/3.png
diff --git a/cardvault/resources/mana/4.png b/cardvault/cv_gtk3/resources/mana/4.png
similarity index 100%
rename from cardvault/resources/mana/4.png
rename to cardvault/cv_gtk3/resources/mana/4.png
diff --git a/cardvault/resources/mana/5.png b/cardvault/cv_gtk3/resources/mana/5.png
similarity index 100%
rename from cardvault/resources/mana/5.png
rename to cardvault/cv_gtk3/resources/mana/5.png
diff --git a/cardvault/resources/mana/6.png b/cardvault/cv_gtk3/resources/mana/6.png
similarity index 100%
rename from cardvault/resources/mana/6.png
rename to cardvault/cv_gtk3/resources/mana/6.png
diff --git a/cardvault/resources/mana/7.png b/cardvault/cv_gtk3/resources/mana/7.png
similarity index 100%
rename from cardvault/resources/mana/7.png
rename to cardvault/cv_gtk3/resources/mana/7.png
diff --git a/cardvault/resources/mana/8.png b/cardvault/cv_gtk3/resources/mana/8.png
similarity index 100%
rename from cardvault/resources/mana/8.png
rename to cardvault/cv_gtk3/resources/mana/8.png
diff --git a/cardvault/resources/mana/9.png b/cardvault/cv_gtk3/resources/mana/9.png
similarity index 100%
rename from cardvault/resources/mana/9.png
rename to cardvault/cv_gtk3/resources/mana/9.png
diff --git a/cardvault/resources/mana/B-G.png b/cardvault/cv_gtk3/resources/mana/B-G.png
similarity index 100%
rename from cardvault/resources/mana/B-G.png
rename to cardvault/cv_gtk3/resources/mana/B-G.png
diff --git a/cardvault/resources/mana/B-P.png b/cardvault/cv_gtk3/resources/mana/B-P.png
similarity index 100%
rename from cardvault/resources/mana/B-P.png
rename to cardvault/cv_gtk3/resources/mana/B-P.png
diff --git a/cardvault/resources/mana/B-R.png b/cardvault/cv_gtk3/resources/mana/B-R.png
similarity index 100%
rename from cardvault/resources/mana/B-R.png
rename to cardvault/cv_gtk3/resources/mana/B-R.png
diff --git a/cardvault/resources/mana/B.png b/cardvault/cv_gtk3/resources/mana/B.png
similarity index 100%
rename from cardvault/resources/mana/B.png
rename to cardvault/cv_gtk3/resources/mana/B.png
diff --git a/cardvault/resources/mana/B_alt.png b/cardvault/cv_gtk3/resources/mana/B_alt.png
similarity index 100%
rename from cardvault/resources/mana/B_alt.png
rename to cardvault/cv_gtk3/resources/mana/B_alt.png
diff --git a/cardvault/resources/mana/C.png b/cardvault/cv_gtk3/resources/mana/C.png
similarity index 100%
rename from cardvault/resources/mana/C.png
rename to cardvault/cv_gtk3/resources/mana/C.png
diff --git a/cardvault/resources/mana/C_alt.png b/cardvault/cv_gtk3/resources/mana/C_alt.png
similarity index 100%
rename from cardvault/resources/mana/C_alt.png
rename to cardvault/cv_gtk3/resources/mana/C_alt.png
diff --git a/cardvault/resources/mana/G-P.png b/cardvault/cv_gtk3/resources/mana/G-P.png
similarity index 100%
rename from cardvault/resources/mana/G-P.png
rename to cardvault/cv_gtk3/resources/mana/G-P.png
diff --git a/cardvault/resources/mana/G-U.png b/cardvault/cv_gtk3/resources/mana/G-U.png
similarity index 100%
rename from cardvault/resources/mana/G-U.png
rename to cardvault/cv_gtk3/resources/mana/G-U.png
diff --git a/cardvault/resources/mana/G-W.png b/cardvault/cv_gtk3/resources/mana/G-W.png
similarity index 100%
rename from cardvault/resources/mana/G-W.png
rename to cardvault/cv_gtk3/resources/mana/G-W.png
diff --git a/cardvault/resources/mana/G.png b/cardvault/cv_gtk3/resources/mana/G.png
similarity index 100%
rename from cardvault/resources/mana/G.png
rename to cardvault/cv_gtk3/resources/mana/G.png
diff --git a/cardvault/resources/mana/G_alt.png b/cardvault/cv_gtk3/resources/mana/G_alt.png
similarity index 100%
rename from cardvault/resources/mana/G_alt.png
rename to cardvault/cv_gtk3/resources/mana/G_alt.png
diff --git a/cardvault/resources/mana/R-G.png b/cardvault/cv_gtk3/resources/mana/R-G.png
similarity index 100%
rename from cardvault/resources/mana/R-G.png
rename to cardvault/cv_gtk3/resources/mana/R-G.png
diff --git a/cardvault/resources/mana/R-P.png b/cardvault/cv_gtk3/resources/mana/R-P.png
similarity index 100%
rename from cardvault/resources/mana/R-P.png
rename to cardvault/cv_gtk3/resources/mana/R-P.png
diff --git a/cardvault/resources/mana/R-W.png b/cardvault/cv_gtk3/resources/mana/R-W.png
similarity index 100%
rename from cardvault/resources/mana/R-W.png
rename to cardvault/cv_gtk3/resources/mana/R-W.png
diff --git a/cardvault/resources/mana/R.png b/cardvault/cv_gtk3/resources/mana/R.png
similarity index 100%
rename from cardvault/resources/mana/R.png
rename to cardvault/cv_gtk3/resources/mana/R.png
diff --git a/cardvault/resources/mana/R_alt.png b/cardvault/cv_gtk3/resources/mana/R_alt.png
similarity index 100%
rename from cardvault/resources/mana/R_alt.png
rename to cardvault/cv_gtk3/resources/mana/R_alt.png
diff --git a/cardvault/resources/mana/S.png b/cardvault/cv_gtk3/resources/mana/S.png
similarity index 100%
rename from cardvault/resources/mana/S.png
rename to cardvault/cv_gtk3/resources/mana/S.png
diff --git a/cardvault/resources/mana/T.png b/cardvault/cv_gtk3/resources/mana/T.png
similarity index 100%
rename from cardvault/resources/mana/T.png
rename to cardvault/cv_gtk3/resources/mana/T.png
diff --git a/cardvault/resources/mana/U-B.png b/cardvault/cv_gtk3/resources/mana/U-B.png
similarity index 100%
rename from cardvault/resources/mana/U-B.png
rename to cardvault/cv_gtk3/resources/mana/U-B.png
diff --git a/cardvault/resources/mana/U-P.png b/cardvault/cv_gtk3/resources/mana/U-P.png
similarity index 100%
rename from cardvault/resources/mana/U-P.png
rename to cardvault/cv_gtk3/resources/mana/U-P.png
diff --git a/cardvault/resources/mana/U-R.png b/cardvault/cv_gtk3/resources/mana/U-R.png
similarity index 100%
rename from cardvault/resources/mana/U-R.png
rename to cardvault/cv_gtk3/resources/mana/U-R.png
diff --git a/cardvault/resources/mana/U.png b/cardvault/cv_gtk3/resources/mana/U.png
similarity index 100%
rename from cardvault/resources/mana/U.png
rename to cardvault/cv_gtk3/resources/mana/U.png
diff --git a/cardvault/resources/mana/U_alt.png b/cardvault/cv_gtk3/resources/mana/U_alt.png
similarity index 100%
rename from cardvault/resources/mana/U_alt.png
rename to cardvault/cv_gtk3/resources/mana/U_alt.png
diff --git a/cardvault/resources/mana/W-B.png b/cardvault/cv_gtk3/resources/mana/W-B.png
similarity index 100%
rename from cardvault/resources/mana/W-B.png
rename to cardvault/cv_gtk3/resources/mana/W-B.png
diff --git a/cardvault/resources/mana/W-P.png b/cardvault/cv_gtk3/resources/mana/W-P.png
similarity index 100%
rename from cardvault/resources/mana/W-P.png
rename to cardvault/cv_gtk3/resources/mana/W-P.png
diff --git a/cardvault/resources/mana/W-U.png b/cardvault/cv_gtk3/resources/mana/W-U.png
similarity index 100%
rename from cardvault/resources/mana/W-U.png
rename to cardvault/cv_gtk3/resources/mana/W-U.png
diff --git a/cardvault/resources/mana/W.png b/cardvault/cv_gtk3/resources/mana/W.png
similarity index 100%
rename from cardvault/resources/mana/W.png
rename to cardvault/cv_gtk3/resources/mana/W.png
diff --git a/cardvault/resources/mana/W_alt.png b/cardvault/cv_gtk3/resources/mana/W_alt.png
similarity index 100%
rename from cardvault/resources/mana/W_alt.png
rename to cardvault/cv_gtk3/resources/mana/W_alt.png
diff --git a/cardvault/resources/mana/X.png b/cardvault/cv_gtk3/resources/mana/X.png
similarity index 100%
rename from cardvault/resources/mana/X.png
rename to cardvault/cv_gtk3/resources/mana/X.png
diff --git a/cardvault/resources/mana/Y.png b/cardvault/cv_gtk3/resources/mana/Y.png
similarity index 100%
rename from cardvault/resources/mana/Y.png
rename to cardvault/cv_gtk3/resources/mana/Y.png
diff --git a/cardvault/resources/mana/Z.png b/cardvault/cv_gtk3/resources/mana/Z.png
similarity index 100%
rename from cardvault/resources/mana/Z.png
rename to cardvault/cv_gtk3/resources/mana/Z.png
diff --git a/cardvault/resources/mana/flip.png b/cardvault/cv_gtk3/resources/mana/flip.png
similarity index 100%
rename from cardvault/resources/mana/flip.png
rename to cardvault/cv_gtk3/resources/mana/flip.png
diff --git a/cardvault/resources/mana/half.png b/cardvault/cv_gtk3/resources/mana/half.png
similarity index 100%
rename from cardvault/resources/mana/half.png
rename to cardvault/cv_gtk3/resources/mana/half.png
diff --git a/cardvault/resources/mana/infinite.png b/cardvault/cv_gtk3/resources/mana/infinite.png
similarity index 100%
rename from cardvault/resources/mana/infinite.png
rename to cardvault/cv_gtk3/resources/mana/infinite.png
diff --git a/cardvault/resources/mana/tap_old.png b/cardvault/cv_gtk3/resources/mana/tap_old.png
similarity index 100%
rename from cardvault/resources/mana/tap_old.png
rename to cardvault/cv_gtk3/resources/mana/tap_old.png
diff --git a/cardvault/resources/mana/untap.png b/cardvault/cv_gtk3/resources/mana/untap.png
similarity index 100%
rename from cardvault/resources/mana/untap.png
rename to cardvault/cv_gtk3/resources/mana/untap.png
diff --git a/cv_gtk3/setting.py b/cardvault/cv_gtk3/setting.py
similarity index 100%
rename from cv_gtk3/setting.py
rename to cardvault/cv_gtk3/setting.py
diff --git a/cardvault/cv_gtk3/signal_handlers/__init__.py b/cardvault/cv_gtk3/signal_handlers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/cv_gtk3/signal_handlers/handlers.py b/cardvault/cv_gtk3/signal_handlers/handlers.py
similarity index 100%
rename from cv_gtk3/signal_handlers/handlers.py
rename to cardvault/cv_gtk3/signal_handlers/handlers.py
diff --git a/cv_gtk3/signal_handlers/menu_bar.py b/cardvault/cv_gtk3/signal_handlers/menu_bar.py
similarity index 100%
rename from cv_gtk3/signal_handlers/menu_bar.py
rename to cardvault/cv_gtk3/signal_handlers/menu_bar.py
diff --git a/cv_gtk3/signal_handlers/search.py b/cardvault/cv_gtk3/signal_handlers/search.py
similarity index 90%
rename from cv_gtk3/signal_handlers/search.py
rename to cardvault/cv_gtk3/signal_handlers/search.py
index f052abc..88788e1 100644
--- a/cv_gtk3/signal_handlers/search.py
+++ b/cardvault/cv_gtk3/signal_handlers/search.py
@@ -1,14 +1,12 @@
import os
from cv_gtk3.card_view import CardView
-from cv_gtk3.setting import GUISettings
-
-from cv_gtk3.gtkui import CardvaultGTK
+from cv_gtk3.gtk_util import GTKUtilities
class SearchPageHandlers:
""" Class for handling Signals from the search page """
- def __init__(self, app: 'CardvaultGTK'):
+ def __init__(self, app):
""" Constructor
:param app: Reference to an CardvaultGTK object
"""
@@ -16,7 +14,7 @@ class SearchPageHandlers:
# Build the card view
overlay = self.app.ui.get_object("searchResults")
- self.card_list = CardView(ui_file=os.path.join(GUISettings.glade_file_path, 'cardtree.glade'), filtered=False)
+ self.card_list = CardView(filtered=False)
self.card_list.set_name("resultsScroller")
# TODO Context menu for card view
# card_list.tree.connect("row-activated", self.on_search_card_selected)
diff --git a/cardvault/resources/cardvault.desktop b/cardvault/resources/cardvault.desktop
deleted file mode 100644
index 3668438..0000000
--- a/cardvault/resources/cardvault.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-[Desktop Entry]
-Version=0.5
-Type=Application
-Name=Card Vault
-Comment=Organize and plan your MTG card collection
-TryExec=cardvault
-Exec=cardvault
-Icon=cardvault
diff --git a/cardvault/resources/cardvault.png b/cardvault/resources/cardvault.png
deleted file mode 100644
index e3f5f70..0000000
Binary files a/cardvault/resources/cardvault.png and /dev/null differ
diff --git a/cv_gtk3/gtk_util.py b/cv_gtk3/gtk_util.py
deleted file mode 100644
index e76ed4d..0000000
--- a/cv_gtk3/gtk_util.py
+++ /dev/null
@@ -1,95 +0,0 @@
-import re
-import os
-from gi.repository import GdkPixbuf
-try:
- from PIL import Image as PImage
-except ImportError as err:
- print('PIL imaging library is not installed')
-
-from cv_engine.util import EngineConfig
-
-
-class GTKUtilities:
- """ Access to image caches and utilities for use in the GTK application """
- # Loaded mana symbols Format: {'B': GDKPixbuf, '3': GDKPixbuf}
- mana_icons = {}
- # Cache for combined mana cost icons
- precon_icon_cache = {}
-
- @staticmethod
- def load_icon_cache(path):
- icons = {}
- if not os.path.isdir(path):
- os.mkdir(path)
- files = os.listdir(path)
- for file in files:
- try:
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.path.join(path, file))
- # Strip filename extension
- icon_name = os.path.splitext(file)[0]
- icons[icon_name] = pixbuf
- except Exception as ex:
- print('Error while loading icon file "{}"'.format(ex))
- return icons
-
- @staticmethod
- def get_mana_icons(mana_string):
- """ Return the combined mana symbols for a mana string
- :param mana_string: String in the format '{3}{U}{B}'
- :return: GdkPixbuf containing the combined symbols
- """
- if not mana_string:
- return
- icon_list = re.findall("{(.*?)}", mana_string.replace("/", "-"))
- icon_name = "_".join(icon_list)
- try:
- icon = GTKUtilities.precon_icon_cache[icon_name]
- except KeyError:
- icon = GTKUtilities.create_mana_icons(mana_string)
- GTKUtilities.precon_icon_cache[icon_name] = icon
- # Scale icon for display
- if icon:
- icon = icon.scale_simple(icon.get_width() / 5, icon.get_height() / 5, GdkPixbuf.InterpType.HYPER)
- return icon
-
- @staticmethod
- def create_mana_icons(mana_string):
- # Convert the string to a List
- glyphs = re.findall("{(.*?)}", mana_string)
- if len(glyphs) == 0:
- return
- # Compute horizontal size for the final image
- size = len(glyphs) * 105
- image = PImage.new("RGBA", (size, 105))
- for index, icon in enumerate(glyphs):
- x_pos = index * 105
- try:
- # Try loading mana icon and converting to PIL.Image for combining
- loaded = GTKUtilities.pixbuf_to_image(GTKUtilities.mana_icons[icon])
- except KeyError:
- print('Mana icon "{}" is not loaded.'.format(icon))
- return
- image.paste(loaded, (x_pos, 0))
- # Save pre build icon file
- path = os.path.join(EngineConfig.icon_cache_path, "_".join(glyphs) + ".png")
- image.save(path)
- try:
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(path)
- except Exception as err:
- print(err)
- return
- return pixbuf
-
- @staticmethod
- def pixbuf_to_image(pix):
- """Convert gdkpixbuf to PIL image"""
- data = pix.get_pixels()
- w = pix.props.width
- h = pix.props.height
- stride = pix.props.rowstride
- mode = "RGB"
- if pix.props.has_alpha:
- mode = "RGBA"
- im = PImage.frombytes(mode, (w, h), data, "raw", mode, stride)
-
- return im
\ No newline at end of file
diff --git a/cardvault/application.py b/legacy/application.py
similarity index 94%
rename from cardvault/application.py
rename to legacy/application.py
index 4989333..248be88 100644
--- a/cardvault/application.py
+++ b/legacy/application.py
@@ -1,5 +1,3 @@
-from collections import OrderedDict
-
import gi
import os
import copy
@@ -56,8 +54,8 @@ class Application:
self.wants = Dict[str, List[Type[mtgsdk.Card]]]
self.load_user_data()
- self.ui.get_object('statusbar_icon').set_from_icon_name(
- util.online_icons[self.is_online()], Gtk.IconSize.BUTTON)
+ self.ui.get_object('statusbar_icon').set_from_icon_name(util.online_icons[self.is_online()],
+ Gtk.IconSize.BUTTON)
self.ui.get_object('statusbar_icon').set_tooltip_text(util.online_tooltips[self.is_online()])
self.handlers = handlers.Handlers(self)
@@ -95,35 +93,34 @@ class Application:
builder.add_from_file(util.get_ui_filename("detailswindow.glade"))
builder.add_from_file(util.get_ui_filename("overlays.glade"))
window = builder.get_object("cardDetails")
- window.set_title(card.name)
+ window.set_title(card.get('name'))
# Card Image
container = builder.get_object("imageContainer")
pixbuf = util.load_card_image(card, 63 * 5, 88 * 5, self.image_cache)
image = Gtk.Image().new_from_pixbuf(pixbuf)
container.add(image)
# Name
- builder.get_object("cardName").set_text(card.name)
+ builder.get_object("cardName").set_text(card.get('name'))
# Types
supertypes = ""
- if card.subtypes is not None:
- supertypes = " - " + " ".join(card.subtypes)
- types = " ".join(card.types) + supertypes
+ if card.get('subtypes'):
+ supertypes = " - " + " ".join(card.get('subtypes'))
+ types = " ".join(card.get('types')) + supertypes
builder.get_object("cardTypes").set_text(types)
# Rarity
- builder.get_object("cardRarity").set_text(card.rarity if card.rarity else "")
+ builder.get_object("cardRarity").set_text(card.get('rarity') or "")
# Release
- builder.get_object("cardReleaseDate").set_text(card.release_date if card.release_date else "")
+ builder.get_object("cardReleaseDate").set_text(card.get('release_date') or "")
# Set
- builder.get_object("cardSet").set_text(card.set_name)
+ builder.get_object("cardSet").set_text(card.get('set_name'))
# Printings
- prints = []
- for set in card.printings:
- prints.append(self.get_all_sets()[set].name)
+ all_sets = self.get_all_sets()
+ prints = [all_sets[set_name].get('name') for set_name in card.get('printings')]
builder.get_object("cardPrintings").set_text(", ".join(prints))
# Legalities
grid = builder.get_object("legalitiesGrid")
rows = 1
- for legality in card.legalities if card.legalities else {}:
+ for legality in card.get('legalities') or {}:
date_label = Gtk.Label()
date_label.set_halign(Gtk.Align.END)
text_label = Gtk.Label()
@@ -140,9 +137,9 @@ class Application:
grid.show_all()
# Rulings
- if card.rulings:
+ if card.get('rulings'):
store = builder.get_object("rulesStore")
- for rule in card.rulings:
+ for rule in card.get('rulings'):
store.append([rule["date"], rule["text"]])
else:
builder.get_object("ruleBox").set_visible(False)
@@ -330,7 +327,7 @@ class Application:
def get_wanted_card_ids(self) -> List[str]:
all_ids = []
for cards in self.wants.values():
- next_ids = [card.multiverse_id for card in cards]
+ next_ids = [card['multiverse_id'] for card in cards]
all_ids = list(set(all_ids) | set(next_ids))
return all_ids
@@ -442,10 +439,7 @@ class Application:
def get_all_sets(self) -> dict:
if not self.is_online():
- l = self.db.set_get_all()
- out = {}
- for s in l:
- out[s.code] = s
+ out = {s['code']: s for s in self.db.set_get_all()}
else:
out = util.load_sets(util.get_root_filename('sets'))
return out
diff --git a/cardvault/cardlist.py b/legacy/cardlist.py
similarity index 73%
rename from cardvault/cardlist.py
rename to legacy/cardlist.py
index 794d3ed..9a74af9 100644
--- a/cardvault/cardlist.py
+++ b/legacy/cardlist.py
@@ -6,7 +6,6 @@ from cardvault import application
from gi.repository import Gtk, GdkPixbuf, Gdk
from typing import Dict, Type
-from mtgsdk import Card
import time
gi.require_version('Gtk', '3.0')
@@ -14,7 +13,7 @@ gi.require_version('Gdk', '3.0')
class CardList(Gtk.ScrolledWindow):
- def __init__(self, filtered, app: 'application.Application', row_colors: Dict[str, str]):
+ def __init__(self, filtered, app, row_colors: Dict[str, str]):
Gtk.ScrolledWindow.__init__(self)
self.set_hexpand(True)
self.set_vexpand(True)
@@ -49,7 +48,7 @@ class CardList(Gtk.ScrolledWindow):
output[card_id] = card
return output
- def update(self, library: Dict[str, Type[Card]]):
+ def update(self, library: Dict[str, dict]):
self.store.clear()
if library is None:
return
@@ -63,22 +62,24 @@ class CardList(Gtk.ScrolledWindow):
all_wants = self.app.get_wanted_card_ids()
for card in library.values():
- if card.multiverse_id is not None:
+ if card['multiverse_id'] is not None:
color = self.get_row_color(card, self.app.library, all_wants, self.row_colors)
- mana_cost = None if card.types.__contains__("Land") else self.app.get_mana_icons(card.mana_cost)
- item = [card.multiverse_id,
- card.name,
- " ".join(card.supertypes if card.supertypes else ""),
- " ".join(card.types),
- card.rarity,
- card.power,
- card.toughness,
- ", ".join(card.printings),
+ mana_cost = None
+ if not card.get('types').__contains__("Land"):
+ mana_cost = self.app.get_mana_icons(card.get('mana_cost'))
+ item = [card['multiverse_id'],
+ card['name'],
+ " ".join(card.get('supertypes') or ""),
+ " ".join(card.get('types') or ""),
+ card.get('rarity'),
+ card.get('power'),
+ card.get('toughness'),
+ ", ".join(card.get('printings') or ""),
mana_cost,
- card.cmc,
- card.set_name,
+ card.get('cmc'),
+ card.get('set_name'),
color,
- card.original_text]
+ card.get('original_text')]
self.store.append(item)
end = time.time()
util.log("Time to build Table: " + str(round(end - start, 3)) + "s", util.LogLevel.Info)
@@ -103,9 +104,9 @@ class CardList(Gtk.ScrolledWindow):
@staticmethod
def get_row_color(card, lib: dict, wants: dict, colors: dict) -> str:
- if lib.__contains__(card.multiverse_id):
+ if lib.__contains__(card.get('multiverse_id')):
return colors["owned"]
- elif wants.__contains__(card.multiverse_id):
+ elif wants.__contains__(card.get('multiverse_id')):
return colors["wanted"]
else:
return colors["unowned"]
diff --git a/cardvault/database.py b/legacy/database.py
similarity index 100%
rename from cardvault/database.py
rename to legacy/database.py
diff --git a/cv_gtk3/gui/cardtree.glade b/legacy/gui/cardtree.glade
similarity index 100%
rename from cv_gtk3/gui/cardtree.glade
rename to legacy/gui/cardtree.glade
diff --git a/cv_gtk3/gui/detailswindow.glade b/legacy/gui/detailswindow.glade
similarity index 100%
rename from cv_gtk3/gui/detailswindow.glade
rename to legacy/gui/detailswindow.glade
diff --git a/cv_gtk3/gui/dialogs.glade b/legacy/gui/dialogs.glade
similarity index 100%
rename from cv_gtk3/gui/dialogs.glade
rename to legacy/gui/dialogs.glade
diff --git a/cv_gtk3/gui/library.glade b/legacy/gui/library.glade
similarity index 100%
rename from cv_gtk3/gui/library.glade
rename to legacy/gui/library.glade
diff --git a/cardvault/gui/mainwindow.glade b/legacy/gui/mainwindow.glade
similarity index 100%
rename from cardvault/gui/mainwindow.glade
rename to legacy/gui/mainwindow.glade
diff --git a/cv_gtk3/gui/overlays.glade b/legacy/gui/overlays.glade
similarity index 100%
rename from cv_gtk3/gui/overlays.glade
rename to legacy/gui/overlays.glade
diff --git a/cardvault/gui/search.glade b/legacy/gui/search.glade
similarity index 100%
rename from cardvault/gui/search.glade
rename to legacy/gui/search.glade
diff --git a/cv_gtk3/gui/wants.glade b/legacy/gui/wants.glade
similarity index 100%
rename from cv_gtk3/gui/wants.glade
rename to legacy/gui/wants.glade
diff --git a/cardvault/handlers.py b/legacy/handlers.py
similarity index 98%
rename from cardvault/handlers.py
rename to legacy/handlers.py
index 8ffe612..e77a6b1 100644
--- a/cardvault/handlers.py
+++ b/legacy/handlers.py
@@ -1,7 +1,7 @@
-import gi
+import math
import sys
-import math
+import gi
gi.require_version('Gtk', '3.0')
import time, datetime
@@ -10,11 +10,9 @@ import threading
from gi.repository import Gtk, GObject
from cardvault import util, application
-from mtgsdk import Card, MtgException
-
-from cardvault.search import SearchHandlers
-from cardvault.library import LibraryHandlers
-from cardvault.wants import WantsHandlers
+from legacy.search import SearchHandlers
+from legacy.library import LibraryHandlers
+from legacy.wants import WantsHandlers
class Handlers(SearchHandlers, LibraryHandlers, WantsHandlers):
@@ -203,7 +201,7 @@ class Handlers(SearchHandlers, LibraryHandlers, WantsHandlers):
self.cancel_token = False
util.log("Download thread ended", util.LogLevel.Info)
- def download_failed(self, err: MtgException):
+ def download_failed(self, err):
# Delete Dialog
self.app.ui.get_object("loadDataDialog").hide()
self.app.push_status("Download canceled")
diff --git a/cardvault/library.py b/legacy/library.py
similarity index 100%
rename from cardvault/library.py
rename to legacy/library.py
diff --git a/cv_gtk3/resources/images/demo.jpg b/legacy/resources/images/demo.jpg
similarity index 100%
rename from cv_gtk3/resources/images/demo.jpg
rename to legacy/resources/images/demo.jpg
diff --git a/cv_gtk3/resources/images/dummy.jpg b/legacy/resources/images/dummy.jpg
similarity index 100%
rename from cv_gtk3/resources/images/dummy.jpg
rename to legacy/resources/images/dummy.jpg
diff --git a/cv_gtk3/resources/images/dummy_315x450.png b/legacy/resources/images/dummy_315x450.png
similarity index 100%
rename from cv_gtk3/resources/images/dummy_315x450.png
rename to legacy/resources/images/dummy_315x450.png
diff --git a/cv_gtk3/resources/mana/0.png b/legacy/resources/mana/0.png
similarity index 100%
rename from cv_gtk3/resources/mana/0.png
rename to legacy/resources/mana/0.png
diff --git a/cv_gtk3/resources/mana/1.png b/legacy/resources/mana/1.png
similarity index 100%
rename from cv_gtk3/resources/mana/1.png
rename to legacy/resources/mana/1.png
diff --git a/cv_gtk3/resources/mana/10.png b/legacy/resources/mana/10.png
similarity index 100%
rename from cv_gtk3/resources/mana/10.png
rename to legacy/resources/mana/10.png
diff --git a/cv_gtk3/resources/mana/11.png b/legacy/resources/mana/11.png
similarity index 100%
rename from cv_gtk3/resources/mana/11.png
rename to legacy/resources/mana/11.png
diff --git a/cv_gtk3/resources/mana/12.png b/legacy/resources/mana/12.png
similarity index 100%
rename from cv_gtk3/resources/mana/12.png
rename to legacy/resources/mana/12.png
diff --git a/cv_gtk3/resources/mana/13.png b/legacy/resources/mana/13.png
similarity index 100%
rename from cv_gtk3/resources/mana/13.png
rename to legacy/resources/mana/13.png
diff --git a/cv_gtk3/resources/mana/14.png b/legacy/resources/mana/14.png
similarity index 100%
rename from cv_gtk3/resources/mana/14.png
rename to legacy/resources/mana/14.png
diff --git a/cv_gtk3/resources/mana/15.png b/legacy/resources/mana/15.png
similarity index 100%
rename from cv_gtk3/resources/mana/15.png
rename to legacy/resources/mana/15.png
diff --git a/cv_gtk3/resources/mana/16.png b/legacy/resources/mana/16.png
similarity index 100%
rename from cv_gtk3/resources/mana/16.png
rename to legacy/resources/mana/16.png
diff --git a/cv_gtk3/resources/mana/17.png b/legacy/resources/mana/17.png
similarity index 100%
rename from cv_gtk3/resources/mana/17.png
rename to legacy/resources/mana/17.png
diff --git a/cv_gtk3/resources/mana/18.png b/legacy/resources/mana/18.png
similarity index 100%
rename from cv_gtk3/resources/mana/18.png
rename to legacy/resources/mana/18.png
diff --git a/cv_gtk3/resources/mana/19.png b/legacy/resources/mana/19.png
similarity index 100%
rename from cv_gtk3/resources/mana/19.png
rename to legacy/resources/mana/19.png
diff --git a/cv_gtk3/resources/mana/2.png b/legacy/resources/mana/2.png
similarity index 100%
rename from cv_gtk3/resources/mana/2.png
rename to legacy/resources/mana/2.png
diff --git a/cv_gtk3/resources/mana/20.png b/legacy/resources/mana/20.png
similarity index 100%
rename from cv_gtk3/resources/mana/20.png
rename to legacy/resources/mana/20.png
diff --git a/cv_gtk3/resources/mana/2b.png b/legacy/resources/mana/2b.png
similarity index 100%
rename from cv_gtk3/resources/mana/2b.png
rename to legacy/resources/mana/2b.png
diff --git a/cv_gtk3/resources/mana/2g.png b/legacy/resources/mana/2g.png
similarity index 100%
rename from cv_gtk3/resources/mana/2g.png
rename to legacy/resources/mana/2g.png
diff --git a/cv_gtk3/resources/mana/2r.png b/legacy/resources/mana/2r.png
similarity index 100%
rename from cv_gtk3/resources/mana/2r.png
rename to legacy/resources/mana/2r.png
diff --git a/cv_gtk3/resources/mana/2u.png b/legacy/resources/mana/2u.png
similarity index 100%
rename from cv_gtk3/resources/mana/2u.png
rename to legacy/resources/mana/2u.png
diff --git a/cv_gtk3/resources/mana/2w.png b/legacy/resources/mana/2w.png
similarity index 100%
rename from cv_gtk3/resources/mana/2w.png
rename to legacy/resources/mana/2w.png
diff --git a/cv_gtk3/resources/mana/3.png b/legacy/resources/mana/3.png
similarity index 100%
rename from cv_gtk3/resources/mana/3.png
rename to legacy/resources/mana/3.png
diff --git a/cv_gtk3/resources/mana/4.png b/legacy/resources/mana/4.png
similarity index 100%
rename from cv_gtk3/resources/mana/4.png
rename to legacy/resources/mana/4.png
diff --git a/cv_gtk3/resources/mana/5.png b/legacy/resources/mana/5.png
similarity index 100%
rename from cv_gtk3/resources/mana/5.png
rename to legacy/resources/mana/5.png
diff --git a/cv_gtk3/resources/mana/6.png b/legacy/resources/mana/6.png
similarity index 100%
rename from cv_gtk3/resources/mana/6.png
rename to legacy/resources/mana/6.png
diff --git a/cv_gtk3/resources/mana/7.png b/legacy/resources/mana/7.png
similarity index 100%
rename from cv_gtk3/resources/mana/7.png
rename to legacy/resources/mana/7.png
diff --git a/cv_gtk3/resources/mana/8.png b/legacy/resources/mana/8.png
similarity index 100%
rename from cv_gtk3/resources/mana/8.png
rename to legacy/resources/mana/8.png
diff --git a/cv_gtk3/resources/mana/9.png b/legacy/resources/mana/9.png
similarity index 100%
rename from cv_gtk3/resources/mana/9.png
rename to legacy/resources/mana/9.png
diff --git a/cv_gtk3/resources/mana/B-G.png b/legacy/resources/mana/B-G.png
similarity index 100%
rename from cv_gtk3/resources/mana/B-G.png
rename to legacy/resources/mana/B-G.png
diff --git a/cv_gtk3/resources/mana/B-P.png b/legacy/resources/mana/B-P.png
similarity index 100%
rename from cv_gtk3/resources/mana/B-P.png
rename to legacy/resources/mana/B-P.png
diff --git a/cv_gtk3/resources/mana/B-R.png b/legacy/resources/mana/B-R.png
similarity index 100%
rename from cv_gtk3/resources/mana/B-R.png
rename to legacy/resources/mana/B-R.png
diff --git a/cv_gtk3/resources/mana/B.png b/legacy/resources/mana/B.png
similarity index 100%
rename from cv_gtk3/resources/mana/B.png
rename to legacy/resources/mana/B.png
diff --git a/cv_gtk3/resources/mana/B_alt.png b/legacy/resources/mana/B_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/B_alt.png
rename to legacy/resources/mana/B_alt.png
diff --git a/cv_gtk3/resources/mana/C.png b/legacy/resources/mana/C.png
similarity index 100%
rename from cv_gtk3/resources/mana/C.png
rename to legacy/resources/mana/C.png
diff --git a/cv_gtk3/resources/mana/C_alt.png b/legacy/resources/mana/C_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/C_alt.png
rename to legacy/resources/mana/C_alt.png
diff --git a/cv_gtk3/resources/mana/G-P.png b/legacy/resources/mana/G-P.png
similarity index 100%
rename from cv_gtk3/resources/mana/G-P.png
rename to legacy/resources/mana/G-P.png
diff --git a/cv_gtk3/resources/mana/G-U.png b/legacy/resources/mana/G-U.png
similarity index 100%
rename from cv_gtk3/resources/mana/G-U.png
rename to legacy/resources/mana/G-U.png
diff --git a/cv_gtk3/resources/mana/G-W.png b/legacy/resources/mana/G-W.png
similarity index 100%
rename from cv_gtk3/resources/mana/G-W.png
rename to legacy/resources/mana/G-W.png
diff --git a/cv_gtk3/resources/mana/G.png b/legacy/resources/mana/G.png
similarity index 100%
rename from cv_gtk3/resources/mana/G.png
rename to legacy/resources/mana/G.png
diff --git a/cv_gtk3/resources/mana/G_alt.png b/legacy/resources/mana/G_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/G_alt.png
rename to legacy/resources/mana/G_alt.png
diff --git a/cv_gtk3/resources/mana/R-G.png b/legacy/resources/mana/R-G.png
similarity index 100%
rename from cv_gtk3/resources/mana/R-G.png
rename to legacy/resources/mana/R-G.png
diff --git a/cv_gtk3/resources/mana/R-P.png b/legacy/resources/mana/R-P.png
similarity index 100%
rename from cv_gtk3/resources/mana/R-P.png
rename to legacy/resources/mana/R-P.png
diff --git a/cv_gtk3/resources/mana/R-W.png b/legacy/resources/mana/R-W.png
similarity index 100%
rename from cv_gtk3/resources/mana/R-W.png
rename to legacy/resources/mana/R-W.png
diff --git a/cv_gtk3/resources/mana/R.png b/legacy/resources/mana/R.png
similarity index 100%
rename from cv_gtk3/resources/mana/R.png
rename to legacy/resources/mana/R.png
diff --git a/cv_gtk3/resources/mana/R_alt.png b/legacy/resources/mana/R_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/R_alt.png
rename to legacy/resources/mana/R_alt.png
diff --git a/cv_gtk3/resources/mana/S.png b/legacy/resources/mana/S.png
similarity index 100%
rename from cv_gtk3/resources/mana/S.png
rename to legacy/resources/mana/S.png
diff --git a/cv_gtk3/resources/mana/T.png b/legacy/resources/mana/T.png
similarity index 100%
rename from cv_gtk3/resources/mana/T.png
rename to legacy/resources/mana/T.png
diff --git a/cv_gtk3/resources/mana/U-B.png b/legacy/resources/mana/U-B.png
similarity index 100%
rename from cv_gtk3/resources/mana/U-B.png
rename to legacy/resources/mana/U-B.png
diff --git a/cv_gtk3/resources/mana/U-P.png b/legacy/resources/mana/U-P.png
similarity index 100%
rename from cv_gtk3/resources/mana/U-P.png
rename to legacy/resources/mana/U-P.png
diff --git a/cv_gtk3/resources/mana/U-R.png b/legacy/resources/mana/U-R.png
similarity index 100%
rename from cv_gtk3/resources/mana/U-R.png
rename to legacy/resources/mana/U-R.png
diff --git a/cv_gtk3/resources/mana/U.png b/legacy/resources/mana/U.png
similarity index 100%
rename from cv_gtk3/resources/mana/U.png
rename to legacy/resources/mana/U.png
diff --git a/cv_gtk3/resources/mana/U_alt.png b/legacy/resources/mana/U_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/U_alt.png
rename to legacy/resources/mana/U_alt.png
diff --git a/cv_gtk3/resources/mana/W-B.png b/legacy/resources/mana/W-B.png
similarity index 100%
rename from cv_gtk3/resources/mana/W-B.png
rename to legacy/resources/mana/W-B.png
diff --git a/cv_gtk3/resources/mana/W-P.png b/legacy/resources/mana/W-P.png
similarity index 100%
rename from cv_gtk3/resources/mana/W-P.png
rename to legacy/resources/mana/W-P.png
diff --git a/cv_gtk3/resources/mana/W-U.png b/legacy/resources/mana/W-U.png
similarity index 100%
rename from cv_gtk3/resources/mana/W-U.png
rename to legacy/resources/mana/W-U.png
diff --git a/cv_gtk3/resources/mana/W.png b/legacy/resources/mana/W.png
similarity index 100%
rename from cv_gtk3/resources/mana/W.png
rename to legacy/resources/mana/W.png
diff --git a/cv_gtk3/resources/mana/W_alt.png b/legacy/resources/mana/W_alt.png
similarity index 100%
rename from cv_gtk3/resources/mana/W_alt.png
rename to legacy/resources/mana/W_alt.png
diff --git a/cv_gtk3/resources/mana/X.png b/legacy/resources/mana/X.png
similarity index 100%
rename from cv_gtk3/resources/mana/X.png
rename to legacy/resources/mana/X.png
diff --git a/cv_gtk3/resources/mana/Y.png b/legacy/resources/mana/Y.png
similarity index 100%
rename from cv_gtk3/resources/mana/Y.png
rename to legacy/resources/mana/Y.png
diff --git a/cv_gtk3/resources/mana/Z.png b/legacy/resources/mana/Z.png
similarity index 100%
rename from cv_gtk3/resources/mana/Z.png
rename to legacy/resources/mana/Z.png
diff --git a/cv_gtk3/resources/mana/flip.png b/legacy/resources/mana/flip.png
similarity index 100%
rename from cv_gtk3/resources/mana/flip.png
rename to legacy/resources/mana/flip.png
diff --git a/cv_gtk3/resources/mana/half.png b/legacy/resources/mana/half.png
similarity index 100%
rename from cv_gtk3/resources/mana/half.png
rename to legacy/resources/mana/half.png
diff --git a/cv_gtk3/resources/mana/infinite.png b/legacy/resources/mana/infinite.png
similarity index 100%
rename from cv_gtk3/resources/mana/infinite.png
rename to legacy/resources/mana/infinite.png
diff --git a/cv_gtk3/resources/mana/tap_old.png b/legacy/resources/mana/tap_old.png
similarity index 100%
rename from cv_gtk3/resources/mana/tap_old.png
rename to legacy/resources/mana/tap_old.png
diff --git a/cv_gtk3/resources/mana/untap.png b/legacy/resources/mana/untap.png
similarity index 100%
rename from cv_gtk3/resources/mana/untap.png
rename to legacy/resources/mana/untap.png
diff --git a/cardvault/search.py b/legacy/search.py
similarity index 97%
rename from cardvault/search.py
rename to legacy/search.py
index 4830eb5..5d8eb17 100644
--- a/cardvault/search.py
+++ b/legacy/search.py
@@ -1,8 +1,10 @@
import time
from urllib.error import URLError, HTTPError
-from mtgsdk import Card
from cardvault import application, cardlist, util
+# Deprecated
+from mtgsdk import Card
+
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
@@ -189,8 +191,8 @@ class SearchHandlers:
name = self.app.ui.get_object("setEntry").get_text()
output["set"] = ""
for mtgset in self.app.get_all_sets().values():
- if mtgset.name == name:
- output["set"] = mtgset.code
+ if mtgset['name'] == name:
+ output["set"] = mtgset['code']
return output
def search_cards(self, term: str, filters: dict) -> dict:
@@ -220,6 +222,7 @@ class SearchHandlers:
.where(rarity=filters["rarity"]) \
.where(pageSize=50) \
.where(page=1).all()
+ cards = [card.__dict__ for card in cards]
end = time.time()
util.log("Card info fetched in {}s".format(round(end - start, 3)), util.LogLevel.Info)
except (URLError, HTTPError) as err:
@@ -235,10 +238,7 @@ class SearchHandlers:
return {}
util.log("Found " + str(len(cards)) + " cards", util.LogLevel.Info)
- output = {}
- for card in cards:
- output[card.multiverse_id] = card
- return output
+ return {card['multiverse_id']: card for card in cards}
# ---------------------------------Search Tree----------------------------------------------
@@ -312,8 +312,8 @@ class SearchHandlers:
unique_names = []
# Reverse cardlist so we get the version with the most modern art
for card in reversed(cards):
- if card.name not in unique_names:
- unique_names.append(card.name)
+ if card['name'] not in unique_names:
+ unique_names.append(card['name'])
unique_cards.append(card)
return unique_cards
@@ -334,7 +334,7 @@ class SearchHandlers:
""" Initialize model for set entry """
set_store = Gtk.ListStore(str, str)
for mtgset in self.app.get_all_sets().values():
- set_store.append([mtgset.name, mtgset.code])
+ set_store.append([mtgset.get('name'), mtgset.get('code')])
completer = Gtk.EntryCompletion()
completer.set_model(set_store)
completer.set_text_column(0)
diff --git a/cardvault/util.py b/legacy/util.py
similarity index 94%
rename from cardvault/util.py
rename to legacy/util.py
index a3bac28..07d3510 100644
--- a/cardvault/util.py
+++ b/legacy/util.py
@@ -255,7 +255,7 @@ def net_load_set_list() -> dict:
except MtgException as err:
log(str(err), LogLevel.Error)
return {}
- return sets
+ return [set.__dict__ for set in sets]
def load_sets(filename: str) -> dict:
@@ -272,8 +272,8 @@ def load_sets(filename: str) -> dict:
sets = pickle.load(open(filename, 'rb'))
# Sort the loaded sets based on the sets name
output = {}
- for set in sorted(sets, key=lambda x: x.name):
- output[set.code] = set
+ for set in sorted(sets, key=lambda x: x.get('name')):
+ output[set.get('code')] = set
return output
@@ -343,23 +343,23 @@ def load_dummy_image(size_x: int, size_y: int) -> GdkPixbuf:
+ '/resources/images/dummy.jpg', size_x, size_y)
-def load_card_image(card: Card, size_x: int, size_y: int, cache: dict) -> GdkPixbuf:
+def load_card_image(card: dict, size_x: int, size_y: int, cache: dict) -> GdkPixbuf:
""" Retrieve an card image from cache or alternatively load from gatherer"""
try:
- image = cache[card.multiverse_id]
+ image = cache[card.get('multiverse_id')]
except KeyError:
- log("No local image for " + card.name + ". Loading from " + card.image_url, LogLevel.Info)
+ log("No local image for " + card.get('name') + ". Loading from " + card.get('image_url'), LogLevel.Info)
filename, image = net_load_card_image(card, size_x, size_y)
- cache[card.multiverse_id] = image
+ cache[card.get('multiverse_id')] = image
return image
-def net_load_card_image(card, size_x: int, size_y: int) -> (str, GdkPixbuf):
- url = card.image_url
+def net_load_card_image(card: dict, size_x: int, size_y: int) -> (str, GdkPixbuf):
+ url = card.get('image_url')
if url is None:
- log("No Image URL for " + card.name, LogLevel.Warning)
+ log("No Image URL for " + card.get('name'), LogLevel.Warning)
return load_dummy_image(size_x, size_y)
- filename = IMAGE_CACHE_PATH + str(card.multiverse_id) + ".png"
+ filename = IMAGE_CACHE_PATH + str(card.get('multiverse_id')) + ".png"
request.urlretrieve(url, filename)
return filename, GdkPixbuf.Pixbuf.new_from_file_at_size(filename, size_x, size_y)
diff --git a/cardvault/wants.py b/legacy/wants.py
similarity index 100%
rename from cardvault/wants.py
rename to legacy/wants.py
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 224f8b7..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[install]
-single-version-externally-managed=1
-record=install.txt
\ No newline at end of file
diff --git a/setup.py b/setup.py
deleted file mode 100755
index 3ffdb81..0000000
--- a/setup.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from setuptools import setup, find_packages
-from cardvault import util
-
-try:
- LONG_DESCRIPTION = open("README.md").read()
-except IOError:
- LONG_DESCRIPTION = __doc__
-
-
-setup(
- name=util.APPLICATION_TITLE,
- version=util.VERSION,
- packages=find_packages(),
-
- package_data={'cardvault': ['resources/images/*', 'resources/mana/*', 'gui/*']},
-
- data_files=[
- ('share/icons/hicolor/scalable/apps', ['cardvault/resources/cardvault.png']),
- ('share/applications', ['cardvault/resources/cardvault.desktop'])],
-
- author='luxick',
- author_email='cardvoult@luxick.de',
- description='Managing MTG card libraries and decks',
- long_description=LONG_DESCRIPTION,
- url='https://github.com/luxick/cardvault',
- keywords='card manager, gtk, MTG, Magic the Gathering',
- license="MIT",
- entry_points={
- 'gui_scripts': [
- 'cardvault = cardvault.application:main',
- ]
- },
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: End Users/Desktop',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
- 'Programming Language :: Python :: 3.5',
- 'License :: OSI Approved :: MIT License',
- ], install_requires=['gi', 'pillow', 'six', 'mtgsdk', 'jsonpickle']
-)