<?xml version="1.0" encoding="UTF-8" standalone="yes"?>



<items>




<item>
<title>[COLOR yellow][B]   updated   $doregex[info]  [/B][/COLOR]   </title>
<link>$doregex[refresh]</link>
<regex>
<name>refresh</name>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data,Cookie_Jar,m):
 import xbmc 
 import xbmcgui 
 from datetime import datetime, timezone, timedelta
 xbmc.executebuiltin('Container.Refresh')
]]></expres>
<page></page>
</regex>
<regex>
<name>info</name>
<expres>$pyFunction: time.strftime('%d/%m/%Y')</expres>
<page></page>
<NOTPlayable>True</NOTPlayable>
</regex>
</item>


<item>
<title>Coming Soon </title>
<link> </link>
<thumbnail></thumbnail>
</item>



<item>
<title>GreekFun Movies</title>
<link>$doregex[makelist0]</link>
<thumbnail></thumbnail>

<!-- 1. SELECT YEAR -->
<regex>
<name>makelist0</name>
<listrepeat><![CDATA[
<title>[makelist0.param1]</title>
<link>$doregex[makelist]</link>
<thumbnail></thumbnail>
]]></listrepeat>
<expres><![CDATA[<option value="(\d{4})" >(\d{4})</option>]]></expres>
<page>https://greeksubsmovies.me/?filter=movie&amp;sort=recent&amp;f_language=en&amp;page=1</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<!-- 2. MOVIE LIST (MERGES PAGE 1 & PAGE 2 IN PYTHON 3) -->
<regex>
<name>makelist</name>
<listrepeat><![CDATA[
<title>[makelist.param3]</title>
<link>$doregex[play_movie_dialog]</link>
<thumbnail>[makelist.param2]</thumbnail>
<meta>video</meta>
]]></listrepeat>
<expres><![CDATA[#$pyFunction
import urllib.request
import re

def GetLSProData(page_data, Cookie_Jar, m):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/143.0.0.0 Safari/537.36'}
    year = "[makelist0.param2]"
    pattern = r'<a class="card" href="([^"]+)">\s*<img src="([^"]+)"[^>]*>\s*<div class="card-meta">\s*<div class="card-title">([^<]+)<'
    
    all_movies = []
    
    for page_num in [1, 2]:
        url = "https://greeksubsmovies.me/?filter=movie&sort=recent&f_year=%s&f_language=en&page=%s" % (year, page_num)
        try:
            req = urllib.request.Request(url, headers=headers)
            with urllib.request.urlopen(req, timeout=8) as resp:
                html = resp.read().decode('utf-8', errors='ignore')
            matches = re.findall(pattern, html)
            if matches:
                all_movies.extend(matches)
        except:
            pass
            
    return all_movies
]]></expres>
<page></page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar></cookieJar>
</regex>

<!-- 3. DIALOG SOURCE SELECTION & PLAYBACK (PYTHON 3) -->
<regex>
<name>play_movie_dialog</name>
<expres><![CDATA[#$pyFunction
def GetLSProData(page_data, Cookie_Jar, m):
    import urllib.request
    import re
    import xbmcgui
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/143.0.0.0 Safari/537.36'}
    base = "https://greeksubsmovies.me"
    
    try:
        # Extract sources from movie page HTML (passed via <page>)
        links = re.findall(r'<a class="btn" href="(.*?)"', page_data)
        if not links:
            xbmcgui.Dialog().notification('Notice', 'No sources found', xbmcgui.NOTIFICATION_INFO, 3000)
            return ""
            
        # Kodi GUI selection dialog
        labels = [f"Play Source {i + 1}" for i in range(len(links))]
        dialog = xbmcgui.Dialog()
        selected = dialog.select("Select Source", labels)
        
        if selected == -1:
            return "" # User canceled
            
        # Fetch player page and extract tokens
        player_url = base + links[selected]
        req_player = urllib.request.Request(player_url, headers=headers)
        with urllib.request.urlopen(req_player, timeout=10) as p_resp:
            p_html = p_resp.read().decode('utf-8', errors='ignore')
        
        tok = re.search(r'const _tok = "(.*?)"', p_html)
        vid = re.search(r'const _vid = (.*?);', p_html)
        if not tok or not vid:
            return ""
            
        # Request stream from API
        api_url = f"{base}/api/video-src.php?t={tok.group(1)}&v={vid.group(1)}"
        api_headers = dict(headers)
        api_headers['Referer'] = player_url
        
        req_api = urllib.request.Request(api_url, headers=api_headers)
        with urllib.request.urlopen(req_api, timeout=10) as res_api:
            res = res_api.read().decode('utf-8', errors='ignore')
        
        stream = re.search(r'"(http.*?)"', res)
        if stream:
            return stream.group(1).replace('\\/', '/') + '|User-Agent=' + headers['User-Agent']
            
    except Exception as e:
        xbmcgui.Dialog().notification('Error', str(e), xbmcgui.NOTIFICATION_INFO, 3000)
        
    return ""
]]></expres>
<page>https://greeksubsmovies.me[makelist.param1]</page>
<agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/143.0.0.0 Safari/537.36</agent>
<cookieJar>greekjar</cookieJar>
</regex>

</item>











</items>
