RMuseum User login/logout/register/... login loginViewModel LoggedOnUserModel renew an expired session user session id LoggedOnUserModel options service constructor get all published artifacts (including CoverImage info but not items info) get list of artifact statuses user can see get all artifacts visible by user (including CoverImage info but not items info) gets specified publish artifact info (including CoverImage + images) remove unpublished artifact having no notes and not bookmarked gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag gets specified publish artifact info (including CoverImage + images) gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag edit artifactt master record (user should have additional permissions artifact:awaiting and artifact:publish to change status of artifact) editing related collections such as images and attributed or complex properties such as CoverImage is ignored Set Artifact Cover Item Index get tag bundle by frindly url add new tag only name is processed get all tags edit tag editable fields are limited changes order of tags based on their position in artifacts up / down the other tag which its Order got replaced with the input id changes order of tags based on their position in artifact items up / down the other tag which its Order got replaced with the input id get tag value bundle by frindly url get tag value by frindly url add new tag value to artifact only name is processed edit artifact attribute value editable fields are limited apply on all same value tags remove tag from artifact add new tag value to item only name is processed edit item attribute value editable fields are limited apply on all same value tags remove tag from item changes order of tag values based on their position in an artifact up / down the other tag which its Order got replaced with the input id changes order of tag values based on their position in an item up / down the other tag which its Order got replaced with the input id gets specified publish artifact item info (including images + attributes) gets specified publish artifact item info (including images + attributes) Add new artifact (multipart/form-data) const data = new FormData(); data.append('name', 'تست'); data.append('description', ''); data.append('srcUrl', ''); data.append('picTitle', 'تست'); data.append('picDescription', ''); data.append('file', this.file); data.append('picSrcUrl', ''); import from external resources pdf/loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append 119/foldername golestan-baysonghori/artifact id keep alive (for import background service) true retry import due to a bug in loc json outputs some artifacts with more than 1000 pages were downloaded incompletely 123456 bookmark artifact bookmark item item bookmarks info fav artifact fav item artifact bookmarks info item bookmarks info user bookmarks user favorites add note for artifact add note for artifact item Edit User Notes a note can not be edited by a user other than its owner or another using having note:moderate permission only htmlContent is processed delete user notes 1. a note can not be deleted by a user other than its owner or another using having note:moderate permission 2. all notes which have refernce to deleting note (sent in reply to it) would be deleted irrelevant of their ownership list of notes deleted get private notes for artifact get private notes for artifact get private notes for artifact item get public notes for artifact item user public notes user public notes all users public notes report a public note id of saved report Get a list of reported notes delete a report for abuse in public user notes delete a reported user note (accept the complaint) suggest ganjoor link get suggested ganjoor links finds next unsynchronized suggested link with an aleady synched one from the artificat if exists, return value might be null or an array with length 1 or 2 (has paging-headers) has paging-headers return value might be null or an array with length 1 or 2 review suggested ganjoor link mark suggested ganjoor link as synchronized display ogn page toc / temporary one time api / to be removed get suggested pinterest links suggest pinterest link for ganjoor review suggested ganjoor pinterest link mark suggested pinterest ganjoor link as synchronized start filling GanjoorLink table OriginalSource values start removing original images search artifacts search artifact items start setting an artifact items as a category poems text original source upload artifact to external server readonly mode constructor Artifact Service IUserPermissionChecker instance IMemoryCache Captcha service IAppUserService instance Configuration Audit Log Controller Base constructor returns all donations donation by id add donation + regenerate donations page update donation date and donorname + regenerate donations page delete donation + regenerate donations page returns all expenses expense by id add expense + regenerate donations page update expense date and description + regenerate donations page delete expense one time import regenerate donations page is account info settings is on or off (for deciding to regenerate donations page based on it) donation service queued ftp uploads process ftp queue reset ftp queue FTP Service constructor get published categories get all categories get category by id add a new faq category update an existing faq category delete a faq category get published pinned items get published category items get all category items get item by id get published item by id add a new faq item update an existing faq item delete a faq item FAQ Service constructor get list of published poets without their biography gets list of poets grouped by centuries (first one is the pinned ones) get list of all poets (including unpublished ones) with their bio poet by id poet by url update poet info (except for image) regenerate half centuries create new poet starts deleting poet job get poet image with png ext sample: hafez get poet image sample: hafez set poet image poet image cat by id cat by full url set category extra info only RImageId field is valid generate missing book covers list of books batch rename cat poems batch resulg category poems set category poems language tag set category poems language tag fill missing poem formats start assigning poem rhythms delete a category Start Finding Missing Rhythms generate category toc directly insert generated TOC start generating sub cats TOC regenerate TOCs page by url modify page modify poem => only these fields: NoIndex, RedirectFromFullUrl, MixedModeOrder clean cache by id delete page older versions of a page (modifications history except for current version) get old version of page page url by id get redirect url for a url get poem by id not implemented yet next/previous get poem verses by id get poem by url not implemented yet not implemented yet not implemented yet next/previous get poem recitations (PlainText/HtmlText are intentionally empty) get user upvoted recitations of a poem get poem images (PlainText/HtmlText are intentionally empty) get poem songs Get Poem Comments Get Section Related ones zero or less than it means all find poem section rhyming letters delete a poem section (section should not be linked to a poem verse of types other than paragraphs or comments) delete a poem send poem corrections delete unreviewed user corrections for a poem returns last unreviewed correction from the user for a poem get list of user suggested corrections get list of all suggested corrections userId effective corrections for poem get correction by id get next unreviewed correction moderate poem correction break a poem from a verse forward id of new poem suggest song for poem get next unreviewed song get song by id history of suggested songs by a user user suggested songs review song modify a published song delete a poem song by id directly insert a poem related song get a random poem from hafez get a random poem from a poet (c.ganjoor.net replacement), 0 means random poet, حافظ (2)، خیام (3)، ابوسعید ابوالخیر (26)، صائب (22)، سعدی (7)، باباطاهر (28)، مولوی (5)، اوحدی (19)، خواجو (20)، شهریار (35)، عراقی (21)، فروغی بسطامی (32)، سلمان ساوجی (40)، محتشم کاشانی (29)، امیرخسرو دهلوی (34)، سیف فرغانی (31)، عبید زاکانی (33)، هاتف اصفهانی (25) یا رهی معیری (41) get recent comments get logged on users recent comments get awaiting comments delete awaiting comment publish awaiting comment post new comment edit user's own comment link or unlink user's own comment to a coupletIndex couplet summary for linked comment delete user's own comment report a comment id of reported record delete a report (without deleting corresponding comment) get list of reported comments delete reported other users comment imports data from ganjoor SQLite database (form file) import category data from ganjoor SQLite database (form file) Apply corrections from sqlite export a poet to sqlite database start exporting all poets Get user public profile Get Similar Poems accroding to prosody and rhyme informations cannot be empty can be empty send 0 for all send 0 for all return value is not complete or valid for some parts, you should use only the valid parts! language tagged poem sections fa-IR, ar, ... 0 means all poets search returns ganjoor metre list ordered by rhythm find poem rhyme analysis poem to find its prosody information examine site pages for broken links examine comments for long links start filling poems couplet indices regenerate poem full titles to fix an old bug start finding rhymes separate verses in poem.PlainText with Environment.NewLine instead of SPACE if it is 0 it is ignored start building sitemap regenerate stats page start updating mundex page switch bookmark if you send a negative number it means you are trying to bookmark a comment switch bookmark and return bookmark id ('0' for switching off a bookmark) if you send a negative number it means you are trying to bookmark a comment Bookmark couplet if it is not delete bookmark modify bookmark private note get poem user bookmarks (only Id, CoupletIndex and DateTime are valid in the output view model) is the poem couplet is bookmarked by user user bookmarks a phrase to be searched through user private notes start generating related sections info for wholepoem sections get next ganjoor poem probable metre get a list of ganjoor poems probable metres save ganjoor poem probable metre dismiss ganjoor poem probable metre Finding Category Poems Duplicates manually add a duplicate for a poems delete a duplicate list of category saved duplicated poems start removing category duplicates get couplet sections get all poem sections regenerate poem sections (dangerous: wipes out existing data) update related sections manually regenerate category related sections category id get a specific poem section start band couplets fix returns last unreviewed correction from the user for a section section id send a correction for a section moderate poem section correction delete unreviewed user corrections for a poem section get section correction by id get next unreviewed correction for poem sections get list of user suggested corrections get list of all suggested corrections effective corrections for section transfer poems and sections from a meter to another one and delete the source meter get poem tags ordered by LunarDateTotalNumber then by Id add poem geo tag update poem tag delete poem tag get a categoty poem tags synchronize https:://naskban.ir links (logs in and then out to naskban.ir using auth info) number of synched links extracting quoted poems regenerate related poems pages get quoted poems for a poem two poems quoted records get quoted poems get quoted by id insert quoted update quoted delete quoted readonly mode Ganjoor Service IAppUserService instance for client IP resolution Image Service IMemoryCache aggressive cache Configuration constructor returns list of suggested photos for a poet poet id returns a single suggested photo return the next unpublished suggested line for poets add a suggestion for poets photos (send form) with these fields: poetId, title, description, srcUrl and an image attachment modify a suggestion for poets photos reject a suggestion for poets photos delete published suggested photo Poets Photos Service constructor returns list of suggested spec lines for a poet poet id returns specific suggested line for poets return the next unpublished suggested line for poets add a suggestion for poets spec lines modify a suggestion for poets spec lines reject a suggestion for poets spec lines delete published suggested spec line Ganjoor Service constructor get all locations get location by id add new location update an existing location readonly mode Configuration location service constructor returns image stream with image/jpeg MIME type returns image stream with image/webp MIME type Rotate Image in 90 deg. multiplicants: 90, 180 or 270 Generate Cropped Image Based On ThumbnailCoordinates For Notes id of cropped image constructor Artifact Service golha collection programs collection id program tracks Catalogue Service constructor Notifications controller constructor get all numberings get numbering by id get all numberings related to a category category id get all numbering patterns for a couplet add new numbering update an existing numbering recount a numbering generate missing default numberings and start counting readonly mode Configuration numbering service constructor returns paginated published recitations (if poetId or catId is non-zero its ordered by poemId ascending if not it is ordered by publish date descending) if PageSize is -1 or is more than 1000 it resets to 1000 empty: no search term, non-empty: searches within AudioArtist, AudioTitle, poem.FullTitle and poem.PlainText simultaneously get published recitation by id creates an RSS file from recent published recitations Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations default: false, user must have recitation::moderate permission to be able to see all users narrations default: -1, unfiltered additional headers: paging-headers, audio-upload-enabled get the corresponding mp3 file for the narration it could be protected (Authorized), but I guess I would have problems with available client components support, so I preferred it to be anonymous, as it does not harm anybody I guess get the corresponding xml file contents (xml) for the narration it could be protected (Authorized), but I guess I would have problems with available client components support, so I preferred it to be anonymous, as it does not harm anybody I guess get the corresponding xml file for the recitation it could be protected (Authorized), but I guess I would have problems with available client components support, so I preferred it to be anonymous, as it does not harm anybody I guess Gets Verse Sync Information narration id updates narration metadata reviewstatus cannot be set to Approved or Rejected using this method, use moderate method instead only these set of fields are updatable: AudioTitle, AudioArtist, AudioArtistUrl, AudioSrc, AudioSrcUrl, ReviewStatus (Draft to Pending and vice versa and Approved/Rejected to Pending) only narrator or a moderator can update the narration Moderate pending narration (for moderating other users' recitations you also need recitation:moderate permission) Delete a recitation Get User Uploads default: false, user must have recitation::moderate permission to be able to see all users uploads additional headers: paging-headers, audio-upload-enabled upload, update, moderate and delete operations on recitations might temporarily become disabled, this method gets the current status remarks: the value of this flag is provided as a custom header called audio-upload-enabled in some common GET methods in order to reduce the need for a separate query Reciation Upload if you send true to replace parameter, if there is an existing recitation for the poem from the user with the same Audio Artist name corresponding mp3+xml files are replaced an no other changes is applied (no new post, preserving recitation position) Get User Profiles Get User Default Profile Add a narration profile Update a narration profile Delete a narration profile publishing tracker data Transfer Recitations Ownership (for recitations owned by current user) number of transfered items Synchronization Queue report an error in a recitation get errors reported for recitations reject a reported error for recitations and notify the reporter (and deletes the report) accepts a reported error for recitations, change status of the recitation to rejected and notify the reporter and recitation owner (and deletes the report) accepts a reported error for recitations, add mistake to approve the mistake and notify the reporter and recitation owner (and deletes the report) remove approved mistake up vote a recitation revoke recitaion up vote revoke recitaion up vote get user upvoted recitations compute poem recitations order (no update) starts checking recitaions with missing files and add them to reported errors list job retry publish unpublished narrations Makes recitations of فریدون فرح‌اندوز first recitations get category top one recitations check if a category has any recitations rss for category top one recitations readonly mode constructor Artifact Service IUserPermissionChecker instance IAppUserService instance Configuration options constructor Generic Image Provider constructor Long Running Jobs constructor roles constructor add site banner (send form) with these fields: alt, url and an image attachment modify site banner delete site banner get all defined site banners get a random active site banner Ganjoor Service constructor get all languages get language by id add new language update an existing language get published poem translations get published poem translation in a specific language get all translations of a poem in a specific language send -1 for all languages last language user has contributed in its translation add translation for a poem (please specify verses VORder, Id is not processed) get all poem translations (for export utility) get translation by id readonly mode translation service Configuration constructor user visits tracking controller get user history add a user history track delete a user history track start or stop tracking user User Visits Tracking Service constructor Museum Database Context Picture Files Item Attributes Artifacts Items Import Jobs Tags User Bookmarks User Notes Ganjoor Links Pinterest Links Ganjoor Audio Files Upload Sessions Uploaded files User Recitation Profiles Ganjoor Poets Ganjoor Categories Ganjoor Poems Ganjoor Verses Narration Publishing Tracker Ganjoor Pages Ganjoor Metres singers music tracks golha tracks GolhaCollection GolhaPrograms PoemMusicTracks Ganjoor Comments Ganjoor Reported Comments Ganjoor Page Snapshots Ganjoor Site Bannaers Ganjoor Health Check Errors donations expenses donation expenditures poem corrections languages for translation poem translations ganjoor bookmarks ganjoor numbering schemas ganjoor verse numbers ganjoor half centuries ganjoor cities related poems to each poem (having same rhyme letters and prosody metre) Reported User Notes recitation error reports recitation user up votes recitation approved mistakes probable metres ganjoor user history track items (stored by his or her choice) suggested spec line for poets suggested pictures for poets faq categories faq items Temporary Model contianing duplicated poems information poem sections related sections to each section (having same rhyme letters and prosody metre) section correctons Updating related sections logs PoemGeoDateTags People tags Books (PDF Library) Authurs Multi Volume PDF Collections PDF Books PDF Pages PDF Sources Queued FTP Uploads PDF Ganjoor Links OCR Queue Items PDF Download Queue Related Poems donation expenditures Id GanjoorDonation Id GanjoorDonation amount Ganjoor Donation (based on donation records saved in old html format of https://ganjoor.net/donate/) id date: (donation dates have been collected in different formats, so instead of keeping their dates in a DateTime field I ought to use a string field) record date donation amount (0 for old imported records) Amount Unit amount string (avoiding to parse different formats of old html text) donor name donor link (unused) remaining (it could be ignored later when our data has been normalized enough and be calculated using related data) expenditure desc record is imported from old HTML text of donation page Ganjoor Expenses Id date amount unit description donation expenitures Ganjoor Donation View Model id - null for POST api - record date donation amount (0 for old imported records) "تومان" is good, Amount Unit, if you send another Unit it would be consumed with EXPENSES of the same Unit, if it send EMPTY it wotld not be consumed! donor name null for POST api - date: (donation dates have been collected in different formats, so instead of keeping their dates in a DateTime field I ought to use a string field) null for POST api -amount string (avoiding to parse different formats of old html text) null for POST api -remaining (it could be ignored later when our data has been normalized enough and be calculated using related data) null for POST api -expenditure desc null for POST api - record is imported from old HTML text of donation page update date and description view model (donation + expense limited update api) date description Items or pictures status Id parent id Order in Collections Friendly Url Name Name In English Description Description In English Main Image Last Modified for caching purposes All Images Attributes Museum Master Item Id Friendly Url Publish Status Name Name In English Description Description In English Date/Time Last Modified for caching purposes Cover Item Index Cover Image Cover Image Id Parts of this item Item Count (for lists and queries) Attributes to view model Artifact Picture Files Title Title in English Description Description in English Publish status order in the collection it belongs to it نام فایل ذخیره شده با بالاترین کیفیت e0d7050a-7e30-4a2f-b181-0daa4a1e1068.jpg نام فایل ذخیره شده با بالاترین کیفیت fbe9cc8e-12fa-4cb9-8f09-bbf353333383.jpg عرض تصویر مناسب نمایش در صفحهٔ اختصاصی طول تصویر مناسب نمایش در صفحهٔ اختصاصی عرض تصویر با اندازه مناسب نمایش در صفحات لیستی طول تصویر با اندازه مناسب نمایش در صفحات لیستی source url Last Modified for caching purposes url to access this image from THE external host, contains '/norm/' which when you replace it with '/thumb/' you would have ExternalThumbnailImageUrl and if you replace it with '/orig/' you would have a url for ExternalOriginalSizeImageUrl which MIGHT NOT EXIST and end in a 404 error duplicated a picture record (Id is missing so you should store this to get a new Id) Item Attribute Id Order tag type Friendly Url Publish Status Name Name In English Plural Name Plural Name In English Value is normally changed globally نوع ویژگی عادی پیوند جستجو پیوند و جستجو متن چپ به راست بدون مقدار عنوان در فهرست Attribute Value Id Friendly Url Publish Status Value Values In English link or .... new artifact view model RArtifactItemRecord with additional info main item info parent parent name parent image parent image external url parent item count empty or null means this is last item next image next image external url empty or null means this is first item prev image prev image external url Formatted Tags Museum Master Item View Model Id Friendly Url Publish Status Name Name In English Description Description In English Date/Time Last Modified for caching purposes Cover Item Index Cover Image Cover Image Id Parts of this item Item Count (for lists and queries) Attributes Tags Binary Tagged Items Titles of Items in Contents Artifact Tag (RTag with grouped related RTagValues of Artifact) Id Order tag type Friendly Url Publish Status Name Name In English Plural Name Plural Name In English Value is normally changed globally Values Tag Bundle View Model Item Title Item Friendly Url Items Count Item Image Id url to access the image from THE external host, contains '/norm/' which when you replace it with '/thumb/' you would have ExternalThumbnailImageUrl and if you replace it with '/orig/' you would have a url for ExternalOriginalSizeImageUrl which MIGHT NOT EXIST and end in a 404 error Tag Bundle View Model Id Friendly Url Name Plural Name Values Artifact Binary Tagged items Summation Tag Name Tag Friendly Url Item Count Title of an Item in Artifact Contents Title Order Level Item Friendly Url specific forms and permission artifact tag note view drafts edittag awaiting publish import moderate review suggested ganjoor links audio narrations ganjoor contents FAQ contents reorder review suggested songs add song from any source manage footer bannaers donations translations photos pdf ftp list of forms and their permissions ganjoor user public profile Id user image nick name biography web site LoginViewModel with app specfic properties keep user browsing history if he or she wants so Bookmark Type Private Bookmark Public Favorite Private Note (GanjoorComment) User Bookmarks Id User Id User Master Record Id Master Record Item Record Id Item Record DateTime Type User Note Id User Id Master Record Item Record DateTime Type User Note Queued FTP Upload id local file path remote file path delete file after upload queue date processing process date error FAQ Category Id title order description published category items FAQ Item id question excerpt answer pinned item order category id category item order in category content search hashtag 1 hashtag 2 hashtag 3 hashtag 4 published Audio Review Status All / Unfiltered (for queris) Draft pending for review approved Rejected after initial review Rejected due to errors Audio Synchronization Status (binary combination is acceptable) no changed new upload meta data should be updated sound files should be reuploaded (this means xml file is also needs to reuploaded) Item should be deleted Poem Narration Id Owner User Owner User Id Final data is actually exported to a MySQL database which this auto increment field is its key Ganjoor Post Id Caution: this could become a relation with newly added table but if we do this we lose the ability to drop and create without losing narration data This determines where an audio is displayed between a list of sounds related to a specfic poem Using this field content you would determine xml, mp3 and ogg file names combining this with + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value "a2" We had previously used different pathes because when a directory became overcrowded our connection time would increase unbearably due to IRAN internet problems, so it is sensible to store it per record and not as a global option value MP3 File Path MP3 url This is also a legacy field "/a2/x" XML Schema is defined based on Desktop Ganjoor (https://github.com/ganjoor/ganjoor) code, for more information take a look at this code: https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs XML url Audio Title Audio Artist Audio Artist Url Audio Source Audio Src Url Legacy Audio Guid Audio File CheckSum mp3 size in bytes ogg size in bytes Upload Date File Last Updated Review Date (Approve or Reject) MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) AudioSyncStatus Review Status Reviewer user Reviewer user Review Message initial score for ordering recitations Recitation Type in sync with text Recitation approved mistake id recitation id recitation mistake number of verses affected couplet index Error Report for recitations Id Recitation Id Recitation Reason Text Reporter User Id Reporter User DateTime number of verses affected couplet index Narration Publishing Tracker Id Poem Narration Id Poem Narration Start Date XML File Copied MP3 File Copied First MySql DB Updated Second DB Updated Finished Finish Date Last Excecption recitation type normal recitations commantaries unfiltered recitation user up vote (the records would be deleted manually if the owner user account gets deleted) Id Recitation Id Recitation User Id, defining it this way causes no cascade relation User date time Narration Profiles for users Id User UserId Profile Name this would be appended to audio files names prefixed by a dash to make them unique and specfic to user filenames usually would look like {GanjoorPostId}-{FileSuffixWithoutDash}.{ext} for example 2200-hrm.xml artist name artist url audio src audio src url is default Moderation Result no moderation approve reject Public (no user specific data) for publish recitations Audio Id Ganjoor Post Id Poem Full Title Poem Full Url (without domain name) Audio Title Audio Artist Audio Artist Url Audio Source Audio Src Url Legacy Audio Guid Audio File CheckSum mp3 size in bytes Publish Date File Last Updated Mp3 Url Xml Text, xml file url is {WebServiceUrl.Url}/api/audio/file/{audio.Id}.xml Poem Plain Text Poem Html Text mistakes This determines where an audio is displayed between a list of sounds related to a specfic poem Recitation Type in sync with text upvoted by current user (filled at client) Post Error Report for recitations Id Recitation Id Reason Text recitation number of verses affected couplet index DateTime approved mistake view model id mistake number of verses affected couplet index Poem Narration Moderation View Model Moderation Result Rejection Message Recitation Ordering View Model recitation earlyness advatage initial score upvotes from users other than the owner approved mistaked total scores computed order recitation (it is null by default and you should fill it using a separate api call based on RecitationId) RecitationPublishingTracker View Model user email Poem Full Title Artist Name Operation In Progress XML File Copied MP3 File Copied First MySql DB Updated Second DB Updated Succeeded Error Exception Start Date Finish Date Verse Sync Range Verse Order Verse Text Audio Start in Milliseconds Poem Narration view model parameterless constructor for deserialization support constructor Id Owner User Final data is actually exported to a MySQL database which this auto increment field is its key Ganjoor Post Id Poem Full Title Poem Full Url (without domain name) This determines where an audio is displayed between a list of sounds related to a specfic poem Using this field content you would determine xml, mp3 and ogg file names combining this with + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value "a2" We had previously used different pathes because when a directory became overcrowded our connection time would increase unbearably due to IRAN internet problems, so it is sensible to store it per record and not as a global option value MP3 File Path MP3 url OGG File Path OGG url This is also a legacy field "/i/a2/x" XML Schema is defined based on Desktop Ganjoor (https://github.com/ganjoor/ganjoor) code, for more information take a look at this code: https://github.com/ganjoor/ganjoor/blob/master/ganjoor/Audio%20Support/PoemAudioListProcessor.cs XML url Audio Title Audio Artist Audio Artist Url Audio Source Audio Src Url Legacy Audio Guid Audio File CheckSum mp3 size in bytes ogg size in bytes Upload Date File Last Updated Review Date (Approve or Reject) MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted) Value is one or a combination of Review Status Review Message Recitation Type in sync with text UserNarrationProfile View Model Id Do not fill it in POST api User Do not fill it in POST api UserId Do not fill it in POST api Profile Name this would be appended to audio files names prefixed by a dash to make them unique and specfic to user filenames usually would look like {GanjoorPostId}-{FileSuffixWithoutDash}.{ext} for example 2200-hrm.xml update [4/10/2021]: you can send this one empty artist name artist url audio src audio src url is default ganjoor link for artifacts and items Id Ganjoor Post Id ganjoor url ganjoor title Artifact Id artifact Artifact Item Id Artifact Item User Id who suggested the link Suggestion Date User who suggested the link User id who reviewed the link User who reviewed the link Review Date review result Synchronized with ganjoor display this image on poem page original source url link to original source is text original source Link Type Custom Museum Pinterest Instagram Naskban PDFBook Ganjoor Link Id Ganjoor Post Id ganjoor url ganjoor title pdf book id page number User Id who suggested the link Suggestion Date User who suggested the link User id who reviewed the link User who reviewed the link Review Date review result Synchronized with ganjoor is the is the text original source? PDF Page Title external thumbnail image url pinterest link Id Ganjoor Post Id ganjoor url ganjoor title alt text link type pinterest url pinterest image url User Id who suggested the link (this would always be null for anonyous suggestions, kept it so that someday it would be used to integerate GanjoorLink into this class) Suggestion Date User who suggested the link User id who reviewed the link User who reviewed the link Review Date review result review description Artifact Id artifact Artifact Item Id Artifact Item Synchronized with ganjoor is the is the text original source? pdf book id page number naskban link id Review Result Awaiting (default) Approved Rejected Ganjoor Link View Model Id Ganjoor Post Id ganjoor url ganjoor title entity name entity friendly url entity image id review result Synchronized with ganjoor suggested by is text original source Link Suggestion Ganjoor Post Id ganjoor url ganjoor title Artifact Friendly Url Artifact Item Id Safe pinterest link view model Id Ganjoor Post Id ganjoor url ganjoor title alt text link type pinterest url pinterest image url Suggestion Date User id who reviewed the link Review Date review result review description Artifact Id Artifact Item Id Synchronized with ganjoor entity name entity friendly url entity image id pinterest / ganjoor link suggestion view model Ganjoor Post Id ganjoor url ganjoor title alt text link type pinterest url pinterest image url correction review result id poem id poet id poem order poet name poet image url poem full url poem full title excerpt other poems id poem id poem section index poet id order poet name poet image url poem full url poem full title excerpt target poem id target section index other poems Ganjoor Category id poet_id poet text parent_id parent url => slug sample: /hafez/ghazal TOC Style Category Type additional descripion or note html mode of additional descripion or note order when mixed with poems published category book name poet image user image id sum up sub categories geo locations category map name Ganjoor Category Type half century id name order start end show in time line poets half century id order poet id poet Ganjoor Comment Id Ganjoor Poem Id Ganjoor Poem Id user id user author name (MySql imported field) author email (MySql imported field) author url (MySql imported field) author IP address (MySql imported field) comment date comment In Reply to Other Comment Reference Comment Id publish status related verse 1 Id, this is always null, because verses are removed and created on operations like editing and their Ids changed, so later I decided to rely on (PoemId + CoupletIndex) instead do not use related verse 2 Id, this is always null, because verses are removed and created on operations like editing and their Ids changed, so later I decided to rely on (PoemId + CoupletIndex) instead do not use couplet index Comment Abuse Report id comment id comment reason code for better grouping: offensive, bogus, other some explanotory text provided by reporter reported by id reported by user Temporary Model contianing duplicated poems information Id source category id (this category is about to be deleted and redirected) source poem id source poem destination poem id destination poem Geo Locations (Cities) referred by Ganjoor Metadata id name Latitude Longitude Ganjoor Page Health Check log id referer url broken link multiple targets for a page target url Language or system of writing for translating poems id name code native name is right to left description language from code Poem prosodic Metre Id Url Slug Rythm مفاعیلن مفاعیلن فعولن Name هزج مسدس محذوف Description Total Verse Count (its actually couplet count) Numbering Schema id name starting category id ending category ending category id ending category lines count verse count total poem couplets total paragraphs last counting date Ganjoor Page id Page Type Published page order title cat + parent cats title + title url => slug sample: /hafez/ghazal/sh1 Html Text parent id parent related poet id related poet related category id related category related poem id related poem second poet id second poet post date no index (search engines are blocked to index the page) if a page url is changed, store the old URL here to be redirected automatically snapshot of ganjoor pages to keep track of their changes id ganjoor page id ganjoor page id - this record is then modified by this user and made obsolete this record is then modified by this user and made obsolete record date a description of the modfication title url => slug Html Text Poem Rhythm rhyme letters source name source url slug old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....) old collection page url e.g /saadi/tayyebat Ganjoor Page Type None Poet Page Cat Page Poem Page Prosody Similars Hashieha Page Similar Poems of two poets Prosody and Statistics Ganjoor Poem id cat-id cat title cat + parent cats title + title url => slug sample: /hafez/ghazal/sh1 verses text verses text as html (ganjoor.net format) prosody information in fact this should be a many-to-many relationship, but our current dataset lacks such a relationship instance and because in fact it is actually this relationship should exists between a non-existant entity called block of poem I ignored this relationship to take care of it whenever the block entity would be added to the data structure metre rhyme letters source name source url slug old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....) old collection page url e.g /saadi/tayyebat order when mixed with categories published language (this is intended to affect html page encodings and not determine actuallly accents and ....) poem summary poem is claimed by multiple poets poem correction Correction Id poem Id poem modified verses title original title rhythm original rhythm note date user Id user reviewed reviewdate review note reviewer id reviwer user id application order for poem review result for title review result for rhythm had any effect on poem after moderation? effective in history rhythm 2 original rhythm 2 review result for rhythm 2 rhythm 3 original rhythm 3 review result for rhythm 3 rhythm 4 original rhythm 4 review result for rhythm 4 rhyme letters original rhyme letters rhyme letters review result language original language language review resukt suggested poem summary original poem summary summary review result hide the editors name poem format original poem format poem format review result poem format unknown غزل قصیده مثنوی قطعه رباعی دوبیتی غزل/قصیده/قطعه ترکیب بند تک بیت نیمایی ترکیب بند مسمط مثلث مستزاد رباعی مستزاد مسمط مربع مسمط مخمس سپید نیمایی یا سپید مسمط مسدس مسمط مثمن مسمط چهارپاره چند بندی بحر طویل Probable Prosody Information for a poem Id poem id poem metre section id Ganjoor Poem Section record id Poem Id Poem poet id might be different from GanjoorPoem.PoetId poet might be different from GanjoorPoem.PoetId use this field instead of Id for referencing to ease record deletion for verses, Index starts at 0, each poem should have at least one non-virtual part ordered by Index without break for lots of poems Number equals to Index + 1, but for rare ones such as a paragraph containing multi-band poem this could be different, 0 means no visible numbers section type how GanjoorPoemSection is linked to GanjoorVerse prosody information in fact this should be a many-to-many relationship, but our current dataset lacks such a relationship instance metre for non WholePoem sections, there must be a reference section for meters in order to make them updatable rhyme letters verses text verses text as html (ganjoor.net format) valid for whole poem sections first couplet index language, null means farsi top 6 related sections old metre id to see it needs refreshing related sections old rhyme letters to see it needs refreshing related sections modified excerpt poem section correction Correction Id section id section rhythm original rhythm review result for rhythm rhythm 2 original rhythm 2 review result for rhythm2 break from verse1 VOrder review result for break from verse1 VOrder break from verse2 VOrder review result for break from verse2 VOrder break from verse3 VOrder review result for break from verse3 VOrder break from verse4 VOrder review result for break from verse4 VOrder note date user Id user reviewed reviewdate review note reviewer id reviwer user id application order for poem had any effect on poem after moderation? effective in history break from verse5 VOrder review result for break from verse5 VOrder break from verse6 VOrder review result for break from verse6 VOrder break from verse7 VOrder review result for break from verse7 VOrder break from verse8 VOrder review result for break from verse8 VOrder break from verse9 VOrder review result for break from verse9 VOrder break from verse10 VOrder review result for break from verse10 VOrder rhyme letters original rhyme letters rhyme letters review result language original language language review result poem format original poem format poem format review result hide the editors name poem translation id language id language poem id poem title translation verses published user id user date/time comments Ganjoor Poet cat_id field is removed, it is retrievable by querying where == and == null id name description short name poet image user image id published on website birth year in lunar hijri death year in lunar hijri Home page pin order (zero means not pinned) BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date birth location id birth location death location id death location Ganjoor Poet Picture id Poet Id Poet order picture id picture suggested by id suggested by published selected Ganjoor Poet Specification Id Poet Id Poet order Contents published suggested by id suggested by related poem to a poem record id poem id poem related poem id (this could be a poem we do not have it available) this poem is written and should be displayed prior to the related poem if the related poet poem has multiple poems related to this poem, which one is chosen to be shown at main poems pages? this sort order can be used to pin a record on top related poem peot death date in hijri (used for sorting) related poem poet name related poem poet url related poem poet image full title full url couplet 1 verse 1 is main part couplet 1 verse 2 is main part couplet 1 index related couplet 1 verse 1 is main part related couplet 1 verse 2 is main part related couplet 1 index description published when a poem contains more than one quoted couplet from another one this should be more than 1 poems (same poem) are claimed by both poets poet id (redundant for simplifying queries) related poet id related indirectly a person refered by a poem id name description wikipedia url birth year in lunar hijri death year in lunar hijri BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date birth location id birth location death location id death location ganjoor.net site banner id banner image image id alternate text target url active ganjoor TOC options Ganjoor Bookmark Id User Id User Poem Id Poem couplet index Verse Id, this is always null, because verses are removed and created on operations like editing and their Ids changed, so later I decided to rely on (PoemId + CoupletIndex) instead Verse 2 Id, this is always null, because verses are removed and created on operations like editing and their Ids changed, so later I decided to rely on (PoemId + CoupletIndex) instead DateTime private note for bookmark ganjoor user history track item (stored by his or her choice) id user id (nullable to prevent a db cascade relation) user poem id poem date/time Ganjoor Verse global id, auto generated (missing in Ganjoor Desktop database) poem_id poem vorder position text couplet index GanjoorPoemSection index second GanjoorPoemSection index third GanjoorPoemSection index forth GanjoorPoemSection index language id language couplet summary id Numbering schema Id Numbering schema Poem Id (no relation is defined) verse couplet index (do not add related verses here) line number is poem verse or paragraph number based on type of line: is it a poem verse or a paragraph Verse translation id verse id verse translated text Verse Vorder / Text record id verse order text original text review result note couplet indexs verse position original verse position verse position result mark for delete mark for delete result new verse, if it is a new verse you should insert it in VORder position and shift verses previously positioned at VORder and after that new verse result language id original language id language review result suggested couplet summary original couplet summary summary review result Geo + date tags for poems Id Poem Id Poem couplet index location geo location Hijri Ghamari year Hijri Ghamari month Hijri Ghamari day sample: 14440101, would be used in sorting events verified date ignore in category related person id related person poem related track id poem id poem track type artist name artist url album name album url track name track url GanjoorTrack Id singer singer id GanjoorTrack GolhaTrack Id GolhaTrack description approved Suggested by user id Suggested by user approval user would be extractable from AuditLogs approval date broken link instead of deleting rejected songs keep track of them rejection cause Song Order poem music track type all https://beeptunes.com/or https://khosousi.com http://www.golha.co.uk itunes.com https://open.spotify.com/ poem section type sections like paragraphs or poems within paragraphs of text bands of a multi-band poem band couplets (virtual) some are virtual because they contain verse from different parts of poems (like verses from all band couplets) couplets (virtual) for Masnavi Updating related sections logs id meter id rhyme letters date/time how GanjoorPoemSection is linked to GanjoorVerse معنی فیلد position در جدول verse با توجه به مقادیر این ساختار داده مشخص می شود. imported from Desktop Ganjoor source First Verse in a normal Beyt Second Verse in a normal Beyt First Verse or the only one in a Band Beyt Second Verse in a Band Beyt Free form verse Comment Non-poem paragraph Verse Position strings Verse Position Text default verse positions get verse position text Ganjoor Batch Naming Model Start with (not including required spaces) شمارهٔ remove previous pattern from start until any numbers remove set of characters other than spaces from beginning and end .- simulate naming cat view model id text url => slug full url TOC Style Category Type additional descripion or note html mode of additional descripion or note order when mixed with poems published category book name user image id sum up sub categories geo locations category map name Next Category without Ancestors/Children/Poems info Previous Category without Ancestors/Children/Poems info ancestors cat children poems new image GanjoorCentury View Model id name order start end show in time line poets GanjoorCommentAbuseReport View Model id reason code for better grouping: offensive, bogus, other some explanotory text provided by reporter comment Id author name (MySql imported field) author url (MySql imported field) comment date comment status User Id in reply to poem this can be used by clients verse1 id verse2 id couplet index couplet summary new comment model Poem Id comment in reply to couplet index - send null for unrelated to a couplet comment GanjoorComment Summary View Model Id author name (MySql imported field) author url (MySql imported field) comment date comment status in reply to User Id replies this can be used by clients couplet index couplet summary for client Ganjoor Couplet Number View Model name number is poem verse or paragraph number based on type of line: is it a poem verse or a paragraph total couplets total poem couplets total paragraphs Ganjoor Duplicate View Model Id Source Poem Id Source Poem cat + parent cats title + title Source Poem sample: /hafez/ghazal/sh1 Source Poem First Verse destination poem id destination Poem cat + parent cats title + title destination Poem sample: /hafez/ghazal/sh1 destination poem first verse Rhyme Analysis Result rhyme the verse analysis stopped at modify page view model title url => slug Html Text Poem Rhythm Second Poem Rhythm Third Poem Rhythm rhyme letters source name source url slug old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....) old collection page url e.g /saadi/tayyebat no index (search engines are blocked to index the page) if a page url is changed, store the old URL here to be redirected automatically order when mixed with categories published language (this is intended to affect html page encodings and not determine actuallly accents and ....) TOC Style Category Type additional descripion or note html mode of additional descripion or note a description of the modfication Ganjoor Page View Model id Ganjoor Page Type title cat + parent cats title + title url => slug sample: /hafez/ghazal/sh1 Html Text no index (search engines are blocked to index the page) if a page url is changed, store the old URL here to be redirected automatically Poet or Cat Poem Second Poet next normal page previous normal page GanjoorPageSnapshot summary view model id record date a description of the modfication Ganjoor Page: Summary View Model id title FullUrl a more complete GanjoorPoem View Model Id title cat + parent cats title + title url => slug sample: /hafez/ghazal/sh1 verses text verses text as html (ganjoor.net format) source name source url slug old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....) old collection page url e.g /saadi/tayyebat order when mixed with categories published language poem summary category Next Poem Previous Poem verses Recitations Images Songs Comments poem sections geo/date tags top 6 quoted poems section index poem is claimed by multiple poets poem correction view model Correction Id poem Id modified verses title original title rhythm original rhythm note date user Id nickname reviewed reviewdate review note review result for title review result for rhythm rhythm 2 original rhythm 2 review result for rhythm 2 rhythm 3 original rhythm 3 review result for rhythm 3 rhythm 4 original rhythm 4 review result for rhythm 4 rhyme letters original rhyme letters rhyme letters review result language original language language review resukt suggested poem summary original poem summary summary review result poem format original poem format poem format review result hide the editors name poem section correction view model Correction Id section id rhythm original rhythm review result for rhythm rhythm 2 original rhythm 2 review result for rhythm2 break from verse1 VOrder review result for break from verse1 VOrder break from verse2 VOrder review result for break from verse2 VOrder break from verse3 VOrder review result for break from verse3 VOrder break from verse4 VOrder review result for break from verse3 VOrder break from verse5 VOrder review result for break from verse5 VOrder break from verse6 VOrder review result for break from verse6 VOrder break from verse7 VOrder review result for break from verse7 VOrder break from verse8 VOrder review result for break from verse8 VOrder break from verse9 VOrder review result for break from verse9 VOrder break from verse10 VOrder review result for break from verse10 VOrder note date user Id nickname reviewed reviewdate review note poem Id poem Id rhyme letters original rhyme letters rhyme letters review result language original language language review resukt poem format original poem format poem format review result hide the editors name poem summary id title url => slug excerpt text whole poem sections poem translation view model id language poem id translated title published comments or description might be empty in anonymous apis contributer name - might be empty in anonymous apis datetime translated verses to string Poet Complete Information poet info poet cat info id Poet Id order Title Description image url suggested by id published selected rejection cause Ganjoor Poet Specification view model Id Poet Id order Contents published suggested by id rejection cause Ganjoor Poet id name description urlslug root cat id short name published on website image url birth year in lunar hijri BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date death year in lunar hijri DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date Home page pin order (zero means not pinned) birth place birth place latitude birth place longitude death place death place latitude death place longitude report comment view model comment id reason code for better grouping: offensive, bogus, other some explanotory text provided by reporter Ganjoor Verse View Model global id, auto generated (missing in Ganjoor Desktop database) vorder position text GanjoorSiteBanner PUT ViewModel alternate text target url active Ganjoor Site Banner View Model id image url alternate text target url active Id poet name poet image url poem full title sample: /hafez/ghazal/sh1 couplet index verse1 text verse2 text DateTime private note for bookmark verse translation view mode verse translated text Ganjoor Verse View Model global id, auto generated (missing in Ganjoor Desktop database) vorder couplet index position GanjoorPoemSection index second GanjoorPoemSection index third GanjoorPoemSection index forth GanjoorPoemSection index text language id couplet summary Ganjoor Poem related music track model id poem id a track type artist name artist url album name album url track name track url description broken link golha id approved instead of deleting rejected songs keep track of them rejection cause Suggested by user id (only filled for review) Suggested by user name (only filled for review) to string Related Image Type musueum.ganjoor.net link external link Poem Related Images Image Order poem related image type thumbnail image url target page url alternate text is text original source poem + verse order poem id verse order history of suggested songs by a user approved rejected Import Job Job Type music catalogue album id singer id singer name url tracks music catalogue singer id name url poet image user image id albums music catalogue track id album id album name url blocked from suggestion reason track is purely music and no singing is done through it http://www.golha.co.uk offline catalogue id name url programs Golha Program id GolhaCollection Id GolhaCollection title program order url mp3 tracks id GolhaProgram Id GolhaProgram track no timing title singer id singer blocked from suggestion reason track is purely music and no singing is done through it Golha Program View Model id title program order url mp3 Golha Track View Model id track no timing title Note Type private public User Note Id User Id User Master Record Id Master Record Item Record Id Item Record DateTime Is Updated by User Last Modified Private / Public content In Reply to Other Note Reference Note Id Status (Public) User Notes Abuse Report Id Note Id Note some explanotory text provided by reporter reporting user Id (nullable to allow deleting users and keeping this part of data if needed) reporting user user note report view model note Id reason text New User Note For Artifact Artifact / Item Id Note Type Contents Reference Note Id (Public) User Notes Abuse Report View Model Id some explanotory text provided by reporter note Safe User Note View Model Id User Id User Name (FirstName + SureName) user image id DateTime Is Updated by User Last Modified Private / Public content Reference Note Id Status Related Entity (Artifact/Item) Name It is set only in cummulative api calls Realated entity Image Id It is set only in cummulative api calls Realated entity Friendly Url (for artifact items it would be ParentFiendlyUrl/ItemFriendlyUrl ) It is set only in cummulative api calls Related entity external normal size image url Related Item Artifact Name It is set only in cummulative api calls child notes It os set only in certain cases prepare note datetime Author Id Name Name in original language bio Cover Image Cover Image Id external image url Last Modified Author Role Id Author Role a book might have different PDFBook or MultiVolumePDFCollection instances Id book name description Cover Image Cover Image Id external cover image url Last Modified Authors Attributes pdf books Book Script Type Printed Manuscript Multi Volume Book Id book id book Name Description volume count pdf books OCR Queued Item id PDF Book Id PDF Book Id book id book Publish Status Title secondary or complementary title authors (descriptive) ISBN description language is translation translators (descriptive) title in original language publisher (descriptive) publishing date (descriptive) publishing location (descriptive) publishing number (تیراژ) claimed page count MultiVolumePDFCollection Id MultiVolumePDFCollection Volume Order Date/Time Last Modified for caching purposes PDF File external url for PDF File Cover Image Cover Image Id external cover image url original source name original source url original file url contributers Pages page count Attributes file check sum original file name storage folder name Book Script Type PDF Source Id PDF Source tags view models Binary Tagged Items Titles of Items in Contents ocred ocr date time book text PDF Page Id PDF Book Id page number Thumbnail Image Thumbnail Image Id external thumbnail image url description Last Modified Attributes full resolution image width full resolution image height ocred ocr date time page text pdf book tags view models PDF Source (Web Sites) id Name Url Description a fake PDFBook for scheduling downloads Id Download Order Title authors (descriptive) description language is translation translators (descriptive) original source name original source url original file url processed process result result id Author Role Count Role Counts New PDFBook view model PDF File Path skip uploading to external FTP Site book id Title secondary or complementary title authors (descriptive) ISBN description language is translation translators (descriptive) title in original language publisher (descriptive) publishing date (descriptive) publishing location (descriptive) publishing number (تیراژ) claimed page count MultiVolumePDFCollection Id Volume Order original source name original source url original file url writer id writer 2 id writer 3 id writer 4 id translator id translator 2 id translator 3 id translator 4 id collector id (مصحح) collector 2 id (مصحح) Other contributing role other contributing role Other contributing role 2 other contributing role 2 PDF Source Id Book Script Type PDFBook Ganjoor Link Suggestion Ganjoor Post Id ganjoor url ganjoor title pdf book id page number is this the text original source? PDF Page OCR Data View Model Id full resolution image width full resolution image height ocred page text Upload Session Id Session Type User User Id Upload Start Time Upload End Time Process Start Time Process End Time Process Progress Status Uploaded Files Upload Session File Id Upload Session Id ContentDisposition ContentType FileName Length Name File Path File check sum for mp3 files Process Result Process Result Message Upload Session Process Status Not Started Started Finished Upload Session Types Generic New Audio New or replace audio Uploaded Item View Model filename process result process result message Upload End Time Upload User Name Process Start Time progress progress process end time Artifact Item Service get all artifacts (including CoverImage info but not items or attributes info) get tagged publish artifacts (including CoverImage info but not items or tagibutes info) gets specified artifact info (including CoverImage + images + attributes) gets specified artifact info (including CoverImage + images + tagibutes) edit master record Set Artifact Cover Item Index get tag bundle by frindly url get max lastmodified artifact date for caching purposes get all tags get tag bu friendly url add tag edit tag changes order of tags based on their position in artifacts true => up, false => down the other tag which its Order has been changed changes order of tags based on their position in artifact items true => up, false => down the other tag which its Order has been changed add artifact tag value changes order of tag values based on their position in an artifact true => up, false => down the other tag value which its Order has been changed changes order of tag values based on their position in an item true => up, false => down the other tag value which its Order has been changed get tag value bundle by frindly url get tag value by frindly url edit artifact tagibute value apply on all same value tags remove artfiact tag value add item tag value edit item tag value apply on all same value tags remove item tag value gets specified artifact item info (including images + attributes) add new artifact import from external resources loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl 119 golestan-baysonghori reschedule jobs due to a bug in loc json outputs some artifacts with more than 1000 pages were downloaded incompletely import jobs Bookmark Artifact get artifact user bookmarks Bookmark Item get item user bookmarks update bookmark note delete user bookmark /// get user bookmarks (artifacts and items) Add Note to Artifact Add Note to Artifact Item Edit Note sending null here means user is a moderator delete note sending null here means user is a moderator or the note is being deleted in a recursive delete of referenced notes list of notes deleted get artifact private user notes get artifact public user notes get item artifact private user notes get item artifact item public user notes Get All USer Notes Get All Public Notes suggest ganjoor link get Unsynchronized image count finds what the method name suggests get suggested ganjoor links Review Suggested Link Temporary api Synchronize suggested link get suggested pinterest links suggest pinterest link Review Suggested Pinterest Link Synchronize suggested pinterest link an incomplete prototype for removing artifacts start filling GanjoorLink table OriginalSource values report a public note id of report record Get a list of reported notes delete a report for abuse in public user notes delete a reported user note (accept the complaint) start removing original images Search Artifacts search artifact items start setting an artifact items as text original source upload artifact to external server donation service new donation delete donation update donation new expense update expense delete expense parse html of https://ganjoor.net/donate/ and fill the records regenerate donations page returns all donations get donation by id returns all expenses get expense by id Show Donating Information (temporary switch off/on) faq service interface get categories get category by id add a new faq category update an existing faq category delete a faq category get pinned items get category items get item by id add a new faq item update an existing faq item delete a faq item numbering service add numbering update an existing numbering (only name) delete numbering get numbering by id get all numberings get numberings for a cat get numberings for direct subcats of parent cat get all numbering patterns for a couplet start counting generate missing default numberings and start counting Ganjoor Poems Content Privider Service Get List of poets get poet by id get poet by url poet image id by url get cat by id get cat by url Update category extra info get list of books generate missing book covers get page by url get page url by id get redirect url for a url delete page delete a poem Get Poem By Id get poem verses Get Poem By Url get poem recitations (PlainText/HtmlText are intentionally empty) get poem sections get user up votes for the recitations of a poem get poem images by id (some fields are intentionally field with blank or null), EntityImageId : the most important data field, image url is {WebServiceUrl.Url}/api/images/thumb/{EntityImageId}.jpg or {WebServiceUrl.Url}/api/images/norm/{EntityImageId}.jpg get poem related songs get poem comments get a section related sections poem id section index if sent 0 or less returns all items send poem corrections last unreviewed user correction for a poem user suggested songs get user or all corrections if sent empty returns all corrections effective corrections for poem get correction by id delete unreviewed user corrections for a poem get next unreviewed correction unreview correction count moderate poem correction break a poem from a verse forward update related sections next unreviewed track get track of user song suggestions suggest song get unreviewed count review song direct insert song get song by id modify a published song delete poem song by id new comment update user's own comment link or unlink user's own comment to a coupletIndex if null then unlinks couplet summary delete a reported comment delete user own comment delete anybody's comment publish awaiting comment get recent comments Guid.Empty report a comment id of report record delete a report Get list of reported comments Get Similar Poems accroding to prosody and rhyme informations language tagged poem sections modify page modify poem => only these fields: NoIndex, RedirectFromFullUrl, MixedModeOrder modify poet create new poet delete poet chaneg poet image returns metre list (ordered by Rhythm) get a random poem (2 = from hafez) import from sqlite import a catgory from sqlite Apply corrections from sqlite export to sqlite start generating gdb files examine site pages for broken links examine comments for long links start filling poems couplet indices regenerate poem full titles to fix an old bug start finding rhymes for single couplets separate verses in poem.PlainText with Environment.NewLine instead of SPACE clean cache for paeg by id clean cache for page by url clean cache for page by comment page modifications history get old version Search batch rename re sulg cat poems find poem rhyme find poem section rhyme find category poem rhymes Start finding missing rhthms find poem rhythm find category poem rhymes generate category TOC directly insert generated TOC start generating sub cats TOC build sitemap start updating stats page start updating mundex page Switch Bookmark for couplet Bookmark couplet if it is not delete user bookmark /// to make sure a user can not delete another user's bookmarks modify bookmark private note to make sure a user can not modify another user's bookmarks get user ganjoor bookmarks (only Id, CoupletIndex and DateTime are valid) get verse bookmarks get user bookmarks (artifacts and items) regenerate half centuries get centuries with published poets start generating related sections info get next ganjoor section probable metre get a list of ganjoor poem sections probable metres save ganjoor poem probable metre problable metre id return list of suggested spec lines returns specfic suggested line for poet next unpublished suggested line for poets npublished suggested lines count for poets add a suggestion for poets spec lines modify a suggestion for poets spec lines reject a suggestion for poets spec lines delete published suggested spec line delete a category set category poems language tag set category poem format tag for poems consisting of a single whole poem section regenerate TOCs Finding Category Poems Duplicates list of category saved duplicated poems manually add a duplicate for a poems delete duplicate start removing category duplicates sectionizing poems start band couplets fix get couplet sections get all poem sections regenerate poem sections (dangerous: wipes out existing data) get a specific poem section delete a poem section last unreviewed user correction for a section get user section corrections if sent empty returns all corrections send a correction for a section moderate poem section correction delete unreviewed user corrections for a poem section get next unreviewed correction for a poem section unreviewed poem section correction count get section correction by id effective corrections for section regenerate category related sections transfer poems and sections from a meter to another one add poem geo tag update poem tag delete poem tag get poem tags ordered by LunarDateTotalNumber then by Id get a categoty poem tags synchronize naskban links number of synched items filling poem formats extracting quoted poems regenerate related poems pages get quoted poems for a poem two poems quoted records get quoted poems get quoted by id insert quoted poem update quoted poem delete quoted by id translation service implementation add language update an existing language delete language get langauge by id get all languages add or update poem translation get translation -1 all languages get last language the user contributed to its translation get translation by id get all poem translations (for export utility) geo location service add new location update an existing location delete location get location by id get all locations IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation IArtifactService implementation start setting an artifact items as text original source start filling GanjoorLink table OriginalSource values import from http://www.qajarwomen.org 43117279 atame http://www.qajarwomen.org/fa/items/1018A10.html from http://www.bl.uk grenville_xli_f001r from http://cudl.lib.cam.ac.uk MS-RAS-00258 import from https://viewer.cbl.ie 119 golestan-baysonghori from https://curiosity.lib.harvard.edu example: https://curiosity.lib.harvard.edu/islamic-heritage-project/catalog/40-990114893240203941 from https://catalog.hathitrust.org 006814127 from https://www.loc.gov m084 boostan1207 plmp due to a bug in loc json outputs some artifacts with more than 1000 pages were downloaded incompletely from http://www.library.upenn.edu/ MEDREN_9949222153503681 import from server folder C:\Tools\batches\florence shahname-florence https://t.me/dr_khatibi_abolfazl/888 start appending from server folder from http://www.thedigitalwalters.org/01_ACCESS_WALTERS_MANUSCRIPTS.html W619 golestan-walters-01 start removing original images from http://pudl.princeton.edu/ dj52w476m get all artifacts (including CoverImage info but not items or tagibutes info) get tagged publish artifacts (including CoverImage info but not items or tagibutes info) gets specified artifact info (including CoverImage + images + tagibutes) gets specified artifact info (including CoverImage + images + tagibutes) edit master record Set Artifact Cover Item Index get tag bundle by frindly url get max lastmodified artifact date for caching purposes get all tags get tag bu friendly url get tag value by frindly url add tag edit tag changes LastModified field value for tagged artifacts and items changes order of tags based on their position in artifacts true => up, false => down the other tag which its Order has been changed changes order of tags based on their position in artifact items true => up, false => down the other tag which its Order has been changed get tag value bundle by frindly url add artifact tag value remove artfiact tag value edit artifact tag value apply on all same value tags add item tag value remove item tag value edit item tagibute value apply on all same value tags changes order of tag values based on their position in an artifact true => up, false => down the other tag value which its Order has been changed changes order of tag values based on their position in an item true => up, false => down the other tag value which its Order has been changed gets specified artifact item info (including images + tagibutes) add new artifact import from external resources pdf/loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append 119/foldername golestan-baysonghori/artifact id upload artifact to external server upload artifact to external server reschedule jobs an incomplete prototype for removing artifacts import jobs Bookmark Artifact get artifact user bookmarks Bookmark Item get item user bookmarks update bookmark note delete user bookmark /// get user bookmarks (artifacts and items) Add Note to Artifact Add Note to Artifact Item Edit Note delete note sending null here means user is a moderator or the note is being deleted in a recursive delete of referenced notes list of notes deleted get artifact private user notes recursvie call to build notes tree get artifact public user notes get item artifact private user notes recursvie call to build notes tree for iten get item artifact item public user notes Get All USer Notes Get All Public Notes report a public note id of report record delete a report for abuse in public user notes delete a reported user note (accept the complaint) Get a list of reported notes suggest ganjoor link get Unsynchronized image count finds what the method name suggests get suggested ganjoor links Review Suggested Link Temporary api Synchronize suggested link get suggested pinterest links suggest pinterest link Review Suggested Pinterest Link Synchronize suggested pinterest link Search Artifacts search artifact items Database Contetxt Picture File Service Configuration Background Task Queue Instance User Service Messaging service Ganjoor Service constructor British Library Tile Downloader And Mixer Constructor find image encodder تبدیلگر CorrectionReviewResult تبدیل به رشته donation service new donation update donation delete donation new expense update expense delete expense returns all donations get donation by id returns all expenses get expense by id donation page row date amount donor usage remaining parse html of https://ganjoor.net/donate/ and fill the records regenerate donations page Show Donating Information (temporary switch off/on) Database Context Background Task Queue Instance Ganjoor Service configuration constructor faq service implementation get categories get category by id add a new faq category update an existing faq category delete a faq category get pinned items get category items get item by id add a new faq item update an existing faq item delete a faq item Database Context constructor Ganjoor User Service IMemoryCache Ganjoor Service Sign Up Email Subject subject Sign Up Email Html Content html content Start signup process using email finalize signup and assign his or him comments to him or her modify existing user /*update related entities cache*/ remove user data numbering service implementation add numbering update an existing numbering (only name) delete numbering get numbering by id get all numberings get numberings for a cat get numberings for direct subcats of parent cat get all numbering patterns for a couplet start counting generate missing default numberings and start counting Database Context Background Task Queue Instance constructor poem format convertor تبدیل به رشته IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation IGanjoorService implementation Switch Bookmark for couplet Bookmark couplet if it is not Bookmark Verse bookmark comment get user ganjoor bookmarks (only Id, CoupletIndex and DateTime are valid) get verse bookmarks delete user bookmark /// to make sure a user can not delete another user's bookmarks modify bookmark private note to make sure a user can not modify another user's bookmarks get user bookmarks (artifacts and items) set category poem format tag for poems consisting of a single whole poem section set category poems language tag re sulg cat poems batch rename list of category saved duplicated poems Update category extra info find category poem rhymes get centuries with published poets regenerate half centuries Finding Category Poems Duplicates start removing category duplicates find category poem rhymes directly insert generated TOC generate category TOC make plain text separate verses in poem.PlainText with Environment.NewLine instead of SPACE examine site pages for broken links examine comments for long links start filling poems couplet indices regenerate poem full titles to fix an old bug start finding rhymes for single couplets transfer poems and sections from a meter to another one moderate poem correction moderate poem section correction get user section corrections if sent empty returns all corrections effective corrections for section last unreviewed user correction for a section send a correction for a section delete unreviewed user corrections for a poem section get next unreviewed correction for a poem section get section correction by id unreview poem section correction count start updating stats page return list of suggested spec lines returns specific suggested line for poets next unpublished suggested line for poets upublished suggested lines count for poets add a suggestion for poets spec lines modify a suggestion for poets spec lines delete a suggestion for poets spec lines delete published suggested spec line add poem geo tag update poem tag delete poem tag get poem tags ordered by LunarDateTotalNumber then by Id get a categoty poem tags filling poem formats sectionizing poems filter secion verses get couplet sections get all poem sections regenerate poem sections (dangerous: wipes out existing data) get a specific poem sections delete a poem section start band couplets fix Start finding missing rhthms get next ganjoor poem probable metre get a list of ganjoor poems probable metres save ganjoor poem probable metre problable metre id regenerate related poems pages parse related pages get quoted by id insert quoted poem update quoted poem delete quoted by id get quoted poems get quoted poems for a poem two poems quoted records extracting quoted poems parse related pages get a section related sections poem id section index if sent 0 or less returns all items regenerate category related sections update related sections info (after metreId or rhyme for one of these sections changes) start generating related sections info build sitemap get poem related songs user suggested songs suggest song get unreviewed count next unreviewed track get track of user song suggestions review song direct insert song get song by id modify a published song delete a poem song by id start generating gdb files export to sqlite Apply corrections from sqlite import from sqlite import a catgory from sqlite make html text start updating stats page regenerate TOCs start generating sub cats TOC Get List of poets get poet by id get poet by url poet image id by url get cat by url get list of books generate missing book covers get cat by id get page url by id clean cache for paeg by id clean cache for page by url clean cache for page by comment get redirect url for a url get page by url get poem recitations (PlainText/HtmlText are intentionally empty) get poem whole sections get user up votes for the recitations of a poem get poem comments new comment update user's own comment link or unlink user's own comment to a coupletIndex if null then unlinks couplet summary delete a reported comment publish awaiting comment delete anybody's comment delete user own comment get recent comments report a comment id of report record delete a report Get list of reported comments get poem images by id (some fields are intentionally field with blank or null), EntityImageId : the most important data field, image url is {WebServiceUrl.Url}/api/images/thumb/{EntityImageId}.jpg or {WebServiceUrl.Url}/api/images/norm/{EntityImageId}.jpg Get Poem By Url get poem verses Get Poem By Id sections delete unreviewed user corrections for a poem send poem correction last unreviewed user correction for a poem get user or all corrections if sent empty returns all corrections effective corrections for poem get correction by id get next unreviewed correction unreview correction count random poem id from hafez sonnets and old c.ganjoor.net service get a random poem from hafez Get Similar Poems accroding to prosody and rhyme informations language tagged poem sections Search You need to run this scripts manually on the database before using this method: CREATE FULLTEXT CATALOG [GanjoorPoemPlainTextCatalog] WITH ACCENT_SENSITIVITY = OFF AS DEFAULT CREATE FULLTEXT INDEX ON [dbo].[GanjoorPoems]( [PlainText] LANGUAGE 'English') KEY INDEX [PK_GanjoorPoems]ON ([GanjoorPoemPlainTextCatalog], FILEGROUP [PRIMARY]) WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM) modify page modify poem => only these fields: NoIndex, RedirectFromFullUrl, MixedModeOrder break a poem from a verse forward update related sections return page modifications history get old version returns metre list (ordered by Rhythm) modify poet create new poet delete poet delete a page delete a poem delete a category chaneg poet image find poem rhyme find poem section rhyme find poem rhythm manually add a duplicate for a poems delete duplicate synchronize naskban links number of synched items aggressive cache Database Context Configuration Background Task Queue Instance IAppUserService instance Messaging service Image File Service IMemoryCache http client options service constructor translation service implementation add language update an existing language delete language get langauge by id get all languages add or update poem translation get last language the user contributed to its translation get all poem translations (for export utility) get translation by id get translation Database Context constructor geo location service implementation add new location update an existing location delete location get location by id get all locations Database Context constructor Persian specific text utility class convert persian text to simple pinglish equaivalnet for persian characters Language Utilitis Persian Alphabet English Alphabet Check to see if input Contains Only Specific Characters make text searchable find rhyme format money format datetime Music Catalgue Service Implementation get golha collection programs get golha program tracks Configuration Database Contetxt constructor manipulating picture files recover from files add new picture pass empty if you want a generic date based folder returns image info Rotate Image in 90 deg. multiplicants: 90, 180 or 270 find image encodder returns image file stream فرمت تصاویر بندانگشتی و ... image/jpeg عرض تصویر با اندازه نرمال - جهت نمایش در صفحات /// طول تصویر با اندازه نرمال - جهت نمایش در صفحات عرض تصویر بندانگشتی طول تصویر بندانگشتی image info cache Image Storage Path Generated Cropped Image Based On ThumbnailCoordinates For Notes Database Contetxt Configuration Simple Image Storage (not storing multiple image sizes) for creating small cropped images memory cache constructor poet photo suggestion service return list of suggested photos for a poet returns a single suggested photo suggest a new photo for a poet next unpublished suggested photo for poets unpublished suggested photos count for poets modify a suggested photo for poets delete a suggested photo for poets delete published suggested photo Database Context picture file service Messaging service IAppUserService instance Configuration constructor Queued FTP Upload Service Implementation add upload (you should call ProcessQueue manually) s process queue reset queue get queued ftp uploads Database Context Configuration Background Task Queue Instance constructor creates an RSS feed from recitations build rss Role Service Implementation gets list of SecurableItem, should be reimplemented in end user applications constructor ganjoor.net banners service Add site banner modify site banner delete site banner get site banners get a random site banner Database Context Image File Service IMemoryCache constructor User Visits Tracking Service Implementation add record delete record start or stop tracking user get user history options service Database Context constructor Audio Narration Service Implementation returns list of narrations send Guid.Empty if you want all narrations returns list of publish recitations get category top one recitations check if a category has any recitations get published recitation by id return selected narration information Delete recitation Gets Verse Sync Range Information narration id validate PoemNarrationViewModel updates metadata for narration build profiles from exisng narrations data User Id which becomes owner of imported data error string if occurs Initiate New Upload Session for audio Save uploaded file finalize upload session (add files) Moderate pending narration retry publish unpublished narrations Get Upload Session (including files) Get User Profiles Get User Default Profile validating narration profile Add a narration profile Update a narration profile Delete a narration profile Get uploads descending by upload time if userId is empty all user uploads would be returned publishing tracker data Transfer Recitations Ownership move recitaions of an artist to the first position Synchronization Queue report an error in a recitation get errors reported for recitations reject a reported error for recitations and notify the reporter (and deletes the report) accepts a reported error for recitations and notify the reporter and recitation owner (and deletes the report) accepts a reported error for recitations, add mistake to approve the mistake and notify the reporter and recitation owner (and deletes the report) remove approved mistake compute poem recitations order up vote a recitation recitation id revoke recitaion up vote recitaion id switches recitation upvote upvote status get user upvoted recitations check recitaions with missing files and add them to reported errors list Upload Enabled (temporary switch off/on for upload) Configuration Database Contetxt Background Task Queue Instance Messaging service Users service memory cache ganjoor service constructor Music Catalogue Service get golha collection programs get golha program tracks manipulating picture files add new picture pass empty if you want a generic date based folder recover from files returns image info returns image file stream Rotate Image in 90 deg. multiplicants: 90, 180 or 270 Get Encoder Generate Cropped Image Based On ThumbnailCoordinates For Notes Image Storage Path poet photo suggestion service; return list of suggested photos for a poet returns a single suggested photo suggest a new photo for a poet next unpublished suggested photo for poets unpublished suggested photos count for poets modify a suggested photo for poets delete a suggested photo for poets delete published suggested photo Queued FTP Upload Service add upload (you should call ProcessQueue manually) s process queue reset queue get queued ftp uploads Audio Narration Service returns list of narrations send Guid.Empty if you want all narrations returns list of publish narrations (if poetId or catId is non-zero its ordered by poemId ascending if not it is ordered by publish date descending) get category top recitations check if a category has any recitations get published recitation by id return selected narration information Delete recitation (recitation should belong to userId) Gets Verse Sync Range Information narration id updates metadata for narration build profiles from exisng narrations data User Id which becomes owner of imported data error string if occurs Initiate New Upload Session for audio Save uploaded file finalize upload session (add files) Moderate pending narration Get Upload Session (including files) Get User Profiles Get User Default Profile Add a narration profile Update a narration profile Delete a narration profile Transfer Recitations Ownership Get uploads descending by upload time if userId is empty all user uploads would be returned publishing tracker data move recitaions of an artist to the first position Synchronization Queue report an error in a recitation get errors reported for recitations reject a reported error for recitations and notify the reporter (and deletes the report) accepts a reported error for recitations, change status of the recitation to rejected and notify the reporter and recitation owner (and deletes the report) accepts a reported error for recitations, add mistake to approve the mistake and notify the reporter and recitation owner (and deletes the report) remove approved mistake compute poem recitations order up vote a recitation recitation id revoke recitaion up vote recitaion id switches recitation upvote upvote status get user upvoted recitations check recitaions with missing files and add them to reported errors list retry publish unpublished narrations Upload Enabled (temporary switch off/on for upload) Add site banner modify site banner delete site banner get site banners get a random site banner User Visits Tracking Service add record delete record start or stop tracking user get user history ganjoor poem tools get an excerpt for the poem url جهت ذخیره، دریافت و پردازش مخازن مجموعه های شعرها به کار می رود ذخیرۀ لیستی از GDBInfoها در یک فایل xml دریافت یک فایل xml و تبدیل آن به لیستی از GDBInfoها اطلاعات فایل صوتی شعر سازنده شناسۀ شعر شناسۀ فایل صوتی با شروع از 1 برای هر شعر مسیر فایل شرح آیا همگام شده ساختار اطلاعات همگام سازی ترتیب مصرع (-1 نشانگر آغاز فایل صوتی و -2 نشانگر پایان آن است) زمان در فایل صوتی بر حسب میلی ثانیه اطلاعات همگام سازی نشانی دریافت فایل صوتی آیا لینک دریافت فایل صوتی مستقیم است شناسۀ یکتای اطلاعات همگام سازی امضای یکتای فایل صوتی محاسبه چک سام فایل آیا اطلاعات همگام سازی آپلود شده؟ تبدیل به رشته شرح Warning: not always filled Warning: Rarely filled پردازشگر ذخیره و بارگذاری لیستهای اشعار ذخیره در فایل ذخیره در فایل بارگذاری از فایل