@startuml

title lscat and data


abstract class lscat.Display <<(A, red)>>{
    ..Required behaviour..
    +show()
    +show_center()
    +hide()
    ..Common behaviour..
    +show_user_row()
    +show_row()
    +hide_all()
}

class lscat.Pixcat {
    ..Implements..
    +show()
    +show_center()
    +hide()
}

class lscat.Ueberzug {
    ..Unique..
    +__init__()
    ..Implements..
    +show()
    +show_center()
    +hide()
}

lscat.Display <-- lscat.Pixcat
lscat.Display <-- lscat.Ueberzug


abstract class lscat.AbstractTracker <<(A, red)>>{
    ..Required attributes..
    - {abstract} orders
    - {abstract} generator
    ..Common behaviors..
    +update()
    -_inspect()
}
class lscat.TrackDownloads {
    ..Implements..
    - orders
    - generator
}
class lscat.TrackDownloadsUser {
    ..Implements..
    - orders
    - generator
}
class lscat.TrackDownloadsImage {
    ..Implements..
    - orders
    - generator
    ..Overrides..
    -_inspect()
}

lscat.AbstractTracker <-- lscat.TrackDownloadsUser
lscat.AbstractTracker <-- lscat.TrackDownloads
lscat.AbstractTracker <-- lscat.TrackDownloadsImage
lscat.AbstractTracker *.. lscat.Display

ui.AbstractUsers *.up.. lscat.TrackDownloadsUser
ui.AbstractGallery *.up.. lscat.TrackDownloads
ui.Image *.up.. lscat.TrackDownloadsImage


package lscat {
    object generate_page
    object generate_users
    object generate_users_ueberzug
    object generate_previews
}

generate_users ...* lscat.TrackDownloadsUser
generate_users_ueberzug ...* lscat.TrackDownloadsUser
generate_page ...* lscat.TrackDownloads
generate_previews ...* lscat.TrackDownloadsImage



abstract class data.AbstractData <<(A, red)>>{
    ..Required methods..
    +{abstract}update()
    +{abstract}artist_user_id()
    ..Required properties..
    +{abstract} next_url
    +{abstract} all_urls
    +{abstract} all_names
    ..Common attributes..
    +main_path
    +offset
    +page_num
    +all_pages_cache
    +is_immediate_next
    ..Common methods..
    +clone_with_page()
    +download_path()
    +next_offset()
    +urls_as_names()
    +newnames_with_ext()
}
class data.GalleryData {
    ..Implements..
    +update()
    +artist_user_id()
    + next_url
    + all_urls
    + all_names
    ..Unique..
    + current_illusts
    +post_json()
    +image_id()
    +url()
}

class data.UserData {
    ..Implements..
    +update()
    +artist_user_id()
    + next_url
    + all_urls
    + all_names
    ..Unique..
    + names
    + profile_pic_urls
    + image_urls
    -iterate_cache()
    + splitpoint
}

class data.ImageData {
    + image_id
    + artist_illust_id
    + page_num
    + firstmode
    + page_urls
    + number_of_pages
    + download_path
    + current_url
    + next_img_url
    + image_filename
    + filepath
    + large_filename
}

data.GalleryData -down-* ui.AbstractGallery
data.ImageData <-up- ui.Image
data.UserData -down-* ui.AbstractUsers

data.GalleryData <-- data.AbstractData
data.UserData <-- data.AbstractData

@enduml
