From 7e2e2156c27f396f6f8a5ba0b3c3f481e49c2a1d Mon Sep 17 00:00:00 2001 From: Hydrus Date: Wed, 22 Apr 2015 17:57:25 -0500 Subject: [PATCH] Version 154 --- help/Database Diagrams - Old.svg | 2308 ------------------- help/Database Diagrams.svg | 3107 -------------------------- help/account_registration.png | Bin 22267 -> 0 bytes help/changelog.html | 53 + help/client_autism.png | Bin 405345 -> 0 bytes help/client_autism_small.png | Bin 40004 -> 0 bytes help/client_auto.png | Bin 290326 -> 0 bytes help/client_auto_small.png | Bin 49000 -> 0 bytes help/client_database_diagram.dia | Bin 6519 -> 0 bytes help/client_database_diagram.dia~ | Bin 6519 -> 0 bytes help/client_database_diagram.png | Bin 197861 -> 0 bytes help/client_empty.png | Bin 36728 -> 0 bytes help/client_empty_small.png | Bin 9318 -> 0 bytes help/client_fullscreen.png | Bin 593363 -> 0 bytes help/client_fullscreen_small.png | Bin 51445 -> 0 bytes help/db_diagrams.html | 16 - help/example_lib.png | Bin 2341605 -> 0 bytes help/future.html | 50 - help/lib_gc.png | Bin 220587 -> 0 bytes help/lib_gc_small.png | Bin 33521 -> 0 bytes help/lib_party_hard.png | Bin 115711 -> 0 bytes help/lib_party_hard_small.png | Bin 66843 -> 0 bytes help/lib_rec.png | Bin 979444 -> 0 bytes help/lib_rec_small.png | Bin 85139 -> 0 bytes help/linux.html | 33 - help/registration_keys.html | 20 - help/running_from_source.html | 2 +- help/server_database_diagram.dia | Bin 4453 -> 0 bytes help/server_database_diagram.dia~ | Bin 4384 -> 0 bytes help/server_database_diagram.png | Bin 156989 -> 0 bytes help/tag_example_five_star.png | Bin 243536 -> 0 bytes help/tag_example_five_star_small.png | Bin 96158 -> 0 bytes include/ClientController.py | 15 +- include/ClientDB.py | 2775 +++++++++++------------ include/ClientDaemons.py | 4 +- include/ClientData.py | 172 ++ include/ClientDefaults.py | 22 +- include/ClientGUI.py | 39 +- include/ClientGUICanvas.py | 604 +++-- include/ClientGUICommon.py | 10 - include/ClientGUIDialogs.py | 376 ++-- include/ClientGUIDialogsManage.py | 337 +-- include/ClientGUIMedia.py | 34 +- include/ClientGUIMixins.py | 744 ------ include/ClientGUIPages.py | 5 +- include/ClientGUIPredicates.py | 92 +- include/ClientParsers.py | 64 - include/HydrusConstants.py | 2 +- include/HydrusController.py | 3 +- include/HydrusDB.py | 299 +++ include/HydrusData.py | 40 +- include/HydrusDownloading.py | 1977 ---------------- include/HydrusFileHandling.py | 7 - include/HydrusGlobals.py | 2 + include/HydrusImageHandling.py | 91 - include/HydrusSerialisable.py | 75 + include/HydrusSerialisableFactory.py | 74 - include/HydrusServerResources.py | 14 +- include/HydrusTags.py | 10 +- include/Puncher.py | 199 -- include/ServerConstants.py | 63 - include/ServerDB.py | 752 +++---- include/TestDB.py | 55 +- include/TestHydrusDownloading.py | 387 ---- include/TestObjects.py | 240 -- include/TestServer.py | 484 ---- include/magic/__init__.py | 0 include/magic/convert.py | 241 -- include/magic/magic.py | 791 ------- include/pyconfig.h | 9 + static/archive.png | Bin 0 -> 756 bytes static/delete.png | Bin 0 -> 587 bytes static/first.png | Bin 0 -> 522 bytes static/fullscreen_switch.png | Bin 0 -> 418 bytes static/last.png | Bin 0 -> 524 bytes static/next.png | Bin 0 -> 395 bytes static/previous.png | Bin 0 -> 389 bytes static/to_inbox.png | Bin 0 -> 761 bytes static/zoom_in.png | Bin 0 -> 680 bytes static/zoom_out.png | Bin 0 -> 657 bytes static/zoom_switch.png | Bin 0 -> 615 bytes 81 files changed, 3070 insertions(+), 13627 deletions(-) delete mode 100755 help/Database Diagrams - Old.svg delete mode 100755 help/Database Diagrams.svg delete mode 100755 help/account_registration.png delete mode 100755 help/client_autism.png delete mode 100755 help/client_autism_small.png delete mode 100755 help/client_auto.png delete mode 100755 help/client_auto_small.png delete mode 100644 help/client_database_diagram.dia delete mode 100644 help/client_database_diagram.dia~ delete mode 100755 help/client_database_diagram.png delete mode 100755 help/client_empty.png delete mode 100755 help/client_empty_small.png delete mode 100755 help/client_fullscreen.png delete mode 100755 help/client_fullscreen_small.png delete mode 100755 help/db_diagrams.html delete mode 100755 help/example_lib.png delete mode 100755 help/future.html delete mode 100755 help/lib_gc.png delete mode 100755 help/lib_gc_small.png delete mode 100755 help/lib_party_hard.png delete mode 100755 help/lib_party_hard_small.png delete mode 100755 help/lib_rec.png delete mode 100755 help/lib_rec_small.png delete mode 100644 help/linux.html delete mode 100755 help/registration_keys.html delete mode 100644 help/server_database_diagram.dia delete mode 100644 help/server_database_diagram.dia~ delete mode 100755 help/server_database_diagram.png delete mode 100755 help/tag_example_five_star.png delete mode 100755 help/tag_example_five_star_small.png delete mode 100755 include/ClientGUIMixins.py delete mode 100755 include/ClientParsers.py create mode 100644 include/HydrusDB.py delete mode 100644 include/HydrusDownloading.py create mode 100644 include/HydrusSerialisable.py delete mode 100644 include/HydrusSerialisableFactory.py delete mode 100644 include/Puncher.py delete mode 100644 include/ServerConstants.py delete mode 100644 include/TestHydrusDownloading.py delete mode 100644 include/TestObjects.py delete mode 100644 include/TestServer.py delete mode 100644 include/magic/__init__.py delete mode 100644 include/magic/convert.py delete mode 100644 include/magic/magic.py create mode 100644 static/archive.png create mode 100644 static/delete.png create mode 100644 static/first.png create mode 100644 static/fullscreen_switch.png create mode 100644 static/last.png create mode 100644 static/next.png create mode 100644 static/previous.png create mode 100644 static/to_inbox.png create mode 100644 static/zoom_in.png create mode 100644 static/zoom_out.png create mode 100644 static/zoom_switch.png diff --git a/help/Database Diagrams - Old.svg b/help/Database Diagrams - Old.svg deleted file mode 100755 index 3fabf02e7..000000000 --- a/help/Database Diagrams - Old.svg +++ /dev/null @@ -1,2308 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - accounts - - - - mappings - - - - bans - - - - petitions - - - - reasons - - - - deleted_mappings - - - - - - - - - tags - - - - - hashes - - - - - - - - - - - - - - - - - - - - - - - - - - - - tags - - - - namespaces - - - - public_mappings - - - - local_files - - - - local_thumbnails - - - - local_thumbnails_resized - - - - reasons - - - - remote_files - - - - remote_thumbnails - - - - remote_thumbnails_resized - - - - file_repositories - - - - file_repository_news - - - - pending_file_petitions - - - - pending_public_mapping_petitions - - - - pending_files - - librarium - file repository - - - accounts - - - - local_files - - - - options - - - - update_cache - - - - news - - - - bans - - - - petitions - - - - thumbnails - - - - reasons - - - - deleted_files - - - - - - - - - - options - - - - deleted_remote_files - - - - - file_downloads - - - - - version - - - - public_tag_repository - - - - public_tag_repository_news - - - - - ip_addresses - - - - deleted_local_files - - - - hashes - - - - - - - - - version - - - - hashes - - - - - hydrus repository - - - - options - - - - update_cache - - - - news - - - - version - - hydrus repository - tag repository - - - files - - - - - - files - - - - - - - - pending_public_mappings - - - - deleted_public_mappings - - - - diff --git a/help/Database Diagrams.svg b/help/Database Diagrams.svg deleted file mode 100755 index 485e2015a..000000000 --- a/help/Database Diagrams.svg +++ /dev/null @@ -1,3107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - server - - - - - - - - - - - - - - - - - - - - - - - - - - - - - account_map - - - - account_scores - - - - files_info - - - - mapping_petitions - - - - thumbnails - - - - account_type_map - - - - bans - - - - reasons - - - - tags - - - - version - - - - files - - - - services - - - - hashes - - - - ip_addresses - - - - mappings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deleted_mappings - - - - account_types - - - - update_cache - - - - news - - - - accounts - - - - deleted_files - - - - file_map - - - - file_petitions - - - - - message_statuses - - - - messages - - - - - - - tags - - - - namespaces - - - - reasons - - client - - - options - - - - version - - - - hashes - - - - files - - - - - addresses - - - - accounts - - - - repositories - - - - services - - - - news - - - - deleted_mappings - - - - mapping_petitions - - - - deleted_files - - - - files_info - - - - file_transfers - - - - file_inbox - - - - thumbnails - - - - thumbnails_resized - - - - - - - - - - - - pending_mappings - - - - mappings - - - - service_info - - - - tag_service_precedence - - - - - message_depots - - - - message_keys - - - - message_attachments - - - - message_inbox - - - - statuses - - - - contacts - - - - message_downloads - - - - message_drafts - - - - messages - - - - message_statuses_to_apply - - - - - - - - - - - - - - - - - - message_destination_map - - - - - - file_petitions - - - - - message_bodies - - - - conversation_subjects - - - - - - - active_mappings - - - - autocomplete_tags_cache - - - - - - - active_pending_mappings - - - - boorus - - - - autocomplete_tags_cache - - - - - - favourite_custom_filter_actions - - - - hydrus_sessions - - - - - imageboard_sites - - - - imageboards - - - - diff --git a/help/account_registration.png b/help/account_registration.png deleted file mode 100755 index b3333d6e08a1d05cb189eb4df99aa6d5b41060a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22267 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

changelog